البايثونية
مقدمة
بسم الله الرحمن الرحيم. والحمد لله والصلاة والسلام على رسول الله وآله وصحبه ومن والاه. أما بعد.
لماذا نبرمج؟
ظل الذكاء الاصطناعي طموحًا عاليًا منذ بزوغ فجر علوم الحاسب (1953). وما زال هذا الهدف دافعًا قويًّا لكل من فهم أننا باختراع الحاسب (1833 - 1871) استطعنا محاكاة المنطق في آلات صماء. ولا حد لإمكانيَّة هذا المعالِج الآلي إلا تعبيرك اللغوي أيها الناطق البشري. فهذا جانب المعالجة.
وجانب الإدراك فيه:
أدوات الإحساس التي تُدخِلُ المرئيات والمسموعات ونحوها ؛ وقد تم محاكاتها بآلة التصوير (كاميرا) ولاقط الصوت (مايكروفون). وكذلك أجهزة استشعار دقيقة مثل مستشعر الحرارة أو الرطوبة أو أجهزة قياس المسافة أو ماسحات البصمة أو الرنين المغناطيسي (MRI) أو الموجات الكهرومغناطيسية في الأقمار الصناعية وأجهزة الملاحة الجوية والبحرية والبوصلة أو ميزان التسوية الأفقية (Gyroscope) وغيرها كثير.
ومنها ما يُسجل يدويًّا كما يكون في المستشفى: العمر والوزن والطول، أو بيانات الحضور والانصراف أو المبيعات اليومية، أو بيانات طلاب أو متدربين في دورة تدريبية أو سجلات المخزون ونحو ذلك. وهي كثيرة جدًّا.
ثم أدوات الاستيعاب وهي التي تجمع المحسوسات في وعاءٍ واحدٍ للاعتبار جُملةً واحدة، وقد تم محاكاتهُا بما نسميه الذاكرة (وهي على مراحل تَبعُد وتَقترب من مركز المعالجة). وتشبه الذاكرة في الجهاز ما يراه الشخص في الوقت الواحد أو يمكن تصوُّرُه في الذهن وتخيله في لحظة واحدة. أما الذكريات المخزنة لدينا ، وما نكتبه في مذكرات فيكون مسجلاً في أجهزة التخزين.
ثم تأتي أدوات المعالجة وهي الآلات القابلة للبرمجة؛ مثل وحدة المعالجة المركزية (CPU) ووحدة المعالجة الرسومية (GPU) وغيرها؛ حيث يوضَع المنطق المترجَم من لغات البرمجة ويشغِّل هذه الإلكترونيات المجهرية لتحقيق مقصوده منها.
لمن هذا الكتاب؟
وُلِد الكتاب أثناء تدريسي لمادة البايثون لخريجي التخصصات التقنية تمهيدًا للدخول في علوم البيانات والذكاء الاصطناعي. فأردت أن أضع مادة جامعة لأهم مفاهيم البرمجة بلغة بايثون. فهي مادة شاملة للفصول المؤسسة التي يحتاجها المبرمج في مشواره ذلك.
ثم راجعته فراعيتُ أصحاب التخصصات والميول الأخرى؛ فلم أجعل فيه ما يختصُّ بفهمه أصحابُ التخصص. وحاولت أن يرى المتعلم اتصال النظرية بالتطبيق بأسلوب مباشر ليس فيه تطويل الكلام. فهو مناسب للمبتدئ، وكذلك لمن أراد سد فجوات وجدها بعد ممارسة؛ ليعود بأساس قوي متين -بحول الله-.
وهو كذلك معينٌ لمن أراد تدريس البرمجة منطلقًا من لغة بايثون؛ فقد جمعتُ فيه ما تفرَّق ونظمتُه بعد نظرٍ في عدة مؤلفات مماثلة، وعلى ما رأيتُ أنه أنفع للمتعلم بأخصر طريق. ولستُ استغني عن إسهاماتكم. فبرمجية الكتاب مفتوحة ومتاحة على منصة GitHub للمساهمة بالإشكالات، خصوصًا فيما يتعلق بالتطبيقات والمسائل. ومرحبًا بمن أراد البناء.
أهداف الكتاب
- تمكين المتدرب من مهارة قراءة وكتابة قطع بايثون وتشغيلها والاستفادة من نتائجها.
- تمكين المتدرب من البنى الأساسية في لغة بايثون وهي: الأعداد، الشرط والتكرار، الإجراءات، الجموع (المرتبة والمرقومة)، النص، الوقت والتاريخ، صياغة البيانات وحفظها واسترجاعها، والتعامل مع الأخطاء.
- تمكين المتدرب من قراءة توثيق البرمجيات الأخرى والاستفادة منها بكتابة برمجية تكامل بلغة بايثون؛ سواء كانت مكتبات أو خدمات برمجية عبر الشبكة العالمة.
بتحقق الهدف الثالث، تفتح لك أبواب البرمجة -بإذن الله-. انظر مكتبة البرمجيات.
لماذا وقع الاختيار على لغة بايثون؟
يقع الاختيار على لغة بايثون كثيرًا لأمور:
- السهولة: ففي البداية يحس المتعلم أنه يتعلم لغة إنجليزية بقواعد معيَّنة
- العموم: فهي ليست مختصة مثلاً ببرمجيات المواقع فقط؛ بل مجالات تطبيقاتها متنوعة
- القبول فالجهود متظافرة على خدمة مكتباتها من المجتمعات التي تتمحور حول نوع ما من التطبيقات. وهذا يسهِّل على الجميع البناء على الجهود المتراكمة.
مجالات لغة بايثون
إذا نظرنا في إحصاء JetBrains 2023 نجد مجالات استعمال لغة بايثون:
- 47% تحليل البيانات
- 42% تعلم الآلة (الذكاء الاصطناعي)
- 39% تطوير المواقع
- 31% برمجة كاسحات المواقع (التي تجمع البيانات)
- 30% أتمتة إدارة الأنظمة والبنية التحتية التقنية
- 26% أتمتة اختبار البرمجيات
- 23% أغراض تعليمية
- 22% صناعة برمجيات أوليَّة (أي لسهولتها)
وانظر إحصاء JetBrains 2024 لمقارنة بايثون مع غيرها من اللغات، حيث يظهر في الجدول التالي توزيع استعمال المبرمجين للغات في مختلف المجالات. ويظهر لنا أن بايثون هي أكثر اللغات انتشارًا بين المجالات التقنية؛ فتعلمها يعطيك أوسع فرصة في المجالات:
وإليك بعض الشركات التقنية التي قامت على بايثون: Instagram، Spotify, Reddit, Netflix, Dropbox, Quora, Pintrest.
بايثون وحدها لا تكفي
الواقع أن ليسَ ثمة لغة واحدة تحقق كل متطلبات بناء التطبيق؛ بل يغلب على المشاريع البرمجية تعدد اللغات فيها، وإن كانت مشاريع فردية صغيرة. وليست بايثون مقصودة لذاتها. فإن من منافع التعلم بطريقة تأصيلية صحيحة؛ أن تعلُّمَك للغة الثانية يصبح أسهل؛ وقد تختلف أساليب التعبير بين لغة وأخرى، إلا أن المفاهيم متشابهة.
منهجية الكتاب
تم تقسيم الكتاب ليكون في الباب أربعة جوانب:
- المفاهيم حيث التعريفات والأقسام والقواعد (وليست فيه أمثلة وتطبيق).
- التطبيقات: نرى فيه كيف نضع ما تعلمنا في سياقات مختلفة
- التمارين: يأتي دورك لممارسة ما تعلمت
- الحلول: لترى طريقة أخرى لحل التمرين
موضوعات الكتاب
نبدأ بمقدمتين:
المقدمة الأولى عن لغة البرمجة: مفرداتها وجملها وقواعدها ونموها بالمكتبات الأساسية والخارجية.
المقدمة الثانية عن معمارية فون نويمان: الإحساس والاستيعاب والمعالجة والتخزين.
وبهتين المقدمتين يتكون لدينا تصوُّر عن ماهية لغة البرمجة وأجزاء الحاسب الأساسية التي تعمل فيها اللغة.
الباب الثاني عن الأعداد: ندخل في كيفية التعبير عن الحِساب البسيط كعملية الجمع. ففيه الحساب والمقارنة، وترتيب العمليات، والتعيين النسبي، ووحدة الرياضيات، ومجموعة الأعداد، وأنواع الأعداد (الصحيح والمنطقي والعشري)، والفرق بين النوع العددي والنصي، وكتابة القيم العددية.
الباب الثالث عن الشروط والتكرار: فنتعلم كيفية تعليق تنفيذ جملة على شرط، وكذلك كيف نختار أن نكرر مجموعة من العمليات عددًا من المرات (أيًّا كانت هذه العلميات). ففيه الجملة الشرطية والتعبيرات المنطقية وتركيب الشروط وتضمين الجمل الشرطية، وجمل التكرار وما يتعلق بها من جمل التحكم في التكرار.
الباب الرابع عن الإجراءات: فنتعلم كيفية تعريف الإجراءات لنعطيها أسماءً من عندنا ونستدعيها أينما نريد. ففيه تعريف الإجراء وعوامله المؤثرة والمتأثرة، وطريقتان لتعيين العوامل: بالموضع وبالاسم، وتعريف إجراءات جديدة بتفاصيلها وتنفيذها، والعوامل الجائزة والواجبة، والتصريح بالنوع، ومفهوم نطاق التسمية، وثمرة الإجراء.
ثم الجمع المرتب: إذ ننتقل من التعامل مع أفراد البيانات إلى مجموعات البيانات. ففيه المجموعة المرتبة والصف والقائمة، وعمليات الإشارة والتقطيع والتكرار، وعمليات التعديل والإضافة والحذف، والفرز والترتيب.
ثم الجمع المرقوم: إذ نتعامل مع المجموعات التي تكون عناصرها ذات رقم / رمز وليسَ لها موضِع في المجموعة. وفيه المجموعة الرياضية والقاموس، وعمليات الإضافة والحذف والتعديل، والبحث والتكرار، والتقاطع والاتحاد والفرق.
ثم النص: وهو سلسلة الرموز (سواءُ كانت حروفًا أو بيانات أو أي سلسلة منسقة أو غير منسقة من البيانات). ففيه النص الطبيعي والمقولب، وإنشاء النص وقراءته، والإشارة والتقطيع، والعمليات الخاصة بالنصوص من استبدال وبحث وفصل ووصل، وتفسير الأرقام وإخراج النص وتنسيقه. وكذلك ترميز يونيكود وتشفير النصوص وتحويلها.
ثم التعامل مع الأخطاء؛ وفيه الخطأ النحوي والخطأ المنطقي والخطأ الواقعي؛ وكيفية التعامل مع الخطأ المتوقع (الاستثناء).
ثم البرمجة الإجرائية: نتعلم كيفية بناء برامج مبنية على الإجراءات.
ثم صياغة البيانات وانتقالها وتخزينها وقراءتها وكتابتها، وكذلك التعامل مع المجلدات والملفات.
ثم البرمجة الشيئية؛ إذ ندخل في صناعة الأشياء (مثل الأرقام والنصوص والقوائم وأي مجردات) بأنفسنا. ففيه تعريف الأنواع وصفاتها وإجراءاتها، ثم التقسيم الاسمي والتقسيم العملي؛ ثم التجريد والتعميم والتركيب والتخصيص والتسلسل.
ثم الوقت والتاريخ؛ وفيه طريقة التعامل مع الوقت الحاسوبي والمناطق الزمنية والحساب بين الأزمنة والتكرار الزمني.
ثم تكامل البرمجيات؛ حيث نتعلم كيفية الاستفادة من البرمجيات التي كتبها الآخرون، سواءٌ كانت مكتبة أو خدمة متصلة بالشبكة العالمية.
ترجمة المصطلحات
هل ترى الشاشة تعمل بلا كهرباء؟ وهل تعلم أن حركة المغناطيس سبب هذه الطاقة؟ فلولاه ما وجد المكيف ولا التلفاز ولا الجوال.
لماذا لا نستغرب هذه المصطلحات؟ بل نحن متصالحون معها في لغتنا العربية، مع أنها أسماء لمخترعات حديثة لم يعرفها العرب. هو السبب ذاته الذي أريدك أن تكون به واسع الصدر عند رؤوية مصطلحات جديدة لم تطرق سمعك.
ولو نظرت في اللغة نفسها لرأيت في المصطلح الواحد اختلافًا كثيرًا، وهذا أمر طبعي لاختلاف الأنظار والأذواق والألسن. على سبيل المثال:
- مصطلح Procedure من مرادفاته المستعملة: Routine, Subroutine, Subprogram, Function, Method.
- كذلك القيمة التي تدل على العدم: Null, Nil, None
- وكذلك المرادفات: import, include, use, require, using, load, link
وأعظم من ذلك؛ عدد لغات البرمجة (250+) التي تعبر كل واحدة منها بأسلوبها الخاص؛ وكلها حروف إنجليزية. فلا مشاحة في الإصطلاح.
لعل وصف المفاهيم باللغة الأم أقرب للطبع، وأمكن في الذهن وأوعى، وأسهل في التقليب والانتقاد، وأوسع في الاختراع والإبداع. فالمفاهيم لا تتعلق باللغة التي كتبت بحروفها. فالمفهوم شيء، واللغة شيء. بل علامة تمكن المرء من المفهوم أن يعبِّر عنه بأي لغة شاء. فليس بينه وبين المفهوم حاجز اللغة، ولا هالة المصطلح.
واجتهدت في بيان المقصود مع ذكر المصطلح الإنجليزي لزامًا. لأنه لا بد من معرفته، ولا بد للمتعلم من إتقان اللغة الإنجليزية ليستقل ويتبحر.