Banner 468

الأربعاء، 26 أكتوبر 2011

خارطة طريق لتعلم لغة++c

0 التعليقات
 

بداية أحب أن أقول أني ما كتبت هذه المقالة البسيطـةالمتواضعـة إلا لتسهيل الطريق على المبتدئين الذين يريدون تعلم البرمجـة بواسطـةإحدى هاتين اللغتين السي أو السي بلس بلس وأخص هـنا طلبة الجامعـات ... ذلك لايعـني أني أملك علماً لا يضاهـى في هاتين اللغتين ولكن يكفي أني عبرت طريق البدايةوتجاوزت عقبات كثيرة في هذه الطريق ولم أقوم بتكسير شاشة جهازي أو على الأقل لمأمل يوماً من تعلم المزيد من هاتين اللغتين...

قبل أن تستمر في قراءة هذه المقالة أود أن أشير هـنا إلى أنـه في حالأردت احتراف البرمجـة أو على الأقل تعلمها .. فإن ذلك يعـني عقلاًصافياً للغاية ووقتاً طويلاً للتعلم وأقداح كبيرة من القهـوة وعـملاً طويلاً علىشاشة الحاسب .. ومع كل هذا الجهـد فإنه في أغلب الأوقات لن تحقق شيئاًتفخر بـه ... لا أود هـنا أن أصوّر الصورة السيئة هـنا .. ولكن هذه البرمجـة التيأعرفها... قد تختلف الطبائع الشخصية هـنا .. ولكن لا اختلاف بين المبرمجين على أنتعلم البرمجـة طريق طويل وشاق ومع ذلك فهـو ممتع لأقصى الحدود...


عليك بداية أن تحدد الهـدف الذي تريده من وراء تعلم هذه اللغـة (أوالبرمجـة بشكل عام) إن كنت طالباً جامعياً فإن البرمجـة تملك نسبة عالية منمستقبلك .. وإن كنت هاوياً فإن البرمجـة ربما تعتبر أفضل وسيلة حتى تغتر بنفسكوترى من نفسك أفضل المبرمجين ... ولكن عليك أن تعلم سواءً أكنت طالباً جامعياً أوهاوياً للبرمجـة أن هذا الذي تتعلمـه هـو علم وليس هـواية أو عبارة عـن شخبطاتهامشية باللغـة الإنجليزيـة لا يدرك معـناها إلا المبرمجين ... وصدقني إن استخففتبهذا الأمر فإنك إنما تستخف بنفسك وبعقلك ...

قد نتفق هـنـا أن البرمجـة فـن وذوق وإبداع ولكن لهذا الفـن قواعـدوأساسيات إن انتهكت أياً منها أصبح عـملك عبارة عـن كلمات لا تغـني ولا تسمن منجـوع....

دعـنا الآن ندخل في صلب هذا الموضوع ... إن كنت مبتدئاً فإن أولكـود ستكتبه في حياتك بواسطـة لغـة السي أو السي بلس بلس هـو طباعـة العبارة "Hellow World" ، وبالرغـم من قوة هذه العبارة إلا أنهاصادقـة بمعـنى الكلمـة فأنت الآن تدخل في إحدى الصناعات التي يتقنها مئات الآلافمن البشر ويفهـمونها .... ربما سيكون الكـود الثاني عبارة عـن جمع عـددين أو حتىآلة حسابية بسيطـة .. ستمضي في الدروس وستكدس معلوماتها في دماغـك كما كدست من قبلمعادلات التفاضل والتكامل ... ولن تفهـم أبداً ما هي البرمجـة ولن يكون لك أي أساسعلمي واضح ... بل فقط خبرة ركيكـة لا تسمن ولا تغـني من جهل مطبق ... الكثير منالم يدرك ما هـو سحر البرمجـة ولم يعرف متعتها أبداً ، وأنا أجزم بأن الغالية أنالسبب وراء قراءتهـم هذه المقالة هـو أنهـم قد عانوا الكثير من محاضرات البرمجـةوأمضوا ساعات طويلة فاغرين أفواههـم ناظرين إلى المحاضر منتظرين متى تنتهيالمحاضرة حتى يمضوا في طريقهـم........

أول نصيحـة لك أسوقها إليك في تعلم البرمجـة هـو أن تحاول قدرالإمكان تعلم البرمجـة بواسطـة اللغـة الإنجليزيـة وليس بواسطـة اللغـة العربية ... قد ترى الأمر مستحيلاًوأنه يحتاج إلى دورات مكثفـة في تعلم اللغـة الإنجليزية قبل أن تنتهي من قراءة أولكتاب برمجي إنجليزي لك ، لا أقول أن الأمر سهل .. ولكنـه يحتاج فقط إلى العـزيمـةأن تستمر .... اختر أحد الكتب المنتشرة في الإنترنت (وأنا أفضل هذا الكتاب الذيكان له الفضل بعـد الله في وضعي على الطريق الصحيح لإتقان لغـة السي بلس بلس وهـو Waite Group's Object-Oriented Programmingin 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) لا تتوقف أبداً عـند هاتين اللغتين لغتي السي والسي بلسبلس حاول أن تتعلم لغات أخرى ... وستدرك أن تلك اللغات تملك الكثير بالرغـم منضعفها أمام لغتي السي والسي بلس بلس ... تعلم مثلاً السي شارب أو الجافا أو حتىالفيجوال بيسك .. إذا كان الأمر عائداً لي ... فباعتقادي أن الفيجوال بيسك عبارةعـن طفلة صغيرة وأن الجافا والسي شارب عبارة عـن شابات في عـمر الزهـور وأن السيبلس بلس عبارة عـن فتاة في عـمر الثلاثين وأن السي عبارة عـن عـجوز ... السي لغـةصعبة للغاية ولا تمد المبرمج بأي مساعـدة إطلاقاً .. لغات مثل الجافا والسي شاربتمدك بالمساعـدة ولكنها تخل بالبرنامج وبالرغـم من ذلك فهي مطلوبة .. أما لغـةالسي بلس بلس فهي لغـة عاقلة تستطيع أنت بنفسك صنع المساعـدة وتسهيل البرمجـة عليكولن تطلبها من اللغـة نفسها ولذلك فأنا احترم مثل هذه اللغـة. 
منقول من منتديات الفريق العربي للبرمجة.

أترك تعليقا

Ads 468x60px