مقدمة: لماذا بعض كتب C++ تعلم والبعض الآخر تشوه؟
\nإذا كنت قد بحثت يومًا عن أي كتاب تبدأ به تعلم C++، فمن المحتمل أنك صادفت الموضوع الأسطوري على Stack Overflow: "The Definitive C++ Book Guide and List". هذا المنشور جمع آلاف الأصوات وملايين المشاهدات. لماذا؟ لأن عالم C++ قاسٍ على المبتدئين. يمكنك البدء بكتاب "C++ Primer" الرائع، أو بكتاب "لغة برمجة C++" لستراوستروب (الطبعة الأولى) القديم، وبعده قد ترغب في ترك البرمجة إلى الأبد.
\nفي هذه المقالة، سنحلل أهم الأخطاء التي يرتكبها المبتدئون (وليس فقط) عند اختيار أدبيات C++، وسنوضح كيفية تجنبها. لن نقدم مجرد قائمة كتب - بل سنشرح لماذا بعض الكتب مفيدة والبعض الآخر خطير. هيا بنا!
\n\nالخطأ رقم 1: تجاهل المعيار الحديث لـ C++
\nالمشكلة الأكثر شيوعًا هي أخذ كتاب كُتب لـ C++98 أو C++03، ومحاولة تعلم C++11/14/17/20 منه. هذا يشبه تعلم الإنجليزية من كتاب مدرسي من القرن التاسع عشر. نعم، ستتعلم الكلمات، لكنك ستتحدث مثل شكسبير - بشكل جميل، لكن غير مفهوم للمعاصرين.
\nفي C++ الحديثة (بدءًا من C++11)، ظهرت auto، المؤشرات الذكية، لامدا، nullptr، std::move، std::shared_ptr وغيرها الكثير. إذا كنت تتعلم new و delete كطريقة أساسية لإدارة الذاكرة - فأنت تتعلم بشكل خاطئ.
كيف تتجنب ذلك؟
\n// سيء (أسلوب C++98 القديم)\nint* p = new int(5);\ndelete p;\n\n// جيد (C++11 الحديثة وما بعدها)\nauto p = std::make_unique<int>(5);\n// المؤشر الذكي سيحذف الكائن تلقائيًا عند خروجه من النطاق.\n\nنصيحة: ابحث عن الكتب التي تذكر المعيار بوضوح: "C++11"، "C++14"، "C++17"، "C++20". أفضل الخيارات: "C++ Primer" (الطبعة الخامسة) لليپمان أو "Effective Modern C++" لسكوت مايرز.
\n\nالخطأ رقم 2: اختيار "كتاب واحد" بدلاً من نظام
\nيعتقد الكثيرون: "سأقرأ كتابًا سميكًا واحدًا وسأصبح خبيرًا". C++ ليست Python. إنها لغة تتطلب نهجًا منهجيًا. كتاب واحد يعطي الأساس، والثاني يعطي تقنيات متقدمة، والثالث يعطي أنماط التصميم.
\nعلى سبيل المثال: "C++ Primer" يعلم الأساسيات بشكل ممتاز، لكنه لا يحتوي تقريبًا على أي شيء عن تعدد المهام. "Effective Modern C++" يعلم دقائق C++11/14، لكنه يفترض أنك تعرف بناء الجملة بالفعل. "The C++ Programming Language" لستراوستروب هو مرجع، وليس كتابًا دراسيًا للمبتدئين.
\n\nكيف تتجنب ذلك؟
\nضع خطة تعلم:
\n- \n
- البداية: "C++ Primer" (ليپمان، الطبعة الخامسة) - أفضل كتاب للبدء. \n
- المستوى المتقدم: "Effective Modern C++" (مايرز) - لا غنى عنه لفهم C++11/14. \n
- القوالب والبرمجة الفوقية: "C++ Templates: The Complete Guide" (فانديفورد، جوساتيس). \n
- التطبيق العملي: "A Tour of C++" (ستراوستروب) - نظرة عامة مختصرة على إمكانيات اللغة. \n
الخطأ رقم 3: قراءة كود لن يتم تجميعه أبدًا
\nبعض الكتب (خاصة القديمة) تحتوي على أمثلة لا تعمل على المترجمات الحديثة. أو الأسوأ من ذلك، أنها تعمل ولكنها تعلم ممارسات سيئة. على سبيل المثال، استخدام #include <iostream.h> (رأس قديم) بدلاً من #include <iostream>.
// هكذا كان في العصور القديمة (C++98 وما قبلها)\n#include <iostream.h>\nint main() {\n cout << "Hello" << endl;\n return 0;\n}\n\n// هكذا هو الصحيح الآن\n#include <iostream>\nint main() {\n std::cout << "Hello" << std::endl;\n return 0;\n}\n\nالفرق ليس فقط في بناء الجملة. <iostream.h> ليس رأسًا قياسيًا وقد يكون غائبًا في المترجمات الحديثة. الكتب التي تستخدمه هي علامة حمراء.