ما الفرق بين ” الكتابة البرمجية ” و”التفكير البرمجي ” ؟
كثيرا ما أقرأ اسئلة من أناس يرغبون ان يصبحوا مبرمجين او عن ” أي لغة أفضل من لغة ؟ ” او ” أي لغة أبدأ بها ؟ ” . سأجيب – ان شاء الله – في هذه التدوينة عن هذه الاسئلة .
في البداية يجب أن تعي أخي المتعلم الفرق بين ” الكتابة البرمجية ” – كما اسميها – وبين “التفكير البرمجي ” , فالأولى هي المقدرة على الكتابة بلغة معينة -c++ مثلا – وهي مجرد ان تعلم الـ syntax للغة المعينة . ولكن مجرد مقدرتك على كتابة اوامر صحيحة لا يعني انك قادر على البرمجة وحل المشاكل . فالبرمجة في نهاية الطريق هي المقدرة على حل المشاكل .
وهنا يأتي الشق الثاني وهو الأهم والأصعب ( التفكير البرمجي ) , وهو مقدرتك على حل المشكلة و ترجمتها برمجيا بطريقة صحيحة . وعند وصولك لهذه النقطة ستتمكن من البرمجة بأي لغة كانت .. كل ما عليك هو تعلم الـ syntax المعين للغة وستجد نفسك تبرمج وكأنها لغتك الأم . سأعطيك في هذه التدوينة مسار او خطوات حصولك على الشقين وعليك بالباقي .
الخطوة الأولى :
ولأن ” التفكير البرمجي ” هو الأهم والأصعب أفضل أن تبدأ مسيرتك البرمجية عبر scratch .
و scratch هي ليست لغة برمجية حقيقية و انما يمكنك القول انها شيء مصغر منها . وهي تتيح لك التحكم في صور 2D لصنع بعض الألعاب البسيطة أو قصص قصيرة باستخدام الصور .
هدف scratch الاساسي هو تعليم الأطفال البرمجة بطريقة سلسة وممتعة ولكن يمكنك كمبتدأ البدأ بها . تتميز الـ scratch بأنها تحتوي على كل اساسيات البرمجة مثل الـ Loops و الـ conditions وتتخطى تماما مشكلة الكتابة , لذلك البدأ بها أفضل لأنك كمبتدأ قد تصاب بالضجر اذا بدأت بلغة متقدمة وقام الـ Compiler بالصياح عليك كل دقيقة على حرف نسيته او فاصلة منقوطة غير موجودة ^_^ .
يفضل هنا أن تأخذ وقتك بالكامل وتستمتع بصنع بعض الألعاب . كما يمكنك رؤية بعض الألعاب الجاهزة على الموقع و رؤية كيف تم بنائها . فالمشكلة التي تريد حلها ليس بالضرورة أن تكون مشكلة اقتصادية كبيرة , قد تكون المشكلة هي ان القط لا يقفز بطريقة صحيحة ^_^ , لا تستهن بهذه المشكلة وقم بحلها لتستطيع حل مشاكل أعظم في المستقبل ان شاء الله .
الخطوة الثانية :
الآن وقد حصلت على التفكير البرمجي – تقريبا – يمكنك البدأ بلغة حقيقية و برمجة أي شيء . من متابعتي للدورات الغربية ومن تجربتي الشخصية أفضل البدأ بلغة صعبة , لأن الذي يبدأ بلغة صعبة مثل C++ أو لغة C واستطاع ان يقهر صعوبتها يجد باقي اللغات مثل ” اللعب ” بالنسبة له , عكس الذي بدأ مثلا بلغة python أو php فعندما ينتقل للغة ثانية لأي سبب سيجدها كالجحيم بالنسبة له . وذلك ليس السبب الوحيد , فلغة C مثلا عليك ان تتعامل مع الذاكرة بيديك وان تقوم بأمور معقدة لكي تنجز شيء بسيط , وتجد هذه الأمور مجهزة لك في لغة حديثة كـ python , فاحتكاكك بلغة دنيا يتيح لك معرفة خفايا الأمور وقد تحتاج هذه الخبرة في اللغات المتقدمة لتنتج تطبيقات أكثر جودة .
الخطوة الثالثة :
الآن وقد تعلمت c++ مثلا حان وقت اكتساب الخبرة . قد تكون الآن تستطيع البرمجة ولكن بدون خبرة انت لا شيء . قد تسأل الآن ما هي الخبرة في هذا المجال ؟ , اذا قمت بكتابة برنامج يتكون من 100 سطر – على سبيل المثال – ربما استطيع انا – بنفس الجودة – ان انهيه في 50 سطر فقط . و يجب أن تعلم ان كل حرف تقوم بكتابته يقوم الـ Compiler بقراءته مما يجعل وقت الاستجابة أبطأ , عندما يكون برنامجك 100 سطر فلن يظهر الفارق .. ولكن تخيل انه مليار سطر , ويمكنك اختصاره الى 400 الف بنفس الجودة , هل تعي كمية الخسارة هنا ؟ . في الواقع عدد السطور ليس المقياس الوحيد ولكنه على سبيل المثال لا الحصر .
كيف أحصل على الخبرة ؟ , ببساطة ( ألعب ) ^_^ . نعم يمكنك اللعب بالبرمجة وتعلم بالتسلية قم ببرمجة الألعاب والأشكال وكل ما يأتي في بالك فأنها افضل طريقة . ويمكنك ان تطّلع على برمجة غيرك لتكتسب الخبرة ولكن أفضل الّا تطّلع على برمجة أحد قبل ان تبدأ بنفسك لكي لا تنسخ من أحد بل أن تبني بنفسك
لماذا لا أقوم ببرمجة لعبة الثعبان ؟! .. ولم لا ؟
الآن أنت مبرمج كامل الأهلية . ويمكنك الانطلاق الى أي لغة تريدها , وهنا تأتي اجابة السؤال في المقدمة ” أي اللغات أفضل ؟ ” . ببساطة لا توجد أفصل وأسوأ , فكل لغة تكون الأفضل في مجال معين . ولكن من يهتم ؟ , انت الآن تستطيع البرمجة بأي لغة كأنك من برمجها , ستأخذ منك اللغة يومين – على الأكثر – لتعلم الـ syntax لها و تنطلق بكل حرية .
على سبيل المقارنة تجد أن لغة C ولغة C++ يتميزان بالسرعة والمتانة , ولكنهما غير جاهزتان لبرمجة الشاشات مثلا , وستستغرق زمنا طويلا جدا لبرمجة تطبيق بهما لأنك – حرفيا – ستبنيه من الصفر , فهما مناسبتان أكثر لبرمجة البرامج التي تتعامل مع الـ Hardware والتي تحتاج السرعة ولا تحتوي على Interface . أما مقارنة بالجافا فهي أبطأ في التنفيذ قليلا ولكنها مجهزة بمكاتب و دوال تساعدك في عملك , وهي مناسبة اكثر للتطبيقات التي تتعامل مع المستخدم وللألعاب. يمكنك ان تقول ان التطبيق الذي يستغرق منك شهرا في لغة جافا سيستغرق منك عامان في لغة C ! . انه اختيارك الآن ^_^ .
نصائح عامة :
المحتوى الأجنبي أفضل بكثير من المحتوى العربي لذلك اسرع بكسر حاجز اللغة وانطلق الى البحث باللغة الانجليزية , معظم المحتوى العربي عبارة عن قشور للمواضيع ويبالغون في شرح الاساسيات دون التطرق للعمق .
اجعل Google رفيق دربك دائما , فليس على المبرمج ان يحفظ اسماء الدوال او جميع الأمور البرمجية ولكن عليك ان تعلم ماذا تريد ودع Google يقم بالباقي ! .
كن متابعا للتطورات . حدث معي اني اكتشفت بعد فترة طويلة من البرمجة اني استخدم لغة C++ اصدار عام 1998 ^_^ . بعد الانتقال الى العالم المعاصر وجدت معظم الصعاب التي كنت أعاني منها قد اختفت بالفعل !
اذا كنت تدرس البرمجة في الجامعة او في الثانوي لا تأمل كثيرا فيهم … فهم من درسوني C++98 ^_^ .
اذا كنت تريد البدأ ولا تعلم من أين .. انصحك شخصيا بـ ” كورس ” مقدم من جامعة ” هارفد ” مجانا , هو لا يعلمك البرمجة بالتحديد ولكنه يمثل مقدمة لعلوم الحاسوب ولكنهم يعطون البرمجة نصيب الأسد , فهي دورة مكثفة فعلا ولا تقوم بإضاعة وقتك .
اذا اعجبتك التدوينة رجاءً شاركه لتعم الفائدة .
أتمنى أن أكون قد أفدتكم ولو قليلا ^_^ , بالتوفيق .
الموضوع من طرف: مصطفى أحمد
ضمن مسابقة المحترف لأفضل تدوينة لسنة 2017