لماذا لا تزال لغة C++ ذات صلة وما الذي تغير في عام 2025؟
\n\nفي كل عام، يدفن البعض لغة C++. "معقدة جدًا"، "قديمة"، "لماذا نتعلمها إذا كان هناك Rust؟" — نسمع هذا. لكن في عام 2025، لا تزال C++ حية ومزدهرة. تعمل عليها محركات الألعاب (Unreal Engine)، والأنظمة المالية، والمتصفحات (Chrome, Firefox)، وقواعد البيانات (MongoDB, ClickHouse)، وحتى المركبات الفضائية التابعة لناسا.
\n\nلماذا؟ لأن C++ تقدم ما لا تقدمه اللغات الأخرى: التحكم الكامل في الذاكرة + التجريد دون تكاليف إضافية. إذا كنت بحاجة إلى استخراج 100% من أداء العتاد، فستختار C++.
\n\nلكن في عام 2025، لم تعد C++ كما كانت في عام 1998. ظهرت الوحدات (modules)، والمفاهيم (concepts)، والروتينات المشاركة (coroutines)، والنطاقات (ranges). يجب أن تأخذ خارطة طريق C++ 2025 هذه التغييرات في الاعتبار. لن نضيع الوقت على الممارسات القديمة — فقط ما هو مطلوب الآن.
\n\nالمرحلة 1: الأساسيات (الأسابيع 1–4)
\n\nلا يمكنك التقدم بدون أساس. لكننا سنتعلم بطريقة حديثة.
\n\nما يجب إتقانه
\n- \n
- القواعد الأساسية: المتغيرات، الأنواع، الحلقات، الشروط \n
- الدوال: التحميل الزائد، المراجع، الثبات (const)
- المؤشرات والمراجع — يجب فهمها جيدًا
- الفئات: المنشئات، المدمرات، this
- المتجهات والسلاسل النصية (std::vector, std::string)
مثال على الكود الذي يجب أن تكتبه في الأسبوع الأول:
\n\n#include <iostream>\n#include <vector>\n#include <string>\n\nvoid print_names(const std::vector<std::string>& names) {\n for (const auto& name : names) {\n std::cout << name << "\\n";\n }\n}\n\nint main() {\n std::vector<std::string> students = {"آنا", "إيفان", "ماريا"};\n print_names(students);\n return 0;\n}\n\n\nهام: لا تكتب using namespace std; في المشاريع الحقيقية — فهذا أسلوب سيء. تعوّد على std:: من اليوم الأول.
موارد المرحلة 1
\n- \n
- كتاب "Programming: Principles and Practice Using C++" (ستراوستروب) — أفضل بداية
- LearnCPP.com — دليل تفاعلي مجاني
- YouTube: The Cherno (سلسلة C++) — يشرح المؤشرات بشكل ممتاز
المرحلة 2: C++ المتقدم (الأسابيع 5–10)
\n\nهنا يبدأ السحر. تتوقف عن مجرد كتابة الكود وتبدأ في فهم كيفية عمل الذاكرة.
\n\nموضوعات للدراسة
\n- \n
- RAII (اكتساب الموارد هو التهيئة) — النمط الرئيسي في C++
- المؤشرات الذكية:
std::unique_ptr,std::shared_ptr,std::weak_ptr - دلالات النقل (Move semantics) و std::move
- التحميل الزائد للمشغلات
- الوراثة، الدوال الافتراضية، تعدد الأشكال
- الاستثناءات: try, catch, throw
مثال يوضح قوة دلالات النقل:
\n\n#include <iostream>\n#include <vector>\n#include <string>\n\nclass BigData {\npublic:\n BigData(size_t size) : data_(new int[size]), size_(size) {\n std::cout << "Constructor\\n";\n }\n \n // Move constructor\n BigData(BigData&& other) noexcept \n : data_(other.data_), size_(other.size_) {\n other.data_ = nullptr;\n other.size_ = 0;\n std::cout << "Move constructor\\n";\n }\n \n ~BigData() { delete[] data_; }\n \nprivate:\n int* data_;\n size_t size_;\n};\n\nint main() {\n std::vector<BigData> vec;\n vec.push_back(BigData(1000)); // Move, not copy!\n return 0;\n}\n\n\nنصيحة: لا تحاول حفظ كل شيء. ركز على RAII والمؤشرات الذكية — فهي تمثل 80% من النجاح في C++ الحديثة.
\n\nالمرحلة 3: C++ الحديث (C++17/20/23) — الأسابيع 11–16
\n\nهنا ننفصل عن C++98 وندخل إلى عام 2025. تعلم خارطة طريق C++ 2025 يجب أن يتضمن هذه الميزات.
\n\nما يجب إتقانه بالتأكيد
\n- \n
- auto
المدونات
توصيات الكتب
اقرأ أيضًا