بيتر نورفيج Peter Norvig
هذه ترجمة لمقال بعنوان “علم نفسك البرمجة في عشرة أعوام” (Teach Yourself Programming in Ten Years) لبيتر نورفيج، منسق البحث العلمي بشركة غوغل. لا تزال هذه الترجمة بحاجة لمزيد من التنقيح، لأية اقتراحات أو ملاحظات أرجو الإتصال بي.
آخر تحديث لهذه الصفحة: 24.2.07
لم الجميع في عجلة من أمرهم؟
فور دخولك إلى أي مكتبة ستجد العديد من الكتب من قبيل “علم نفسك لغة Java سبعة أيام” جنبا إلى جنب مع كتب أخرى تعرض تعليمك Visual Basic و Windows و الإنترنت…خلال بضعة أيام أو ساعات. فقد قمت بإجراء البحث التالي على موقع Amazon.com:
pubdate: after 1992 and title: days and
(title: learn or title: teach yourself)
و حصلت على 248 نتيجة. أول 78 نتيجة كانت كتب حاسوب أما النتيجة رقم 79 فكانت (Learn Bengali in 30 days). عند استبدال كلمة “days/أيام” بكلمة “hours/ساعات” فقد كانت النتيجة قريبة بشكل مذهل، فقد أرجع هذا البحث 253 كتابا. أول 77 منها كانت كتب حاسوب أما الكتاب الذي يليها فكان (Teach Yourself Grammar and Style in 24 Hours) في المنزلة رقم 78. 96% من أول 200 كتاب أرجعها البحث كانت كتب حاسوب.
الخلاصة هي إما أن الناس في عجلة من أمرهم للتعلم عن الحواسيب أو أن تعلم الحواسيب أسهل من تعلم أي شيء آخر. ليست هنالك أية كتب عن تعلم موسيقى بيتهوفن أو الفيزياء الكمية أو حتى تدريب الكلاب في بضعة أيام.
لنحلل ما يمكن أن يعنيه عنوان من قبيل “تعلم لغة Pascal في سبعة أيام“:
-
تعلم: في ثلاثة أيام لن يتوفر لك ما يكفي من الوقت لكتابة برامج ذات قيمة لتتعلم من نجاحاتك و إخفاقاتك في كتابتها. لن يتوفر لك الوقت أيضا للعمل مع مبرمج خبير و فهم كيفية العيش في مثل هذه البيئة. باختصار، لن يتوفر لك من الوقت ما يسمح لتعلم أي شيء له قيمة. إذا، فهم يتحدثون فقط عن ألفة سطحية مع اللغة و ليس فهما عميقا لها. كما قال البابا ألكساندر: تعلم القليل هو أمر خطير.
-
باسكال/Pascal: قد تستطيع خلال ثلاثة أيام تعلم النحو (syntax) الخاص بلغة Pascal (إذا كنت تعرف لغة برمجة أخرى)، إلا أنك لن تستطيع تعلم الكثير عن كيفية استخدام هذا النحو. باختصار، فإنك إذا كنت مبرمجا بلغة Basic فقد تستطيع تعلم برامج بأسلوب لغة Basic مستخدما النحو الخاص بلغة Pascal لكنك لن تستطيع تعلم إيجابيات و سلبيات لغة Pascal.إذا ما الفائدة من تعلم لغة برمجة بهذه الطريقة؟ يقول ألان بيرليس (Alan Perlis) : “اللغة التي لا تغير الطريقة التي تفكر بها بالبرمجة لا تستحق-أي اللغة- أن تتعلمها”. أحدى الفوائد هي أنك قد تضطر لتعلم القليل من لغة Pascal (أو ربما Visual Basic أو JavaScript) لإنجاز مهمة محددة. لكنك في مثل هذة الحالة لا تتعلم كيفية البرمجة، و إنما كيفية إنجاز مهمة محددة.
-
في ثلاثة أيام: للأسف، فإن هذا الوقت لا يكفي كما سيوضح القسم التالي.
تعلم البرمجة في عشرة أعوام
أثبت الباحثون (Hayes, Bloom) أنه يلزم عشرة أعوام تقريبا لتطوير الخبرة في أي من المجالات كلعب الشطرنج أو التأليف الموسيقي أو الرسم أو العزف على البيانو أو السباحة أو التنيس أو علم الأعصاب أو علم طبقات الأرض. لا يبدو أن هنالك أية طرق مختصرة، فحتى موتزارت، الذي كان أعجوبة موسيقية في سن الرابعة، استغرقه الأمر 13 سنة أخرى ليبدأ بإنتاج موسيقى عالمية رفيعة المستوى. أما في لون آخر من الموسيقى، فقد بدا أن فرقة البيتلز بدأت مسيرتها بسلسلة من الأغاني التي حققت المرتبة الأولى و ظهور على برنامج إد سوليفان (Ed Sullivan show) عام 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 Abstraction) كلغة Java أو C++. و واحدة تدعم التجريد الوظيفي (Functional Abstraction) كلغة Lisp أو ML. و لغة تدعم التجريد النحوي (Syntactic Abstraction) كلغة Lisp و لغة تدعم الdeclarative specifications مثل Prolog أو C++ templates و لغة تدعم الcoroutines كلغة Icon أو Scheme و لغة تدعم التوازي (Parallelism) كلغة Sisal.
-
تذكر أن هنالك “حاسوب” في “علم الحاسوب”. عليك أن تعرف كم من الوقت يلزم لتنفيذ تعليمة (Instruction) أو إحضار كلمة من الذاكرة -مع و بدون cache miss- أو كلمات متتالية من القرص أو التحرك إلى مكان جديد على القرص. (الأجوبة موجودة هنا)
-
شارك في جهود توحيد اللغات(Standardization). قد يكون ذلك من خلال المشاركة في لجنة ANSI C++ أو عن طريق كمية الفراغ الذي ستتركه في أول كل سطر من برنامجك. في كلتا الحالتين فإنك تتعلم ما يحبه الآخرون في لغة معينة، كم يحبونه و لماذا.
-
كن منطقيا بما فية الكفاية للإنسحاب من جهود توحيد اللغات بأسرع وقت.
مع كل ما قيل، فإن المرء يتسائل كم من الممكن أن يطور نفسه من خلال قراءة الكتب فقط. قبل أن يولد ولدي الأول قمت بقراءة كل الكتب المتصلة بالأبوة و لكنني، و بالرغم من ذلك، شعرت بأنني لا أعرف شيئا. بعد ثلاثين شهرا، عندما كنت أنتظر قدوم ابني الثاني هل عدت إلى كل تلك الكتب؟ كلا. بل اعتمدت على خبرتي الشخصية و التي أثبتت أنها أنجع من آلاف الصفحات التي كتبها الخبراء.
فريد بروكس (Fred Brooks) يصف في مقاله (No Silver Bullets) خطة من ثلاثة أقسام لإيجاد مصممي برامج ممتازين:
-
قم بتحديد أحسن مصمي برامج بشكل منهجي في أبكر وقت ممكن.
-
عين معلما يكون مسؤولا عن تطوير ذوي الإمكانات و اتفظ بملفهم الوظيفي.
-
وفر فرصا للمصممين الذين يتحسنون للتفاعل و تحفيز بعضهم البعض.
هذا كله يفترض أن هنالك أشخاصا يمتلكون مزايا تجعلهم مصممي برامج ممتازين و هنا تصبح مهمتك أن تهتم بهم. ألان بيرليس (Alan Perlis) وضعها بشكل أكثر إيجازا، فهو يقول: “من الممكن تعليم أي إنسان كيف ينحت. أما مايكل أنجلو فكان يجب تعليمه كيف يجب أن لا ينحت. و الأمر ذاته ينطبق على المبرمجين الممتازين”.
بإمكانك الآن شراء كتاب لتعلم لغة Java فقد تحصل منه على بعض الفائدة. إلا أنك لن تغير حياتك أو خبرتك الفعلية كمبرمج في 24 ساعة أو يوم أو حتى شهر.
المراجع
Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.
Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.
Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.
Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday
Life, Cambridge University Press, 1988.