ما هي البرمجة
البرمجة تعني كتابة قائمة تعليمات ينفذها الحاسوب بالترتيب نفسه وبالصيغة نفسها التي كتبتها، دون أن يخمن مقصدك. والعمل الحقيقي ليس الكتابة: بل تحويل شيء غامض في ذهنك إلى جمل لا تترك مجالا للتأويل.
- الدرس 1 من 14
- مبتدئ
- مجاني، دون تسجيل
الخطوات الخمس التي يمر بها كل برنامج
-
1
المسألة
ما الذي يجب حله بالضبط، وما المدخل، وكيف يبدو المخرج.
-
2
الخوارزمية
خطوات العمل بكلماتك، قبل كتابة سطر واحد من الشفرة.
-
3
الشفرة
الخطوات نفسها، لكن بقواعد لغة بعينها.
-
4
التنفيذ
أول لحظة تعرف فيها ما قلته فعلا، لا ما ظننت أنك قلته.
-
5
الإصلاح
الخطوة التي لا تنتهي وتأخذ أكبر وقت عند أي مبرمج.
تبدو هذه الخطوات الخمس خطية وهي ليست كذلك. فأنت في الواقع تعود باستمرار من الإصلاح إلى الخوارزمية، وهذا الذهاب والإياب هو العمل نفسه لا علامة فشل.
آخر مراجعة: تُراجع الحقائق وأسماء الأدوات في هذا الدرس مقابل مصادرها في هذا التاريخ.
ما البرنامج؟ أبسط تعريف ليس خاطئا
البرنامج قائمة تعليمات ينفذها جهاز بالترتيب. والفرق بينه وبين وصفة طبخ تعطيها لإنسان يظهر هنا: الإنسان يملأ الفراغات ويفهم معنى «قليل من الملح». أما الجهاز فلا يفهم ولا يسأل.
كل ما لم تقله لا يحدث، وكل ما قلته خطأ يحدث بالخطأ نفسه تماما. جملة بسيطة تختزل صعوبة هذه الحرفة كلها. وأغلب الأخطاء التي ستراها لا تأتي من جهلك باللغة؛ بل من أن الجملة في ذهنك كانت تختلف قليلا عن الجملة التي كتبتها.
افصل ثلاث كلمات منذ البداية. الشفرة هي نص التعليمات، ما تكتبه وتحفظه على القرص. ولغة البرمجة هي القواعد التي يجب أن يلتزم بها ذلك النص كي يمكن ترجمته. والبرنامج هو ما يحدث حين يُترجَم ذلك النص ويُنفَّذ. النص يبقى؛ أما البرنامج فيحيا في الذاكرة، ويؤدي عمله، وينتهي.
إذن أن تكون مبرمجا يعني أن تملك هذه القدرة: أن تكتب ما تريده بدقة ووضوح يكفيان لكي ينفذه جهاز لا يفهم شيئا. أما اللغة والأدوات فتأتي لاحقا.
برنامج حقيقي في خمسة أسطر
هذه الأسطر الخمسة بلغة بايثون تؤدي عملا حقيقيا: تمر على مجلد مملوء بالصور وتطبع أسماء الملفات التي تتجاوز حجما معينا. وهذه المهمة تظهر في كل موقع، لأن الصور الثقيلة أبطأ جزء في أغلب الصفحات.
from pathlib import Path
for f in Path("images").rglob("*.jpg"):
size = f.stat().st_size
if size > 200_000:
print(f.name, round(size / 1024), "KB")اقرأه سطرا سطرا. السطر الأول يجلب أداة التعامل مع المجلدات. والثاني يقول: داخل المجلد المسمى images وكل مجلداته الفرعية، خذ كل ملف ينتهي بـ jpg واحدا تلو الآخر. والثالث يأخذ حجم الملف بالبايت ويحفظه في مكان اسمه size. والرابع يضع شرطا: فقط إذا كان هذا العدد أكبر من مئتي ألف. والأخير يطبع اسم الملف مع حجمه.
ثلاثة أشياء في هذه الأسطر الخمسة ستراها في كل لغة أخرى: حلقة تكرر عملا على كل عضو في مجموعة، وشرط يقرر، ومتغير يحفظ شيئا مؤقتا. وإذا فهمت هذه الثلاثة في لغة واحدة، صارت اللغة التالية تغييرا في الشكل أكثر منها فكرة جديدة.
وشيء لا يملكه هذا البرنامج: لا يسأل في أي موضع هل مجلد images موجود أصلا. فإن لم يكن موجودا لا يحدث شيء ولا تُطبَع رسالة خطأ، لأن الحلقة تدور على مجموعة فارغة وتنتهي. وبرنامج لا يعمل ولا يشتكي هو أكثر الحالات إرباكا للمبتدئ، وهو ما يتحدث عنه قسم «من عملنا نحن» أسفل هذه الصفحة.
من المسألة إلى شفرة تعمل، في خمس خطوات
الخطوة الأولى هي المسألة، وهي أقصر ما يُكتب: ما الذي يجب حله بالضبط، وما المدخل، وكيف يبدو المخرج. «موقعي بطيء» ليست مسألة؛ أما «أريد قائمة الصور التي تتجاوز مئتي كيلوبايت» فهي مسألة.
والخطوة الثانية هي الخوارزمية، وهي التي يتخطاها الجميع تقريبا. والخوارزمية هنا تعني أن تكتب خطوات العمل بكلماتك قبل أي سطر شفرة: افتح المجلد، خذ الملفات واحدا واحدا، انظر إلى حجم كل منها، وإن تجاوز مقدارا معينا فاكتب اسمه. وإن لم تستطع شرح مهمة خطوة خطوة بلغة عادية، فمشكلتك ليست بايثون.
والخطوة الثالثة هي الشفرة: الخطوات نفسها، لكن هذه المرة بقواعد لغة. والرابعة هي التنفيذ، وهي أول لحظة تعرف فيها حقا ماذا قلت. والخامسة هي الإصلاح.
الخطوة الخامسة لا تنتهي بل تتكرر، وهي تأخذ أكبر وقت عند كل مبرمج. الصورة الشائعة أن المحترف يكتب الشفرة صحيحة وينتهي الأمر؛ والذي يحدث فعلا أن المحترف يكتشف أسرع أين وقع الخلل. وقاعدة صغيرة تجعل هذه الحلقة أسرع بأضعاف: غيّر شيئا واحدا في كل مرة. فإن غيّرت ثلاثة أشياء معا ونجح البرنامج، لن تعرف أيها كان السبب، وستبدأ في المرة التالية من الصفر مجددا.
الحلقة التي يحدث فيها التعلم فعلا
- 1 اكتب
- 2 نفّذ
- 3 اقرأ ما قاله
- 4 غيّر شيئا واحدا
لهذه الحلقة شرط واحد: غيّر شيئا واحدا في كل مرة. فإن غيّرت ثلاثة معا ونجح الأمر، لن تعرف أيها كان.
لماذا لا يمضي أغلب وقت المبرمج في كتابة الشفرة
ما يظهر من الخارج هو الكتابة على لوحة المفاتيح. أما تحت سطح الماء فتجلس أربعة أعمال أخرى لا تصنع لها أي دورة فيديو.
أولا قراءة شفرة مكتوبة من قبل. فالشفرة تُقرأ أكثر بكثير مما تُكتب، سواء كانت لك أم لغيرك. وثانيا إعادة إنتاج الخطأ: فما دمت لا تستطيع أن تجعل الخلل يتكرر عمدا، فكل تغيير تجريه تخمين، وقد لا يكون للشيء الذي بدا أنه أصلح المشكلة أي علاقة بما فعلت.
وثالثا التسمية واتخاذ القرار. أسماء المتغيرات وطريقة توزيع العمل بين الدوال ليست زينة؛ فالاسم السيئ يتحول بعد ثلاثة أشهر إلى خلل حقيقي، لأنك أنت نفسك تنسى ما كنت تقصده. ورابعا الانتظار: التثبيت والتشغيل والاختبار وعودة الخادم للعمل. وقت لا يحسبه أي منهج، ويوجد في كل يوم عمل حقيقي.
لا نقول هذا لتثبيط الهمة، بل العكس: إن عرفت أن العمل الحقيقي بهذا الشكل، فلن تستنتج في أول مرة تعلق فيها ساعة على خطأ واحد أنك بلا موهبة. تلك الساعة هي العمل نفسه.
ما يُرى، والأربعة التي لا تُرى
كتابة الشفرة
الجزء الوحيد الذي يُرى من الخارج، والوحيد الذي له فيديوهات.
-
قراءة شفرة مكتوبة من قبل
الشفرة تُقرأ أكثر مما تُكتب، سواء كانت لك أم لا.
-
إعادة إنتاج الخطأ
ما دمت لا تستطيع تكرار الخلل عمدا، فكل تغيير تخمين.
-
التسمية واتخاذ القرار
الاسم السيئ يتحول بعد ثلاثة أشهر إلى خلل حقيقي.
-
الانتظار
التثبيت والتشغيل والاختبار وعودة الخادم. وقت لا يحسبه أي منهج.
هذا التقسيم ليس نسبة مقيسة ولا نملك رقما له. إنه فقط ترتيب الأعمال التي تستهلك الوقت وتبقى غير مرئية في الدروس.
ما الذي تحتاجه بالضبط لكي تبدأ؟
حاسوب عادي، ومحرر نصوص مجاني، ولغة، وطرفية. هذا كل شيء. ولا يكلف أي من هذه الأربعة مالا ولا يحتاج أي منها عتادا غاليا؛ فالبرنامج الذي رأيته في هذا الدرس يعمل على أضعف حاسوب محمول تملكه.
الطرفية هي تلك النافذة السوداء التي يخافها المبتدئون، وهي في الحقيقة مجرد المكان الذي تعطي فيه الحاسوب أمرا دون البحث عن زر. تعلمها يستغرق نصف ساعة، وبعدها ينجز نصف عملك هناك.
وموقفنا، وهو لا ينسجم مع طريقة الإعلان عن أغلب الدورات: لا تشترِ دورة قبل أن تكتب عشرة أسطر شفرة. اختر أولا مهمة صغيرة حقيقية من حياتك، كترتيب أسماء ملفات أو عد شيء في ملف نصي، وابنِها بالاستعانة بالتوثيق وبضع عمليات بحث. فإن شعرت بعدها أنك ما زلت تحتاج مسارا منظما، فاشترِ الدورة حينئذ وأنت تعرف ما الذي تبحث عنه.
وهناك طريق أقصر يناسب كثيرين أكثر: بدل لغة عامة الأغراض، ابدأ ببناء صفحة ويب. سترى النتيجة في المتصفح، والتغذية الراجعة فورية، وأفكار الحلقة والشرط والمتغير نفسها تنتظرك لاحقا في جافاسكريبت.
البرمجة وكتابة الشفرة وهندسة البرمجيات: ما الفرق؟
في الحديث اليومي تُستعمل هذه الثلاثة بديلا عن بعضها، ولا بأس بذلك. أما بدقة: كتابة الشفرة هي فعل كتابة التعليمات بلغة ما، والبرمجة تشمل عمل حل المسألة كله، وكتابة الشفرة خطوة واحدة منه، وهندسة البرمجيات تبدأ في اكتساب معنى حين يعمل عدة أشخاص على شيء واحد ويلزم أن يبقى ذلك الشيء سنوات: إدارة الإصدارات والاختبار والتوثيق والتسليم.
وهذا التمييز مفيد عمليا. فإن كنت تتعلم، فأنت تبدأ بكتابة الشفرة، لكن ما تحتاج تمرينه فعلا هو البرمجة، أي تلك الخطوة الثانية التي يتخطاها الجميع. وهندسة البرمجيات ليست شيئا تتمرن عليه في البيت أيضا؛ إنما تحتاجها حين تصيرون عدة أشخاص، أو حين يكبر كودك حتى تضيع أنت نفسك داخله.
المسار السريع مع الذكاء الاصطناعي
ما صار أسرع حقا للمتعلم اليوم ليس إنتاج الشفرة؛ بل امتلاك معلم لا يتعب ويجيب في الثانية بعد منتصف الليل. والفرق بين من يتقدم بهذه الأداة ومن يتخلف يسعه سطر واحد: الأول يطلب شرحا، والثاني يطلب شفرة. ونموذج من الطبقة المتقدمة أنسب لهذا من نموذج سريع ورخيص، لأن العمل عمل حكم لا عمل آلي؛ واختيارنا الحالي موجود في قسم الذكاء الاصطناعي في هذا الموقع.
- اكتب في جملة واحدة ما تريد إنجازه، وحدد مدخله ومخرجه. هذه هي الخطوة الوحيدة التي لا يستطيع أي نموذج أن يقوم بها عنك، لأنه لا يعرف ماذا تريد.
- املأ الوصفة أدناه وسلمها. اطلب أصغر برنامج يؤدي المهمة لا أكملها؛ فثلاثون سطرا لم تفهمها أسوأ من خمسة تفهمها.
- شغّله بنفسك. وإن أعطى خطأ، فأعد نص الخطأ كاملا كما هو، لا فهمك أنت له؛ ففهمك هو بالضبط ما لا تعرفه بعد.
- وحين يعمل، شغّل النسخة التي فيها خطأ متعمد وابحث عن الخطأ بنفسك. هذا هو التمرين الحقيقي، لا نسخ النسخة الصحيحة.
- لا تنتقل إلى المهمة التالية قبل أن تستطيع قول ما يفعله كل سطر دون النظر. وهذا المقياس الوحيد في هذا الطريق الذي يعطيك شيئا حقيقيا.
وصفة جاهزة للنسخ
الدور: معلم برمجة لشخص لم يكتب سطر شفرة واحدا حتى اليوم.
ما أريد إنجازه:
{اكتب المهمة في جملة واحدة}
المدخل: {ما الذي يُعطى للبرنامج}
المخرج: {ما الذي يجب طباعته أو إنتاجه بالضبط}
اللغة: {بايثون، ما لم تفضل غيرها}
قواعد الإجابة:
١. أصغر برنامج يؤدي هذه المهمة، لا أكملها. دون مكتبات إضافية ودون إعدادات.
٢. تحت البرنامج، اشرحه سطرا سطرا، جملة واحدة لكل سطر.
٣. قل في أي حالة لا يعمل هذا البرنامج بصمت ولا يعطي أي خطأ.
٤. في النهاية، أعطِ نسخة ثانية فيها خطأ واحد بالضبط، ولا تقل أين هو.
قبل أن تثق بالناتج: النموذج لا يشغّل البرنامج ما لم تمنحه الأدوات لذلك، فلا تصدق عبارة «جُرّب ويعمل» قبل أن تشغّله أنت. وإن لم تجد الخطأ المتعمد في الخطوة الرابعة، فذلك البرنامج ليس لك بعد: اطلب الشرح من جديد، لا النسخة الصحيحة.
الذكاء الاصطناعي في هذا العمل
أفضل استخدام لنموذج لغوي عند من بدأ للتو ليس أن يكتب البرنامج بدلا عنه؛ بل أن يشرح. لم تفهم سطرا، فاسأل. جاءك خطأ، فسلّم نصه. كتبت شفرة تعمل لكنها تبدو سيئة، فاسأل أي جزء يمكن تبسيطه ولماذا. وموقفنا صريح: ما دمت تتعلم، دعه يشرح ويمتحنك، لا أن يكتب نيابة عنك.
أدوات تساعد فعلا
- Gemini يحمل وضعا منفصلا للدراسة اسمه Guided Learning يطرح أسئلة بدل تسليم الأجوبة ويلخص في نهاية الموضوع؛ وهذا بالضبط السلوك الذي تريده للتعلم. وصفحة غوغل نفسها تقول إن تطبيق جيميناي على الويب يعمل في أكثر من ٢٣٠ دولة وإقليما، وإيران ليست في تلك القائمة.
- Claude جيد في شرح مقطع شفرة وقراءة رسالة خطأ، وحين تطلب أقصر نسخة يضيف من عنده أقل. وإيران ليست في أي من قائمتي الدول المدعومة لدى أنثروبيك؛ قرأنا ذلك في صفحة أنثروبيك نفسها لا عبر اختبار شبكة.
- ChatGPT الخيار الأشيع ومقبول لهذه المهمة. وليست لدينا صفحة له في قسم الذكاء الاصطناعي بعد، فلا ندّعي هنا شيئا عن إتاحته أو سعره.
اين ينقلب ضدك
الخطر الأكبر على المبتدئ ليس أن يعطيه النموذج شفرة خاطئة؛ بل أن يعطيه شفرة صحيحة. فبرنامج يعمل وأنت لا تعرف لماذا يعمل لم يضف إليك شيئا، وأول يوم يتعطل فيه تقف خالي اليدين. وعادتان تمنعان ذلك: اطلب دائما أصغر نسخة، وخمّن المخرج قبل كل تشغيل. والخطر الثاني أوضح: يقول النموذج عن حاسوبك، بالنبرة الواثقة نفسها، شيئا غير موجود، كاسم أمر أو مسار ملف. وأنثروبيك نفسها تسمي هذا هلوسة في وثائقها وتشرح كيفية تقليله، أي أن الجهة الصانعة تعامله ضعفا حقيقيا لا إشاعة. والقاعدة بسيطة: كل ما يقوله النموذج عن نظامك يجب أن يُقاس بتشغيل حقيقي. ولمعرفة كيف يمكن الدفع لكل من هذه الأدوات من إيران، انظر دليل الشراء.
المصادر: Anthropic: reduce hallucinations Anthropic: supported countries Google: where the Gemini web app is available Google: how Guided Learning can help you study
حدود هذه النصيحة
هذا الدرس يعطيك خريطة لا مهارة. لا يصير أحد مبرمجا بقراءته، كما لا يصير أحد سباحا بقراءة قواعد السباحة؛ كل ما يفعله أن يجعل الأسطر العشرة الأولى أقل إخافة. وثانيا، مثال هذه الصفحة بايثون ونحوه نحو بايثون؛ فالحلقات والشروط والمتغيرات موجودة في كل مكان لكن صيغة كتابتها تختلف بين لغة وأخرى. وثالثا، لا شيء في هذه الصفحة يقول لك ماذا تبني. فتلك المسألة ليس لها جواب تقني، وجوابها يأتي من عملك أنت أو حياتك.
من عملنا نحن
يوم مراجعة هذا الدرس، شغّلنا الأسطر الخمسة نفسها على مجلد الرفع الخاص بهذا الموقع. فُحص ٣١٨ ملف jpg وطُبع ١٠٠ سطر. وكان أول سطر عاد ملفا بحجم 199 KB، تحت برنامج يفترض أن يعرض فقط الملفات الأكبر من ٢٠٠ كيلوبايت. ولم يخطئ البرنامج في شيء: فالشرط size > 200_000 يعد بالبايت، بينما round(size / 1024) يقسم على ١٠٢٤، فيخرج ملف حجمه ٢٠٤١٢٥ بايت بالضبط ١٩٩. الجملة التي في أذهاننا لم تكن الجملة التي كتبناها، وهذا كل ما يريد هذا الدرس قوله. وإن أردت أن ترى ذلك بنفسك، فشغّل الأسطر الخمسة على أي مجلد صور وقارن أول سطر مخرَج بالشرط الذي كتبته.
اسئلة متابعة حقيقية
هل البرمجة صعبة؟
ليست صعبة، بل بطيئة. لا مفهوم في الأسبوع الأول أصعب من قراءة خريطة، لكن ترسّخه يحتاج تكرارا، وأغلب من يتركون لا يتركون عند مفهوم بل عند أول خطأ لا يفهمونه. فإن أخذت رسائل الخطأ على محمل الجد، تكون قد تجاوزت الجزء الصعب.
هل أحتاج الإنجليزية لأبرمج؟
كلمات اللغة نفسها قليلة وتُحفَظ: بايثون على هذا الخادم فيه ٣٥ كلمة مفتاحية، ويمكنك عدّها بنفسك بالأمر python3 -c "import keyword; print(len(keyword.kwlist))". أما ما يحتاج الإنجليزية فعلا فهو التوثيق ورسائل الخطأ، والترجمة الآلية اليوم تكفي لذلك. فغياب الإنجليزية ليس سببا لعدم البدء، لكن قراءة الإنجليزية التقنية تضاعف سرعتك.
كيف أعرف إن كانت البرمجة تناسبني؟
ابحث عن مهمة متكررة في أسبوعك تُضجرك، واكتب عشرة أسطر تؤديها. فإن كانت لحظة نجاحها ممتعة لك، فقد حصلت على جوابك؛ وإن شعرت بالارتياح لانتهائها فقط، فأنت غالبا تريد أداة لا برمجة، وهذا اختيار صحيح تماما.