H ow to Start Programming

Blog

اذاي تبدأ تتعلم برمجة


# اذاي تبدأ تتعلم برمجة ؟
----------------------------------------------
في البدايا كده انا احييك علي اقدامك علي انك تتعلم خاصا ان البرمجة هتعلمك شوية حاجات مهمة اوي ومش لازم تتعلم برمجة علشان تشتغل بيها كفايا بس انك تاخد الاساسيات لانها فعلا هتفرق معاك, "البرمجة دلوقتي بقت زي القراءة والكتابة من 100 سنة".
وانا هنا هكون صحبك الي هاخدك خطوة خطوة وهكلمك بالعامية كده علشان ميبقاش معاك اي مشكلة.
------------------
## البرمجة هتقدملك ايه
اول حاجة هتقدمهالك هي مهارة حل المشكلات (Problem Solving) وده بقت مهارة مهمة كده حتي في اي مجال او حتي حياتك الشخصية المهارة ده هتخليك بمجرد انك تلاقي مشكله تعرف ايه هي الخطواط المطلوبة لحلها وده طبعا لان البرمجة عبارة اصلا عن حل مشكلات وهتعرف كده لما تبدا.
ثاني حاجة هتقدملك مهارة البحث وده ممكن مش كل الناس تحسها مهارة اصلا بس بمجرد انها تبقي عندك هتعرف اذاي تبحث صح علي جوجل غير هتخلي عندك منطق البحث ان اول متلاقي حاجة مش عارفها تروح تبحث عنها ومتستناش حد يجي يقولك وده هيخليك تطور بسرعة اوي في اي مجال حتي.
ثالث حاجة هتقدمهالك مهارة الكتابة السريعة علي الكيبورد المهارة ده بقت من المهارات المهمة اوي دلوقتي مش زي زمان, زمان كان الناس المفروض تتعلم اذاي تكتب بخط حلو اما دلوقتي المفروض تتعلم اذاي تكتب بسرعة علي الكيبورد لان دلوقتي بقي كل حاجة علي الكمبيوتر والموضوع ده هيوفرك وقت طويل ده غير هيوفرك صحتك لانك في الحالة الطبيعية وانت معندكش المهارة ده كل شوية هتبص علي الشاشة وهتبوص علي الكيبورد وده مع الوقت هيتعبلك رقبتك.
في طبعا حاجات كتير جدا بس دول الاهم دلوقتي
------------------
## اذاي انا بدأت
وانا في سادسة ابتدائي كان اول مرة افكر فيها اذاي البرامج والمواقع ده اتعملت ومين الي عملها واذاي اتعملت اصلا ومكنتش لسة عارف فيه وقتها هي ايه البرمجة اصلا ومع الوقت نسيت الموضوع علشان موصلتش لاجابة لسؤالي.
ولما دخلت اولة اعدادي كان عندنا في منهج الحاسب الالي ال "Scratch" وده بكل بساطة برنامج بيوصل مفهوم البرمجة للأطفال وبيخليك تقدر تعمل اللعاب بطرق سهلة جدا, وفعلا اول ماخذت الاجازة قعد احاول فيه كتير بس معرفتش اعمل بيه حاجة وهنا كان اول مرة اعمل سريش فدخلت علي اليوتيوب علشان اتعلم استخدمه وبعد كده مع الوقت بقيت عارف كل حاجة فيه وعملت فعلا لعب بيه كبيرة اوي.
بس مع الوقت ادركت ان اكيد البرمجة مش سهلة كده او ان البرنامج مش كامل لان ده بيتعمل بيه العاب بس فاذاي برده اعمل برامج او مواقع وهنا بقي جربت اعمل سيرش بنفسي علي يوتيوب وكتبت "اذاي اتعلم برمجة" طلعلي بلاي ليست لواحد عراقي كان بيشرحها في ثلاث فيديوهات, طبعا فرحت جدا و بدأت ونزلت البرنامج الي قال عليه والي كان اسمه "Sublime Text" وبدأت اطبق وراه بس كانت طريقة شرحه غلط جدا (طبعا انا مكنتش عارف كده فوقتها) مكنش بيشرح الاساسيات ولا حتي كان قال اسم المجال الي بيشرحه ولا كان قال اي حاجة هو دخل شرح علي طول وكان بيشرح html و css (ده اللغات الاساسية لعمل موقع ويب) وطريقة شرحه كانت انه يعمل موقع علي طول بيهم منغير ميشرح الاساسيات بتاعتهم, فالمهم لما خلصت الثلاث فيديوهات دول بدأت اعمل موقع بنفسي وكنت فرحان اوي اني بعمل حاجة لوحدي وجيت بقي علي مرحلة اني ابعت الموقع لحد فجيت بعمل زي مانا بعمل في اي موقع تاني باخد اللينك وببعته لحد وعلشان انا مكنتش مشغل سيرفر ولا اي حاجة (طبيعي علشان لسة مكنتش بعرف) فكان البروتكول بتاع اللينك بيبدأ ( file:/// ) والبروتوكال ده معناه ان ده فايل موجود علي الجهاز يعني مينفعش يتبعت لحد.
فانا مكنتش عارف كده فلما جيت ببعته لحد مكنش بيشتغل وانا مكنتش عارف ليه فاضايقت جدا وزعلت وسيبت الموضوع لفترة طويلة.
في ثانية اعدادي بقي كان منهج الحاسب الالي كان بيتكلم عن html ففرحت بقي علشان هيشرحوا كل حاجة واكيد هيقولوا حل للمشكلة الي كانت عندي فالمهم جيت بسمع حصة ورا حصة ومكانوش بيشرحوا اي حاجة جديدة خالص كل الحاجات الي كانوا بيشرحوها كانت سطحية جدا بدرجة ان كل الحاجات الي هم شرحهوها كانت موجودة في الثلاث فيديوهات الي كنت شفتهم, حتي لما كنت بروح اسألهم عن كود معين في اللغة زي
doctype html
( وده الي بيعرف البراوزير ان الكود كله مكتوب بالاصدار 5 ) مكانوش عارفين ومبيردوش يقولوا كده فكانوا بيقولوا اي حاجات وخلاص مع ان ده كود اساسي مينفعش حد يبدأ منغيره اصلا, وبرده لما سألتهم ليه مش عارف ابعت لحد اللينك برده معرفوش, فزعلت تاني وسبت الموضوع لفترة طويلة اوي.
وانا بفر في الفيس مرة لقيت نصيحة من واحد بيقول لو عايز تبدأ في اي مجال دور علي جروبات ليه في الفيس علشان ده هيدخلك في مود المجال وهتلاقي كل الناس مهتمة بنفس اهتمامك وهتعرف تبدأ في اي مجال, فختر علي بالي اني اعمل كده لمجال البرمجة وفعلا قعدت اخش في جروبات كتير اوي والكلام ده كان في اخر ثانية اعدادي ومن ضمن الجروبات الي دخلتها كان جروب اسمه "Elzero Web School" عرفت بعد كده ان الجروب ده معمول اصلا لقناة بنفس الاسم فدخلت علي القناة لقيته شارح حاجات كتيرة جدا وتوهت جوة, فقعدت ادور علي كورسات html و css وبرده وانا في الجروب عرفت ان في لغة تانية المفروض اتعلمها اسمها JavaScript (وطبعا انا مكنتش عارف هي لازمتها ايه اصلا) فلقيت فعلا انه شارحهم فقولت انا كنت عارف ال html اصلا من الثلاث الفيديوهات بتوع زمان وال css اصلا بتاع تنسيق علشان يخلي الموقع شكلوا حلو فمش مهم فانا هخش علي طول علي ال JavaScript, وفعلا دخلت اتعلمه ومن اول درس ولقيتها صعبة جدا ومش فاهم فيها اي حاجة واتعقدت منها وسيبت المجال تاني.
في اول ثالثة اعدادي بقي لقيت ان القناة ده هتجدد كل الكورسات القديمة علشان الكورسات ده قعدت 7 سنين فبقت قديمة اوي ولقيته هيبدأ بكورس html فقولت خلاص انا هبدأ معاه واتفرج علي الكورس كامل حتي لو كنت عارفه, ولما بدأت لقيت اني مكنتش عارف حاجة عن اللغة ده غير حاجات بسيطة اوي وخلصت الكورس وكنت بستمتع بيه اوي وبعد كده لقيته نزل ال css ودخلت برده واتفرجت عليه وخلصت ودخلت بعد كده علي JavaScript ولقيتها سهلة اوي وانا كنت شايفها صعبة علشان متعلمتش الحاجات الي قبلها وبعد كده عرفت بقي ان للبرمجة مجالات كتير وان المجال الي انا بتعلمه ده هو الويب وعرفت الرود ماب بتاعته الكاملة ومن هنا انا انطلقت.
فلازم تكون عارف ان اصعب حاجة هي البدايا يعني من 0 ل 1 اصعب بكتير من 1 ل 10
و انا هاجي بقي اقولك شوية كلام كان نفسي حد يقولهوملي علشان كانت هتفرق معايا كتير وكنت هوفر 4 سنين كنت ممكن اتعلم فيهم حاجات كتير
-------------------
## ايه هي الغلطات الي انا عملتها علشان متعملهاش
اول غلطة اني المفروض قبل مابدأ في اي حاجة اقرأ عنها الاول لان ده كان هيوفر عليا كتير اوي كنت هعرف ايه كل المجالات وكنت هعرف ايه اللغات الي المفروض اتعلمه وهكذا
ثاني غلطة اني مدورتش بنفسي علي حل للمشاكل الي طلعتلي يعني لو كنت دورت علي جوجل لحل لموضوع اللينك ده وكنت عرفت اني المفروض ارفعه علي سيرفر كان زماني كملت بعض كده منغير مأقعد فترة طويلة كده
ثالث غلطة اني مبدأت من الاول يعني لو كنت خلصت كورس html كامل من اول مرة منغير مأقول اني عرفه كنت زماني برده كملت
رابع غلطة اني حكمت علي حاجة انها مش مهمة منغير مأشوف بنفسي اذا كانت مهمة فعلا ولا لأ
------------------
## حاجات لازم تكون عارفها قبل متبدأ
في البدايا كده لازم نكون متفقين انك هتعمل بحث علي جوجل بأستمرار في كل حاجة حتي دلوقتي اي حاجة هكتبها دلوقتي لازم تروح تكتبها في جوجل وتقرأ عنها اكتر, يعني كمثال انا دلوقتي كتبت ثالث حاجات هتستفاد منها لما تتعلم البرمجة صح ؟ روح دلوقتي اكتب واحدة واحد علي جوجل واقرأ عنهم اكتر لاني هنا بكتب نبذات بس ولو عملت كده في المقالة كلها اوعدك انشاء الله انك هتطلع بكمية معلومات محترمة وهتخليك داخل مستريح.
ثاني حاجة كده انت مش مطاااااالب تحفظ خالص, في كتير في البدايا بيخافوا علشان بيقولوا هنحفظ كل الاكواد ده اذاي بس انا بقولك محدش بيحفظ اصلا انت كل الي انت بتعمله انك لما تيجي تسمع الكورس انت بس هتشوف كل حاجة بتعمل ايه يعني لما تكتب كود كذا هيعملك كذا وكده وبعد كده لما تخلص وتيجي علي وقت التطبيق هتيجي تدور علي جوجل علي الحاجة المعينة ده علشان تفتكرها ومع الوقت مش هتبقي محتاج تدور اصلا, يعني مثال في لغة python علشان تطبع كلمة بتكتب print() انت بقي دلوقتي عرفت ان في كود بيطبع صح ؟ تمام هتيجي بقي وقت التطبيق العملي هتعوذ تطبع كلمة هتكتب في جوجل اذاي اطبع كلمة بالبايثون هيطلعلك الكود تاخده وتكتبه وكده تكون خلصت خلاص ومع الوقت هتلاقي نفسك حفظت خلاص ومش محتاج تعمل كده.
ثالث حاجة في ناس كتير بتفكر علشان تكون جامدة تروح تسمع كورسات كتير يعني تشوف كورس وبعد متخلصه تشوفه تاني وبعد كده تطلع علي كورس غيره كل ده غلط انت في البدايا كده هتخصص وقت معين علشان تدور علي كورس مثلا ساعة هتروح تشوف ايه الكورسات المتاحة وتجرب تسمع لكل واحد فيديو لحد متشوف انت ارتحت لمين بعد كده تبدأ تسمعله هتشوف درس عنده وبعد متخلص الدرس هتروح تجرب الي انت سمعته وبعد كده هتروح تبحث علي جوجل علي الحاجات الي انت اخذتها هتلاقي نفسك عرفت معلومات اكتر وبعد كده تروح علي الدرس الثاني وهكذا وبعد متخلص الكورس هتروح بقي تعمل تطبيقات عملية كتير وخلي بالك ده الي بيعلمك انك تطبق مش تسمع وبرده حابب اقولك كل متذاكر بسرعة المعلومات هطير بسرعة وكل مهتذاكر براحة المعلومات هتقعد معاك فترة اكتر.
رابع حاجة الشطارة مش بعدد اللغات, كتير بيجي بيقول انت معاك كام لغة علي اساس ان الي معاه لغات كتير ده الجامد بس لا في مبادئ معينة في كل اللغات, انت بتتعلم المبادئ ده وخلاص تقدر تنقل علي اي لغة فالفكرة كلها انك تتعلم المبادئ ده صح مش تتعلم لغات كتير.
------------------
## مجالات البرمجة
لازم قبل متبدأ كده تعرف ان للبرمجة مجالات كتيرة لو عايز تتعلم كهواية كده ومتعة خد اي مجال ولو عايز انشاء الله تشتغل في البرمجة يبقي استني بقي في مجالات معينة هي الي موجودة في مصر
ده كده اشهر مجالات البرمجة
- Web Development (تطوير الويب)
- App Development (تطوير التطبيقات)
- Game Development (تطوير الالعاب)
- Artificial Intelligence (الذكاء الاصطناعي)
- Information Technology (نظم المعلومات)
- Cyber Security (أمن الشبكات)
اكتر اثنين مشهورين في مصر هم "تطوير الويب" و "تطوير الطبيقات" ودول برده هتلاقي ناس كتير متعلماهم فلو وقف معاك حاجة هتلاقي كتير هيساعدوك.
وهنتكلم عليهم دلوقتي.
------------------
## تبدأ اذاي
انت اكيد دلوقتي بتقول ابدأ اذاي بعد كل ده ,انا هقولك
في مسارين ممكن تمشي في واحد فيهم المسار الاول انك تتأسس وبعد كده تختار مجال والمسار التاني انك تختار مجال علي طول, هتقولي ايه الفرق؟
الفرق هنا انك لو اتأسست الاول زي كل كليات ال cs هتبقي قوي اكتر في البرمجة وهتقدر تخش علي اي مجال بسهولة بس ده ليه عيوب اولهم انك هتقعد وقت طويل تتأسس وفي الاخر مش هتعرف تعمل حاجة وبعد كده تروح تتعلم مجال وده الي ممكن ناس متفضلهوش علشان معهاش وقت او لسة بتجرب فانت لو عندك وقت كافي وعايز تتعلم صح اتأسس الاول.
- هتتأسس اذاي بقي ؟
هتتعلم اول حاجة ++C و oop هم دول كفايا لو عايز تكمل فهتاخد Data Structure و Algorithm و design pattern
بعد مهتخلصهم هتخش بقي تختار مجال وتتعلمه
دلوقتي انا هقولك رود ماب للمجالين الي مشهورين في مصر لو انت عايز تعرف الباقي اعمل سيرش علي جوجل كده, ده مثال اكتب بس انت اسم المجال
Game Development Rodemap 2022
وطبعا مش معني كده ان المجالين الي هقولهم دول مش هتعمل عليهم سيرش لا اعمل برده.
------------------
## رودماب للويب
الويب فيهم حاجتين اول حاجة اسمها "Front-End" والحاجة تانية اسمها "Back-end" ايه الفرق ؟
- الفرونت ده هو الجزء الي انت شايفه من الموقع يعني بمثال الفيس انت بتخش بتفر فيه وبتقرأ وكده كل ده اسمه فرونت
- اما الباك بقي هو الحاجات الي انت مش شايفها يعني برده في الفيس انت اول متخش هتلاقي ال login هتخش تكتب ال username و password بتاعك ايه الي هيحصل بقي الاثنين دول هيتبعتوا علي Database هيتحقق جوة هل ال password ده هي فعلا الي موجودة في Database ولا لو اه هيحولك علي الفيس لو لا هيطلعلك error
وانت طبعا بتختار واحدة فيهم, بس في بقي ناس بتبقي متعلمة الاثنين ففي الحالة ده بيبقي اسمها full-stack
وهنمسك بقي رود ماب ولواحدة واحدة
ده الرود ماب الفرونت
- Html
- Css
- JavaScript
- Bootstrap
- Sass
- Pug.js
- Gulp.js
- react.js
طبعا مش دول بس لسة في كتير اوي بس دول الاساس وهشرح بقي دلوقتي حاجة حاجة
ال html ده هي البنية الاساسية للموقع وبيبقي طبعا شاكله وحش علشام بيبقي منغير الوان ولا تنظيم ولا ايه حاجة تخيل كده كأنه الهيكل العظمي للأنسان
ال css ده الحاجة الي تقدر تعمل شكل لل html علشان يبقي منظم ومرتب وشكلع حلو تخيل كده كأنه انسان وجلد ولابس هدوم وشكله حلو
ال js ده الي بتخيلك تعمل حركة في الموقع يعني لكا تضغط علي زرار كذا يعمل كذا وكده تخيل كده كأنه انسان بيقدر يتحرك
ال bootstrap ده عبارة عن شوية اكواد جاهزة لل css علشان توفرك وقت
ال sass بتخيلك تقدر تستعمل ال css بس بميزات لغات البرمجة وهنتكلم علي ده دلوقتي
ال pug هي نفس فكرة ال sass بس مع ال html
ال gulp ده كأنه الاسيستانت بتاعك الي تقدر تقوله يعمل شوية حاجات وهو هيعملها
ال react ده عبارة عن مكتبة جاهزة فيها اكواد لل js
نخش بقي علي الرود ماب بتاع الباك وهنا في كذا مسار ممكن تخش فيه, عارف انت زهقت من كتر المسارات بس استحمل
ده الاول
- php
- laravel
- mysql
وده الثاني
- js(node)
- express
- mongoDB
وده الثالث
- python
- django
- PostgreSQL او MySQL
وده الرابع
- C#
- asp.net
- SQL Server
طبعا هم اكتر من كده بس دول الاشهر, برده عايزين نشرح ايه دول طيب اول حاجة في الاربعة هي لغة البرمجة الي هتشتغل بيها وثاني حاجة في الاربعة هي المكتبة الي فيها اكواد جاهزة للغة ده وثالث حاجة في الاربعة هي قاعدة البيانات الي هتتخزن فيه كل بيانات الموقع
انت طبعا دلوقتي بتقول تختار ايه فيهم وايه احسنهم انا هقولك.
اول حاجة مفيش حاجة اسمها ايه احسن حاجة السؤال ده غلط حتي في اي حاجة في الحياة عادي علشان لو فيه حاجة احسن من حاجة طبيعي جدا متبقاش موجودة ومحدش هيستخدمها فكل واحدة فيها ميزة عن الثاني
بيفرقوا ايه بقي عن بعض فيه واحدة فيها سيكيوريتي عالي وفي واحدة اسرع وفي واحدة اسهل بس كل الكلام ده ميفرقش معانا الكلام ده يفرق مع الشخص الي متعلم الاربعة اصلا وعايز يعمل بروجيكت لنفسه فهنا هيختار علي حسب نوع البروجيكت
اما احنا بقي بيفرق معانا ايه, بيفرق معانا الشركات بتطلب ايه ؟ ,فهنا اكتر الشركات في مصر بتطلب المسار الاول.
بس لو انت عندك النية انك تبقي full-stack فهنا انت مش هتتعلم لغتين الي هم js و php كتير فهنا انت هتختار المسار الثاني علشان هو بردة مستخدم لغة js فهتتعلمها هي بس فالموضوع هيبقي اسهل واسرع.
طب بالنسبة للمسار الثالث والرابع, دول مشهورين اكتر بره بس لو انت هتشتغل في بروجيكت بنفسك ولوحدك فعادي اختار اي حاجة مش مهم يعني.
في شوية حاجات بقي لازم تتعملهم حتي لو انت فرونت او باك وهم
- command line
- git
- json
- ajax
الكوماند لاين ده الي بيخليك تتحكم بالكمبيوتر منغير gui بتاعه والي هيخليك توفر وقت كتير اوي
اما الجيت ده الي بيخليك ترفع ملفات الكود بتاعك في اي حته بتدعمه زي github
اما بقي json و ajax ده حاجات لنقل البيانات مش مهم تشغل بيها دماغك دلوقتي
------------------
## رود ماب التطبيقات
التطبيقات بقي بتنقسم ل native و cross plateform ايه الفرق
ال native هو انك تعمل برنامج لنظام تشغيل معين يعني تعمل برنامج للاندرويد والبرنامج ده مش هيشتغل علي ios والعكس
اما ال cross plateform هو برنامج بيشتغل علي الاثنين
وطبعا انت بتختار واحدة فيهم بس
هنبدأ بال native وده انك تكتب برنامج مخصص لنظام تشغيل معين وده بينقسم لاندرويد و ios
في الاندرويد في لغات كتير ممكن تتعلم واحدة منهم اشهرهم kotlin و java و go, الكوتلين هي اشهر واحدة فيهم وقبل متقول هي لغة واحدة بس وده كده سهلة لا برده هتتعلم فيها oop و json و database
ولل ios هتتعلم swift او objective-c وبرده نفس الحاجات الزيادة الي في الاندرويد
في بقي ال cross plateform
وهني في مسارين ممكن تاخد dart و flutter او تاخد js و react native
* انا مش متخصص في الابليكاشنز علشان كده ممكن المعلومات ده تكون ناقصة فانت كملها بقي بالسيرش
------------------
## النهاية
في النهاية كده في حاجتين عايزك تفضل فاكرهم طول الوقت وهم
Always Search
Keep Learning
------------------
وسلام !