لمَ الجميع على عجلة من أمرهم؟ فور دخولك أي مكتبة ستجد العديد من الكتب بعناوين مثل “تعلّم لغة جافا/فيجوال بيسك بنفسك في 7 أيام”. فما الذي يحدث؟ برأيي، انتشار مثل هذه المواضيع يضعنا أمام احتمالين لا ثالث لهما: إما أن الجميع في عجلة من أمرهم للتعلم البرمجة أو أن تعلم الأخيرة -أي البرمجة- أسهل من تعلم أي شيء آخر (فأنت -على سبيل المثال- لا تجد كتبًا لتعليم العزف أو الفيزياء الكمية أو حتى تدريب الكلاب في بضعة أيام!).
دعنا نحلل ما يمكن أن يعنيه عنوان مثل (تعلم لغة ++C بنفسك في 7 أيام):
تعلم.. بنفسك: أستطيع أن أجزم أنه خلال 7 أيام لن يتوفر لك ما يكفي من الوقت لكتابة برامج ذات قيمة لتتعلم من نجاحاتك و إخفاقاتك خلال عملية كتابة الأكواد. لن يتوفر لك الوقت أيضًا للعمل مع مبرمج خبير و فهم كيفية التعامل مع بيئة ++C البرمجية.
باختصار، لن يتوفر لك من الوقت ما يسمح لتعلم أي شيء ذو قيمة. إذًا، فهم يتحدثون عن معرفة سطحية بلغة البرمجة و ليس فهمًا عميقًا لها. وكما قال ألكسندر بوب: (تعلم القليل أمر خطير – A little learning is a dangerous thing).
قد تستطيع خلال ثلاثة أيام تعلم النحو (syntax) الخاص بلغة ++C (إذا كنت تعرف لغة برمجة أخرى)، إلا أنك لن تستطيع تعلم الكثير عن كيفية استخدام لغة البرمجة نفسها. باختصار، إذا كنت مبرمجًا بلغة (بيسك – Basic) فقد تستطيع تعلم البرمجة بأسلوب لغة Basic مستخدماً النحو الخاص بلغة ++C، لكنك لن تستطيع تعلم إيجابيات و سلبيات لغة ++C نفسها.
إذا ما الفائدة من تعلم لغة برمجة بهذه الطريقة؟ يقول عالم الحواسيب الأمريكي ألان بيرليس (Alan Perlis): “اللغة التي لا تغير الطريقة التي تفكر بها بالبرمجة لا تستحق-أي اللغة- أن تتعلمها” إذًا، خلال تلك الفترة القصيرة قد تتعلم القليل من لغة ++C لإنجاز مهمة محددة. لكنك في مثل هذة الحالة لا تتعلم “البرمجة”، و إنما كيفية “إنجاز مهمة برمجية محددة”.
تعلم البرمجة بنفسك (إنما في عشرة أعوام)
أظهرت الدراسات التي أجراها عدة باحثين (نذكر منهم: بنجامين بلوم “عالم النفس الشهير” – الكاتب جون آر هايز ) أنه يلزم عشرة أعوام تقريبًا لاكتساب الخبرة في أي مجال كلعب الشطرنج أو التأليف الموسيقي أو الرسم أو العزف على البيانو أو السباحة أو التنس أو علم الأعصاب أو علم طبقات الأرض. والسر هو الممارسة التراكمية: ليس فقط القيام بالأمر مرارًا وتكرارًا، ولكن بتحدي نفسك بمهمة تتجاوز قدرتك الحالية، وتجربتها وتحليل أدائك أثناء وبعد إنجازها، ثم تصويب أي أخطاء. وهكذا دواليك
لا يبدو أن هنالك أية طرق مختصرة، فحتى موتزارت، الذي كان أعجوبة موسيقية في سن الرابعة، استغرقه الأمر 13 سنة قبل أن يبدأ في تاليف موسيقى عالمية رفيعة المستوى. وبالحديث عن الموسيقى، فقد بدا أن فرقة البيتلز بدأت مسيرتها بسلسلة من الأغاني التي حازت الصدارة واقتحمت المشهد بظهور على برنامج إد سوليفان (Ed Sullivan show) عام 1964. إلا أنهم كانوا يغنون في نواد صغيرة بمدينتي ليفربول و هامبورج منذ عام 1957. و بالرغم من جاذبيتهم الكبيرة منذ البداية، إلا أن أول أغنية حققت لهم نجاحًا باهرًا كانت (Sgt. Peppers) والتي صدرت عام 1967.
بالطبع، ليس من المنطقي افتراض أن جميع المهارات (مثل البرمجة ولعب الشطرنج وتعلم العزف على آلة موسيقية) قد تتطلب جميعها نفس القدر من الوقت بالضبط لإتقانها، ولا أن جميع الناس سيستغرقون نفس القدر من الوقت بالضبط لتعلم ذات المهارة.
وصفة النجاح في تعلم البرمجة
- تأكد من حُبك للبرمجة و احرص على أن تُبقي عملية التعلم ممتعة، بحيث تكون مستعدًا لإعطائه عشرة أعوام من حياتك.
- برمج! أفضل طرق للتعلم هي التعلم عن طريق الممارسة، أو بعبارة أخرى: “التعلم الأكثر فاعلية يتطلب: وجود مهام محددة تتناسب صعوبتها مع قدرات الشخص و وجود تقييم بنّاء و فرص للتكرار و تصحيح الأخطاء”.
- تناقش مع مبرمجين آخرين و اطلع على برامج غيرك. هذا أهم من أي كتاب/درس للبرمجة.
- تعاون مع مبرمجين آخرين في مشاريع مشتركة. ولا بأس أن تكون أفضل المبرمجين في بعض المشاريع؛ والأسوء في البعض الآخر! فعندما تكون الأفضل، فإنك ستختبر قدرتك على قيادة المشروع وتلهم الآخرين برؤيتك(وجهة نظرك). أما عندما تكون الأسوء فأنك ستتعلم مما يفعله قادة المشروع (العباقرة)، وما لايحبون فعله (لأنهم سيطلبون منك أن تنفذ رؤيتهم هم).
- تعلم على الأقل 6 لغات للبرمجة: إحداها تدعم التجريد الصنفي (Class Abstraction) كلغة Java أو ++C. وثانية تدعم التجريد الوظيفي (Functional Abstraction) كلغة Lisp أو ML. و ثالثة لغة تدعم التجريد النحوي (Syntactic Abstraction) كلغة Lisp.. إلخ.
- شارك في جهود توحيد اللغات (Standardization). قد يكون ذلك من خلال المشاركة في لجنة ANSI C++، لكن كن ذكيًا بما فية الكفاية للإنسحاب في الوقت المناسب (وإلا ستغرق في مسار مختلف عمّا خططت له).
- كلمة أخيرة.. بإمكانك الآن شراء كتاب لتعلم لغة جافا فقد تحصل منه على بعض الفائدة. لكن لا تنسى أنك لن تغير حياتك أو تكتسب خبرتك الفعلية كمبرمج في 24 ساعة أو يوم أو حتى شهر.