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

فور دخولك إلى أي مكتبة ستجد العديد من الكتب من قبيل “علم نفسك لغة Java فى سبعة أيام” فقد قمت بإجراء بحث بعنوان علم نفسك فى ساعات على موقع Amazon.com .

و حصلت على 248 نتيجة. أول 78 نتيجة كانت كتب حاسوب و برمجيات

و عندما قررت تغير البحث من كلمه ساعات لايام فقد كانت النتيجة قريبة بشكل مذهل، فقد أرجع هذا البحث 253 كتابا. أول 77 منها كانت كتب حاسوب

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

لنحلل ما يمكن أن يعنيه عنوان من قبيل “تعلم لغة C++ في 24 ساعه “:

تعلم: في سبعةُ أيام لن يتوفر لك ما يكفي من الوقت لكتابة برامج ذات قيمة لتتعلم من نجاحاتك و إخفاقاتك في كتابتها.

لن يتوفر لك الوقت أيضا للعمل مع مبرمج خبير و فهم كيفية العيش في مثل هذه البيئة.

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

قد تستطيع خلال ثلاثة أيام تعلم النحو (syntax) الخاص بلغة java (إذا كنت تعرف لغة برمجة أخرى)، إلا أنك لن تستطيع تعلم الكثير عن كيفية استخدام هذا النحو. باختصار، فإنك إذا كنت مبرمجا بلغة Basic فقد تستطيع تعلم برامج بأسلوب لغة Basic مستخدما النحو الخاص بلغة java لكنك لن تستطيع تعلم إيجابيات و سلبيات لغة java .إذا ما الفائدة من تعلم لغة برمجة بهذه الطريقة؟

يقول ألان بيرليس (Alan Perlis) : “اللغة التي لا تغير الطريقة التي تفكر بها بالبرمجة لا تستحق-أي اللغة- أن تتعلمها”. أحدى الفوائد هي أنك قد تضطر لتعلم القليل من لغة java (أو ربما Visual Basic أو C++) لإنجاز مهمة محددة. لكنك في مثل هذة الحالة لا تتعلم كيفية البرمجة، و إنما كيفية إنجاز مهمة محددة.

تعلم البرمجة في عشرة أعوام

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

أما وصفتي للنجاح فهي كما يلي:

1 - أحب البرمجة لأنهك تجد فيها متعتة و احرص على أن يبقى الأمر ممتعا بحيث تكون مستعدا لإعطائه عشرة أعوام من حياتك.

2 - تحدث مع مبرمجين آخرين و اقرأ برامج لغيرك. و هما أمرا أهم من أي كتاب أو درس للبرمجة.

3 - برمج. أفضل طرق التعلم هي التعلم عن الممارسة ، و إذا أردنا أن نعبر عن هذا الأمر بطريقة أفصح نقول: “لا يمكن أدراك درجة عالية من التميز في مجال معين من خلال طول ممارسته ، و إنما من الممكن التميز عن الطريق الجهد الذي يبذله الشخص عن وعي منه بقصد التحسن”. (صفحة 336). و “التعلم الأكثر فاعلية يتطلب: وجود مهام محددة تتناسب صعوبتها مع قدرات الشخص و وجود تقييم بناء و فرص للتكرار و تصحيح الأخطاء”. (صفحة 20-21). يعد كتاب: Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life من المراجع المهمة لوجهة النظر هذه .

4 - إذا أردت، فبإمكانك أن تستثمر أربع سنوات في الجامعة و هو الأمر الذي سيعطيك القدرة على التنافس على بعض الوظائف التي تتطلب مؤهلات علمية. كما أنه سيزودك بفهم أعمق لهذا المجال. إلا أنك إذا لم تستمتع بالجامعة فبإمكانك-مع شيء من الإلتزام- الحصول على خبرات مشابهة. على كل حال، فإن التعلم عن طريق الكتب فقط لن يكون كافيا. يقول أريك رايموند (Eric Raymond) مؤلف The New Hacker’s Dictionary: “الحصول على درجة في علم الحاسوب لن يجعل منك مبرمجا خبيرا مثلما أن دراسة الفراشي و الصباغ لن تجعل منك رساما خبيرا”.

5 - اشتغل في مشاريع مع مبرمجين آخرين. كن أفضل المبرمجيين في بعض المشاريع؛ وكن الأسوء في البعض الآخر. عندما تكون الأفضل، فإنك سوف تختبر قدرتك لقيادة المشروع ولتلهم الآخرين برؤيتك(وجهة نظرك).أما عندما تكون الأسوء فأنك ستتعلم مما يفعله قادة المشروع(العباقرة)، وما لايحبون فعله (لأنهم سيجلعونك تفعل لهم ما يرغبون).

6 - إشتغل في مشاريع بعد مبرمجين آخرين و افهم برامج كتبها غيرك و اعمل على إصلاحها من دون وجودهم. فكر في كيفية تصميم برامجك لتجعل صيانتها أسهل لمن هم بعدك.

7 - تعلم على الأقل ست لغات للبرمجة. إجعل منها واحدة تدعم (Class Abstraction) كلغة Java أو C++. و واحدة تدعم (Functional Abstraction) كلغة Lisp أو ML. و لغة تدعم (Syntactic Abstraction) كلغة Lisp و لغة تدعم الdeclarative specifications مثل Prolog أو C++ templates و لغة تدعم الcoroutines كلغة Icon أو Scheme و لغة تدعم التوازي (Parallelism) كلغة Sisal.

8 - تذكر أن هنالك “حاسوب” في “علم الحاسوب”. عليك أن تعرف كم من الوقت يلزم لتنفيذ (Instruction) أو إحضار كلمة من الذاكرة -مع و بدون cache miss- أو كلمات متتالية من القرص أو التحرك إلى مكان جديد على القرص .

9 - شارك في جهود توحيد اللغات(Standardization). قد يكون ذلك من خلال المشاركة في لجنة ANSI C++ أو عن طريق كمية الفراغ الذي ستتركه في أول كل سطر من برنامجك. في كلتا الحالتين فإنك تتعلم ما يحبه الآخرون في لغة معينة، كم يحبونه و لماذا.

  • كن منطقيا بما فية الكفاية للإنسحاب من جهود توحيد اللغات بأسرع وقت.

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

فريد بروكس (Fred Brooks) يصف في مقاله (No Silver Bullets) خطة من ثلاثة أقسام لإيجاد مصممي برامج ممتازين:

1/ قم بتحديد أحسن مصمي برامج بشكل منهجي في أبكر وقت ممكن.

2/ عين معلما يكون مسؤولا عن تطوير ذوي الإمكانات و احتفظ بملفهم الوظيفي.

3/ وفر فرصا للمصممين الذين يتحسنون للتفاعل و تحفيز بعضهم البعض.

هذا كله يفترض أن هنالك أشخاصا يمتلكون مزايا تجعلهم مصممي برامج ممتازين و هنا تصبح مهمتك أن تهتم بهم.

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

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

هذه ترجمة لمقال بعنوان “علم نفسك البرمجة في عشرة أعوام” (Teach Yourself Programming in Ten Years) لبيتر نورفيج، منسق البحث العلمي بشركة جوجل.

http://www.norvig.com/21-da...

ترجمه مُحمد يحيى

http://myahya.org/writing/2...