الأربعاء، 20 يناير 2016

Computational Thinking

مصطلح يجب على المبرمجين معرفته - كنت قد تكلمت عن ما هي امكانية حل المشكلات لان التطوير او البرمجة ليست مجرد لغة تقوم بتعلمها لان اي شخص ايا ما كان يمكن ان يتعلم لغة برمجة و لكن الحقيقة هي ما وراء تعلم لغة البرمجة حتى عن اولئك الذين يبحثون دائما عن ما هي الخطوة التالية و ما هو الطريق للتعمق في التطوير و البرمجة و الحقيقة هي انه يجب عليك ان ترى ما في نفسك من مهارات لحل المشكلات و تحاول من تطويرها حتى و انت تدرس لغة البرمجة و لذلك احببت ان اكتب شئ ينفع العاملين في مجال البرمجيات
هناك دائما سؤال يطرح نفسه. هل يجب ان اكون خريج كلية حاسبات و معلومات او خريج كلية هندسة قسم علوم حاسب حتى اكون شخص ناجح في علوم الحاسب ؟ الحقيقة اود ان اختصرها في الفقرات التالية:
ان العلم هو اساس كل شئ و هو اساس تقدم اوروبا و امريكا و روسيا و الهند و الدول التي نستخدم منتجاتها و في الحقيقة و انا دائما انوه لذلك فان استخدامنا لتكنولوجيات من حولنا لا يعني بالضرورة اننا اقل منهم في العلم او المعرفة اطلاقا و لكن الحقيقة اننا نواجه مشكلتين كبيرتين و ساتطرق في نهاية ما اكتبه عنهما و رجوعا للنقطة الاصلية فان العلم هو الاساس الذي ستبني عليه شخصيتك القوية في مجالك. فلو كنت ترغب في التعمق في هندسة البرمجيات ستجد انك بحاجة الى معرفة الكثير مثل ماهية عمل المترجمات Compilers and Interpreters و بالتالي فانا لا اقول لك انك يجب ان تدرس Compiler Construction مثلا و لكني اقول لك لما لا تاخذ فكرة عن ماهية عمل هذه الادوات التي تنفذ الكود الذي تقوم بكتابته و هذا ما يدرسه طالبي حاسبات و هندسة و قد لا يستفيدون منه اطلاقا و لكن ما اريد ان اقوله لك اقرا لان القراءى هي اول خطوات التعلم الذاتي الذي قد يكون لك باع فيه و لكنه مدفون بين ضياع وقتك و انشغالك في اشياء قد لا يكون لها اهمية و ستجد عليك انك بحاجة الى القراءة في الخوارزميات و تركيبة البيانات Algorithms and DataStructures و قد يرى البعض ان الخوارزميات التي سيدرسها تحتاج الى مستوى معين من الرياضيات مثلا المتسلسلات Sequences او Factorials او Lograithms او حتى ان يعرف Calculus حسابات تفاضل و تكامل و لكن خذ فكرة عن كل ما هو موجود لتعلم في الاصل ان عمل خوارزميو نابع من ايجاد حل لمشكلة قائمة و بالتالي فانت تنمي مهارة حل المشكلات لديك من خلال حلول اخرى ابتكرها غيرك و ستجد نفسك بحاجة الى القراءة عن انظمة التشغيل نوعا ما حتى تستطيع ان تعلم ماهية بيئة العمل التي تقوم بالعمل عليها و تفاضل بين الافضل لتركيبتك البرمجية و هذا طبيعي جدا و هذا ما يدرسه ايضا طالبي هندسة و حاسبات و معلومات و هو ما قد تدرسه انت ايضا و لما لا العلم لم يخلق في الاصل الا لطالبه و راغبه و ليس لمن حصل على مجموع علي في الثانوية العامة و دخل الكلية و تخرج و لم يقم حتى بالمحاولة و مرت السنوات و نسي كل ما تعلمه
اذا العلم هو اساس كل ذلك و ستجد نفسك ايضا في هذا المجال تقرا عن هندسة البرمجيات و دورة حياة المنتجات داخل المشاريع و النطريات المستخدمة في الواقع الحقيقي ك Agile و ما ترتب عليها مثل SCRUM او حتى ال Classic Waterfall Method او ال Extreme Programming - XP و غير ذلك من النظريات و ستجد نفسك ايضا بحاجة الى الاطلاع على Database Design و عوامل متعلقة بها مثل ال Normalization مثلا و هكذا
و خلاصة ما يجب ان اقوله لكم ان المبرمج المحترف او المطور المحترف ليس فقط من درس كل ما ذكر و لكنه شخص يسعى للمعرفة بنفس شغفه و حبه للتطبيق لانه يعلم تمام العلم ان ما بني على اساس صلب لا يمكن قط ان يسقط و بالتالي فانا اريد ان اكون سببا في يوم من الايام ان يعي كل من دخل الى هذا المجال انه ليس بالهين و ليس الموضوع ان تتعلم ما هي CSS Selectors او ان تحارب لفهم مكتبة jQuery و انت اصلا لا تعلم ماهية عمل اللغة الام JavaScript و ان الموضوع ليس ان تكتب كود فقط دون ان تعي ان هناك العديد من النقاط التي يجب ان تفهمها ك Performance او Refoactoring او ال Security Vulnerabilities او حتى ان تتطرق لفهم انماط البرمجة و انت اصلا لا تعي كيفية استخدامها و ما المشاكل التي تستدعي استخدامها Design Patterns
الحقيقة تكمن في ما اود ان اقوله الان و هو انك لست بحاجة الى ان تكون خريج حاسبات او هندسة حاسب لتصبح محترف لانني و بالفعل و اسف لقول ذلك قابلت الكثير من هؤلاء و هؤلاء و اكاذ اقسم بانهم لا يفقهون شيئا و لكن الموضوع كله فقط يترتب على العلم
تعلم_تعلم_تعلم
اقرا و اجتهد و ثابر و كن لنفسك بمثابة المعلم و تاكد ان الله لا يضيع اجر من احسن عملا
و اما بالنسبة للمشكلتين افاستطرق لهما ان شاء الله في موضوع جديد
و اسال الله ان اكون سببا في تصحيح مسار كثيرين في هذا المجال لا يفقهون قولا

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

إرسال تعليق