مرحبًا بالجميع. أعمل في مجال البرمجة منذ ثماني سنوات. أنا صوفيا، مهندسة برمجيات حاليًا في أمازون، وقبل ذلك عملت لفترة وجيزة في قطاع التكنولوجيا المالية ودرست علوم الحاسوب في الجامعة. عند استعراض رحلتي، أجد أن هناك أمورًا أحسنت فيها منذ البداية، وأخرى تمنيت لو فعلتها بشكل مختلف. هذا المقال هو الدليل الأمثل الذي كنت أتمنى الحصول عليه عندما بدأت تعلم البرمجة.
يحتوي هذا المقال على نهج مفصل خطوة بخطوة، وموارد مفيدة، وأمثلة لمشاريع تساعد على صقل المهارات، بالإضافة إلى العقلية الصحيحة اللازمة للبرمجة. ستجد هنا كل ما تحتاجه للتحضير للمقابلات الوظيفية، والمهارات الأخرى التي يجب تطويرها إلى جانب البرمجة للنجاح كمهندس برمجيات.
الخطوة الأولى: فهم الأساسيات
عادةً ما تُعرض عليك مشكلة تتطلب إيجاد نتيجة بناءً على مجموعة من المدخلات. دورك كمبرمج هو تحديد سلسلة التعليمات التي يجب على الجهاز تنفيذها لتحقيق هذا الهدف. البرمجة هي عملية كتابة هذه التعليمات باتباع قواعد صياغة محددة. لكل لغة برمجة قواعدها الخاصة، لكنها جميعًا تشترك في مفاهيم أساسية واحدة، وهي:
- المتغيرات (Variables)
- أنواع البيانات (Data Types)
- الحلقات التكرارية (Loops)
- الجمل الشرطية (If Statements)
- الدوال (Functions)
كخطوة أولى، يجب عليك فهم هذه المفاهيم والتعود عليها. أوصي باختيار لغة برمجة واحدة والتركيز عليها فقط. هناك العديد من اللغات التي ربما سمعت بها، مثل JavaScript، TypeScript، C++، Java، و Python.
ملاحظة: تُعتبر Python اللغة الأكثر توصية للمبتدئين، لأنها بسيطة وأقل تعقيدًا في الكتابة مقارنة بلغات أخرى مثل Java.
بعد اختيار لغة البرمجة المفضلة لديك، الخطوة التالية هي البدء في حل المشكلات البرمجية. هناك منصتان يمكنني التوصية بهما:
- Codecademy
- freeCodeCamp
عندما تشعر بالثقة في حل المشكلات البرمجية، تكون الخطوة التالية هي تعلم البرمجة كائنية التوجه (Object-Oriented Programming) وبعض مفاهيمها مثل الفئات (Classes). على الرغم من أن منصات مثل Codecademy ممتازة للبداية، من الجيد أيضًا تعلم كيفية كتابة وتشغيل البرامج على حاسوبك المحمول.
في هذه المرحلة، لديك المهارات الأساسية للبدء في كتابة بعض البرامج البسيطة. من الأمثلة على المشاريع الجيدة للبدء بها:
- آلة حاسبة (Calculator)
- لعبة إكس-أو (Tic-Tac-Toe)
الخطوة الثانية: الخوارزميات وهياكل البيانات
بعد اكتساب المهارات الأساسية، من الجيد تعلم المزيد عن الخوارزميات (Algorithms) وهياكل البيانات (Data Structures). هناك العديد من الموارد المتاحة عبر الإنترنت على منصات مثل Coursera، Udemy، أو ببساطة YouTube. لقد تابعت شخصيًا دورة تدريبية على Coursera كانت رائعة جدًا.
الهدف هنا ليس تعلم كل شيء، ولا ينبغي عليك فعل ذلك. أقترح البدء بـ المصفوفات (Arrays) وجداول التجزئة (Hashmaps)، فهما من أكثر هياكل البيانات استخدامًا. الهدف الحقيقي هو مساعدتك على تعلم أدوات لحل تحديات برمجية أكبر.
الخطوة الثالثة: بنية الأنظمة وتصميمها
والآن نأتي إلى الجزء الممتع: تعلم بنية الأنظمة (Architecture) أو تصميم الأنظمة (System Design). أبسط بنية أساسية تتكون من:
- العميل (Client)
- الخادم (Server)
- قاعدة البيانات (Database)
لنفكر في موقع ويب يتيح للمستخدمين إنشاء وحفظ المستندات.
- العميل: يشير إلى التطبيق الذي يواجه المستخدم، ويوفر الواجهة التي يمكن للمستخدمين من خلالها إنشاء حساب وتسجيل الدخول وإدارة ملاحظاتهم.
- قاعدة البيانات: تعمل كوحدة تخزين لحفظ هذه المستندات.
- الخادم: هو مكون النظام المسؤول عن استقبال طلبات القراءة والكتابة من العميل، والوصول في النهاية إلى قاعدة البيانات لتلبية هذه الطلبات.
هناك ثلاثة مصطلحات شائعة جدًا في وصف وظائف مهندسي البرمجيات: الواجهة الأمامية (Front-end)، والواجهة الخلفية (Back-end)، والمطور الشامل (Full-stack).
- مهندس الواجهة الأمامية: متخصص في الجزء الذي يواجهه العميل من الخدمة. على سبيل المثال، هم من يقومون بتنفيذ تصميمات مواقع الويب، ويكونون خبراء في استخدام JavaScript، TypeScript، CSS، و HTML.
- مهندس الواجهة الخلفية: عادة ما يكون مسؤولاً عن جزء الخدمة الذي يتعامل مع الطلبات وقواعد البيانات. اللغات المستخدمة هنا تشمل Java و Python.
- المطور الشامل: هو من يستطيع القيام بكلا الأمرين، بالإضافة إلى تطوير تطبيقات الجوال (iOS أو Android).
مفهوم آخر مثير للاهتمام في هذه المرحلة هو واجهات برمجة التطبيقات (APIs)، وهي الطريقة التي تتواصل بها الخدمات مع بعضها البعض.
توصية: تصميم الأنظمة هو المجال الذي تكمن فيه الصعوبة الحقيقية عند العمل كمهندس برمجيات. كتاب رائع أوصي به هو “Designing Data-Intensive Applications” لمؤلفه مارتن كليبمان. هذا هو الكتاب الذي تحتاجه حقًا لمعرفة المزيد عن كيفية تصميم الأنظمة، ومكوناتها المختلفة، وأنواع قواعد البيانات الموجودة، وغير ذلك الكثير.
الخطوة الرابعة: بناء المشاريع الشخصية
الآن بعد أن أصبحت لديك فكرة عن كيفية تصميم وتطوير تطبيقات الويب، قد ترغب في بدء مشروعك الشخصي. هنا ستحتاج إلى تعلم أطر العمل (Frameworks). أشهرها:
- للواجهات الأمامية: React و Angular.
- للواجهات الخلفية: Django و Spring.
- لتطوير تطبيقات الجوال: React Native يعد نقطة انطلاق جيدة.
قبل البدء في تنفيذ مشاريع أكثر تعقيدًا، هناك أداتان يجب أن تتعلمهما:
- أداة التحكم في الإصدار (Version Control): تساعدك على تتبع وإدارة شيفرة المصدر الخاصة بك. أشهرها Git، وبالتالي تحتاج أيضًا إلى تعلم GitHub.
- بيئة التطوير المتكاملة (IDE): وهي تطبيق برمجي يساعدك على تطوير شيفرتك بكفاءة أكبر. من أشهرها VS Code و IntelliJ.
تُعد الهاكاثونات (Hackathons) فرصة رائعة لبدء مشروعك الخاص. هناك فعاليات مختلفة في جميع أنحاء العالم، سواء كانت حضورية أو عبر الإنترنت. أوصي بشدة بالتحقق من موقع Major League Hacking للعثور على فعالية مناسبة لك. سيساعدك هذا أيضًا على التواصل مع الآخرين والتعلم منهم، وهو أمر مهم جدًا في هذا المجال.
بعض الأمثلة على المشاريع الشخصية:
- إنشاء موقعك الشخصي: طريقة رائعة لممارسة مهاراتك، وفي النهاية ستحصل على شيء يمكنك عرضه على الآخرين.
- تطبيق قائمة مهام (To-Do List App).
- تطبيق للطقس (Weather App) يتصل بواجهة برمجة تطبيقات عامة.
العقلية الصحيحة للمبرمج
نأمل في هذه المرحلة أن تكون لديك كل المعرفة والأدوات اللازمة للنمو والتقدم كمبرمج. الشيء التالي الذي سنتحدث عنه هو العقلية الصحيحة التي يجب أن تتمتع بها:
- كن متواضعًا ومنفتحًا للتعلم وتلقي الملاحظات: هناك الكثير لتتعلمه، وتلقي الملاحظات هو أحد الأشياء التي يمكن أن تساعدك على تطوير مهاراتك والتعلم من أخطائك.
- لا تقم بنسخ الشيفرة أبدًا إلا إذا كنت تعرف ما تفعله بالضبط: درب نفسك على التفكير في الحل أولاً قبل البحث عنه. سيساعدك هذا على تطوير مهارات حل المشكلات، وهي مهمة جدًا في حياتك المهنية لاحقًا.
- استمتع بالرحلة: تستغرق البرمجة الكثير من الوقت والتفاني، لذلك من الأفضل أن تجد المتعة والرضا في المغامرة نفسها.
التحضير للمقابلات الوظيفية
الآن بعد أن أصبحت لديك خبرة قوية في البرمجة، وبنيت مجموعة من المشاريع المثيرة للاهتمام وأضفتها إلى سيرتك الذاتية، قد تبدأ في إجراء مقابلات للحصول على تدريب أو وظيفة أولى. هناك نوعان من الشركات من حيث نهج المقابلات:
1. النهج غير المعتمد على لغة محددة (Language-Agnostic): هذه الشركات منفتحة لتوظيف مطورين يتقنون لغات برمجة مختلفة. لهذا السبب، في مقابلاتهم، عادة ما تختار اللغة التي ترغب في البرمجة بها. الشركات الشهيرة التي تتبع هذا النهج هي شركات التكنولوجيا الكبرى (FAANG). يتطلب التحضير لمقابلاتهم إتقان موضوعين:
- الخوارزميات وهياكل البيانات: أوصي بشدة بكتاب “Cracking the Coding Interview”. شخصيًا، هذا هو الكتاب الوحيد الذي درست منه هذا الموضوع. إتقان التمارين فيه سيساعدك على التحضير.
- تصميم الأنظمة: سأوصي مرة أخرى بكتاب “Designing Data-Intensive Applications”. أعتقد أنه الكتاب المثالي للتحضير لهذه المقابلات. إذا لم يكن لديك الكثير من الوقت، فهناك أيضًا كتاب “System Design Interview” وهو جيد جدًا أيضًا.
2. النهج المعتمد على لغة محددة (Language-Specific): تبحث هذه الشركات عن مطورين يمتلكون مهارات محددة ويتقنون لغة أو إطار عمل معين. هنا، يجب أن تكون متقنًا لتلك المهارات وقادرًا على الإجابة على أي نوع من الأسئلة التي قد تُطرح عليك.
مهارات تكتسبها أثناء العمل
أخيرًا، أردت أن أتحدث عن بعض المهارات المحددة التي تطورها فقط عندما تعمل كمهندس برمجيات في شركة.
- فهم الأنظمة المعقدة: في الشركات، سترى عمليًا البنى المعقدة وتعمل عليها. إحدى المهارات التي تحتاج إلى تطويرها هي تعلم كيفية فهم هذه الأنظمة والتنقل عبر تعقيداتها.
- التطوير المستمر والتكامل المستمر (CI/CD): تسعى جميع الشركات إلى إنجاز المزيد من الشيفرة وإصدارها بأكبر قدر ممكن من الكفاءة. لذا، فإن فهم هذين المفهومين مهم جدًا.
- المراقبة والأداء (Monitoring and Performance): هنا ستتعلم كيفية تتبع المقاييس المهمة لخدماتك وكيفية مراقبة حركة المرور عليها بكفاءة.
- كتابة التوثيق (Documentation): كمطور برمجيات يعمل على العديد من الخدمات المختلفة، يجب أن تكون قادرًا على كتابة وثائق واضحة وموجزة لنفسك وللآخرين.
وهذا كل شيء. آمل أن تكونوا قد استمتعتم بهذا المقال ووجدتموه مفيدًا.