أزاى تبدأ تتعلم برمجة ؟ الجزأ الثالث -نصائح و تجارب شخصية

الجزأ التالت و الأخير من أزاى تبدأ برمجة , حاولت فى ال 3 أجزاء أخلى عندك خلفية ولو بسيطة عن أزاى تبدأ برمجة و أيه الطريق الى ممكن تمشى فيه وفى كل الاحوال لو عندك أى سؤال تقدر تبعتلى على الفيس أو تويتر أو على الموقع بتاعى و اللينكات هتكون فى أخر المقال و بالنسبة للجزأين الى قبل كده فده لينك الجزأ التانى و فى الجزأ التانى هتلاقى لينك للجزأ الأول
https://medium.com/@samehdiab/how-to-learn-programming-2-f2483ea1e581
بالنسبة للجزا الثالث هيكون فيه نصائح من خلال تجارب أنا مريت بيها أو غيرى مر بيها و هحاول ألقى الضوء عليها علشان تحاول تتفادها أو حتى علشان تكون عارف أيه الى أنت بتواجه لو واجهت نفس الموقف


ماتقفش كتير قدام أختيار لغتك الأولى

عنوان مش محتاج شرح كتير , أنا علشان أبدأ برمجة قعدت تقريبا شهرين أحاول أشوف أيه هى أحسن لغة برمجة ؟أيه اللغة الى هقدر أعمل بيها كل الى أنا عاوزه؟ رغم انى أصلا ماكنتش عارف أنا عاوز أيه وقتها
بس كنت عاوز أختار أحسن لغة . لحسن الحظ مفيش حاجه أسمها أحسن لغة برمجة لكن ممكن نقول ان فيه لغات مشهورة عالميا زيى 
python_Java_Ruby_C_C++_C#_JavaScript_Objective-C
و ديه مجرد أمثلة . لكن فى كل الأحوال أختيار لغتك الأولى ليس محور الكون البرمجى بالنسبة لك أو مثلا لو حبيت تختار لغة تانية بعد كده هتكون أتورطت فى اللغة الأولى الى أخترتها (هى مش جوازة). فى كل الأحوال لغتك الأولى هتديلك المفاهيم الاساسية للبرمجة و التفكير البرمجى السليم الى هيخليك قادر تتعلم أى لغة تانية أنت عاوزها , الانتقال بين اللغات بيكون اسهل طالما عرفت و فهمت الأساسيات . لكن ده مش معناه انك مجرد ما تبدأ فى لغة تسيبها و تروح لغيرها فضول و تعمل كده كتير , أنك تكون محترف فى لغة أفضل من أنك تكون عارف مبادىء 5 لغات و مش محترف فى أى واحده فيهم . العملية كلها تعتمد على التوازن , لو عندك أهتمام بلغة معينه أبدأ أتعلمها أو لو عندك أهتمام بمجال معين فى البرمجة أبدأ أتعلم اللغة بتاعته لكن لوماعندكش ركز فى اللغة الى معاك و حاول توصل لخفاياها و الأهم من كل ده انك تحاول تبنى بيها شىء والبناء هو أهم جزأ فى عملية التعلم كلها و يمكن فى رحلة البرمجة بتاعتك كلها . فى النهاية لغتك الأولى حتى لو هتغيرها بعد كده و مش هتستخدمها فى حياتك العملية فهى هتساعدك تفهم أساسيات لغات البرمجة و التفكير البرمجى لأن تقريبا اساسيات أغلب لغات البرمجة واحده 
نصيحتى انك تختار البايثون كلغة أولى لسهولة تعلمها فقط لكن أى لغة هتؤدى المطلوب منها فى فهمك الأولى للبرمجة


أبنى / أشتغل على مشاريع بتحبها

النصيحة ديه أنا كررتها فى ال 3 أجزاء ولو حد سألنى على أى نصيحة فى البرمجة هتكون ديه أكيد من ضمنهم . لازم بعد ما تتعلم شىء تطبق بنفسك و تبنى حاجه , طبعا السؤال الى دايما هيجى فى بالك هو أعمل أيه يعنى ؟ فتكون الأجابه أى حاجه فأنت برضه ماتفهمش تعمل أيه و تفضل محتار لكن مش المقصود هو انك تبدأ تلتزم بمشروع كبير , الفكرة كلها فى التطبيق هى ديه النقطة الى أنت محتاج تعملها فى المرحلة ديه , لو عندك مشروع فعلا عاوز تنفذه ممكن تبدأ فيه بالادوات الى فى ايدك و الحاجات الى اتعلمتها حتى لو بسيطه و تبنى عليه لكن لو مش فى دماغك أى مشروع فالمهم هو انك تطبق على الى أتعلمته , لو خدت 10 كورسات و مابنيتش أى حاجه بيهم فأنت بتاخد كورسات ليه اصلا ؟ ده غير ان الكورسات بس او الفيديوهات التعليمية عموما او الكتب مش هتوصلك لمرحلة الثقة انك فعلا مبرمج غير لما تبدأ تبنى حاجه فعلا من أولها لأخرها 
هتشوف كورس أو هتقرأ كتاب و هتمشى ورا الشرح خطوة بخطوة و تكتب الكود زيى ما هو موجود فى الكورس و تشوف حاجه بتتبنى قدامك و الكورس يخلص فأنت تكون عاوز تبنى شىء بنفسك من غير خطوات تتبعها لكن لما تبدأ تبنى فعلا تحس انك تايه و مش عارف تبدأ منين أصلا و تبدأ تشوف الكود الى موجود فى الكورس او الى موجود فى الكتاب و تبدا تربط و تاخد كوبى و بيست و أحيانا ماتعرفش تلاقى حلول لحاجات عاوز تعملها أنت فتحس بالاحباط و ان البرمجة صعبة .كل الى فات ده طبيعى و عادى و مفيش فيه أى مشكة, الخطوة ديه لازم تمر بيها علشان تتطور من متعلم للبرمجة لمبرمج مبتدىء , لازم تحس فى بداية مشاريعك أنك تايه , لازم المخ يحس بالتحدى ده فيبدأ يدور على حلول فى الكورس الى لسه واخده, فى جوجل ,أيا كان, بعد مشروع و التانى و التالت عقلك هيدور على حلول للمشاكل البرمجية الى هتقابلك من الاساسيات الى اتعلمها و من خلال الخبرة الى أتعلمها من خلال مشاريعك القليلة الى أتعلمتها , الخطوة ديه صعبة و محبطة أحيانا و بتخرج برا منطقة الراحه التعليمية بتاعتك لان مافيش أرشادات و لازم تتعب و تقعد ساعات علشان تلاقى حل لمشكلة برمجية لكنها مهمة جدا لأنها قفزة مهمه جدا من منطقة لمنطقة تانية. طيب ديه أسباب انك لازم تبنى او تشتغل على مشاريع , ليه لازم حاجات بتحبها اومهتم بيها ؟ علشان يكون عندك الشغف الكافى انك تستمر فيها , أنك تكملها للأخر , والأهم أنك تصبر لحد ما تلاقى أجابات و حلول للمشاكل الى هتقابلك . لو ماعندكش الشغف ده ممكن تكسل تكمل المشروع اصلا أو تحبط بسرعه كبيرة


لا تستسلم فى مرحلة صحراء الأحباط

أنا عارف أن العنوان لوحده يحبط :) و عنوان كبير كده بس خليك معايا شوية 
النقطة ديه ليها علاقة بالنقطة الى قبليها بس فصلتهم لان مرحلة صحراء الأحباط زيى ما بسميها ممكن تجيلك فى أوقات تانية برضه . طيب من البداية أيه المقصود بصحراء الأحباط ؟
صحراء الأحباط هى مرحلة هتحس فيها أنك لوحدك تماما و ان البرمجة ديه حاجه مش ليك مش بتاعتك و انه مافيش أى مساعدة شايفها تقدر تشجعك أنك تكمل فى البرمجة 
الغالبية العظمى من الى بيبدأوا يتعلموا برمجة على أساس أنهم يكملوا فى طريق البرمجة بيسيبوها بسبب المرحلة ديه , المرحلة ديه بتجيلك لما تخلص كورس أو كتاب و تحس أنك خلاص فعلا فهمت البرمجة أو لغة البرمجة و هتقدر تبنى حاجه , ديه حاجه سهلة . لكن لما تبدأ تبنى فعلا عقلك يقف, هى أول حاجه كانت أيه طيب ما الحاجه ديه أنا ماخدتهاش و ديه أنا خدتها بس مش فاكر الكود طيب هحل ديه أزاى …. ألخ , أول موجة أحباط بتقابلك لما عقلك يبدا يحس ان معلومات كتير دخلت بس مافيش أى معلومة ثابته جواه وده مابيكونش صحيح 100% ولا غلط 100% , كل المطلوب هو انك تستمر فى المحاولة , أول مرة هتكون صعبة و التانية صعبة بس اسهل من الى قبليها و هكذا لحد لما يكون عندك الثقة الكافية أنك تبنى شىء بالمعلومات الى عندك و الثقة ان أى معلومه جديدة هتقدر تبنى بيها مع المعلومات القديمة لكن المرحلة ديه مابتجيلكش بس لما تكون فى بداياتك وبتحاول تبنى , ممكن كمان تجيلك فى لحظات أحباط و يأس من تعب المذاكرة أو من تعب المجهود الى بتبذله علشان توصل لشىء , سؤال زيى هل أنا هوصل لشىء فى البرمجة بعد كل التعب ده ؟ ممكن تقف قدامه كتير لأن مافيش أجابة بشكل واضح و صريح و مؤكد على السؤال ده و ممكن بسبب التفكير الكتير فى كده يجيلك يأس و تقع فى صحراء الاحباط . لازم تستمر , الى هيخليك توصل لشىء أى شىء سواء كان برمجة أو غيرها هو مش تعبك لمدة أسبوع أو شهر أو حتى أتنين بل هو استمرارك فى تتبع شغفك ده , لازم التعب ده فى مرحلة ما يتحول لعادة وقتها هتكون الشخص الى انت عاوزه و فى حالتنا مبرمج من غير حتى ما تدرك ده , ماتستسلمش وأنت فى صحراء الأحباط

ما نفعله بشكل متكرر هو ما نحن عليه
و من ثم فان التميز عادة و ليس فعلا 
أرسطو

أبنى دائرتك البرمجية

المقصود بدائرتك البرمجية هى الناس الى تعرفها و تكون مهتمة بالبرمجة سواء كانوا مشاهير على السوشيال ميديا بيقدموا نصائح أو فيديوهات خاصة بالبرمجه فأنت تعملهم فولو و تبدأ تتابع جديدهم و ده مهم لأنك تدريجيا جزأ كبير من تواجدك على السوشيال ميديا هيتحول لمتابعة جديد البرمجة و هيخليك على أطلاع على الجديد أو حتى هيخلي عندك أحساس أنك بالفعل داخل محيط البرمجة أو يكونوا ناس جديده زيك فى مجال البرمجة و تبدأوا تكتشفوا العالم ده مع بعض , الخطوة ديه أهميتها فى كذا نقطة أولا هتسهل عليك عملية التعلم نفسها , وجود أصدقاء يساعدوك بيحول عملية التعلم لشىء ممتع أكثر , جرب مثلا تحضر كورس لوحدك و كورس مع اصحابك أو جرب تروح جيم لوحدك و مع أصحابك . و بجانب نقطة انه هيسهل عليك عملية التعلم نفسها فهو كمان هيكون حافز كبير جدا و هيقلل فترات الاحباط الى عندك لو جاتلك 
 حاجه تانية مهمه جدا و ممكن تكون أهم حتى من النقطتين الى فاتوا وهى وجود مستشار/ناصح/معلم/مرشد ليك و ده بطبيعة الحال هيكون حد سابقك فى الطريق الى أنت عاوزتمشى فيه , سابقك بخطوات كبيرة مش مجرد بادىء قبلك بشهر مثلا و الفايدة هنا انه هيكون فاهم المشاكل الى هتقابلك و ممكن يكون جاله نفس الاحساس الى بيجيلك أو عنده نفس الظروف الى عندك , أزاى أتغلب على الحاجات ديه و أزاى قدر يستمر لحد ما وصل للمرحلة ديه أو أزاى قدر يحل المشكلة س أو ص , أيه الحاجات الى أتعلمها و كانت مهمه فعلا و الحاجات الى أتعلمها و كان ممكن تتأجل كل ديه معلومات هتسهل عليك طريقك بشكل كبير جدا , أنك تشوف حد مشى فى نفس الطريق الى انت عاوز تمشى فيه و فعلا وصل لمراحل متقدمه فيه هيديلك حافز كبير جدا , وجوده هياخد بأيدك خلال الطريق ده علشان تقدر تكمله للأخر 
من الحاجات برضه المهمه هو انك تحاول تدخل فى جروبات خاصة بالبرمجة على الفيس او تشترك فى صفحات خاصة بالبرمجة على الفيس لان غالبا ده بيكون كملتقى لكل محبى البرمجة أو الى عاوزين يبدأوا برمجة فالجروبات و الصفحات ديه بتكون عامل مساعد جدا فى بعض الأحيان 
أنا عامل صفحة على الفيس للغرض ده خاصة بأى حد عاوز يبدأ برمجة أو حابب يبدأ برمجة و أسمها ابدأ
و ده اللينك بتاعها
https://www.facebook.com/ebdaa01/


المثالية عدو الأنجاز

النصيحة ديه ماتخصش البرمجة بالذات , ممكن تقول نصيحة عامة تخص أى حاجه عاوز تعملها فى حياتك 
ماتستناش كودك المثالى الى مافيهوش ولا غلطة علشان تنشره , مش معنى كده أنك تنشر كود مليان غلطات وانت عارفها لكن المقصود انك ماتستناش ان أى عمل ليك يكون مثالى علشان تنشره , ممكن تطور كودك بالتدريج يوميا , لو أنت راضى عن أول موقع عملته فأنت أتأخرت كثيرا …الجملة ديه غالبا الى قالها مؤسس لينكد ان و المقصود أنه طبيعى أول أعمال ليك ماتكونش راضى عنها و أنك تطور فيها لأنك بعد أول عمل أنت نفسك بتتطور و بتاخد خبرة و بالتالى فان عملك الأول هيحتاج يتطور. أنت كمبرمج مش هتطور غير لو عملك كان ناقص كتير و بدأت تدور و بدات تطوره , ده غير ان مفيش أى عمل مهما كان هيكون كامل أو مثالى 100% , دايما هيكون فيه حاجات عاوز تضيفها أو تعملها أو تعدلها , ده الطبيعى و العادى , تقبل كده , تقبل انك مش مبرمج مثالى و ان الكورد بتاعك مش مثالى , كل المطلوب منك انك تحاول توصل لأفضل شىء ممكن تقدمه .بالتدريج و بعد كل عمل تعمله كودك هيتحسن و الناتج النهائى لشغلك هيتحسن , ماتستناش توصل لعملك المثالى , ابدأ أنشرأى شىء أنت تعبت فيه


Learn Git / The Command Line

سواء فى بدايات تعلمك البرمجة أو بعد كده أنت هتحتاج تتعلم جيت و الكوماند لاين و أسمحلى أكتبهم بالعربى أثناء النقطة ديه . الأتنين دول من اساسيات البرمجة حاليا و اى مبرمج مهما كان هو عاوز يعمل أيه أو يبنى أيه لازم تكون عنده خلفيه عن الحاجتين دول 
بدايه مع الكوماند لاين ؟ أيه هو 
بأختصار شديد هو وسيلة تعامل مع الكمبيوتر من غير الماوس و من خلال الكيبورد بس و من خلال أوامر معينه هتعرفها لما تتعلمه , كمبرمج ده هيسهل عليك حاجات كتير و هيوفر عليك وقت كبير و يمكن النقطة التانية هتحسها لما تبدأ تجيد التعامل معاه ده غير أنه فى بعض الأحيان مش هيكون قدامك غير الكوماند لاين لعمل شىء معين أو الوصول لنتيجة معينة
ممكن تتعلمه مجانى من خلال كورس كود كاديمى على الرابط ده
https://www.codecademy.com/learn/learn-the-command-line
هتحتاج تسجل حساب فى كودكاديمى لتتبع تقدمك أثناء الكورس
أيه هوجيت ؟
جيت هو أداة برمجية لها أكتر من أستخدام و فايده بداية هو وسيلة لحفظ نسخ مختلفة من الكود بتاعك بمعنى انك ممكن تكتب 10 أسطر من اكود و تحفظ الى عملته و بعدين تزود على الكود 5 أسطر تانيين و تحفظ الى عملته كحفظ تانى, بواسطة جيت تقدر ترجع للحفظ الاول الخاص بال 10 أسطر بس و ممكن تزود عليهم أسطر كمان مختلفة و تحفظه كحفظ تالت وده هيساعد أنك تتابع الكود بتاعك لو فيه أى مشكلة حصلت فيه أو أى تعديل غريب أنت ماقصدتوش. من غير تعقيد كتير ممكن تفهمه على أنه بيحفظ نسخ مختلفة من الكود بتاعك او هو عين بتراقب الكود بتاعك من أوله لأخره و تقدر ترجع لأى حاجه انت غيرتها فى الكود , كمان هو وسيلة ممتازه انه كذا واحد يقدروا يشتركوا فى عمل مشروع مع بعض و بيقدر يحدد مين من افراد التيم عمل ايه بالظبط
دايما هتقرأ أو تسمع عن GitHub
لما تيجى سيرة جيت هتسمع عن جيت هاب و الاتنين مختلفين مش حاجه واحده فجيت هاب هو موقع بيخليك تقدر تعرض المشاريع بتاعتك اونلاين و بتكون اوبن سورس أو مجانية يعنى و ده معناه ان أى حد يقدر ياخد مشروعك و يضيف عليه أو يستخدمه و كذالك أنت ممكن تاخد أى مشروع و تضيف عليه برضه أو تستخدمه و كمان هو وسيلة ممتازة للاشخاص انهم يتشاركوا فى عمل مشروع مع بعض 
لو عاوز تتعلم جيت و جيت هاب فمن وجهة نظرى كورس يوداستى الخاص بالاتنين هو أفضل كورس اونلاين يعلمك أساسيات استخدام الاتنين 
https://www.udacity.com/course/how-to-use-git-and-github--ud775
لو عاوز تتعلم جيت بس فعلى كودكاديمى كورس هيعلمك مبادىء جيت
https://www.codecademy.com/learn/learn-git
الكورسين مجانيين , هتحتارج بس تسجيل حساب


أنت دائما هتتعلم

أنا هخلص ال 5 كورسات ديه و هبدأ أعمل مشروع و أطبق الى أتعلمته لما أكون أفضل
بعد ما أتعلم الى 5حاجات ديه أخيرا هقدر أقول على نفسى مبرمج
فاضلى 10 فيديوهات بس و هكون أخيرا خلصت من تعلم البايثون
لو بتقول لنفسك الجمل ديه أو جمل مشابهة فبعد أذنك وقف الكلام ده . أنت دائما هتتعلم حتى لو بنيت شركة برمجة خاصة بيك هتفضل دايما تتعلم . ماتوقفش أى حاجه أو تربط أى حاجه لما تخصل تعلم كورس أو فيديو أو خلافه , ماتستناش تخلص كذا كورس علشان تبدأ تطبق الى أتعلمته , أنت مش فى سباق مع حد و مش مهم انك تخلص الكورس فى حد ذاته , أهمية الكورس بتيجى من قدرتك فى تطبيق الى أتعلمته , أفتكر دايما أنت اصلا بتتعلم ليه ؟ أنت مابتتعلمش علشان يكون اسمك خلصت 10كورسات , أنت بتتعلم علشان تكون قادر تبنى أو تحل المشاكل البرمجية المختلفة , ماتستناش تخلص كورس خصوصا لو كورس كبير و تبدأ تطبق ,طول ما أنت بتاخد الكورس طبق و أعمل حاجات و جرب و دور بعيدا حتى عن مجال الكورس نفسه . كمان ماتقولش أو تعتقد انك هتكون مبرمج لما تتعلم حاجة او اتنين او عشرة , أنت هتكون مبرمج لما تخرج برا دايرة اتباع مدرس الكورس و تبدأ تبنى بنفسك حاجه , وقتها هتبدا تفكر فى حل المشكلة و تبدأ تفكر فى تركيب البرنامج بتاعك و توصل لحل و لنموذج و توصل لناتج نهائى وقتها هتكون مبرمج . مرحلة التعلم خصوصا فى مجال البرمجة مش مؤقته كل يوم فيه جديد و كل يوم فيه حاجات ممكن تتعلمها لكن المهم هو انه يكون عندك الاساسيات و تقدر تستخدمها و تقدر تبنى بالى انت متعلمه بالفعل و من النقطة ديه تتعلم جديد و تبنى فوق الى انت عارفه بالفعل وقتها هتوصل للى أنت عاوزه


One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.