مقدمة

نشره foaad في الخميس, 10/11/2005 - 4:49ص

iNTRO مقدمة ... بقلم چف إلكنر

يدين هذا الكتاب بوجوده للتعاون الذي جعلته شبكة الانترنت و حركة البرامج الحرة ممكنا . المؤلفون الثلاثة, و هم مدرس جامعي , و مدرس في ثانوية , و مبرمج محترف , لم يلتقوا وجها لوجه حتى هذة اللحظة . لكنهم تمكنوا من أن يتعاونوا معا بشكل وثيق , عبر شبكة الانترنت , كما ساعدهم الكثير من الأشخاص الرائعين الذي تبرعوا بوقتهم و مجهودهم لكي يحسنوا هذا الكتاب . و نحن نعتقد بإخلاص أن هذا الكتاب هو شهادة حية على المنافع و على الامكانيات المستقبلية التي يحملها هذا النوع من التعاون , الذي وضع إطاره العام ريتشارد ستولمان و مؤسسة البرامج الحرة (Free Software Foundation ) .

كيف و لماذا بدأت باستعمال پايثون

في عام 1999 , تم تغيير اللغة المستخدمة في إمتحان المقرر المتقدم في علوم الحاسب لطلاب الثانوية , تم تغييرها من پاسكال إلى سي++ . و كما كان الأمر في كل المدارس الثانوية عبر الولايات المتحدة , كان لهذا تأثير كبير على المنهاج الذي أدرسه في الثانوية التي أعمل بها , ثانوية يوركتاون في مدينة آرلينغتون بولاية ڨرجينيا . بما أن المقرر مدته سنتان , و قد جرت العادة أن تستخدم اللغة نفسها في السنتين , منعا لإرباك الطلاب , فقد قررنا تدريس لغة سي++ في العام الدراسي 1997-1998 ليمكن للطلاب من المتابعة بسي++ و تقديم الامتحان بها في العام الذي يليه .

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

أردت لغة تعمل على حواسب المدرسة التي تشغل نظام تشغيل لينوكس , و تعمل أيضا على حواسب ويندوز و حواسب الماكنتوش التي يملكها الطلاب في منازلهم . أردت لغة مفتوحة المصدر , بحيث يمكن للطلاب اقتناؤها و تشغيلها في منازلهم بغض النظر عن دخل الأسرة . و أردت لغة يستعملها مبرمجون محترفون , و لها مجتمع نشط من المطورين , لغة تدعم البرمجةكائنية المنحى (Object Oreiented Programming ) و البرمجة الإجرائية ( Procedural Programming ) أيضا . و أهم نقطة بالتأكيد هي أن تكون لغة سهلة في التعلم و التعليم . عندما تفحصت خياراتي بناء على هذة المعايير , لم أجد إلا لغة ملائمة واحدة , و كانت هي پايثون .

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

البحث عن كتاب

كانت أكبر مشكلة واجهتها بعد أن قررت استعمال بايثون عوضا عن سي++ هي عدم توفر كتاب مدرسي ملائم , أو أي كتاب عن بايثون يمكن للطلبة أن يستخدموه كمرجع للمقرر , و هنا تدخل "المحتوى الحر" للمساعدة . كان ريتشارد ستولمان قد عرفني في وقت سابق من ذلك العام إلى آلان داوني , حيث أن كلينا كنا قد تحدثنا إليه عن رغبتنا في تطوير كتب و مواد تعليمية اخرى "حرة" . "حرة" بمعنى أنه يمكن توفيرها مجانا , و نسخها و تعديلها و ترجمتها و استلهامها في أعمال اخرى دون أي قيود , على شرط واحد و هو أن العمل الناتج هو أيضا "حر" , بنفس المعنى السابق . كان آلان قد كتب كتابا اسمه "كيف تفكر كعالم حاسبات : أسس البرمجة باستعمال لغة جافا" , لاستعمال طلابه من طلبة السنة الأولى في كلية الهندسة المعلوماتية(ملاحظة1) , و هو كتاب "حر" , بالمعنى المذكور آنفا . عندما قرئت هذا الكتاب عرفت للتو أنه الكتاب الذي كنت أبحث عنه , حيث أنه كان أوضح نص رئيته في حياتي للمبتدئين في علم الحوسبة , و كان التركيز فيه على العمليات الفكرية المتعلقة بالبرمجة بشكل عام و ليس على خصائص لغة معينة . إن كتاب آلان جعل مني معلما أفضل بمجرد أن أنهيت قرائته .

كان كتاب آلان ممتازا , لكن هذا لم يكن السبب الوحيد وراء إنجذابي إليه , بل أيضا أنه كان متوفرا تحت ترخيص ال GPL , بمعنى أنه كتاب حر , يمكن استخدامه كأساس لكتب اخرى دون أي قيود . و خطر لي , بعد أن قررت استخدام بايثون في الصف الذي ادرسه أنه ربما من الممكن "ترجمة" كتاب آلان من جافا إلى بايثون و استخدامه ككتاب مدرسي , خصوصا أنه لم تكن لدي في ذلك الوقت لا القابلية و لا الوقت الكافي لكتابة كتاب جديد من الصفر ,و أيضا , خطر لي أنه لو نجح هذا الكتاب , فسيكون دليلا على أن النموذج التعاوني في التطوير , السائد (و بنجاح ساحق) في عالم البرمجيات الحرة يمكن أيضا إستخدامه (أيضا بنجاح ساحق؟) في تطوير المواد التعليمية .

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

في النصف الثاني من الكتاب , و الذي يتعلق بالبرمجة كائنية المنحى (Object Oriented Programming) , أدركت حاجتي إلى شخص ذي خبرة عملية أكبر في البرمجة مني , لكنني لم أجد شخصا مستعدا للمساعدة مباشرة , و هكذا بقي الكتاب نصف-منجز لحوالي العام حتى قدم لي مجتمع المصادر الحرة مجددا المساعدة التي احتجتها : تلقيت رسالة إلكترونية من كريس مايرز عبر فيها عن اهتمامه بالكتاب , و كريس هو مبرمج محترف كان قد بدأ في تدريس مادة البرمجة (باستعمال بايثون!) في جامعة لاين الحكومية (مدينة يوجين في ولاية أوريجون في الولايات المتحدة) . كان كريس يبحث عن مواد تعليمية يمكنه استخدامها مع طلابه , و قاده هذا البحثإلى هذا الكتاب , و بدأ فورا بالإضافة إليه و تعديله ,كما أنه أضاف مشروعا جديدا إلى موقعنا سماه "برمجة بايثون المسلية" , و عمل مع بعض طلابي المتميزين كمعلم أعلى , يقودهم ألى أشياء لم أكن لأستطيع أن أقودهم إليها .

أوَّلُ مرّة

إن عملية ترجمة و أعداد "كيف تفكر كعالم حاسبات" التي قمنا بها في السنتين الماضيتين قد أكدت لي أن بايثون هي اللغة المثلى لتعليم البرمجة للمبتدئين .بايثون تجعل طرح أمثلة البرمجة أمرا سهلا جدا و تساعد المتعلمين الجدد على فهم الأفكار الجوهرية بسهولة فائقة .

يمكن استخدام أول برنامج في هذا الكتاب لتوضيح هذة الفكرة الجوهرية , البرنامج هو بطبيعة الحال البرنامج التقليدي الأول الذي يكتبه المبتدئون و قد اصطلح على تسميته ببرنامج "مرحبا !" (The "Hello , World!" Program) . انظر إلى نصه في لغة سي++ :

<br />
#include <iostream.h><br />
void main() {<br />
     cout << "Hello, World!." << endl;<br />
}<br />

و قارن ذلك بنصه في بايثون :

<br />
print "Hello, world."<br />

صحيح أن هذا برنامج بسيط جدا , لكن حتى في هذا البرنامج يبدو تفوق بايثون واضحا للعيان . مادة البرمجة التي أدرسها في ثانوية يوركتاون ليس لها متطلبات مسبقة , و لهذا فإن برنامج "مرحبا" آنف الذكر هذا هو أول برنامج يراه غالبية الطلبة في حياتهم . بطبيعة الحال , الكثيرون منهم قلقون بعض الشيئ , و على الأغلب سمعوا الكثير من الاشاعات أن"البرمجة صعبة جدا و معقدة جدا و من شبه المستحيل فهمها " . تدريس البرمجة باستخدام سي++ كان يجبرني على القيام بأحد أمرين , و أحلاهما مر , بعد كتابة هذا البرنامج : إما أن أشرح معنى عبارات "include" و "void main" و رموز الــ} و الــ{ , ما قد يؤدي إلى إرباك الطلبة في هذة المرحلة أو حتى زرع الخوف من البرمجة في قلوب بعضهم , و إما أن أقول لهم ببساطة : "لا تهتموا بهذة الأشياء المعقدة الآن , سأشرحها لكم لاحقا , و هذا قد يؤدي إلى نفس النتيجة . الأهداف التعليمية لمادة البرمجة 1التي كنت إدرسها هي تقديم فكرة العبارات البرمجية للطلاب و مساعدتهم على كتابة برنامجهم الأول , و هذا بالضبط ما يساعدهم عليه استخدام بايثون عوضا عن سي++ .

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

إن استخدام لغة عالية المستوى جدا مثل بايثون يمكن المدرس من تأجيل الحديث عن التفاصيل منخفضة المستوى و التي تتعلق ببنية الحاسب إلى الوقت الذي يحتاجها فيه الطلاب و يستطيعون الاستفادة منها و فهمها , و هكذا يمكن تقديم الأشياء المهمة أولا , و من ثم تقديم التفاصيل .من أوضح الأمثلة على هذا (الأساسيات و من ثم التفاصيل )الطريقة التي يدرس فيها مفهوم المتغيرات . في سي++ المتغير هو إسم لمكان في الذاكرة يحتوي على شيء . يجب أن "يعلن عن" المتغير قبل استخدامه و يحدد نمطه (type) , على الأقل جزئيا ليمكن تحديد حجم المكان الذي سيشغله . و هكذا فإن مفهوم المتغير مرتبط نوعا ما بعتاد الآله . مفهوم المتغير هو مفهوم أساسي جدا و هام جدا في البرمجة(و أيضا في الجبر) , و من الصعب فهمه حتى دون وجود كل التعقيدات الإضافية . الحديث عن البايتات و العناوين الذي يضطر مدرسوا البرمجة في سي++ إليه يزيد في الصعوبة على الطالب . في بايثون , من جهة اخرى , المتغير هو إسم يشير إلى شيء . و هذا أمر شبه بديهي للطلاب الجدد , و قريب جدا من مفهوم ال"متغير" الذي تعلموه خلال دراستهم للرياضيات (خصوصا الجبر) . سهلت بايثون حياتي و حياة الطلاب كثيرا , و لم نضطر لصرف الكثير من الوقت على المتغيرات و لم يجدوا الكثير من المشاكل معها .

هناك مثال آخر يمكنني ذكره في هذا السياق عن تسهيل بايثون لعملية تعلم و تعليم البرمجة , و هو عن النحو الذي تستخدمه بايثون من أجل التوابع (functions) . كان طلابي يجدون دوما صعوبة كبيرة في فهم التوابع. كانت مشكلتهم الأساسية هي فهم الفرق ما بين تعريف (أو إنشاء) تابع و ما بين إستدعاء (calling) هذا التابع, و زيادة على ذلك , أو ربما بسبب ذلك, كانوا يجدون صعوبة في فهم الفرق بين ال؟؟؟؟ (parameters) و ال؟؟؟؟(arguments). كانت بايثون الحل لهذة المشكلة, بنحوها شديدي الوضوح و الجمال : يبدأ تعريف التابع دائما بكلمة مفتاحية (keyword) معينة هي def و هي إختصار لكلمة definition و هي كلمة انجليزية تعني "تعريف" . و هكذا يمكنني أن أقول لطلابي : "بكل بساطة, إذا أردتم تعريف تابع جديد, إبدئوا بــdef ; و عندما تريدون إستدعاء ذلك التابع, أدخلوا إسمه". . ال؟؟؟ في التعريف أما ال؟؟؟ فهي عند الإستدعاء. الموضوع بسيط! ليس هناك في بايثون أي ؟؟؟؟ (return types) أو ؟؟؟؟؟ (parameter types) أو ؟؟؟ ؟؟؟ ؟؟؟ ؟؟؟ (reference and value parameters) تعيق الطلاب عن الفهم السريع, و لهذا يمكنني أن أدرّس مفهوم التوابع في وقت أقل بكثير من الوقت الذي كنت أستغرقه سابقا, و يبدو لي أن الطلاب يفهمونه أكثر عندما يدرسونه بواسطة بايثون. ما بعد كتابة الكتاب

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

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

أؤمن أنه إذا عملنا سويا, و تعاونّا معا, يمكننا أن نزيد نوعية المواد العلمية المتوافرة, و يمكننا أيضا أن نوفر الكثير من الوقت الثمين على أنفسنا. أدعوك إلى أن تنضم إلينا, و أنا متشوق ﻷسمع رأيك و اقتراحاتك! إكتب إلى المؤلفين على هذا العنوان : feedback@thinkpython.com .

جفري إلكنر.
ثانوية يوركتاون.
مدينة آرلينجتون, ولاية فرجينيا, الولايات المتحدة الأمريكية.
________
ملاحظات:
1.تعرف التوابع إيضا باسم "الدوال"


خيارات عرض التعليق

اختر الطريقة التي تفضلها لعرض التعليقات، ثم اضغط على "احفظ الإعدادات" لتفعل التغيرات.
صورة ahnaqsh

بالمناسبة , هل

بالمناسبة , هل ترجمة functions الصحيحية هي وظائف ؟ أو ربما شيء آخر ؟

صورة strontium90

شكراً على

شكراً على المبادرة ahnaqsh.
 
كتب abnaqsh:

بالمناسبة , هل ترجمة functions الصحيحية هي وظائف ؟ أو ربما شيء آخر ؟

بتوقع ترجمتها لـ "توابع" أفضل لأنو الطلاب والعاملين بالرياضيات والبرمجة معتادين عليها أكتر.

خلينا نتفق على

خلينا نتفق على بعض المصطلحات:
Function = تابع
Procedure = إجرائية
Object-Oriented = غرضية التوجه
Data structures = بنى المعطيات
ما بعرف اذا هالمصطلحات دقيقة أو لأ بس هي المصطلحات المستخدمة عنا.

رح بدلون بالنص السابق اذا ما حدا عندو مانع.

صورة ahnaqsh

استعمال الويكي

استعمال الويكي كتير متعب, عم بعمل كتابة النص على mozilla-composer , على أنو صفحة واحدة, بس هون بعد ما أعملو قص و لصق (بحالة html code) عم يطلع كتير أخطاء..مثلا الـsmileys عم يطلعولي كل شوي, و تنسيق الصفحة خطأ, و headings كلون رايحين و طالعين على أنن نص عادي ...

صورة ahnaqsh

و الكود عم يطلع

و الكود عم يطلع غلط كمان, حتى لو عملتوا <pre></pre>

صورة ahnaqsh

في حدا ممكن

في حدا ممكن يساعدني بحل هالمشكلة؟ عم بكبس شي زر غلط أو عم بنسى شي شغلة؟

hi it's first time use this

hi it's first time use this wici

صورة أيمن

بتقدر تبعتلي

بتقدر تبعتلي ملف HTML لشوف شو الموضوع؟
aymn at csc-sy net

ما بتقدر تستخدم الكتابة العادية بدل محرر HTML؟ لأنو هيك بكون مقارنة نسخ الصفحة أسهل.

صورة أيمن

بالنسبة للكود

بالنسبة للكود استخدم:
[ code ] [/ code ]
أو
< code >

بلا الفراغات طبعا.

صورة ahnaqsh

شكرا كتير إلك

شكرا كتير إلك أيمن, رح إبعت الملف ان شاء الله. للأسف, حاسس أنو ضروري الــHTML لإنو النص الأصلي في شغلات متل تشديد الكلمات الجديدة أول مرة تطلع, و التعاريف, و هيك شي, و في كمان صور و جداول..

جربت إستخدام <code>  و كمان ما عم يمشي الحال , الحقيقة أنو الكود على هي الصفحة كان محطوط فعلا بين <code> </code>  بس هﻷ وقت تطلعت عليه شكلن تحولو لـ <p> </p> مدري ليش.. على كل, رح ابعت صفحة HTML هلأ, و شكرا كتير على المساعدة Smile

صورة ahnaqsh

سؤال بسيط بس, في

سؤال بسيط بس, في طريقة لحذف التعليقات؟ شايفهم صاروا أكتر من الصفحة نفسها..

صورة أيمن

معك حق، على كل

معك حق، على كل إذا بتحب ممكن نلغي نشر تعليقات التنسيق، بما أنو انحل الموضوع.

صورة ahnaqsh

testing.

testing.

السلام عليكم

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

السلام

السلام عليكم
تدوين رائع
ولكن لم ياشباب خرجتم عن نص الموضوع
وبالنسبة للرد
>>خلينا نتفق على بعض المصطلحات:
Function = تابع<<
Function تعنى دالة فى اصطلاح المبرمجين