أفضل الطرق لتعلم لغة C و C++
- التفاصيل
- الزيارات: 55710
المقال من تأليف : سلطان الثبيتي
بداية أحب أن أقول أني ما كتبت هذه المقالة البسيطـة المتواضعـة إلا لتسهيل الطريق على المبتدئين الذين يريدون تعلم البرمجـة بواسطـة إحدى هاتين اللغتين السي أو السي بلس بلس وأخص هـنا طلبة الجامعـات ... ذلك لا يعـني أني أملك علماً لا يضاهـى في هاتين اللغتين ولكن يكفي أني عبرت طريق البداية وتجاوزت عقبات كثيرة في هذه الطريق ولم أقوم بتكسير شاشة جهازي أو على الأقل لم أمل يوماً من تعلم المزيد من هاتين اللغتين...
قبل أن تستمر في قراءة هذه المقالة أود أن أشير هـنا إلى أنـه في حال أردت احتراف البرمجـة أو على الأقل تعلمها .. فإن ذلك يعـني عقلاً صافياً للغاية ووقتاً طويلاً للتعلم وأقداح كبيرة من القهـوة وعـملاً طويلاً على شاشة الحاسب .. ومع كل هذا الجهـد فإنه في أغلب الأوقات لن تحقق شيئاً تفخر بـه ... لا أود هـنا أن أصوّر الصورة السيئة هـنا .. ولكن هذه البرمجـة التي أعرفها... قد تختلف الطبائع الشخصية هـنا .. ولكن لا اختلاف بين المبرمجين على أن تعلم البرمجـة طريق طويل وشاق ومع ذلك فهـو ممتع لأقصى الحدود...
عليك بداية أن تحدد الهـدف الذي تريده من وراء تعلم هذه اللغـة (أو البرمجـة بشكل عام) إن كنت طالباً جامعياً فإن البرمجـة تملك نسبة عالية من مستقبلك .. وإن كنت هاوياً فإن البرمجـة ربما تعتبر أفضل وسيلة حتى تغتر بنفسك وترى من نفسك أفضل المبرمجين ... ولكن عليك أن تعلم سواءً أكنت طالباً جامعياً أو هاوياً للبرمجـة أن هذا الذي تتعلمـه هـو علم وليس هـواية أو عبارة عـن شخبطات هامشية باللغـة الإنجليزيـة لا يدرك معـناها إلا المبرمجين ... وصدقني إن استخففت بهذا الأمر فإنك إنما تستخف بنفسك وبعقلك ...
قد نتفق هـنـا أن البرمجـة فـن وذوق وإبداع ولكن لهذا الفـن قواعـد وأساسيات إن انتهكت أياً منها أصبح عـملك عبارة عـن كلمات لا تغـني ولا تسمن من جـوع....
دعـنا الآن ندخل في صلب هذا الموضوع ... إن كنت مبتدئاً فإن أول كـود ستكتبه في حياتك بواسطـة لغـة السي أو السي بلس بلس هـو طباعـة العبارة "Hellow World" ، وبالرغـم من قوة هذه العبارة إلا أنها صادقـة بمعـنى الكلمـة فأنت الآن تدخل في إحدى الصناعات التي يتقنها مئات الآلاف من البشر ويفهـمونها .... ربما سيكون الكـود الثاني عبارة عـن جمع عـددين أو حتى آلة حسابية بسيطـة .. ستمضي في الدروس وستكدس معلوماتها في دماغـك كما كدست من قبل معادلات التفاضل والتكامل ... ولن تفهـم أبداً ما هي البرمجـة ولن يكون لك أي أساس علمي واضح ... بل فقط خبرة ركيكـة لا تسمن ولا تغـني من جهل مطبق ... الكثير منا لم يدرك ما هـو سحر البرمجـة ولم يعرف متعتها أبداً ، وأنا أجزم بأن الغالية أن السبب وراء قراءتهـم هذه المقالة هـو أنهـم قد عانوا الكثير من محاضرات البرمجـة وأمضوا ساعات طويلة فاغرين أفواههـم ناظرين إلى المحاضر منتظرين متى تنتهي المحاضرة حتى يمضوا في طريقهـم........
أول نصيحـة لك أسوقها إليك في تعلم البرمجـة هـو أن تحاول قدر الإمكان تعلم البرمجـة بواسطـة اللغـة الإنجليزيـة وليس بواسطـة اللغـة العربية ... قد ترى الأمر مستحيلاً وأنه يحتاج إلى دورات مكثفـة في تعلم اللغـة الإنجليزية قبل أن تنتهي من قراءة أول كتاب برمجي إنجليزي لك ، لا أقول أن الأمر سهل .. ولكنـه يحتاج فقط إلى العـزيمـة أن تستمر .... اختر أحد الكتب المنتشرة في الإنترنت (وأنا أفضل هذا الكتاب الذي كان له الفضل بعـد الله في وضعي على الطريق الصحيح لإتقان لغـة السي بلس بلس وهـو Waite Group's Object-Oriented Programming in C++ ) وقم بإنزاله على جهـازك وابدأ في القراءة منـه .. ابدأ في قراءة أول صفحـة لا تتوقف انطلق حتى تنتهي منها .. إن كان لديك المزيد من الوقت اقرأها مرة ثانية وإلا فلا ... عـد إلى بداية الصفحـة .. ابدأ في محاولة فهـم كل فقرة على حـدة .. إن وصلت إلى إحدى الكلمات التي لا تعرف معـناها ترجمها بواسطـة إحدى برامج الترجمـة .. إن كان ما أقوله يعـني أنك ستترجم كل كلمـة فهذا ما أقصده .. إذا انتهيت من الفقرة الأولى حاول أن تتذكر ما كان يهـدف إليه المؤلف .. انتقل إلى الفقرة الثانية وحاول أن تنهيها وهـكذا حتى تنتهي من هذه الصفحـة ... إن جزعت واشتكيت ومللت فدع الأمر إلى اليوم التالي .. ولكن لا تتوقف أبداً .... إن كنت قضيت اليوم الأول في محاولة ترجمـة وفهـم فقرة واحدة فقط ... فلن يأتي الأسبوع التالي إلا وأنت قد أنهيت صفحـة واحدة في كل يوم .. ولن يأتي الشهر القادم إلا وسيصبح بإمكانك أن تفهـم 60% مما يقوله المؤلف دون أن تترجم أي كلمـة وقد تصل قراءتك إلى صفحتين في الساعـة (وهذا أمر جيد في شهر واحد) وصدقني لن تمر ثلاثة أشهر إلا وستكون تقرأ الكتاب وكأنه باللغـة العربية وليس بالإنجليزيـة مع فهـم قد يصل إلى 70% مما يكتبه المؤلف .... أمر آخر مهـم وهـو أنه لا بد عليك التفكير وأنت تقرأ أن تفكر باللغـة الإنجليزية وليس باللغـة العربية .. حاول قدر المستطاع ألا تفكر بالترجمـة العربية لكل كلمـة إنجليزية بل حاول فهـم الكلام بداهـة كما تفهـمه عـندما تقرأ كتاباً باللغـة العربية....
هذه أولى نصائحي إليك ..... لا يعـني ذلك أنه يجدر بك تطبيقها فوراً ولكن من الأفضل أن تضعها في ذهـنك دوماً وأنت تتعلم البرمجـة....
المصفوفات Arrays والدوال Functions والتركيبات Structures والسلاسل Strings وبالطبع بنى التحكم Control Flow أمور قد تعرفها وقد لا تعرفها .. ولكن من الضروري أن تعرف كيفية استخدامها ... قد تتفاخر بهذه المواضيع وأنك تعلمها وقد كتبت بها أمثلة قبلاً .. ولكن كل هذه المواضيع عبارة عـن أدوات في يد المبرمج عليك أن تعرف كيف تستخدمها ومتى .. إذا لم تعرف ذلك فقد تكون أداة خطيرة تدمر برنامجك وتجعل منه أضحوكـة.. مثلاً قد يكون من الأفضل أن تعـمل البرنامج بواسطـة إحدى بنى التحكم وقد يكون من الكارثـة أن تعـمله بواسطـة طريقة العـودية ... أيضاً هـناك قواعـد وأساسيات للبرمجـة الهيكلية يجب عليك أن تعرفها أو على الأقل تعرف الأهـداف العامـة لأي طريقـة برمجـة؛ من ضمن هذه الأهـداف إمكانية إعادة الاستخدام واستقلالية العـنصر البرمجي ( سواء دالة أو فئة أو غير ذلك) عـن التأثيرات الخارجيـة...
إذا كنت بالفعل وصلت إلى مرحلة الدوال وعرفت جميع أساسياتها فهـنا تنتهي مهـمتك كمبرمج للغـة السي ... وتبدأ إن أردت في مرحلة جـديدة في أي مجال تريده سواءً أكان البرمجـة تحت الويندوز أو اللينوكس أو برمجـة الجرافيكس والتصاميم أو أو أو ... دعـنا نترك الحـديث هـنا عن لغـة السي وننتقل إلى مبرمج لغـة السي بلس بلس ....
بالنسبة لمبرمج السي بلس بلس (أو من يريد تعلمها بمعـنى أدق) فسينتقل إلى مرحلة جـديدة للغاية ومختلفـة كلية عـما تعلمـه مسبقاً .. سينتقل إلى مرحلة الكائنـات أو البرمجـة الشيئيـة سيتعلم الكثير منها .. وسيحقق الكثير من الأهـداف التي تعـجز لغـة برمجـة هيكلية مثل السي عـن تحقيقها كلياً ... أهـم وأكبر نصيحـة أود منك أن تتعلمها هـي الفصل بين الواجهـة والمعالجـة .. إذا عرفت الفرق بين الواجهـة والمعالجـة واستطعت الفصل بينها في أكـوادك فستدرك الكثير مما تعـنيه البرمجـة الشيئيـة وستعرف ما هي الكبسلة وماهي الوراثة وما هـو التجريد وما هـو تعدد الأوجـه .. وستعرف فوائد إعادة الاستخدام والتوسعيـة وغير ذلك..... وحينما تكون انتهيت من ناحية البرمجـة الشيئيـة فوظيفتك كمبرمج للغـة سي بلس بلس قياسية انتهت وآن لك أن تحدد ما هـو المجال الذي تود الإبداع فيه....
هـناك أمر آخر عليك أن تدركـه أثناء تعلمك البرمجـة ..... لا تركز دائماً على لغـة البرمجـة .. لغة البرمجة ليست سوى أداة ... ركز على التقنيات البرمجيـة ... ركز على الخوارزميات وكيفية تعلمها .. حينما تتعلم بنى التحكم لا تنسى أن تتعلم الخوارزميات لا تنسى أن تتعلم ما تعنيه هذه الكلمـة Pseudocode .. تعرف على جميع ما تحويه هذه الكلمة Pseudocode .. لا تنسى وأعيد هـنا أن تتعلمها .. إن لم تتعلمها فستخسر الكثير من الوقت كان بالإمكان استغلاله في تعلم شيء أكثر إفادة ...
أود أن أذكرك هـنا أنـه في حال إذا أردت تطوير نفسك في البرمجـة (بواسطـة لغـة السي أو لغـة السي بلس بلس) عليك أن تتحدى نفسك كثيراً بحل أمثلة تخترعها أنت أو بحل أي مثال صعب تجده في أي مكان سواء على الانترنت أو في الكتب ... مثل هذا العـمل والتحدي سيعلمك كيف تطور برامجك وكيف تستفيد من برامج كتبتها سابقـاً في برامج جـديدة ... وستعرف معـنى البرمجـة بشكل حقيقي ....
إذا كنت تعاني من بعض الصعوبة في إيجاد الأمثلة .. فهذا مثال أود منك لو تحله حتى تثبت لنفسك أنك بالفعل في الطريق الصحيح للبرمجـة..
قم بكتابة برنامج شبيه بالآلة الحاسبة التي يستخدمها الطلاب ، تستطيع قبول العـمليات الأساسية (+ و – و / و *) بالإضافة إلى الأقواس .. وأيضاً مع مراعاة أسبقية العـمليات الحسابية .. هذا المثال ليس سهلاً كما تظن..ولو قمت بحله بواسطـة لغة السي (وليس بالسي بلس بلس) فإنه ينتظرك مستقبل رهيب في البرمجة.
على العـموم سأكتب هـنا أهـم التعليمات والفوائد والخطوات التي ستعينك على إتقانك هاتين اللغتين:
1) حاول دائماً تعلم هاتين اللغتين بواسطـة اللغـة الإنجليزية وليس العربية.
2) من الأفضل أن تتعلم لغـة السي أولاً ثم تنتقل إلى لغـة السي بلس بلس ثانياً ... تعلمك للغـة السي سيعلمك إتقان البرمجـة الهيكلية ثم بعـد ذلك بإمكانك الانتقال إلى لغة السي بلس بلس حتى تتقن فلسفة البرمجـة الشيئيـة.
3) تعلم الخوارزميات ؛ وقبل أن تبدأ في كتابة أي برنامج مهـما كان بسيطاً حاول أن تصمم خوارزمية البرنامج أو على الأقل تكتبه بواسطـة الـ Pseudocode ... قد تستغرب من هذا الإجراء خاصـة عـند المشاكل البسيطـة ... لكن بهذه الطريقة ستتقـن كيفية التصميم وصنع الخوارزميات وستتعلم الكثير من أسس وأساليب الخوارزميات ... وبالتالي فلن تتعب كثيراً مثلي حينما تقوم بتصميم برنامج ذو مشاكل معقدة للغاية.
4) إذ كنت مقسماً برنامجك إلى عـدة دوال .. فمن الضروري أن تعتبر هذه الدوال عبارة عـن صناديق سوداء لها بيانات داخلة وبيانات خارجـة وتقوم بإجراء عـمليات فقط ... ركز أثناء تعلمك للدوال على قواعـد مجالات الرؤية Rule Of Scope وعلى صفوف التخزين أيضاً Storage Classes وحاول تطبيقها عـملياً أثناء كتابتك للبرامج ... حينما تقوم بصنع أي دالة ركز دائماً على أن تحقق الأهـداف العامـة للبرمجـة ، وهي مثلاً: القدرة على إعادة الاستخدام .. وهي إمكانية أن تعيد استخدام الدالة في برامج أخرى ، وأيضاً الاستقلالية عـن التأثيرات الخارجية ، وهي أن الدالة لا تتأثر بما يحدث خارجها .. كل هذا يعـني أنه عليك الابتعاد قدر الإمكان عـن استخدام المتغيرات العامـة.
5) إذا كنت مقسماً برنامج إلى عـدة كائنـات... فمن الضروري تمثيل الحياة الواقعية في برنامجك .. هذا ما تسعى البرمجـة الشيئية الوصول إليه وعليك عـدم مخالفة هذا الهـدف .. من إحدى أهـم قواعـد البرمجـة الشيئيـة .. أن كل شيء في البرنامج يجب أن يكون كائن .. أيضاً البرنامج هـو يعتبر الحياة الواقعية ، حيث تقوم الكائنـات التي يتكون منها برنامج بالتفاعل مع بعضها البعض بواسطـة إرسال الرسائل .. التفاعل مع بعضها البعض لا يعـني أبداً أن يقوم الكائن (أ) مثلاً بتغيير طبيعـة الكائن (ب) .. هذا يعـني تقليل التزاوج بين الكائنـات أو تقليل الـ coupling بينها ... قد تستغرب سبب التقليل من هذا التزاوج ، السبب في ذلك حتى يكون الكائن مستقلاً وليس تابعاً لأحد الكائنـات.
6) من أعقد الموضوعات في لغـة السي والسي بلس بلس موضوع المؤشرات ... أفضل طريقة حتى تفهـم موضوع المؤشرات هـو أن تعتبرها مثل صناديق البريد حتى تفهـمها ... حتى فهـمها منك لا يعـني أنها ستكون طريقة آمنـة بل تعتبر هي من أعقد المواضيع ويكفيك أصلاً أن هذه التقنية ليست موجودة في غير هاتين اللغتين.
7) حاول أن تتعلم أيضاً الـ Data Structure .. وقبل ذلك أتقن المؤشرات والمرجعيات.
8) إذا فشلت مثلاً في صنع برنامج ... فلا تيأس أبداً .. حاول أن تعيد أفكارك .. وأن تتعامل مع البرمجـة وكأنها عـملية بناء أو تركيب لدوال وكائنـات هي موجودة أصلاً.
9) من أجمل المواضيع في البرمجـة الشيئيـة وعـند تعاملك مع الكائنـات هـو موضع أنماط التصميم البرمجية Design Patterns ... حاول أن تتقن هذا الموضوع وأن تعرف كل كبيرة وصغيرة فهـو أولاً ممتع وثانياً صغير حيث يصل عدد الأنماط إلى 23 نمطاً وثالثاً هـو خلاصة خبرة أفضل المبرمجين في العالم.10) قد تريد الانتقال إلى دوال الـ API وإلى البرمجـة تحت الويندوز .. على العـموم أود أن أقول لك أن موضوع دوال الـ API هـو موضوع بسيط وسهل للغاية .. كنت في السابق أخشاه بسبب اعتقادي لصعوبته وطول الكـود الواحد ... الموضوع بسيط ولا يحتاج منك أصلاً إلا لفهـم وصدقني لن يمضي يومان إلا وأنت تكتب تلك الأكـواد الطويلة دون الرجـوع إلى أي كتاب.
11) لا تتوقف أبداً عـند هاتين اللغتين لغتي السي والسي بلس بلس حاول أن تتعلم لغات أخرى ... وستدرك أن تلك اللغات تملك الكثير بالرغـم من ضعفها أمام لغتي السي والسي بلس بلس ... تعلم مثلاً السي شارب أو الجافا أو حتى الفيجوال بيسك .. إذا كان الأمر عائداً لي ... فباعتقادي أن الفيجوال بيسك عبارة عـن طفلة صغيرة وأن الجافا والسي شارب عبارة عـن شابات في عـمر الزهـور وأن السي بلس بلس عبارة عـن فتاة في عـمر الثلاثين وأن السي عبارة عـن عـجوز ... السي لغـة صعبة للغاية ولا تمد المبرمج بأي مساعـدة إطلاقاً .. لغات مثل الجافا والسي شارب تمدك بالمساعـدة ولكنها تخل بالبرنامج وبالرغـم من ذلك فهي مطلوبة .. أما لغـة السي بلس بلس فهي لغـة عاقلة تستطيع أنت بنفسك صنع المساعـدة وتسهيل البرمجـة عليك ولن تطلبها من اللغـة نفسها ولذلك فأنا احترم مثل هذه اللغـة.
من منتديات الفريق العربي للبرمجة