فى طالب فى إعدادى هندسة سألنى أنصحه بإيه لو عايز يشتغل فى مجال برمجة السوفتوير والذكاء الإصطناعى. فبدل ما أرد عليه فى الإنبوكس ، قررت انشر إجابتى ليستفيد الجميع.
أنا مش مبرمج. أنا درست برمجة فى حاسبات ومعلومات جامعة القاهرة ، لكن عمرى ما اشتغلت كمبرمج من ساعة ما اتخرجت. حاليا بشتغل حاجة اسمها مدير تطوير منتجات Product Manager شغلتى إنى أشتغل مع البرمجين والمصممين على تحسين السوفتوير بتاع شركتنا. وبالتالى نصيحتى قد تكون منقوصة لكن مش هتضر.
أولا الميزة الأولى فى البرمجة ، وفى صناعة السوفتوير بشكل عام ، إنك مش محتاج إذن حد عشان تشتغل فيها. ودة عكس مهن تانية زى الطب والهندسة المدنية والمحاماة اللى بيحتاجو دراسة معينة وتصاريح عشان تمتهنهم ، ودة بيخلى دخولهم والإستقلالية فيهم مش سهلة.
الميزة التانية (واللى أحيانا بتكون عيب) إن المجال بيتطور بسرعة مرعبة ، ميزة دة إن عمرك ما هتزهق ودايما فى جديد تتعلمه ، عيبه إنك ممكن تبقى خارج السياق بسرعة جدا لو ماطورتش نفسك أو ريحت شوية.
الميزة التالتة إن حاليا الطلب عالمبرمجين أعلى بكتير من العرض. دة بيخلى تنافس شديد بين الشركات لإجتذاب المرمجين المتميزين والتنافس دة أحيانا بيمتد للدول زى اللى بتعمل أنواع تأشيرات خاصة لذوى المهارات المطلوبة زى المبرمجين ، وأحيانا بتدى خصومات ضريبية للأفراد عشان ينقلو للبلد.
المميزات دى لا تعنى إن مفيش عيوب ، لكنها تعنى إن الفرصة موجودة وإن أى حد ممكن يقتنصها. ننتقل بقى لمرحلة الإقتناص...
مفيش مسار ثابت ومحدد لتعلم البرمجة ، دة بيعتمد على ظروفك ووقتك وخلفيتك التعليمية وسنك وعوامل تانية كتير ، لكن فى عوامل ونصايح ممكن نقول عليها مشتركة وتنطبق على أغلب الناس.
1) التجربة والفشل: التعلم عموما عبارة عن سلسلة من التجارب والفشل لحد ماتوصل للى إنت عايزه. فكر/ى فى الطفل اللى بيتعلم المشى بيقع كام مرة لحد ما يقدر يمشى. نفس الكلام ينطبق عاللى بيتعلم البرمجة. هيجرب حاجات كتير وهيفشل لحد مايعرف يتقنها. لازم تتقبل دة.
2) اللغة الإنجليزية: لازم تبقى جاهز إنك هتقرا وتتفرج على حاجات كتير باللغة الإنجليزية. ممكن تبدأ من محتوى عربى لكن أول ما تتزنق (ودة هيحصل كتير) لازم تعرف تدور وتقرا الإجابات اللى باللغة الإنجليزية. الخبر الحلو إن دلوقتى مصادر تعلم اللغة بقيت لا نهائية ، والموضوع مش مستحيل.
3) الإستمرارية: بردو دة بينطبق على تعلم أى حاجة ، لكن البرمجة بالذات بسبب التغير المستمر فى الصناعة ولأنك غالبا بتكون بتعمل حاجة جديدة عليك ، فلازم تصبر عشان تبقى شاطر.
طب أنا محتاج أتعلم إيه؟
1- مفاهيم Concepts: أزاى الكمبيوتر بيحول التعليمات للى إنت بتشوفه. إزاى تحول فكرة لخطوات الكمبيوتر يقدر ينفذها. إزاى البيانات بتتخزن فى البرنامج ، إزاى تحول تصميم موجود فى الواقع (زى العربية) لمدخلات فى البرنامج (رقمها ، السواق ، مكانها الحالى) زى أوبر.
1- مفاهيم Concepts: أزاى الكمبيوتر بيحول التعليمات للى إنت بتشوفه. إزاى تحول فكرة لخطوات الكمبيوتر يقدر ينفذها. إزاى البيانات بتتخزن فى البرنامج ، إزاى تحول تصميم موجود فى الواقع (زى العربية) لمدخلات فى البرنامج (رقمها ، السواق ، مكانها الحالى) زى أوبر.
2- خوارزميات Algorithms: ودة خطوات بتحل مشاكل معينة معروفة زى إزاى تعمل بحث بين ملايين البيانات ، أو إزاى ترتب مجموعة بيانات معينة ، أو لو هناخد مثال أوضح شوية ، إزاى أوبر بيحدد سعر الذروة؟ وإمتى يبدأ يرفع السعر وإمتى ينزله؟
3- لغات Programming Languages: المفاهيم والخوارزميات محتاج تطبقهم بإستخدام لغة برمجة. فى آلاف اللغات وكل لغة بتبقى مفيدة فى حالات معينة وبتشتغل على حاجات معينة. مثلا لو هتبدأ برمجة المواقع محتاج تعرف HTML, CSS, JavaScript. فى الواقع ممكن تبدأ بJavaScript ومنها تنطلق لحاجات تانية.
لو هتعمل تطبيقات للأندرويد فالأندرويد بيفهم لغة الJava ودى مختلفة عن الJavaScript. لو هتعمل تطبيقات للآيفون فاللغات هى Objective C, Swift.
موضوع اللغات دة عليه خناقات كتير وكل حد هينصحك بلغة شكل، نصيحتى إبدأ بأى واحدة وماتشتتش نفسك. مع ذلك فى 3 لغات شبه متفق على سهولة تعلمها للمبتدئين وهما JavaScript, Python, Ruby on Rails. ابدأ بواحدة منهم.
تبدأ/ى منين؟ فيه مواقع كتير ممكن تبدأ منها
1- codecademy.com رأيى تبدأ من هنا عشان تتعلم الأساسيات.
2- khanacademy.org
3- lynda.com
4- udacity.com يوداسيتى فى رأيى أفضلهم لكنه للأسف بفلوس.
1- codecademy.com رأيى تبدأ من هنا عشان تتعلم الأساسيات.
2- khanacademy.org
3- lynda.com
4- udacity.com يوداسيتى فى رأيى أفضلهم لكنه للأسف بفلوس.
5- كورس مقدمة البرمجة بتاع جامعة ستانفورد (رهيب ومجانى) youtube.com
6- موقع حسوب لو عايز حاجة بالعربى academy.hsoub.com
6- موقع حسوب لو عايز حاجة بالعربى academy.hsoub.com
نصيحتى تبدأ من نقطة واحدة وتحاول تعمل برنامج صغير. ممكن تبحث عن إزاى تعمل برنامج عالأندرويد فيه زرار واحد بيغير لونه لما تدوس عليه ، أو صفحة ويب مكتوب فيها شوية كلام...إلخ.
دور على مشرف Mentor يساعدك بإنه يديك حاجات تذاكرها ويراجع البرامج اللى بتكتبها. للأسف معنديش نصيحة عن إختيار مشرف كويس لأن المشرف يا هيظبطك يا هيسوحك.
سجل على موقع GitHub دة موقع ملايين المبرمجين بيحطو عليه الكود بتاع البرامج بتاعتهم ، انت كمان بعد شوية هتبدأ تحط برامجك هناك وتعدل برامج ناس تانية :)
حل مشاكل صغيرة بدون مقابل: اعمل موقع لحد من قرايبك بيساعده فى شغله ، ابنى مدونة خاصة بيك تنشر فيها كتاباتك وبرامجك ، اعملى تطبيق عالموبايل بيحل مشكلة بتضايقك...إلخ
لو البرمجة عجبتك وبقيت تعرف تعمل برامج ، هتلاقى نفسك لوحدك بتختار انت عايز تتخصص في إيه وإيه الحاجات اللى تتعلمها (ويب ، موبايل ، تحليل بيانات ، ذكاء أصطناعى...إلخ). المهم تبقى فاهم الConcepts وعارف أنهى Algorithms بتحل أنهى مشاكل وبتعرف تطبق دة بإستخدام إحدى اللغات.
أتمنى الثريد يكون مفيد وأتمنى التوفيق للجميع. عيد سعيد.
جاري تحميل الاقتراحات...