كيف تتعلم البرمجة

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

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

هناك فرضية في علم اللغويات اسمها فرضية سابير-وورف Sapier-Whorf hypothesis، تقول إن اللغة التي يتكلم بها المرء (العربية أو الإنجليزية أو الفرنسية) تؤثر على أسلوب تفكيره. علماء اللغويات منقسمون حول قبول أو رفض هذه الفرضية، ولكن المبرمجين يغلب عليهم الاقتناع بها. لغة البرمجة تؤثر على أسلوب تفكير المبرمج أثناء كتابة الكود.

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

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

هنا نقف عند عبارة (تعلم لغة C++). لا تعتبر نفسك أنك تجيد البرمجة ب C++ لأنك تعرف ال class وال struct من بضعة محاضرات عقيمة في الكلية أو لأنك أنهيت كتاب في تعلم البرمجة ب C++. هناك الكثير من الكتب التي تبدأ بعنوان (تعلم لغة كذا في كذا يوم). من كتب هذه الكتب يستحق الإعدام في ميدان عام. لكي تتعلم لغة برمجة ويتكون عندك (أسلوب تفكير) قائم على هذه اللغة يعني أن تقضي وقتاً طويلاً في استخدامها في مشروع كبير يضم مبرمجين آخرين سواك.

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

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

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

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

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

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

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

في النهاية، هذه بعض النصائح البسيطة المباشرة:

1-      إن كنت طالب في كلية مصرية فإنك ستدرس ال software engineering من كتاب Ian Sommerville. هذا الكتاب ممل، لا يغطي المفاهيم الأساسية، يتعامل بتعريفات رسمية أكثر من كونه ينقل المعني الحقيقي لكل ممارسة أو مفهوم. بعبارة أخري هذا كتاب في ال Software Engineering  لو كتبه بشكاتب في مجمع التحرير. للأسف هذا هو الكتاب الوحيد الذي وصل لعلم الأشاوس القائمين علي التدريس في الكليات المصرية، وأنا أعرف عشرات المهندسين والمبرمجين الذين كانوا على قناعة تامة أن علم ال Software engineering  هو علم لا فائدة منه بسبب هذا الكتاب.

2-      كتب Steve McConnell هي أفضل كتب يمكن أن تقرأها في علم ال Software Engineering  و مثلت بالنسبة لي طفرة في فهمي لصناعة البرمجيات و إدارة مشروع برمجيات. إن كنت تنوي أن تقرأ كتبه، فالبداية تكون عادة من كتاب Code Complete، أكثر كتب ال software engineering مبيعاً في العالم والمدخل لتعلم هذا العلم لمن يعرف كيف يكتب كود.

3-      كتاب Peopleware  شديد الأهمية.

4-      هذه مقالات تشرح بعض الأمور المتعلقة بالمبرمج و شخصيته و أسلوب تفكيره:

عن المبرمج نتحدث – 1

عن المبرمج نتحدث – 2


http://muhammadadel.com/softwarethoughts/?p=60

5-      هذه مقالات أشرح فيها لماذا عليك أن تهمل الكلية التي أنت فيها ما دامت كلية مصرية و ما دمت فعلاً تحرص علي أن تتعلم:

هندسة عين شمس و ملخص التاريخ – 1


http://muhammadadel.com/ketabaty/?p=28

2 Replies to “كيف تتعلم البرمجة”

Leave a Reply

Your email address will not be published. Required fields are marked *