الأربعاء، 1 أكتوبر 2014

علّم نفسك البرمجة في عشر سنوات

علّم نفسك البرمجة في عشر سنوات

بواسطة بيتر نورفيج "مدير البحث في شركة جوجل"



لمَ الجميع في عجلة من أمرهم؟

قم بالذهاب إلي أي من متاجر الكتب, وسوف تري كتاب كيف تعلم نفسك لغة الجافا في 7 ايام جنبا إلي جنب مع عدد لا نهائي من الكتب التي علي نفس الشاكلة التي تعلمك الفيجوال باسيك, الويندوز, الإنترنت إلي اخره في غضون ايام قليلة. لقد قمت بإجراء بحث powersearch علي موقع شركة أمازون Amazon.com:


وحصلت علي 248 نتيجة بحث. أول 78 نتيجة كانت عن الكتب الخاصة بالكمبيوتر (رقم 79 كان كتاب تعلم اللغة البنغالية في 30 يوم LearnBengali in 30 days). بعد ذلك قمت بكتابة "ساعات" بدلا من "ايام" وحصلت علي نتائج مشابهة: 253 كتاب اخر, 77 كتاب عن الكمبيوتر وبعدها علم نفسك قواعد واصول اللغة في 24 ساعة TeachYourself Grammar and Style in 24 Hours رقم 78. نسبة  98% من اول 200 كتاب كانت تتحدث عن الكمبيوتر.


دعنا نقوم بتحليل ما قد يعنيه عنوان مثل LearnC++ in Three Days:
  • تعلم: في 3 ايام لن يكون لديك الوقت لكي تكتب عدد كافي من البرامج, ولكي تتعلم من نجاحاتك وأخطائك منهم. لن يكون لديك الوقت الكافي لكي تعمل مع مبرمج ذو خبرة وتفهم معني العيش في بيئة ال C++ . بإختصار, لن يكون الوقت الكافي لكي تتعلم الكثير. لذا سوف يقدم لك هذا الكتاب معرفة سطحية فقط, وليس فهم عميق. وكما قال ألكسندر بوب, القليل من التعلّم هو شئ خطير.
  •  C++: في 3 ايام ربما يمكنك تعلم بعض اساسيات ال C++ (اذا كنت بالفعل تعرف لغات اخري), ولكن لن تستطيع تعلم الكثير عن كيفية استخدام اللغة. بإختصار, إذا كنت, علي سبيل المثال, مبرمج Basic, فربما يمكنك تعلم كيف تكتب برامج في نمط لغة Basic بإستخدام قواعد لغة ال C++ , ولكن لن يكون بإمكانك تعلم ما تصلح له الC++ وما لا تصلح له. إذا ما الهدف من هذا الموضوع؟ ألان بيرليس "Alan Perlis" قال مرة: "اللغة التي لا تؤثر في الطريقة التي تفكر بها عن البرمجة, لا تستحق معرفتها". الهدف المحتمل هنا انه عليك تعلم القليل جدا من لغة C++ (او ربما, قليلا من ال JavaScript  أو Flash's Flex)  لإنجاز مهمة  محددة. لكن في الحقيقة  انت لا تتعلم كيف  تبرمج; انت تتعلم كيف تنجز تلك المهمة  فقط.
  •   في ثلاثة ايام: لسوء الحظ, هذا ليس كافي, كما سنوضح في الفقرة التالية.


علّم نفسك البرمجة في عشر سنوات

 بتوضيح انها قد تأخذ عشر سنين لتطوير الخبرة في اي مجال من المجالات المتنوعة, بما في ذلك لعب الشطرنج, تأليف الموسيقي, الرسم, اللعب علي البيانو, السباحة, التنس, والقيام ببحوث في علم النفس العصبي والطوبولوجيا. المفتاح في هذا الأمر هو الممارسة  المستمرة , ليس فقط فعلها مجددا ومجددا, ولكن تحدي نفسك بمهمة فوق امكانياتك الحالية, تجربتها, تحليل اداءك اثناء وبعد فعلها, وتصحيح اي اخطاء. بعد ذلك كرر ما فعلته مرة بعد اخري. لا يبدو هناك اي اختصارات في هذا الأمر: حتي موتزارت, الذي كان اعجوبة موسيقية في سن الرابعة, اخذ 13 سنة اخري قبل ان يبدأ في توليد موسيقي من الطراز العالمي. في فئة مشابهة, يلمع اسم فرقة البيتلز ((the Beatles مع سلسلة من الأغاني التي تحتل الصدارة يليها ظهور في برنامج إد سوليفان (Ed Sullivan) سنة 1964. إلا أن بدايتهم كانت في نواد صغيرة بمدينتي ليفربول و هامبورج منذ عام 1957. و بالرغم من جاذبيتهم الكبيرة منذ البداية، إلا أن أول أغنية حققت لهم نجاحا باهرا (Sgt. Peppers) صدرت عام 1967. سامويل جونسون (Samuel Johnson) يعتقد أن الأمر يستغرق أكثر من عشر سنوات، فهو يقول: “التميز في أي مجال لا يمكن إدراكه إلا من خلال العمل الذي يتطلب عمر الإنسان كله، و لا يمكن إدراكه بأي ثمن أقل من ذلك”. أما تشاوسر (Chaucer) فيشكو من أن: “الحياة قصيرة و تعلم المهنة يتطلب وقتا كثيرا”.

إذن فأنت تريد أن تكون مبرمج

إليك وصفتي للنجاح في طريق البرمجة:
  • قم بالنظر إلي البرمجة علي انه مجال ممتع. وتأكد من جعلها مليئة بالمتعة الكافية التي تجعلك متحمس طوال الوقت.
  • قم بالبرمجة. أفضل طرق التعلم هي التعلم عن الممارسة ، و إذا أردنا أن نعبر عن هذا الأمر بطريقة أفصح نقول: “لا يمكن أدراك درجة عالية من التميز في مجال معين من خلال طول ممارسته ، و إنما من الممكن التميز عن الطريق الجهد الذي يبذله الشخص عن وعي منه بقصد التحسن”. (صفحة 336). و “التعلم الأكثر فاعلية يتطلب: وجود مهام محددة تتناسب صعوبتها مع قدرات الشخص و وجود تقييم بناء و فرص للتكرار و تصحيح الأخطاء”. (صفحة 20-21). يعد كتاب: Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life من المراجع المهمة لوجهة النظر هذه .
  • تحدث مع مبرمجين آخرين; إطلع علي برامج أخري. هذا اكثر اهمية من اي كتاب او دورة تدريبية. 
  • إذا أردت, يمكنك تخصيص اربع سنين في الكلية. هذا سوف يضمن لك التقدم لبعض الوظائف التي تتطلب مؤهلات علمية, وسيعطيك فهم أعمق للمجال, لكن إذا كنت لا تحبذ التعليم الأكاديمي, يمكنك (مع بعض الإلتزام) الحصول علي خبرة مماثلة بنفسك أو من العمل. علي أية حال, التعلم عن طريق الكتب وحده ليس كافيا. يقول إيريك رايموند (Eric Raymond), مؤلف The New Hacker's Dictionary,  "الحصول علي تعليم أكاديمي في مجال علوم الحاسب لا يمكنه جعل اي شخص مبرمج محنك مثل دراسة الفرش والألوان لا يمكنها ان تجعل احد ما رسام محترف". واحد من أفضل المبرمجين الذين قمت بتوظيفهم كان خريج مدرسة ثانوية فحسب; لكن كان بإمكانه كتابة العديد من البرامج العظيمة, وقام بتأسيس مجموعة أخبار, وقد قام بتجميع اسهم كافية مكنته من شراء ملهي ليلي خاص به.      
  • قم بالعمل في مشاريع مع مبرمجين اخرين. كن افضل مبرمج في بعض المشاربع; كن الأسوأ في البعض الأخر. حينما تكون الأفضل عليك بإختبار قدراتك لتتمكن من قيادة مشروع ما, وتلهم الأخرين عن طريق رؤيتك. حينما تكون الأسوأ, قم بمعرفة ما يفعله الخبراء وما لا يفعلونه.
  •  قم بالعمل علي مشاريع سابقة لمبرمجين أخرين. قم بفهم برنامج تمت كتابته بواسطة احدا أخر. قم بإيجاد طريقة لفهمه وإصلاح ما به من أخطاء في عدم وجود المبرمجين الأصليين حولك. فكر في كيفية تصميم برامجك بحيث تجعلها سهلة لمن سيعملون عليها من بعدك.
  •  قم بتعلم علي الأقل ستة لغات للبرمجة. اجعل واحدة منها تدعم التجريد التصنيفي "class abstractions" (مثل جافا أو C++), واحدة تدعم التجريد الوظيفي "functional abstraction" (مثل Lisp أو ML), واحدة تدعم التجريد النحوي (مثل Lisp), واحدة تدعم الخصائص التعريفية " declarative specifications" (مثل Prolog أو C++ templates), واحدة تدعم 
  • تذكر أنه يوجد "جهاز حاسب" في "علوم الحاسوب". عليك معرفة المدة التي يستغرقها جهازك لتنفيذ أمر ما, كيف يقوم بإستدعاء كلمة من الذاكرة (مع وبدون فقدان للcache), كيف يقرأ الكلمات المتتابعة من القرص, وإيجاد مكان جديد علي القرص. (الإجابات هنا)
  •   شارك في جهود توحيد اللغات(Standardization). قد يكون ذلك من خلال المشاركة في لجنة ANSI C++ أو عن طريق كمية الفراغ الذي ستتركه في أول كل سطر من برنامجك. في كلتا الحالتين فإنك تتعلم ما يحبه الآخرون في لغة معينة، كم يحبونه و لماذا.
  • كن منطقيا بما فية الكفاية للإنسحاب من جهود توحيد اللغات بأسرع وقت.


     مع كل ما قيل، فإن المرء يتسائل كم من الممكن أن يطور نفسه من خلال قراءة الكتب فقط. قبل أن يولد ولدي الأول قمت بقراءة كل الكتب المتصلة بالأبوة و لكنني، و بالرغم من ذلك، شعرت بأنني لا أعرف شيئا. بعد ثلاثين شهرا، عندما كنت أنتظر قدوم ابني الثاني هل عدت إلى كل تلك الكتب؟ كلا. بل اعتمدت على خبرتي الشخصية و التي أثبتت أنها أنجع من آلاف الصفحات التي كتبها الخبراء.

     فريد بروكس (Fred Brooks) يصف في مقاله (No Silver Bullets) خطة من ثلاثة أقسام لإيجاد مصممي برامج ممتازين:
1.     قم بتحديد أحسن مصمي برامج بشكل منهجي في أبكر وقت ممكن.
2.     عين معلما يكون مسؤولا عن تطوير ذوي الإمكانات و اتفظ بملفهم الوظيفي.
3.     وفر فرصا للمصممين الذين يتحسنون للتفاعل و تحفيز بعضهم البعض.

     هذا كله يفترض أن هنالك أشخاصا يمتلكون مزايا تجعلهم مصممي برامج ممتازين و هنا تصبح مهمتك أن تهتم بهم. ألان بيرليس (Alan Perlis) وضعها بشكل أكثر إيجازا، فهو يقول: “من الممكن تعليم أي إنسان كيف ينحت. أما مايكل أنجلو فكان يجب تعليمه كيف يجب أن لا ينحت. و الأمر ذاته ينطبق على المبرمجين الممتازين”.

     بإمكانك الآن شراء كتاب لتعلم لغة Java فقد تحصل منه على بعض الفائدة. إلا أنك لن تغير حياتك أو خبرتك الفعلية كمبرمج في 24 ساعة أو يوم أو حتى شهر.













ليست هناك تعليقات:

إرسال تعليق