الأحد، 9 يونيو 2013

التعلم بالتجريب

ذَكَرتُ من ضمن أهداف مشروع البرمجة بإبداع رغبتي الشخصية في تحصيل الخبرة البرمجية، و لذلك كنتُ في بعض الأحيان أتخذ قراراتٍ عجيبة غريبة علي الناس، مثل بناء كل شيءٍ من الصفر و عدم الاستعانة قدر الاستطاعة بالأدوات المُساعِدة (لهذا القرار أسبابٌ عدة، لكن تحصيل الخبرة يُعتبَر من أهمهن). و قد هُوجِمتُ بضراوةٍ بسبب هذا الهدف، و ذلك أثناء تلقيَّ مع غيري من الأفاضل الذين صمموا و/أو بنوا لغات برمجةٍ عربيةً سيلاً من الشتائم الأنيقة و غير الأنيقة !


المهم أنني أريد أن أوضح أن مثل هذه الطريقة في التعلم ليست بدعةً جديدةً علي الإطلاق، بل ربما تكون أفضل سبل التعلم و أكثرها فائدة. خذوا عندكم علي سبيل المثال قصة نشأة لينوس تورفالدز linus torvalds؛ ففي بداية حياته حينما كان صغيراً و حينما اقتني أول حاسوبٍ شخصيٍ له من نوع (Sinclair QL) واجه مشكلةً عويصة: أن البرامج التي يمكن شراؤها للعمل علي ذلك الحاسوب لم تكن متوافرةً في فنلندا نهائياً، بل كانت موجودةً في بريطانيا (حيث تم تصنيع الحاسوب الذي اشتراه) ! و لذا لم يجد البرامج التي كان يحتاج إليها،
فماذا فعل ؟
هل قرر أن يتخلص من حاسوبه ذلك و يقتني حاسوباً له برمجياتٌ متوافرةٌ في السوق الفنلندي ؟
كلا: لقد قرر بناء البرمجيات التي يحتاجها كلها !
و هكذا صنع مُجمِّعاً assembler خاصاً به،
و مكتبةً للرسوميات تستخدم في الألعاب خاصةً به،
و انتهي الأمر به إلي اكتشاف أن بناء نواة نظام تشغيلٍ ليس بالأمر المستحيل كما يظن كثيرٌ من الناس ! 

و لذا فإن السبب الحقيقي الذي جعله صاحب خبرةٍ عميقةٍ للغاية و قدرةٍ برمجيةٍ ضخمة هو أنه كان قد اكتسب خبرته تلك عملياً، حتي أنه في محاضرة ألقاها في متحف تاريخ الحاسوب computer history museum تحت عنوان (أصول اللينوكس origins of linux) في سبتمبر 2001 قال عن هذه الحكاية مازحاً لجموع الحضور ما معناه أنه عليهم أن يفرحوا بحواسيبهم الجيدة التي اقتنوها في صغرهم و لكن عليهم أن ينتبهوا للأشياء التي فاتتهم :)

و في فترةٍ سابقةٍ كانت هناك رسالةٌ علي المجموعة البريدية comp.compilers تتحدث عن إجازةٍ لتعليم بناء المُترجِمات للخبراء في لغة الـ++C عن طريق بناء مُترجمٍ كاملٍ للـ ISO C++11 ! بل و بناء المكتبة القياسية لها و كذلك عِدة أدواتها البرمجية مثل الـpreprocessor و الـassembler و الـlinker بالكامل، و كل هذا باستخدام الـ++C القياسية و بدون مكتبات خارجية نهائياً !
و زيادةً علي ذلك فإنه في النهاية يجب ان يقوم
المشاركون ببناء build الأدوات (التي أنتجوها) باستخدامها هي نفسها (a self-hosting build) !
هذه قمة التجريب و الخبرة العملية، و المعرفة التي يحصل عليها المرء من دورةٍ تعليميةٍ كهذه لا يُمكن تقديرها بثمن.

أنا عن نفسي اكتسبتُ من الخبرة نتيجةً لعملي في مشروع "البرمجة بإبداع" الكثير بحمد الله تعالي، و يكفيني حتي الآن أنني أَثْبَتُّ لنفسي قبل أي شخصٍ آخر أنه بإمكاني بناء البرمجيات الضخمة شديدة التعقيد، بدون حتي كل تلك الخلفيات التي يُصر كثيرٌ من الآخرين علي أنه لا بد منها !، و أنني قادرٌ علي تحقيق أحلامي في مشاريعي واحدةً تلو الأخري حتي و إن كان ذلك علي فتراتٍ زمنيةٍ غير قصيرة.

لقد صمَّمتُ و نفذتُ و أخطأتُ و أصلحتُ ما أخطأتُ فيه، إلخ. و في النهاية أصبحت لدي بعض الخبرة الجيدة في تصميم و بناء المشاريع كبيرة الحجم، و انكسر الحاجز النفسي الذي يقف في وجه قليلي الخبرة في المعتاد. و الآن يمكنني أن أستخدم الأدوات التي توفر الوقت للمبرمج و انا مستريح الضمير؛

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

أنا أحب استخدام التقنية المناسبة في الوقت المناسب للغرض المناسب، و هذا واضحٌ في المنهج الذي ارتضيتُه لنفسي في تصميم لغات البرمجة، و الذي شرحتُه باستفاضةٍ في كتاب "رسالة البرمجة بإبداع" و كان من الواضح أنه أثَّر فيَّ بقوةٍ في أكثر من منحيً من المناحي المنهجية، إلا أنني كما قلتُ من قبل لا أحب أن أستخدم أداةً إلا و أنا أفهم طبيعة عملها و كيف أستطيع الاستغناء عنها (أو علي الأقل يكون عندي الاستعداد النفسي المدعوم بتجربةٍ سابقة)؛ فهذه هي الطريقة الوحيدة التي يُصبح بها الواحد منا مبرمجاً مستقلاً لا يُستهان به.

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

إرسال تعليق