أهلاً بكم في مقال جديد. أنا مهندس عبد الرحمن، مهندس برمجيات، وفي مقال اليوم سنتحدث عن أهم الأساسيات التي يحتاجها أي مهندس برمجيات في بداية مسيرته في مجال هندسة البرمجيات. في هذا المقال، سأنقل لكم خبرتي خلال السنوات التسع الماضية في شركات برمجة في مصر والسعودية وألمانيا وأمريكا، بالإضافة إلى خبرتي من خلال منحة وزارة الاتصالات (ITI)، وخبرتي في العمل الحر على مواقع العمل الحر من عام 2017 حتى 2025.
لذا، أريدك أن تجهز فنجان قهوة بسيط وورقة وقلم، لأنني سأخبرك بتفاصيل كثيرة جدًا غالبًا ما يقدمها الناس كقشور أو معلومات سطحية، ولا يعطونك التفاصيل الكاملة. إذا كنت مبتدئًا في البرمجة أو حتى لو كان مستواك متقدمًا، فإن كل هذا الكلام لا يُقال لك عادةً. لقد جمعته لأقوله لك في هذا المقال وأنقل لك خبرتي خلال السنوات التسع الماضية بمصداقية.
أهمية الأساسيات في هندسة البرمجيات
لنبدأ مقال اليوم، ولنتحدث ببساطة عن الأشياء التي يجب عليك تجهيزها لكي تعمل في شركات البرمجة، وما هي الأمور التي يجب أن تعرفها في بداية طريقك في البرمجة.
لكي يبدأ أي مهندس برمجيات مساره أو يصبح مهندس برمجيات، لا بد أن يبدأ بأساسيات مهمة جدًا. الكثير من الناس على منصات مختلفة يبدأون بإعطائك معلومات سطحية، أي الطبقة الخارجية فقط، دون الخوض في التفاصيل المهمة التي يجب أن تعرفها لكي تعمل في شركات كبرى أو شركات عالمية تمنحك راتبًا مناسبًا، أو حتى لتعرف كيف تعمل في السوق وتستمر في هذا المجال. هذا المجال قد يكون صعبًا بعض الشيء مقارنة بالمجالات الأخرى، ومن يقول لك غير ذلك فهو يخدعك.
لنتحدث الآن في التفاصيل الأساسية التي تحتاج إلى معرفتها لتصبح مهندس برمجيات ناجحًا وتعرف التفاصيل المخفية عنك والتي لا يذكرها الكثيرون.
خارطة الطريق لتأسيس نفسك بشكل صحيح
أول تفصيلة هي أن تتعلم بشكل صحيح. وسأشرح لك هذه النقطة في عدة خطوات، لذا جهز الورقة والقلم لتكتبها ورائي وتذاكرها لاحقًا. إذا كنت مبتدئًا في البرمجة ولا تملك أي خبرة، فأنصحك بأمور لم ينصحني بها أحد، وهي أن تبدأ بتعلم الأساسيات أولاً.
1. نظم التشغيل (Operating Systems)
أول شيء أساسي يجب أن تتعلمه هو نظم التشغيل لتعرف الأنظمة التي تعمل عليها، سواء كانت ويندوز، ماك، أو غيرها. دراسة نظم التشغيل لا تشمل الجانب البرمجي فقط، بل تتضمن أيضًا أجزاءً متعلقة بالعتاد (Hardware). من الطبيعي وأنت تبني لنفسك عقلية معينة في مجال البرمجة أن تتعلم عن نظم التشغيل وتعرف مكونات الجهاز الذي تعمل عليه من ناحية العتاد.
- تعرف على: ما هي ذاكرة الوصول العشوائي (RAM)؟ ما هي ذاكرة القراءة فقط (ROM)؟ كيف يتم التخزين في الذاكرة؟ ما الفرق بين الذاكرة المؤقتة والذاكرة الدائمة؟ كل هذه الأمور مهمة جدًا ويندرج كل ذلك تحت دراسة نظم التشغيل. ركز عليها لأنها مهمة حقًا.
2. الشبكات (Networking)
ثاني جزئية يجب أن تعرفها وتهتم بها هي الشبكات. تدخل الشبكات في كل مجالات البرمجة، واليوم لا توجد شركة برمجة أو أي منشأة أو مصنع ليس لديه شبكة يعمل عليها. لذا، من الطبيعي أن تذاكر الشبكات وتعرف عن:
- مصطلحات هامة: IP, DNS, DNS Server, WAN, LAN. كل هذه التفاصيل موجودة في مجال الشبكات. الشبكات ليست مجرد اسم، بل هي معرفة تبني لك قيمة فعالة في مجال هندسة البرمجيات وتُستخدم في الشركات بشكل كبير.
3. اختيار لغة البرمجة التأسيسية
ثالث جزئية هي عند بدايتك في البرمجة، اختر لغة برمجة تؤسسك بشكل صحيح. لا تذهب للغات البسيطة والسهلة معتقدًا أنك ستنجح في البرمجة بهذه الطريقة. لا شيء يأتي بسهولة، ولكي لا أكذب عليكم، أي شخص يقول لك ابدأ بالسهل، سيتعبك هذا لاحقًا. من يتعب في البداية، يرتاح في النهاية، ومن يستسهل في البداية، يتعب جدًا لاحقًا. قس على ذلك صعود السلم؛ لن تصعد الدرجة السادسة قبل الأولى والثانية والثالثة. التدرج سنة كونية، فامشِ في هذا التدرج.
اختر لغة تؤسسك بشكل صحيح مثل C و C++. أعرف أن الكثيرين سيعلقون: “لماذا نبدأ بلغة C الصعبة؟ يمكننا البدء بـ Python”. دعني أقول لك إن لغة C مهمة جدًا لأنها تفتح عقلك وتبني لك عقلية برمجية فعالة. والسبب هو أن لغة C لا تحتوي على البرمجة كائنية التوجه (OOP) بشكل مباشر، لكنها تفهمك الهيكل (Struct) الذي بنيت عليه لغات أخرى مثل C++ والبرمجة كائنية التوجه فيها.
ابدأ بلغة C، تعلم هياكلها، وافهم كيف تعمل. بعد ذلك، ابدأ في تعلم C++.
4. لغة C++ والبرمجة كائنية التوجه (OOP)
رابع جزئية هي C++. بعد أن تذاكر C، ابدأ في C++ وافهم البرمجة كائنية التوجه (Object-Oriented Programming) من خلالها.
5. هياكل البيانات (Data Structures)
خامس جزئية، بعد أن تذاكر C و C++، هي أن تبدأ في هياكل البيانات. أعرف أن الكثيرين سيقولون إن البدء بها كخطوة خامسة سيكون صعبًا. هياكل البيانات ليست صعبة. لماذا طلبت منك في بداية المقال أن تجهز ورقة وقلمًا؟ ليس فقط لتكتب الخطوات، بل لتتعلم كيف تعمل بالورقة والقلم قبل كتابة أي سطر برمجي. عندما تذاكر بالورقة والقلم، سيفهم عقلك ويحفظ بالخرائط الذهنية التي سترسمها بيدك.
هياكل البيانات هي ببساطة الطريقة التي تُبنى بها البيانات في الشركات. تخيل أن لديك مكتبة وتريد ترتيب الكتب فيها. إذا وضعتها بشكل عشوائي دون ترتيب أبجدي (من الألف إلى الياء)، ستحتار لاحقًا عند البحث عن كتاب معين أو ترتيب بياناتك. لحل هذه المشاكل، تأتي هياكل البيانات لتهيكل لك بياناتك بشكل فعال.
ستتعرف على أنواع مختلفة من هياكل البيانات:
- هياكل البيانات الخطية (Linear Data Structures): حيث يتم تخزين البيانات بشكل خطي.
- هياكل البيانات غير الخطية (Non-Linear Data Structures): حيث يتم تخزين البيانات بشكل غير خطي، مثل الرسوم البيانية (Graphs).
6. الخوارزميات (Algorithms)
الخطوة التالية هي الخوارزميات. ذاكر الخوارزميات لأنها خطوة مهمة جدًا. تساعدك الخوارزميات على تنفيذ كل العمليات التي يمكنك تخيلها وتضع لك خطوات واضحة لحل أي مشكلة. تُستخدم الخوارزميات لتطبيق عمليات على هياكل البيانات.
- أمثلة: بعد بناء هيكل بيانات معين، يمكنك استخدام خوارزميات مثل
Merge Sort
أوBubble Sort
لترتيبه. هياكل البيانات والخوارزميات عاملان قويان ومتماسكان معًا.
مثال عملي: لنفترض أنك تعلمت البرمجة وقمت بمقابلة في بنك. وطلب منك مسؤول التوظيف تصميم نظام للأولوية، حيث أول شخص يأتي إلى البنك هو أول شخص يتم خدمته. باستخدام معرفتك بهياكل البيانات والخوارزميات، ستقول له: “لدينا طرق كثيرة في هياكل البيانات، وباستخدام الخوارزميات سأحل لك هذه المشكلة”. ستفكر وتجد أنك تحتاج إلى نظام First-In, First-Out (FIFO)، وأنسب هيكل بيانات لهذا هو الطابور (Queue).
7. حل المشكلات (Problem Solving)
بعد دراسة كل ما سبق، ابدأ في حل المشكلات. هذه الجزئية مهمة جدًا لأنها تنشط عقلك وتدربك على كيفية حل المشاكل وتطبيق ما تعلمته من أكواد. ركز على حل المشكلات باستخدام C و C++ لأنهما يؤسسانك بشكل صحيح.
ملخص خارطة الطريق:
- نظم التشغيل (Operating Systems)
- الشبكات (Networking)
- لغة C
- لغة C++
- هياكل البيانات (Data Structures)
- الخوارزميات (Algorithms)
- حل المشكلات (Problem Solving)
اختيار مسار التخصص
بعد إتقان الأساسيات، تأتي خطوة مهمة وهي اختيار مسار للتخصص والعمل به في السوق.
-
تطوير الواجهات الأمامية (Frontend): تتعلم فيه
HTML
لهيكلة الموقع،CSS
لتنسيقه، وJavaScript
لبرمجته. ستجد تعلم JavaScript سهلاً لأنك فهمت أن كل لغات البرمجة تشترك في نفس المفاهيم الأساسية وتختلف فقط في طريقة الكتابة (Syntax). بعد ذلك، تتعلمES6
وأطر عمل مثلReact
،Angular
، أوVue
. نصيحة: مع كل تقنية تتعلمها، قم ببناء مشروعين وارفعهم على حسابك فيGitHub
بعد تعلمGit
كنظام للتحكم في الإصدارات. -
تطوير الواجهات الخلفية (Backend): تختار لغة وتقنيات للعمل بها، مثل:
PHP
مع قاعدة بياناتMySQL
وإطار عملLaravel
.Python
معDjango
وقاعدة بياناتPostgreSQL
أوMongoDB
.C#
معASP.NET
وقاعدة بياناتSQL Server
. من المهم جدًا لمطور الواجهات الخلفية أن يكون لديه أساسيات قوية وأن يركز على دراسة قواعد البيانات (Databases) بعمق.
مواضيع متقدمة لجميع المسارات
سواء كنت مطور واجهات أمامية أو خلفية، هناك مفاهيم متقدمة ستنقلك إلى مستوى آخر:
- هيكليات البرمجيات (Software Architectures):
تعلم عن
MVC (Model-View-Controller)
،HMVC
، وMVVM
. هذه هي الهيكليات التي تُبنى عليها معظم أطر العمل.- Model: الجزء المرتبط بقاعدة البيانات.
- View: الجزء الذي يراه المستخدم.
- Controller: منطق العمليات في الخلفية الذي لا يراه المستخدم.
-
مبادئ SOLID: هي خمسة مبادئ أساسية في البرمجة كائنية التوجه تجعل الكود قابلاً للصيانة والتوسعة. عند التقديم لأي شركة، سيسألونك عنها.
-
أنماط التصميم (Design Patterns): اقرأ وافهم عن أنماط التصميم. لا تتعمق كثيرًا في البداية، ولكن كوّن فكرة عنها.
- الكود النظيف (Clean Code): حاول أن تفهم مبادئ الكود النظيف. ابحث عن شروحات مبسطة بدلاً من قراءة الكتب مباشرة في البداية.
مسارات أخرى
-
تطوير تطبيقات أندرويد (Android Native): ادرس الأساسيات، ثم تعلم
Java
أوKotlin
،XML
، واعمل علىAndroid Studio
. افهم أيضًا عن هيكليات مثلMVVM
ومبادئSOLID
. -
تطوير تطبيقات iOS: ادرس الأساسيات، ثم تعلم
Swift
أوObjective-C
، واستخدمXcode
. -
أنظمة تخطيط موارد المؤسسات (ERP Systems): مثل
SAP
أوOracle
. تعلم لغة البرمجة الخاصة بالنظام والبرمجة كائنية التوجه المتعلقة به. -
تطوير الألعاب (Game Development): تعلم عن محركات مثل
Unreal Engine
أوUnity
. -
الذكاء الاصطناعي (AI): تعلم عن الشبكات العصبية (Neural Networks)، تعلم الآلة (Machine Learning)، والتعلم العميق (Deep Learning).
أهمية الرياضيات والفيزياء
لكي تتميز حقًا، خاصة في مجالات مثل الذكاء الاصطناعي، تحتاج إلى معرفة بـ:
- الرياضيات المتقطعة (Discrete Mathematics)
- الإحصاء (Statistics)
- الفيزياء (Physics)
هذه المواد تُدرس في كليات علوم الحاسب لأنها مهمة جدًا لأي مهندس برمجيات. من يقول لك غير ذلك فهو لا يريدك أن تتعلم بشكل صحيح. هذه المعرفة ستفيدك جدًا في مسارات مثل علم البيانات (Data Science) أو تحليل البيانات.
خلاصة تجربتي الشخصية
في عام 2017، عندما بدأت، كنت قد بدأت بشكل خاطئ دون التركيز على الأساسيات. بعد ستة أشهر، عملت في شركة في الصين عن بعد، واكتشفت أنهم يركزون بشكل كبير على هياكل البيانات، الخوارزميات، وحل المشكلات، وهي أمور لم أكن قد ذاكرتها جيدًا. شعرت أنني أكتب كودًا فقط دون فهم عميق.
بعد ذلك، عملت في مصر كمطور ويب متكامل (Full-Stack)، ولاحظت نفس التركيز على الأساسيات. عند التقديم للشركات، وجدت أنهم يركزون على شيئين:
- مشاريعك على GitHub: ليروا مستوى الكود، وهل هو منظم ويتبع المبادئ الصحيحة مثل
SOLID
وClean Code
. - اختبارات حل المشكلات: يطلبون منك حل مسائل برمجية.
قدمت على شركة مايكروسوفت عدة مرات. في المرات الأولى، لم أكن قويًا بما فيه الكفاية في حل المشكلات. لذا، قررت أن أطور من نفسي. التحقت بمنحة من وزارة الاتصالات (ITI) تركز على هياكل البيانات، الخوارزميات، C، و C++. هذا أكد لي أهمية هذه الأساسيات. بعد إنهاء المنحة، وتعلّم المزيد عن هندسة البرمجيات، وصلت إلى مستوى أهلني للعمل كمهندس DevOps في شركة في أمريكا، ثم كمهندس برمجيات في السعودية متخصص في أنظمة ERP.
ما مكنني من التنقل بين هذه المسارات المختلفة والنجاح فيها هو الأساس القوي الذي بنيته. عندما تبني عمارة على أساس قوي، يمكنك أن ترتفع بها دون مشاكل.
نصائح أخيرة
- لا تتوقف عن التعلم: بعد إتقان الأساسيات واختيار مسار، تعلم المواضيع المتقدمة التي ذكرتها.
- قدم على وظائف: لا تنتظر حتى تشعر أنك مستعد 100%. قدم على وظائف وأنت تتعلم لتعرف متطلبات السوق وتكتسب خبرة من المقابلات.
- العمل الحر (Freelancing): حاول العمل كمستقل. هذا سيوفر لك دخلاً يساعدك على تطوير نفسك وشراء معدات أفضل.
- ابدأ بوظيفة مبتدئ (Junior): إذا لم تنجح في العمل الحر في البداية، انضم إلى شركة كمبتدئ. ستتعلم الكثير من العمل مع فريق وتحت إشراف من هم أكثر خبرة.
الأساسيات هي كل شيء. هذا ما سيمكنك من الحصول على وظيفة، والترقي، والوصول إلى مناصب عليا. أتمنى أن يكون هذا المقال قد أفادكم.