المبرمج يولد مبرمجاً


هل هناك فارق بين الناس في مدي قابليتهم لتعلم البرمجة؟ هل هناك أشخاص لا يمكن تعليمهم البرمجة أم أن أي شخص يمكنه أن يكون مبرمجاً؟ بعبارة أخري، هل يولد المبرمج مبرمجاً أم أن المبرمج يمكن صناعته بالتعليم و الممارسة؟


هذه التساؤلات هي نقطة خلافية كبيرة بين عدد كبير من المهتمين بصناعة البرمجيات عموماً. هناك فريق من الناس يري أن المبرمج يولد مبرمجاً. هو شخص لديه القدرة علي فهم علم البرمجة بسرعة و عادة ما تكون كفاؤته أعلي بكثير من كفاءة زملاؤه بسبب إستعداده الشخصي، و فريق آخر يري أن الموضوع متعلق بالتعليم، و أن الفارق بين مبرمج و آخر هو فارق في الكيفية التي تعلم بها البرمجة، و أن أي شخص يمكن أن يكون مبرمجاً إن مر بعملية تعليمية سليمة.


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


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


ما بين 30 إلي 60 بالمائة من طلبة السنين الأولي في دراسة البرمجة في جامعات أمركيا و أوروبا يرسبون في أول عام لهم. النسبة مرتفعة و تفوق نسبة الراسبين في السنين الأولي لدراسة الكثير من العلوم الأخري. المدرسين ذوي الفكر التقليدي قد ينظروا للموضوع علي أنهم “شباب صغار السن يظنون أن الكبار لا يعرفون شيئاً عن العالم اليوم و لكنهم يتعلمون بالتجربة ” و لكن الخبراء يعرفون أن هناك إستعداداً فطرياً لتعلم البرمجة و لكن ليست هناك وسيلة لقياسه، لذا يجب أن يرسب عدد لا بأس به من الطلبة في السنين الأولي، هؤلاء هم الذين ليس لديهم الإستعداد الطبيعي لتعلم البرمجة.


حتي في الكليات التي ينجح بها نسبة كبيرة من الطلبة في السنين الأولي في علوم البرمجة، يري بعض القائمين بالتدريس فيها أن عدد لا بأس به من هؤلاء الطلبة كان يجب أن يرسبوا، و أن نجاحهم تم بسبب سوء نظام التدريس و الإمتحانات و التقييم، و أن دفعهم إلي السنين المتقدمة كفيل بخفض مستوي تعليم البرمجة و مستوي الخريجيين ككل في هذه الكليات.


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


من ناحية أخري فإن الطلبة الذين لديهم إستعداد فطري لتعلم البرمجة يحرزون الدرجات العالية و يرون أن أسلوب التدريس في الكلية و معدله دون المستوي، و أنه في السنة التي درسوا فيها أحد مناهج البرمجة كان يمكنهم دراسة أكثر مما درسوه و التعمق في العلم و لكن المنهج في الكلية بسيط و صغير إلي حد كبير !


تمت تجربة العديد من الوسائل في التدريس و كلها لم تفلح في تغيير هذه الصورة. كتب مليئة بالصور، معامل للتطبيق العملي، الخ. النتيجة أيضاً لا تتغير بتغير لغة البرمجة أو فرع البرمجة الذي يتم تدريسه .


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


بغض النظر عن السبب فإن الحقيقة التي تدور حولها كل هذه الأبحاث هي أن هناك فارقاً رهيباً في قابلية الناس لتعلم البرمجة، و كل ما حاولت هذه الأبحاث أن تقوم به هو الوصول لطريقة لقياس هذه القابلية لدي المتقدمين لدراسة البرمجة في الكليات لكي تجنبهم ضياع سنة أو أكثر من أعمارهم و في النهاية إما أن يتركوا المجال إما أن يصيروا مبرمجين محدودي القدرة و الكفاءة.


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


ما لا تجيب عليه نظرية كاي هو السبب في جعل البرمجة بالذات تنفرد بهذه النسبة العالية لرسوب الطلبة التي تزيد عن الكثير من العلوم المشابهة. لا شك أن التدريس فن و أن المدرس الجيد لابد ان يشكل فارقاً رهيباً و لكن هل تنفرد البرمجة دوناً عن باقي العلوم بأسوأ مدرسين علي مستوي العالم و علي مستوي كل الكليات في أمريكا و أوروبا؟


متلازمة أسبرجر مرة أخري


تحدثت في جزء سابق من المقال عن متلازمة أسبرجر و كيف أنها علامة مميزة للكثير من المبرمجين المتميزين، بل إن الأطباء النفسين يقولون إن البرمجة هي أنسب مهنة للمصابين بهذه المتلازمة.


ما لم أذكره هو أن التوحد (الذي تشكل متلازمة أسبرجر إحدي درجاته) مرض تلعب فيه العوامل الوراثية و الجينية دوراً قوياً. التوائم المتماثة تشترك في الإصابة أو عدم الإصابة بالتوحد بنسبة 90%، بمعني أنه إن كان أحد التوائم مصاب بالتوحد فإن هناك إحتمالاً نسبته 90 بالمائة أن الآخر سيكون مصاباً بالتوحد هو الآخر. متوسط نسبة الإصابة بالتوحد هي 1 من 500، و لكن إن كان للأبوين طفل مصاب بالتوحد فإن إحتمالية أن يأتي طفلهم الثاني مصاب بالتوحد ترتفع إلي 1 من 20.


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


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


قلنا أن الكثير من المبرمجين الأكفاء مصابون بمتلازمة أسبرجر. يشكل وادي السليكون تجمعاً للكثير من الشركات الكبري في مجال البرمجيات و الإلكترونيات. تشكل هذه الشركات نقاط جذب للمبرمجين و المهندسين الأكفاء عموماً، و هنا يظهر ما يسميه العلماء (زاوج تجانسي Assortative Mating ) و هو الزواج الذي يتم بين شخصين متماثلين في نقطة معينة (أشقر يتزوج شقراء، معوق يتزوج معوقة، الخ).


عادة ما ينجذب المصابون بمتلازمة أسبرجر لبعضهم لأنهم يشتركون في الولع بنقاط معينة ( البرمجة، الرياضايات، الخ) و يجدون لديهم أرضية مشتركة في عمق التفكير و الإهتمامات، دعك بالطبع من تشابه الشخصيات الإنطوائية التي لا تجيد المراوغة و عدم المباشرة في التعامل.


ما يحدث في وادي السليكون هو أن مبرمج أو مهندس يتزوج مبرمجة أو مهندسة زميلة له في العمل. كلاهما مريض بمتلازمة أسبرجر و بما أن التوحد مرض تلعب فيه العوامل الوراثية دوراً كبيراً، بالتالي فإن إحتمالية إصابة إبنهم بمتلازمة أسبرجر (أو شكل أكثر حدة من التوحد) تتضاعف. في وادي السليكون وجدت الإحصائيات أن معظم الأطفال المصابين بالتوحد أباؤهم مبرمجين او مهندسين مصابين هم نفسهم بدرجة من درجات التوحد.


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


لو قلنا أن متلازمة أسبرجر هي أحد لازمات المبرمج المتميز في معظم الأحيان، فإن العامل الوراثي في متلازمة أسبرجر يؤكد فكرة أن هناك عوامل طبيعية يولد بها المرء تسهم في مستواه و قدراته كمبرمج.


علامات مميزة في موجات المخ


علم الإدراك Cognitive Science هو أحد فروع العلم الحديثة التي تهتم بدراسة السلوك و التفكير و شخصيات الإنسان بشكل صارم و إخضاعها للقياس الدقيق. علي سبيل المثال يبحث هذا العلم عن علامات قابلة للقياس مرتبطة بشعور الإنسان بالغضب مثلاً. ما نوعية الموجات التي تظهر في الأنواع المختلفة من رسم المخ؟ ما هي النواقل العصبية neurotransmitters التي يفرزها المخ في هذا الموقف؟ الخ.


في أحد الدراسات حاول العلماء البحث عن علامات مميزة في رسم المخ الخاص بالأشخاص الإنطوائيين (كما قلنا من قبل، 50 إلي 66% من المبرمجين شخصيات إنطوائية).


إكتشف علماء الإدراك أن هناك موجات معينة سمهوها “موجات الخلفية Background waves ” و هي موجات مسئولة عن إدراك المرء لما حوله أثناء تركيزه في عمل معين. يمكنك أن تشاهد فيلماً بتركيز شديد، و لكن يبقي هناك قدر من الإحاطة بالعالم المحيط بك. إن صرخ أحدهم مثلاً “حريق” فإنك ستنتبه و تترك الفيلم الذي تشاهده و تذهب لتري هذا الحريق و تري ما يمكنك فعله حياله. بالتالي هناك موجات رئيسية في المخ مسئولة عن تركيزك في شيء ما (الفيلم الذي تشاهده، كتاب تقرؤه، الخ) و موجات أخري مسئولة عن معرفة و متابعة ما يدور حولك.


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


يمكن أيضاً الربط بين هذه النقطة و ما يسميه المبرمجين (فقاعة المبرمج Developer’s Bubble). المبرمج يحتاج لبعض الوقت لتتكون لديه درجة معينة من التركيز، يقل فيها إدراكه بما حوله و يمكنه في هذه الحالة أن يفكر و يبرمج بكفاءة، و هي ما يسميه المبرمجين فقاعة المبرمج. المؤثرات الخارجية (مثل الصوت المزعج مثلاً) كفيلة بتفجير هذه الفقاعة و يحتاج المبرمج إلي بعض الوقت ليكون فقاعة جديدة (البعض قدر هذا الوقت بربع ساعة تقريباً). لو ترجمنا هذه الحقيقة إلي لغة علم الإدراك لقلنا أنه يحتاج إلي وقت تقل فيه موجات الخلفية إلي حدها الأدني و ترتفع فيه الموجات الرئيسية المسئولة عن التفكير في البرنامج الذي يعمل عليه المبرمج حالياً إلي حدها الأقصي.


النقطة الأساسية هنا هو وجود صفة مميزة في موجات المخ لدي معظم المبرمجين (الإنطوائيين). هذا يؤكد وجة نظري بأن المبرمج يولد مبرمجاً و أن البرمجة تحتاج قدر ضخم من الموهبة بأكثر من باقي العلوم.


المبرمجين في مصر


أنا لم أحتك بالكثير من المبرمجين العرب خارج مصر و لكني أعتقد أن الوضع في مصر لن يكون أفضل بكثير من وضع المبرمجين في العالم العربي.


للأسف مستوي المبرمجين في مصر منخفض بشدة. هناك العديد من الأسباب هذه أهمها:


التعليم


التعليم في مصر سيء بالطبع و تعليم البرمجة في الكليات المختلفة (هندسة، حاسبات و معلومات، الخ) لن يكون إستثناءاً،لهذا لن أتحدث عن مساويء نظام التعليم عموماً لأني تحدثت عنها من قبل في هذا المقال، و لكن هناك نقطة خاصة بتعليم البرمجيات تضاف لسوء التعليم المنتشر في مختلف المجالات عموماً هي ما سأتحدث عنه هنا.


كما قلنا فإن هناك موهبة طبيعية تحدد ما إذا كان شخص ما يصلح لتعلم البرمجة أم لا. الكليات في الغرب تحاول أن تقيس هذا العامل قبل أن يبدأ المرء بالفعل في دراسة البرمجة ، قد نختلف في مدي سلامة أساليب القياس، و لكن الفكرة أنهم (يحاولون)، بعكس كلياتنا التي لا تدخل الفكرة في حيز تفكير القائمين عليها من الأساس.


المجتمع أيضاً له دور. حاول أن تتخيل أحد الآباء و إدارة الكلية تخبره أن إبنه لا يمكنه أن يلتحق بالكلية لأنه لا يملك إستعداداً طبيعياً لتعلم البرمجة. عندها ستظهر عبارات من نوعية (مجموع إبني في الثانوية العامة كذا، ده الأول علي مدرسته، الخ). سيكون هذا مشهداً كوميدياً كفيل بحل أزمة الكوميديا التي يتحدث عنها السينمائيون.


و حتي مع محاولات الكليات في الغرب لقياس إستعداد الطالب لتعلم و فهم البرمجة فإن الكثير من الطلبة (ما بين 30 إلي 60 بالمائة كما قلنا) يرسبون في السنوات الأولي في كليات الحاسب الآلي و يترك الكثير منهم المجال و يتجه لمجال مناسب لقدراته. قارن هذا بكلية مثل حاسبات و معلومات مثلاً التي لا يستغرب فيها أن تجد نسبة النجاح في السنة الأولي 100%. بالطبع ليس الطالب المصري أشد ذكاء من طلبة أمريكا و أوروبا، فقط الإمتحانات لدينا لا تقيس أي شيء و لا هدف لها سوي سد خانة و ليس قياس مستوي الطالب فعلياً.


نوعية الكتب التي يقرؤها المبرمج


كتب البرمجة المنتشرة في مصر هي في الغالب كتب مبتدئين. الكتب المخصصة للمستويات الأعلي غالباً لا تجدها في مصر. يمكنك أن تجد المئات من الكتب التي تتحدث عن لغة ال C++ ولكن لا يمكنك أن تجد كتاب The C++ Programming Language بسهولة، و هو الكتاب الذي قام بتأليفه بيارن ستروسترب مصمم اللغة، و هو أكثر الكتب عمقاً في مناقشته لدخائل اللغة.


بالإضافة لهذا فإن الكتب المتعلقة بموضوعات هندسة البرمجيات مثل إدارة المشروعات، تقييم الوقت و التكلفة، دورة حياة المشروع Project life cycle، الخ.. كل هذه الكتب لا تجدها عادة في مصر و عليك أن تأتي بها من علي الإنترنت أو تشتريها من الخارج. خلال عملي لم أحتك بمبرمج يعرف كتباً مثل Code Complete الذي صنف علي أنه أحد أكثر كتب هندسة البرمجيات مبيعاً في العالم، Mythical Man Month الذي يلقب ب “مرجع هندسة البرمجياتThe Bible of Software Engineering”، أو كتاب مثل Peopleware الذي يعتبر مرجعاً أساسياً في التعامل مع المبرمجين، الخ. هذه الكتب التي تمثل علامات في علم هندسة البرمجيات لم يسمع بها في مصر إلا عدد قليل من المبرمجين، فما بالك بمن قرأها.


خاتمة:


كانت هذه دراسة حاولت فيها أن أغطي ما يتعلق بالمبرمج من نقاط مختلفة لتكون وسيلة لفهم المبرمجين لأنفسهم و لزملائهم، و وسيلة لفهم المديرين لطبيعة مرؤسيهم ليحسنوا إستغلال قدراتهم و تجنب عيوبهم للوصول إلي أفضل نتيجة ممكنة من فريق المبرمجين الذي يرأسوه.


المصادر:


Code Complete
The Mythical Man-Month: Essays on Software Engineering
Rapid Development
Moishe's Blog: The Windows Shutdown crapfest
Orphans preferred
Peopleware
The Geek Syndrome
Software Developers and Asperger’s Syndrome
The Camel has Two Humps
Natural Language Acquisition
Alan Kay on ‘The Camel has Two Humps’
المصدر:
عن المبرمج نتحدث – 3 | Software Thoughts