Tuesday, 24 February 2015

لو بتحاول أو بتفكر تتعلم programming

لو بتحاول أو بتفكر تتعلم programming و:
-مش لاقي مصدر صح.
-حاسس إنك مجرد بتنقل أكواد إنت مش فاهم إيه الفلسفة أو الفكرة اللي كانت وراها.
في رأيي كورس "Introduction to Interactive Programming in Python" هو أحسن بداية هتحطك ع الطريق.
اللينك: https://www.coursera.org/course/interactivepython1
 

------------------------------------------
== بدايًة كده.. إيه هي البرمجة؟ ==
------------------------------------------
البرمجة ببساطة إنك بتحاول تدي أوامر معين لآلة أو جهاز ذكاؤه محدود (أو حرفي - literal).. وهيطبق اللي أنت هتقولله عليه بالضبط وبنفس الترتيب.
تخيل إنك بتوصف عنوان لحد -بالمواصفات دي- وبتقولله:
عد خمس عمارات..ادخل يمين.. هتلاقي مبنى لونه أزرق.. اقف.
لو شخص بالمواصفات دي.. هينفذ نفس الأوامر بالضبط, بنفس الترتيب.. مهما الأمر كلفه..
فمثلًا لو أنت غلطت في الوصف وقلتله ادخل شمال بدل يمين.. هيدخل شمال ومش هيقف إلا لمّا يلاقي مبنى أزرق.. حتى لو بعد 1000 أو مليون كيلو (بينفّذ الأوامر حرفيًا).
-----------------------------
طيب.. لحد دلوقتي الكلام ده مجرد تعريف نظري.. إزاي يعني برنامج زي Photoshop أو MS Word عبارة عن مجموعة من الأوامر؟ [1]
-----------------------------
هنا بقى الحتة المميزة جدًا للكورس ده بتاع Rice University.
(مصنّفة رقم 40 حسب تصنيف THE لسنة 2014/2015 في مجال الهندسة والتكنولوجيا http://goo.gl/5U0386
 
)
الكورس اسمه Introduction to Interactive Programming in Python .. الاسم ممكن يكون مخيف شوية بس بساطة 
هو مقدمة للبرمجة "التفاعلية" بشكل عام.. 
وأهم مفتاحين للكورس ده هما كلمتين "تفاعلية -Interactive", والاسم "Python".
====================
== تفاعلية - Interactive ==
====================
حاول تركز كده في أي برنامج بتستخدمه Photoshop أو MS Word..
هتلاحظ حاجة مشتركة بين الإتنين.. إنك أول ما بتفتح البرنامج.. بيفضل واقف مش بيعمل أي حاجة.. لحد لما تبتدي تتفاعل (interact) معاه..
ممكن تدوس على زرار يحوّل الصورة لأبيض وأسود.. زرار تاني يقص الصورة حسب الحجم اللي أنت بتدخله للبرنامج (يعني حسب الـinput - المُدخل بتاعك)
وده اللي بيخليه مفيد.. إنه متضبط على حسب أوامرك.. مش مجرد أوامر مُجهزة قبل كده من حد.. ﻷ إنت اللي بتشكل "أوامر" البرنامج على حسب مزاجك..
--------------------------------------------------------------------------------------------------
== إزاي الكورس ده بيركز على البرمجة التفاعلية - Interactive Programming ==
---------------------------------------------------------------------------------------------------
=الكورس عبارة عن جزئين.. كل جزء حوالي 5 أسابيع. وكل أسبوع في 
1-مشروع صغير لازم تعمله وتسلمه (mini-project) 
2-وأسئلة (quizzes)..
الـquizzes بتكون عبارة عن تدريبات بسيطة على المفاهيم اللي بتتشرح في المحاضرات (5 - 7 فيديوهات قصيرة)..
والمشروع (mini-project) بيكون عبارة عن لعبة بسيطة هو بيساعدك تكتب الكود بتاعها.
وبالمناسبة هو بيزودك بكل الرسوميات (GUI ودي الأدوات اللي بيتفاعل بيها البرنامج مع المستخدم.. مثلًا الزرار) والـgraphics اللي هتحتاجها علشان تعمل اللعبة دي..
وده غرضه حاجة واحدة.. إنك تركز على إزاي تكتب الكود وأنك تفكر كمبرمج وإزاي هتقدر تحول الأفكار بتاعة اللعبة لأوامر و"أكواد" يفهمها الكمبيوتر (وده إسمه implementation)..
===================
== بايثون - Python ==
===================
طيب إيه الطريقة اللي هتواصل بيها مع الكمبيوتر؟
هل اللغة العادية اللي بنتواصل بيها مع بعض؟ ولا لغة خاصة بالكمبيوتر..
الحقيقة إن - وبتبسيط مُخل- اللغة الوحيدة اللي بيفهمها الكمبيوتر هي دي:
1110 00 0 0 1101 0000 0000 00000000 
ودي لغة إسمها "binary code".
بس طبعًا لإن شبه مستحيل إن بني آدم يعرف يدي مجموعة كبيرة من الأوامر بالمنظر ده.. فتم تجميع الأوامر دي وتم تجميعها (wrapped) في لغات كتير
كلها -بنسب مختلفة- تشبه لللغة العادية بتاعة البشر.. بحيث لما تدي الأمر ده للكمبيوتر باللغة اللي انت إلى حد ما بتفهمها.. الكمبيوتر بيحولها
ورا الستار للغة الـbinary.
فمثلًا أمر زي "اعمل Save للملف", بيتم تحويله لسلسلة طويلة جدًا من 0s و 1s بحيث الكمبيوتر يفهم الأمر وينفذه.
من أول ظهور الكمبيوتر في الأربيعينات.. المبرمجين كتبوا لغات كتير جدًا وسيطة بين الكمبيوتر والمبرمج..
وأشهرهم C و Java و C++ وPython.
-----------------------------------------------------
== ليه الكورس ده بيستخدم لغة Python ==
-----------------------------------------------------
ببساطة ﻷنها لغة سهلة وشبه الإنجليزي جدًا..
وعلشان كده بدأ استخدامها في معظم الكورسات المبدأية (Introductory courses) في كتير من الجامعات في العالم زي MIT مثلًا..
واللغة بسيطة لدرجة إنها بتشتبه الإنجليزي لحد كبير ومفيهاش التعقيد اللي في معظم لغات البرمجة.. مثلًا ده أبسط أمر في Python
print "Welcome to Python."
نفس الأمر في لغات تانية قديمة نسبيًا زي Java أو C مليان تعقيدات فنية ممكن تشتت حد لسة بادئ في البرمجة.. 
الخلاصة إن إختيار اللغة دي علشان تركز على المفاهيم العامة اللي هتأسِّسَك للبرمجة بشكل عام واللي هيسهلك جدًا تتعلم أي لغة بعد كده, وبدون ما تشتت
نفسك في تفاصيل فنية مش هتفيدك أوي دلوقتي.
خليك دايمًا فاكر.. إن البرمجة مش مجرد كتابة أكواد.. أهم حاجة بتفرق الشخص اللي بيعرف يبرمج من أي حد هي التفكير والفلسفة اللي ورا برنامجه.
إزاي أوصف العنوان من غير ما أتوه الكمبيوتر.. إزاي أوصف طريقة طبخة صح بحيث أطلع الأكلة اللي أنا عايزها.. وده اللي طلبة الـComputer Science 
في كل الجامعات بيقضوا معظم وقتهم فيه.. وده موضوه متقدم شوية اسمه Algorithms Design .. ممكن تقارن كلمة "Algorithm" بوصفة أكلة مثلا أو وصف عنوان.
الموضوع عامل زي الفرق بين أنك تتعلم إنجليزي نحويًا صح (syntactically correct).. وبين أنك تبقى كاتب زي Charles Dickens.
الأولى ممكن أي حد يعرف يعملها في خلال أيام.. التانية محتاجة تفكير ومجهود وتجربة وخطأ وخبرة وممارسة طويلة جدًا. [2]
---------------------------------------
---------------------------------------
*الكورس بدأ من حوالي 10 أيام بس مش مشكلة ممكن تبدأ من الأسبوع التاني.. بس للأسف هيتم خصم درجة بسيطة بتاعة أول Quiz وأول mini-project.
*علشان تعدي الكورس محتاج تجيب grade 70% أو أوعلى.
*الكورس ده أول جزء من سلسلة فيها 3 كورسات, هنا بيركز على أساسيات البرمجة.. في الكورسات اللي بعد كده هيركز إزاي تعمل design لـAlgorithms فعالة,
وإزاي تعرف تفكر كمبرمج وإزاي تكون البرامج بتاعتك متصممة حتى قبل ما تكتب أي سطر code.
*الكورس مش سهل ومحتاج على الأقل 8 ساعات أسبوعيًا وتفكير كتير في كل حاجة فيه خصوصًا لو لسة بادئ في البرمجة.
*في ألعاب هتصممها هتلاقيها بسيطة وقواعدها سهلة.. بس في ألعاب تانية ممكن مش معروفة أوي لغير الأمريكان, فيفضل إنك تحاول تجرب الألعاب دي في أي موقع برة قبل ما تشتغل عليها.
مساهمة من صديقنا العزيز: Omar Abu Elyazeed

No comments:

Post a Comment