الجمعة، 19 ديسمبر 2008

البرمجة صعبة

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

المشكلة هنا أن هذا لا يكفي لتعلم البرمجة، لأن صناعة البرنامج من الألف إلى الياء هي عملية إبداعية تحتاج لخطوات كثيرة لا أظن أن الكتب يمكن أن تعلمنا إياها بل يجب أن نتعلمها من مبرمجين آخرين.

إليكم هذا المثال لأقرب الأمر، يمكن أن تشرح لشخص ما كيف تصنع السيارة وتوفر له المواد الأولية الخام وتطلب منه صنع سيارة، هل سينجح؟ لا أظن أنه سيحقق لك ما تريد من أول مرة، فالمواد الخام يجب أن تتحول إلى معادن ومطاط وخشب وبلاستيك، وهذه المواد يجب أن توضع في قوالب معينة لكي تظهر بالشكل المطلوب، ثم هناك عملية تركيب هذه المواد مع بعضها البعض لتشكيل جسم السيارة وأجزاءها، وكل مرحلة لها تفاصيل كثيرة لا يعرفها المبتدأ.

كذلك حالي مع البرمجة، اعرف بالضبط ماذا أريد أو على الأقل لدي صورة واضحة لبعض التفاصيل، لكن كيف أفعل هذا؟ لا أدري.

مجرد شكوى حول ما يأخرني عن تعلم البرمجة، لكن هذا ليس بعذر، علي أن أبدأ جدياً في التعلم وطريق الألف سطر يبدأ بحرف.

22 تعليقات:

mhamed يقول...

بتجربتي أستاذي العزيز فلتعلم البرمجة يجب التطبيق ثم التطبيق فاذا قرأت كتاب ولن تطبق أي مثال فيه أو أي درس فكأنك لم تقرأ شئ.
الأمثلة البسيطة هي بداية الطريق للمشاريع الكبيرة فهي بمثابة الأساس.

عبدالله المهيري يقول...

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

يمكن تأليف سلسلة كتب مماثلة وكل واحد منها يقدم برنامجاً مختلفاً أو حتى لعبة وبالتالي مشاكل وحلول مختلفة، هذه الأمثلة يمكنها أن تعالج مشكلة صعوبة التعلم خصوصاً عند من أتقن الأساسيات فلم تعد أمثلة "Hello World" وما ماثلها كافية وليس باستطاعته القفز مباشرة نحو المواضيع الأكثر تعقيداً.

احمد يقول...

استاذي عبد الله ماهي خلفيتك عن خوارزميات او بشكل اخر الـDataStructure & Algorithm وماهو مجال الذي تحب ان تعمل به في عالم البرمجه ؟هذان السؤلان هما المفتاح للاجابه على سؤالك وحل مشكلتك .

غير معرف يقول...

ربما تفيدك تدوينة النعيمي ، ولو عندي تحفظ من بعض الكلمات
http://mbnoimi.net/w/?p=106

BoHSaiN يقول...

شنو االلغة اللي مفكر تتعلمها ؟
يمكن لو تجرب تتعلم لغة سهلة (بايثون مثلا) في البداية بتسهل عليك عمل الشي اللي تبيه.

غير معرف يقول...

أظن أن مشكلة عدم وجود برامج كاملة للتطبيق محلولة ، هل بحثت في البرمجيات مفتوحة المصدر ؟ .
أما عتبك على تلك الكتب ليس في محله ، فهي مخصصة لتعلم قواعد اللغات ، أما لتنمية القدرة على حل المشكلات فتجده في عدة علوم مثل ما ذكر الأخ أحمد ، الخوارزميات ، تراكيب البيانات ، الرياضيات المتقطعة و الرياضيات عمومًا ، علوم الحاسب كقواعد البيانات ، هندسة البرمجيات ، القراءة عن ما هو موجود من تقنيات كتقنيات الشبكات و الانترنت .
أنصحك بالتوجه لأقرب كلية حاسبات و معلومات و محاولة الحصول على خطتهم في قسم علوم المعلومات computer sciences كيلا تتشتت جهودك فيما لا فائدة منه ، و الله أعلم .
أظنني أثقلت عليك :-)

geek4arab يقول...

اشاركك الراي واشاركك المشكل ايضا .. لكن في الحقيقة جواري من يتقن البرمجة ويمكن ان استفيد منه .. لكن لم ابداء بعد ولا ادري لماذا ... لنبداء سوية ولننظر من سيتعلم اسرع ... سنلتقي

غير معرف يقول...

البرمجة هي فن مثل التحدث والكلام بالضبط ..

فلكي تتحدث بالعربية يجب أن تلتزم بقواعد اللغة العربية .. كذلك البرمجة، فاذا أردت أن تبرمج بلغة معينة فيجب أن تتقن قواعدها.

لكن قبل أن تتحدث بأي لغة يجب أن تعرف عن ماذا تريد أن تتحدث، فحتى في لغاتنا نحن البشر إذا لم تمتلك موهبة التعبير عن النفس وايصال المعلومة فلن تستطيع التواصل بشكل جيد .. كذلك بالنسبة للبرمجة، يجب أن تعرف طرق حل المشكلة لكي تعبر للحاسب الآلي عما تريد.


أعتقد أنه يجب عليك قراءة كتب تتعلق بالألغاز وكيفية حلها!

أيضاً قراءة كتب عن عتاد الحاسب الآلي ستعطيك دفعة قوية في عالم البرمجة!

أنصحك بكتابي
Discrete Mathematics and Its Applications
و
Computer Organization and Design

فالأول مفيد جداً جداً جداً، مع أن اسمه ليس مثيراً أبداً!

أما الكتاب الثاني إذا انتهيت منه وفهمته بشكل جيد، فسوف تفهم طريقة عمل الحاسب الآلي وايضاً ستتمكن من صنع معالج خاص بك، عندها أضمن لك أنك لن تحتاج سوى لتعلم "قواعد" أو syntax أي لغة برمجية لتبدأ رحلتك البرمجية بها :)

نعم، قد تقول انك تعرف كيفية عمل الحاسب الآلي، من منا لايعرف؟ لكن بعد قراءة الكتاب ستتيقن أن ماتعرفه عن عمل الحاسب الآلي هو قدر بسيط جداً وسوف تزداد معرفتك كثيراً ان شاء الله

mohannad يقول...

المشكلة في اعتقادي هي التفكير في مشروع كبير مع عدم اتقان لغة البرمجة.

يجب عليك نسيان مشروعك الذي تفكر فيه حتى تنتهي من الكتاب الذي تتعلم منه وتطبيق الأمثلة الموجودة فيه.

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

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

أتمنى أن تكون وصلت الفكرة، تنمياتي لك بالتوفيق.

احمد الكثيري يقول...

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

يمكنك أثناء بحثك أن تجد كتب يشير محتواها أو عنوانها إلى إعتماد التطبيقات العملية بشكل فعلي أكثر من مجرد أمثلة على أساسيات اللغة والدوال ، كلمات مثل Practice , Practical , Best Practices.

محمد بدوي يقول...

أنا كمبرمج لدي مثل معدل يقول:

if you want to be programmer you must have a logic mind and ArabTeam2000.com Web site

فالكتب لا تعلم البرمجة بل هي تعلم اللغة وهنا الخطاء الذي يقع به الناس

فالمنطق البرمجي يتم تعلمه بواسطة الخوارزميات أو حتى بكتابة المشكلة بشكل اسطر حتى ولو بلغة محكية

==========================
مثلا:
اكتب مدونة حول البرمجة
عدل الأخطاء الإملائية
انشر هذه المدونة
انتظر الزيارات
في حال لم تصل الزيارات إلى 50 إذا قم بإخفائها
قم بإظهار مدونة أخرى ذات موضوع شعبي أكبر
انتهى
==========================

و عند الذهاب للكتب فسوف تتعلم اللغة أو الأمر الذي يؤدي هذا الغرض و كيفية استخدامه

فكل لغات البرمجة تحتوي على الأمر (إذا) - (IF) و لكن تختلف صيغة كتابته من لغة إلى أخرى

و بعدها و الأهم ومن خبرتي هي القيام ببناء تطبيقات بيدك و يمكنك أن تحاكي تطبيقات موجودة فمثلا أنا كنت أحاكي في البداية تطبيقات (Microsoft Office) حتى اكتشفت أنه و ضمن الاتفاقية الخاصة بلغات البرمجة أنه من الممنوع أن تقوم ببناء تطبيقات مثل (MS Office) بواسطة لغات برمجة مايكروسوفت بشروط معينة

بعدها انتقلت لبناء تطبيقات لإدارة قواعد بيانات ORACLE لأني كنت بحاجة لأحدها حتى اكتشفت Toad و عندها اعتمدت عليه و لكن تجربتي هذه أفادتني الكثيرة من الخبرة

و عندما احتجنا لترخيص منتدى في الفريق العربي للبرمجة قمت ببناء منتدى متكامل و استخدمناه لمدة سنة و لكن قلة التطوير و كثرة المبرمجين السلبيين الذي همهم الثغرات البرمجية جعلونا ننتقل لتطبيق جاهز

و عندما أردت بدء التدوين قمت ببرمجة مدونتي بنفسي و لم أعتمد على Word Press إلا بالخراج لتكون قريبة من استعمال الناس و مازلت استخدمها

الخلاصة:
عند محاكاتك لآي تطبيق سوف تتعلم كيف يسير و ما هو هدف هذا التطبيق و بعدها دواليك سوف تجد نفسك مبرمجا محترفا بإذن الله

بالتوفيق

ابوسعد - abosaed يقول...

أواجه نفس مشكلتك
لذا لا تبخل علي بطرح تجربتك لو احرزت تقدم :)

عبدالله المهيري يقول...

ردود هذا الموضوع مفيدة لكل من يريد تعلم البرمجة، أتمنى أن يكون كذلك لكل من يرغب في دخول هذا العالم، أشكركم جميعاً وهذا رد على البعض.

أحمد: لدي كتاب SICP وكتابان آخران يشرحان الخوارزميات وكذلك Data Structure - كيف تترجم هذا المصطلح؟ هيكلة البيانات؟ - لدي فكرة عامة عن الأمرين وبحاجة لتعلم الكثير حولهما.

بو حسن: بايثون لغة التعلم لدي، لكنني أريد بعد ذلك أن أتعمق في لغة LISP وSmalltalk.

غير معرف: ما أتحدث عنه لا يحتاج للخوارزميات وتراكيب البيانات، أريد مثالاً عملياً لما يفعله المبرمجون كل يوم، تطبيق بسيط أو قل لعبة بسيطة، كيف ننقل اللعبة من الفكرة إلى تطبيق عملي؟ الخوارزميات بلا شك مهمة، لكنها ليست الشيء الوحيد الذي ينجز البرنامج.

دعني أقرب لك الأمر، مما عرفته حول تطوير المواقع، تعلم المعايير القياسية XHTML وCSS لن يجعلان أي شخص يستطيع مباشرة تطوير موقع مثل Youtube، هناك فجوة كبيرة بين الفكرة وما يعرفه المرء، وتعليم لغة PHP مثلاً لن تساعده على تطبيق الفكرة فلا زالت هناك فجوات كثيرة، وتعليمه كيفية كتابة الخوارزميات لكي يكون الموقع أكثر سرعة وكفاءة لن تسد هذه الفجوات، هذا ما أقصده، خطوات عملية تسبق الخوارزميات.

عزوز الحسني يقول...

أحد المعلقين ذكر كتاب Computer Organization and Design هذا الكتاب متقدم جداً وهو يفيد لمن يريد تعلم لغات منخفضة المستوى مثل Assembly أو يريد معرفة كيف يعمل الحاسوب، لا أعتقد أنه ضروري لتعلم البرمجة بشكل عام يكفي كتب الخوارزميات وهياكل البيانات والتدرج في التطبيق.

وكما كتبت سابقاً: تعلم البرمجة في عشر سنين

عزوز الحسني يقول...

بعد قراءة تعليقك الأخير ربما تقصد تحليل البرنامج أو النظام، فهي الخطوة التي تسبق وضع الخوارزميات وهي تحتاج إلى الخبرة

Tarek Siala يقول...

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

محمد بدوي يقول...

اخي عبدالله قد يكون هناك فجوة او وصلة ناقصة في الموضوع فلو اردت مني ان اقوم بتصميم موقع مثل Twitter أو YouTube او FaceBook أو غيرها من المواقع فهذا ممكن لن اقول سهل و القصد بعد السهولة هو الوقت المطلوب لذلك

يعني من ناحية السهولة نأتي بموقع Twitter و الذي اعتقد انه لن ياخذ مني اسبوع بوضعي الحال (غير مافرغ)

طيب الاصعب ألا وهو YouTube لانه يحتاج إلى تطبيق أخر داخلي ليقوم بعملية معالجة الفيديو و تحويلها و هنا تحتاج إلى شخص خبير في مثل هذه التطبيقات او بسهولة ان اشتري تطبيق جاهز

يعني فهم كيفية سير التطبيق و الهدف منه يمكن اي مبرمج الى بنائه حتى لو احتاج الى مساعدات او اجزاء خارجية

مثلا عندما قمت ببناء تطبيق الاجهزة الكفية PDA و دخلت بنظم المعلومات الجغرافية GIS و حاجتي تطبيقي الى معرفة الاتجاهات من جهاز GPS المتضمن بالجهاز الكفي قمت في البداية بالبحث عن عنصر جاهز لاضمنه داخل تطبيقي و وجدت ولكن سعره كان مرتفعا بالاضافة الى ان طرق الترخيص كانت مزعجة

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

الخلاصة:
اي تطبيق يمكن بنائه مهما كان حجمه بمجرد معرفة الاساسيات و لديك تفكير منطقي

فالبيت الصغير او القصر الفاخر يبنون من الطوب نفس
الادوات الصغيرة نفسها

بالتوفيق

AAM يقول...

أحسن من رأيت في تعليم البرمجه

الأخ خالد الحر في عالم النور عندما شرح لغة الASP
فعلا عمله يعلمك الكثير
لانه يطبق مثال حقيقي

أما غالب الكتب التي رأيتها فكانت عباره عن مقدمة
ثم شرح معنى المتغيرات و المصفوفات بشكل عجييب ثم أمور متقدمة

طيب ماذا سيعرف القارئ بعد كل هذه الأكواد التي لا يعرف لماذا تكتب

فعلا طريقة خالد الحر ممتازة

kprogramer يقول...

أخي عبد الله ..
تعليقات الموضوع فعلا مفيدة جدا ,, وخاصة رد أخي محمد بدوي .. فهو لا يتحدث نظريا ولكن بشكل عملي بحت .. الكتب وحدها لا تكفي كما ذكرت .. يجب أن تنظر لبرامج مفتوحة المصدر أخرى لكي تزيد خبرتك بشكل أفضل .. يمكنك أيضا بتقسيم فكرتك إلى أفكار صغيرة .. مثلا أنت تحتاج إلى إدخال بيان في قاعدة بيانات ! تركز بحثك على هذا .. إلخ .. ويمكنك أيضا أن تعمل عملية عصف ذهني عن طريق المدونة هنا وتعرض الفكرة التي تريدها (طبعا أقصد الفكرة الصغيرة في المشروع وليس الفكرة ككل) وتناقشها معنا ويتم تحليل الموضوع .. فإن تم ذلك يسهل عليك بعدها تحويله لأي لغة برمجة لأنك تكون قد فهمته منطقيا أولا كيف يعمل !
وهذه مواقع للبرامج المفتوحة
http://sourceforge.net/index.php
http://www.codeplex.com
...
ربنا يوفقك :)

مدون يقول...

عبدالله ماتريد هو متوفر وموجود !

أنا شخصيا كنت أريد تعلم ruby on rails (اللغة واطار العمل)

اشتريت الكتاب وقرأته كل مايتعلق باللغة من مميزات وتوقفت ولم أقرأ الأجزاء اللي تختص ببداية التطبيق والتنفيذ هي لغة واطار عمل رائع جدا جدا لكن الدعم الموجود فقط كتب و مستندات لكني للأسف لن اقرأ أي شيء يختص بالروبي بعد الآن

لماذا ؟
بصراحة لا يوجد شيء بالعالم مثل لغات مايكروسوفت دعم هائل بالصوت والصورة عبر موقع msdn هناك اقسام خاصة لتعلم ال vb.net (بغض النظر عن المستندات المتوفرة في الانترنت و الكتب)

فأقول لك انصحك بهذه اللغة لأنك لن تحتاج للبحث عن مطورين

أسئلة لك يا عبدالله:
1- لماذا بايثون؟ لأني اتمنى اعرف مالمميز فيها ؟ (سمعت انها أسهل اللغات )

2-ولماذا تريد تعلم لغة قديمة قديمة جدا مثل سمول توك أو لغة أقدم منها مثل Lisp !!

لا يكون بس ناوي تبرمج لـ vacuum tubes computer !!!
(أتمنى ماتزعل من الدعابة :) )

غير معرف يقول...

"المبتدأ" هو ما قبل الخبر
المبتدئ هي الكلمة الصحيحة.

عبدالله المهيري يقول...

أشكر الجميع، هذا رد على البعض:

مدون: شخصياً أجد أن هناك أشياء في العالم مثل - أو تفوق - لغات مايكروسوفت، دروس بالفيديو وبالصوت والصورة وكتب مجانية وغير مجانية ودورات على الشبكة أو في معاهد وجامعات ووثائق ومكتبات مختلفة ومنتديات وغرف دردشة، كل شيء متوفر، عليك أن تبحث قليلاً.

أما اللغات، فليس لدي أدنى اهتمام بأي لغة احتكارية أو أي برنامج غير حر، البرامج الحرة - مفتوحة المصدر كما يقول البعض - هي ما أستخدمه في حاسوبي وما أعتمد عليه، لا أستخدم أي برنامج احتكاري ما لم يكن ذلك ضرورياً ولا يمكن الاستغناء عنه.

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

أما Smalltalk وLISP فهي لغات قديمة لكنها لا زالت تستخدم وعلى نطاق واسع اليوم، اهتمامي بالبرمجة ليس هدفه في النهاية إنتاج برنامج احتكاري أبيعه للناس، أنا مهتم بعلوم الحاسوب بشكل عام ومما قرأته عن لغات البرمجة لغة Lisp هي إحدى أفضل اللغات على الإطلاق من ناحية الأفكار التي تحويها وحتى الآن هناك آلاف من المبرمجين الذين لم يفهموا هذه اللغة ويظنون أن ما يستخدمونه اليوم أكثر كفاءة في حين أن Lisp قدمت أفكاراً منذ 50 عاماً ولا زال بعضها غير مطبق حتى اليوم.

سمولتلك لغة OOP كما يجب أن تكون لغات البرمجة بالكائنات، لغة سي بلس بلس وجافا وما شابهها لا تطبق البرمجة بالكائنات كما يجب، ومن ناحية أخرى، أرى أن لغة سمولتلك يمكنها أن تكون نظام التشغيل والبرامج وكل شيء يحتاجه المستخدم، هذه فكرة سطح المكتب التي ظهرت في زيروكس بارك ونقلتها أبل لحواسيبها بشكل مشوه ومن هناك انتقلت لكل أنظمة التشغيل الأخرى وضاعت أفكار متقدمة ظهرت قبل 30 عاماً ونحن اليوم نستخدم برامج ضخمة لا تستغل قدرات الحاسوب بشكل جيد.



غير معرف: الهمزات عقدتي! صححت الخطأ، أشكرك.