Author Topic: انا لسه جديد في البرمجه وعاوز ابدأ ؟ السؤال الابدي "كيف تبدأ البرمجه"  (Read 875 times)

St0rM

  • [C programmer]
  • Administrator
  • Active Member
  • *****
  • Posts: 188
  • Why So serious ?
    • View Profile
    • WWW
    • Email
صباح الخير عليكم

ناس كتير بتدور في المنتديات البرمجيه او المواقع البرمجيه عن *دورات البرمجه* عاوز يبدأ يعرف اذاي يبرمج واذاي يكتب برنامج
او هو عنده فكره وعاوز يطبقها بنفسه
او حتي عنده فضول يعرف يعني ايه برمجه

الحقيقه ان الموضوع اسهل من ماتتصور , خلاصة الكلام ان مفيش لغة برمجه صعبه عشان نوضح
دكتور في جامعة من الجامعات المرموقه افتكر كامبرديج ؟ قال ان البرمجه سهله جدا والا مكنتش تلاقي مبرمجين عندهم 12 و 10 سنين , ولكن الصعوبه بتكمن في التعامل مع التعقيدات المطلوبه في البرنامج
بمعني اصح عشان نوضح معني البرمجه ونوضح معني علاقة الكلام دوت بالي انا بقوله

البرمجه : هي املاء *حرفيا املاء* كل مايجب علي الكومبيوتر فعله للحصول علي نتيجه لعمليه معينه
ده تعريفي السهل والمبسط ليها , يعني بمعني اصح انت عاوز الجهاز يكتب كلمة علي الشاشه بتاعت هتستخدم الداله المحدده الي مبرمج غيرك كتبها والي انت بتستخدمها , المبرمج دوت عرف الجهاز هيعمل ايه بالتحديد وبالنص وخطوه خطوه واداك انت المغلف الي هتديه للجهاز
عشان يفهم هو هيعمل ايه

ولكن في فرق انك تكتب برنامج يطبع كلمه وانك تكتب نظام تشغيل  ??? لان نظام التشغيل هيطبع كلمه وهياخد كلمه وحيحلل كلمه ويتعامل مع الذاكره ومع البروسيسور ومع العمليات ومع اكتر من عمليه في نفس الوقت ومع كارت الشاشه ومع كارت الصوت ومع كارت المودم ومع كارت النتورك ومع الطابعه ومع الاسكانر ومع الكيبورد ومع الماوس , اذاي بقي تربط كل دوت ببعضه ؟ هنا بتكمن الصعوبه , اننك تتوصل للخطوات البرمجيه الصحيحه "الخوارزميه" الي تقدر من خلالها تربط كل دوت باسلوب قوي وسلسل وسريع :D اعظم الحلول البرمجيه واصعبها هي اسهلها , بعد متتعلم شوية هتفهم كلامي دوت وده يثبتلك ان كلام الدكتور صح
 
جميل قوي قوي عرفنا دلوقتي يعني ايه برمجه بس معرفناش نبدأ منين ؟

ممكن نقول كلمه صغيره ؟ اتعلم اي لغه قدامك
مفيش حاجه اسمها لغه صعبه وده في وجهة نظري ومفيش حاجه اسمها لغة برمجيه صعبه
زي مقلنا الصعوبه بتكمن في تحليل التعقيدات . ولكن في حاجه اسمها لغه مناسبه وحاجه اسمها لغه غير مناسبه

لو اتعلمت perl او متبدأ حيحصلك brain damage وهتفضل طول حياتك عايش معقد نفسيا وبتربط كل اللغات الجديده بالي انت اتعلمته
كذلك لو اتعلمت model برمجه معين هتلاقي انك صعب انك تنتقل ل model تاني وهكذا

يبقي نبدأ منين ؟ نبدأ من الانسب

الانسب في حالة المبتدأ هو الاسهل والاقوي والاصح والاوضح
مش هنقسم لغات ومش هنقول لغات دلوقتي ولكن هنقول بعض الاشياء عشان اوضح كلامي

الاسهل يعني ايه ؟ يعني اللغه الي تقدر توصلك لهدفك بكمية تجريد كويسه تبعدك عن التعقيدات الي موجوده في الداخل يعني مثلا عشان تكتب hello world في ال assembly هتكتب كود مشابه لذلك
Code: [Select]
section .data
string : db "Hello world",0ah
length : equ  $-string

section .text
global _start

_start:
        mov eax,4
        mov ebx,1
        mov ecx,string
        mov edx,length
        int 80h
        mov eax,1
        mov ecx,0
        int 80h
الامر الي هيجبرك انك تعرف يعني ايه Machine registers ويعني ايه interrupts ويعني ايه data segment ويعني ايه text segment وايه محتوياتهم وليه هم موجودين وهكذا , في حالة مبتدأ فكرة اني افهمه ان البروسيسور بيحتوي علي مجموعه من ال registers الي بتكيت كات كوت كيتي , مي هتكون حلوه علي دماغه في البدايه  :(
اذن اللغه ديت مش الاسهل بالنسبالي دلوقتي

ولكن انا راجل متعلم وعارف يعني ايه بروسيسور وعارف يعني ايه registers وفاهم كويس , اذن انا محتاج انتقل للجانب التاني الاقوي
الاسسمبلي الاقوي من ناحية ايه ؟ هي هتقدر تتعامل مع كل المستويات الي ححتاجها ؟ يعني بمعني اصح لو انا عاوز ابرمج لعبه هل اللغه هتفيدني ؟ بالتأكيد ومفيش كلام , اذن نقطه لصالح الاسسمبلي

بس هل هي الاصح ؟ هل صح اني اكتب كود مكون من الاف *صدقني الاف الالاف كمان * من الاكواد عشان اوصل للعبة tic tac toe  :) لا طبعا ودوت مش هيكون صح ابدا لان في لغات تانيه هتقضي الغرض بشكل اسرع واقل تعرضا للصعوبات

ولكن هل هي الاسرع ؟ طبعا انا جاوبت علي السؤال دوت اذن نقطه واحده للاسسمبلي من ناحيتي انا كمبرمج فاهم وولا نقطه من ناحيتي كمبرمج مش فاهم , طيب استخدمها ليه ؟
استخدمها لما يكون ال 4 نقاط الي طرحتهم مناسبين للهدف الي انا عاوزه
جميل جدا , اصبح تحديد اي لغه ابدأ بيها مرتبط بالهدف وبالنسبه

ولكن انا مبتدأ تماما , محتاج لغه توصلني للمبادئ البرمجيه بشكل سريع وقوي ومتسببش اعطال في دماغي بشكل دائم هيتعبني قدام "PERL PERL PERL PERL"  :P ايه الحل ؟

الحل انك ترجع لل 4 نقاط دول تاني , هدفك ايه في تعلم البرمجه ؟ تعلم المبادئ فقط ؟ ولا عاوز تتعلم المبادئ وعاوز توصل لهدف تاني ؟
عاوز تبرمج system software ? ولا desktop applications ? ولا web applications ?
نفترض انك حددت هدفك وكان desktop applications
يعني انت محتاج لغه سهله من ناحية ال desktop applications متزودش تحليل التعقيدات عليك زي الاسسمبلي مثلا
يبقي هتختار لغه سهله من ناحية ال desktop applications ممكن البايثون مثلا او السي ؟

ولكن انا ارشح البايثون , طب ليه ؟ هي السي صعبه زي مبيقولوا ؟
لا السي مش صعبه لان مفيش لغه صعبه . ولكن السي هتقربك بشكل اكتر من الاله , يعني مشابهه للاسسمبلي بشكل او باخر يعني تحليل التعقيدات هيزيد وهتتضر تتعامل مع حاجات اخري انت في غني عنها كمبتدأ يبقي السي مش الانسب بالنسبالك
 طب البايثون , هتبعدك تماما عن التعقيدات الي بكلمك عنها وهتكون الانسب والاصح والاقوي في الحاله ديت

طيب انا عاوز ابرمج system software ؟ يبقي انت محتاج لغه تقربك اكتر واكتر من الالة زي السي , وفي الحاله ديت هتكون الانسب والاصح والاقوي

طيب انا هدفي اني اتعلم المبادئ البرمجيه ؟ يبقي تختار اللغه الاسهل الي تعرفك الموديول البرمجي شغال اذاي واذاي الخطوات بتتم وتبعدك بقدر الامكان عن التعقيدات زي اللغات الاتيه :

  • بايثون
  • C
  • جاف
  • c#

لاحظ الترتيب , انا كتبت بايثون الاول لانها تقدر تخليك تتعلم Model برمجيه ومبادئ برمجيه كتيره
اولا هي بتدعم ال Functional programming "البرمجه الوظيفيه" , وبتدعم ال "imperative model" وسريعه , ومش محتاجه ترجمه و Portable بشكل كبير , أمنه ليك كمبتدأ
هتعلم البرمجه الاجرائيه , وهتعلمكم البرمجه الكائنيه لانها بتدعم الاتنين , مناسبة جدا ليك كمبتدأ لانها هتسمح ليك انك تتعامل مع حاجات كتيره جدا بشكل سهل وقوي وواضح

ولكن هي غير مناسبة ليك لو كان اتجهاكك في البرمجه اتجاه داخلي , يعني بتسعي للتعلم الاشياء الداخليه في الكومبيوتر يعني الذاكره الخ الخ الخ

السي : لغه قويه جدا والبايثون ذات نفسها مكتوبه بيها , ولكنها رقم اتنين علي القائمه بتاعتي لانها بتدعم مبادئ اقل و Models اقل
اولا السي لغه اجرائيه فقط , مفهاش Native Object oriented model يعني مش هتعلمك البرمجه الكائنيه
هي لغه Imperative يعني مش هتعلمك ال Model الوظيفي Functional . ولكنها قويه جدا جدا حيث انها

سريعه , تقربك من ال Internals الخاصه بالاله , بتقربك من معظم الحاجات الي بتبعدك عنها اللغات التانيه , بتسمحلك بال access علي الذاكره بشكل direct باستخدام المؤشرات . بتسمحلك بكتابة برامج بتعيش في اقل الاماكن SYSTEM LEVEL و portable
ولكن غير مناسبة ليك كمبتدأ اتجاهكك خارجي , يعني بتبحث عن اللغه الي تخلصك باسرع شكل ممكن وتفهمك المبادئ بشكل تجريدي فقط

جافا : الثالثه علي قائمتي , انا مش هتكلم عنها كتير لانها معروفه واشهر من نار علي علم
ولكن كل الي هقوله انصحك انك متبديش بيها لانها Objective فقط , مفيهاش برمجه اجرائيه وممكن تسببلك ضرر دائم  :D في دماغك لان كل حاجه ليك هتبقي object و class وانتقالك للغه تانيه هيسببلك مشاكل

C# : اخر القائمه , ولكنها قوية واقوي من ال Java من نواحي كتيره علاوه علي انها بتدعم ال Functional model ومدعومه بشكل كويس ولكن مشكلتها انها مش portable بشكل كويس , ولكن بشكل او باخر هي لغه كويسه للبدايه لانها هتوصلك مفاهيم كتيره وهتخليك تكتب برامج مفيده بشكل سريع

وده نهاية موضوعنا واتمني انك تكون فهمت ان لغه البرمجه علي حسب اتجهاكك
وان اللغات كتير جدا , ولكن اختيارك ديما يكون للانسب

بالنسبالي , انا بدأت بالسي وده لاسباب كتيره من ضمنها انها كانت الانسب
احمد يوسف حبيب الملاين   :P بدأ ببايثون ولذلك تلاقيه ضعيف جدا في البرمجه  :P

Salut

« Last Edit: October 18, 2009, 09:12:27 PM by Ahmed Youssef »
Logged

St0rM

  • [C programmer]
  • Administrator
  • Active Member
  • *****
  • Posts: 188
  • Why So serious ?
    • View Profile
    • WWW
    • Email
ياريت ميكون فيه اساله في الموضوع دوت , احنا محتاجين نقاش من مبرمجين تانين
الاساله في مكانها مش هنا  :D
Logged

black ray

  • Just Joined
  • *
  • Posts: 9
  • Be Stupid As Much As You Can
    • View Profile
Logged
Why Does Unripe Fruit Looks So Delicious ?

poknit

  • Just Joined
  • *
  • Posts: 1
    • View Profile
السلام عليكم
كلامك حلو ورائع يا اخي
انا من زمان ونفسي اتعم البرمجة بس المشكلة
لم اعرف من اين ابدا
هل يجب على ان اذهب واعمل دورة في البرمجة بمعهد متخصص
ام هل بالامكان التعلم عن طريق المنتديات ؟
من خلال موضوعك قررت مبدئيا تعلم برمجة desktop applications
ماهي القواعد
وماهي المتطلبات
وهل هناك امثلة لتطبيقها
ومن اي لي بالامثلة
انا استخدم نظام تشغيل لينوكس واود استخدام برنامج REALbasic لامكانية تصدير البرنامج الى انظمة التشغيل الثلاثة على حد علمي
نعود للبدء
من اين ابدأ؟؟؟؟؟؟
واسف للاطالة ولكن اتمنى ان اتعلم
Logged