يعد مجال البرمجة من اكثر المجالات التى يقبل الناس على تعلمها فى الأونة الأخيرة لذا فكرت أن نتشارك الصعوبات التى واجهت كل منا فى بداية الطريق و كيف تغلب عليها حتى يستفيد المبتدئين فى هذا المجال من تجارب من سبقوهم؟
ما الصعوبات التى واجهتك فى تعلم البرمجة؟
انا ابرمج منذ اكثر من 10 سنوات و الشيء الذي يواجه كل متعلم جديد هو الفكر البرمجي اكثر من اللغات و الخوارزميات نفسها.
الفكر البرمجي هو ان تعرف كيف تأخذ مشكلة او فكرة و تحولها الى كود.
لتطوير هذه المهارة عليك ان تعرف ان البرمجة هي مجرد لعبة الغاز
و كل لغز يتكون من قسمين الأول هو فهم المطلوب منك و هي المشكلة و القسم الثاني هو فهم قطع اللغز لكي ترتبها ليتكون لديك الحل.
فهم المشكلة بالبرمجة هو ان تستطيع ان تقسم المطلوب منك الى قطع اصغر و اصغر الى ان يكون كل قطعة شيء بسيط مثل عملية حسابية او إضهار شيء للشاشة.
اما القسم الثاني هو فهمك للغة البرمجية و تحويل هذه القطع الى كود
مثلا لديك موقع و تريد إضافة عداد كلما ضغطت الزر كلما ارتفع الرقم المعروض.
حسنا الطلوب واضح لنبدأ في تقسيمه.
تحتاج الى
متغير للإحتفاظ بالرقم
زر
عند الضعط علي الزر يقوم بزيادة متغير
عرض المتغير على الشاشة
حسنا الجزء الاول انتهى، الان الثاني لنختار الجافا سكربت (ريأكت) مثلا لحل المشكلة
تقوم تعريف متغير بالذاكرة
الان نقوم بكتابة زر
الان تقوم بإضافة الدالة للزر
و ثم اخيرا نقوم بعرضها
1. const [count, setCount] = React.useState(0) 2. <Button>Click Me<Button/> 3. <Button onClick={() => setCount(p => p + 1)}>Click Me<Button/> 4. <div>{count}<div/>
كل شيء و كل برنامج يقوم على هذه الطريقة احيانا يكون من الصعب تقسيم البرنامج الى قطع لانك لا تعرف البرنامج و لكن مع الاستمرارية و الممارسة تسقوم بتطوير هذه المهارة اما الثانية فهي سهلة فقط تستعمل اي لغة تريد، او حتي لغة لا تعرفها فقط تفتح ال Docs و تبحث عن القطع لتركيبها مثل Lego
عزيزى مصطفى،
ردك قيم جدا و يدل على معرفة بمجال البرمجة و انك درستها بشكل موسع لأنك تطرقت فى تعليقك إلى ما يختص به مطور البرمجيات او مهندس البرمجيات (software engineer )لأن تعريف المشكلة و تقسيمها و كتابة خطوات الحل هى وظيفة الsoftware engineer فى الأساس اما المبرمج فوظيفته الأساسية هى تحويل خطوات الحل التى كتبها مطور البرمجيات إلى لغة البرمجة المتخصص فيها. و فى احيان كثيرة و خصوصا فى وطننا العربى يقوم شخص واحد بالمهمتين معا و هذا ايضا لا ينفى ان كلا منهما يجب ان يكون على دراية إلى حد ما عن عمل الآخر حتى يتسنى لهم العمل سويا.
و هذا البوست يتحدث عن الأمر بإستفاضة
في هذا العصر و خاصة السوق لا يوجد فرق فعلي بين المبرمج و software engineer و المطور و coder كلها تعني نفس الشيء في عقل صاحب العمل.
و لكن برأيي ان software engineer يقوم بالاهتمام بالمشاريع الكبيرة من تصميم و وضع المعمارية اما المطور او المبرمج هو من يطبق هذه الخطة و لكن الاثنين يحتاجون الى الفكر البرمجي خاصة تحليل المشكلة فقط الاختلاف يكون بحجم المشكلة و القطع الصغيرة.
حاليا بالشركات من يقوم يتعريف المشكلة و وضع معمارية البرنامج هو tech lead او project manager و من يعملون تحته هم مطورين سواء مبرمجين او software engineer
قد تفكر يوما في إمتهان او الدخول الى عالم البرمجة لتكون انت ذلك الصديق، دعني اشرح لك بعض المشاكل و الصعوبات التي ستواجهها اثناء إمتهانك لمهنة البرمجة
- البرمجة امر صعب :
لا أحد يخبرك بهذه الحقيقة ، الكل يخبرك بأن البرمجة سهلة ما هي إلا حفظ أكواد عن ظهر قلب و إعادة إستدعاءها من أجل الإشتغال بها ، نعم ربما يمكننا ان نقول ذلك إذا ما تحدثنا عن الHTML ، إن كانت هي أصلا لغة برمجة من أساسه ، فكل من يريد ان يبدأ عالم البرمجة يبدأ بالHTML فيتعلم كيف يكتب كودا فالBody فيلقب نفسه بالمبرمج المحترف ، لا ألومه رغم ذلك ، عالم البرمجة صعب ، فالحاسوب لا يستقبل سوى رقمين 0 و 1 ، إما ان يفعل ، و إما ان لا يفعل ، فأن توصل له فكرة ان يفعل شيئ ما من خلال سيرورة من الأكواد لهو أمر جد صعب ، قد لا تجد هذه الصعوبة اثناء برمجتك لعبارة Hello World ، و ربما قد لا تجد هذه الصعوبة أيضا اثناء برمجتك لآلة حاسبة بسيطة تشتغل على الكونسول ، لكن صدقني ، ستجد هذه الصعوبة حتما عند برمجتك لبرنامج متكامل بكل حذافره ، او برمجتك لتطبيق كامل أيضا ، او موقع من الألف الى الياء . لذلك ، إن كنت مبرمجا جديدا في هذا المجال ، فعليك ان تدرك ان البرمجة تتطلب الذكاء قبل الحفظ ، اما ان كنت مبرمجا سابقا ، فأجزم انك واجهت العديد من الصعوبات أثناء صناعتك لبرنامج مصغر .
قلما نجد مبرمجا يكتب كودا مطولا ثم يقوم بتشغيله فيشتغل في الوهلة الأولى ، في الحقيقة ، نادرا ما نجد هذا الأمر ، فحتى المبرمجون المحترفون و المحنكون يحدث لهم ما يحدث لك ، المشكلة ليست في ان يظهر لك المشكل او الBug ، المشكل صديقي هو انك تكتب سطرين من الاكواد البرمجية ، و يظهر لك 5 أخطاء في الكود الخاص بك، المشكل الأخر أيضا صديقي المبرمج ، انك ستقضي 15 دقيقة في كتابة الأكواد ، و 5 ساعات في حل المشاكل ، بل العجيب و الغريب في الأمر صديقي ، قد تجد في الأخير ان سبب المشكل ما هو الا انك نسيت ان تقفل كود برمجي (;) ، بل حتى انه يمكنك فقط ان تقفل البرنامج و تذهب لتشرب كوبا من القهوة و تعيد تشغيل البرنامج و قد يشتغل معك ، مشاكل معقدة ، في الغالب انت لا تدري ماهية المشكل و ما سببه ، انت فقط تخمن هنا و هناك و تلقي بالأكواد ميمنة و ميسرة حتى يتم إصلاح المشكل ، حتى بدون أن تعلم كيف أصلحته او ما سبب المشكلة من أساسه ... مرحبا بك صديقي في عالم البرمجة.
عزيزتى امل
الصعوبات التى ذكرتها تكون عادة فى بداية التعلم و لكن بعد فترة من الممارسة تستطيعين التعرف على أماكن الخطأ بسهولة اكثر . يبدو لى أنك فى بداية طريقك لتعلم البرمجة لذا انصحك بألا تيئسين و تكملى طريقك بإصرار و أجعلى الأمر تحديا بالنسبة لك. فكلنا فى بداية دراستنا للبرمجة قد واجهتنا هذه الصعوبات و لكن بمرور للوقت اعدك ان الأمر سيصبح اكثر سهولة.
مرحباً،
برأيي أن أكبر مُشكلة يُواجهها المُتعلم الجديد أو المُبتدئ هي التشتت، فالمُبتدئ في بداية تعلمه للبرمجة او علوم الحاسوب يريد تعلم و الإلمام بكافة المجالات الموجودة : تعليم الآلة و ذكاء صناعي، أمن معلومات و إختراق أخلاقي، برمجة الألعاب، برمجة المواقع و التطبيقات، شبكات، برمجة الأنظمة المُدمجة، برمجة الروبوتات، أنظمة التشغيل، و غيرها العديد من المجالات و الإنسان بعقله و عُمره المحدود من سابع المُستحيلات أن يحترف كافة هذه المجالات، و هذه المُشكلة موجودة و يقع فيها العديد من الأشخاص و كلما تفطن الشخص لها في وقت أبكر كلما كان أفضل له لذلك أنصح أي شخص يريد الخوض في هذا المجال أن يُحدد غايته و هدفه الأساسي ماذا يُريد أن يُصبح و على هذا الأساس يُحدد طريقه لا مانع في أخذ فكرة مُسبقة أو نظرة أولية عن كافة المجالات الموجودة و ذلك بالإطلاع على بعض المقالات الموجودة على الإنترنت.
بعد تحديد المجال و الغاية الأساسية نأخذ فكرة عنه ياترى ماهي التقنيات و الأشياء أو الأدوات التي يجب أن أتعلمها لأصل إلى الهدف؟ و بالتالي ستجد العديد من التقنيات و الأدوات هل ستتعلمها كلها لا بطبيعة الحال عليك إختيار بعضها فقط فبعض التقنيات تُؤدي نفس الغرض لذلك فالتخصص ضرورة حتمية كلما وجدت أن المجال واسع إجعل لنفسك مجال أصغر داخل المجال الذي اخترته.
أنصحك بالإطلاع على هذا المقال:
بالتوفيق
اعتقد ان افضل علاج لمسألة التشتت هى وضع خطة عمل و جدول زمنى لتنفيذها و التركيز على تعلم لغة او تكنولوجيا واحدة فقط جديدة و إتقانها جيدا قبل البدء فى غيرها. أحيانا بعض التكنولوجيات تتداخل فنحتاج إلى ان نعيد زيارة ما تعلمناه من قبل أثناء تعلمنا شئ جديد و هذا امر محمود و شائع الحدوث.
وافضل شئ يجعلك تشعر بالإنجاز هو العمل على مشروع معين و إتقان كافة التكنولوجيات المستخدمة فيه و هذا الشعور سيساعدك على المضى قدما فى طريقك فى تعلم البرمجة.
إذا كنت تبحث عن خريطة طريق لتعلم شئ ما فيسعدنى مساعدتك و إرشادك إلى مصادر هامة.
تحياتى،
المشكلة التي تواجهه الجميع في البداية هي التسرع في التعلم فالكثير عندما يدخل مجال البرمجة يتسرع في التعلم ولا يعطي لكل لغة برمجة حقها فالتطبيق العملي والممارسة .
وأيضاً مشكلة النسيان أثناء التعلم فالمعظم متفهم أن لغة البرمجة تحفظ أكوادها ولكنها غير ذلك يجب فهمها والتطبيق عليها وفقط وسوف تنسى من اللغة بعض الاشياء وهذا حله البحث الكثير والتطبيق وسوف تحل هذه المشكلة .
وأيضاً توجهة الكثير مشكلة تعدد المجالات فالجميع يرى أن هذا هو الحل لتكن محترف ولكن هذا غير صحيح أنا أرى أن تحديد مجال مخصص والعمل عليه هذا هو طريق الاحتراف والعمل في أكبر الشركات .
هذه معظم مشاكل أي مبتدئ في دراسة البرمجة وهي بالفعل مشاكل طبيعية وحلها بسيط إن شاء الله .
واجهتني في البداية مشكلة تحديد المجال أصلًا، فالمجالات كثيرة جدًا، فكرت كثيرًا هل أريد أن أصبح Front-end مثلًا أم android developer، وكلما سمعت عن مجال أُعجب به حتى أصبت بالتشتت، الفكرة أنني فعلًا أحببت كل المجالات الخاصة بالبرمجة ولم أستطع الاختيار بينهم.
ولكن في النهاية ما حل لي الموضوع، هو أنني قررت أخذ وقفة مع نفسي لتحديد ماذا أريد، واستمررت لفترة معينة، كل يوم أشاهد فيديوهات يوتيوب وأقرأ عن كل مجال من المجالات التي احترت بينها، حتى توصلت للمجال الذي أريده فعلًا في النهاية.
بعدها واجهتني مشكلة التشتت في مصدر التعلم، وما أفادني في تلك الحالة هو أنني انضممت لمجموعات كثيرة على "فيسبوك" خاصة بالمبرمجين، فسهلت عليّ جدًا البحث عن أفضل المصادر عن طريق سؤال الخبراء في المجال.
والآن أنا مازلت أتعلم، والمشكلة التي تواجهني أحيانًا هي مشكلة الكسل للأسف، ولكن أعود لأحاول تنشيط نفسي بتذكر هدفي.
التعليقات