-->

المرحلة الثانية لتعلم بايثون: من الأساسيات إلى المهارات الاحترافية

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

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

1. البرمجة الكائنية (OOP): بناء هيكل قوي لمشاريعك

البرمجة الكائنية في بايثون تساعدك على تنظيم الكود في كائنات (Objects) تجمع البيانات والدوال معًا. مفيدة للمشاريع المتوسطة والكبيرة، ولتطوير تطبيقات قابلة للصيانة.

المفاهيم الأساسية

  • الفئة (Class): مخطط أو قالب للكائن.
  • الكائن (Object): نسخة من الفئة.
  • الوراثة (Inheritance): إنشاء فئات جديدة تعتمد على فئات موجودة.
  • الدوال السحرية (Magic Methods): مثل __init__ و__str__ لإضافة سلوك خاص.
class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages

    def summary(self):
        return f"{self.title} by {self.author} - {self.pages} pages"

class Ebook(Book):
    def __init__(self, title, author, pages, file_size_mb):
        super().__init__(title, author, pages)
        self.file_size_mb = file_size_mb

    def summary(self):
        base = super().summary()
        return f"{base} (ملف إلكتروني {self.file_size_mb} ميجابايت)"

ebook = Ebook("بايثون المتقدم", "ليلى أحمد", 320, 5.2)
print(ebook.summary())

2. إدارة الحزم والبيئات الافتراضية

مع ازدياد حجم المشروع، ستحتاج إلى تثبيت مكتبات خارجية (مثل requests أو numpy). استخدام بيئة افتراضية يعزل إعدادات مشروعك عن بقية النظام، مما يجنّبك الصداع الناتج عن التعارض بين الإصدارات.

إنشاء بيئة افتراضية باستخدام venv

python -m venv venv
# على Windows
venv\Scripts\activate
# على macOS/Linux
source venv/bin/activate

بعد التفعيل، يمكنك تثبيت مكتبة باستخدام pip install requests، ثم حفظ قائمة بالمكتبات في ملف requirements.txt عبر: pip freeze > requirements.txt.

نصيحة صديقة للقلب: أعطِ بيئتك الافتراضية اسمًا واضحًا؛ "venv" يعمل، لكن "venv-data-cleaner" يعبر عن المشروع أكثر.

3. التعامل مع الملفات والمسارات

التعامل مع الملفات أمر ضروري لمعظم التطبيقات. بايثون توفر وحدات مثل pathlib وos لتسهيل ذلك.

اقرأ أيضاً:
👉 الربح من الذكاء الاصطناعي: 11 طريقة حصرية ومبتكرة لتحقيق الدخل في العصر الرقمي
👉 دليلك الشامل لخطواتك الأولى في عالم البرمجة

قراءة وكتابة الملفات

from pathlib import Path

data_file = Path("data") / "students.txt"

# كتابة بيانات
data_file.parent.mkdir(exist_ok=True)
with data_file.open("w", encoding="utf-8") as file:
    file.write("سارة,85\nعمر,92\nمنى,78\n")

# قراءة البيانات
students = []
with data_file.open("r", encoding="utf-8") as file:
    for line in file:
        name, score = line.strip().split(",")
        students.append((name, int(score)))

print(students)

4. معالجة الأخطاء (Exception Handling)

لا أحد يحب ظهور شاشة طويلة من الأخطاء، لكنّ التعامل الصحيح مع الاستثناءات ينقذك من الصدمات غير المتوقعة.

كتابة كود متسامح مع الأخطاء

def get_score(student_scores, name):
    try:
        return student_scores[name]
    except KeyError:
        return f"عذراً، لا توجد نتيجة للطالب {name}."
    finally:
        print("تم تنفيذ الدالة get_score (حتى لو حدث خطأ).")

scores = {"سارة": 95, "أحمد": 88}
print(get_score(scores, "منى"))

استخدم try / except / finally لتحديد كيفية التعامل مع الحالات الاستثنائية، وأضف raise عندما تريد إبلاغ من يستخدم دالتك بأن هناك شيئًا يحتاج إلى معالجة خاصة.

5. الوحدات والحزم المنظمة

عندما يزداد حجم المشروع، من الضروري تقسيم الكود إلى وحدات (Modules) وحزم (Packages) لتسهيل إعادة الاستخدام.

  • الوحدة: ملف بايثون واحد (مثل utils.py).
  • الحزمة: مجلد يحتوي على عدة وحدات وملف __init__.py.
project/
│
├── app.py
└── analytics/
    ├── __init__.py
    ├── preprocessing.py
    └── visualizer.py

يمكنك الاستيراد مثل: from analytics.preprocessing import clean_data.

6. كتابة الاختبارات الآلية (Unit Tests)

الاختبارات ليست فقط للمطورين "المملين"—بل هي ضمانك للاستقرار عند تعديل الكود.

باستخدام unittest

# الملف: calculator.py
def add(a, b):
    return a + b

# الملف: test_calculator.py
import unittest
from calculator import add

class TestCalculator(unittest.TestCase):
    def test_add_positive_numbers(self):
        self.assertEqual(add(2, 3), 5)

    def test_add_negative_numbers(self):
        self.assertEqual(add(-2, -3), -5)

if __name__ == "__main__":
    unittest.main()

شغّل الاختبارات عبر python -m unittest. وعندما تشعر بالفضول، جرّب مكتبة pytest لتجربة أكثر مرونة.

7. التعامل مع البيانات: CSV، JSON، وAPIs

المرحلة الثانية تتطلب فهمًا لتحويل البيانات بين الصيغ المختلفة.

قراءة CSV

import csv

with open("sales.csv", newline="", encoding="utf-8") as csv_file:
    reader = csv.DictReader(csv_file)
    total = sum(float(row["amount"]) for row in reader)

print(f"إجمالي المبيعات: {total}")

التفاعل مع واجهات REST APIs

import requests

response = requests.get("https://api.coindesk.com/v1/bpi/currentprice.json")
data = response.json()
price_usd = data["bpi"]["USD"]["rate"]
print(f"سعر البيتكوين (USD): {price_usd}")

8. أدوات تحسين الإنتاجية

الانتقال لمستوى متقدم يعني استخدام أدوات تجعل شيفرتك أكثر تنسيقًا واستقرارًا.

  • Black: لتنسيق الكود تلقائيًا.
  • Pylint أو Flake8: لتحليل الجودة واكتشاف الأخطاء الشائعة.
  • mypy: فحص الأنواع (type hints) لزيادة الوضوح.
أحيانًا ستغضب أدوات الفحص من مسافة بعيدة، لكن اجعلها صديقةً لك؛ فهي تحرص على جودة شيفرتك كما يحرص منبّه الهاتف على نومك المبكر.

9. مشاريع متقدمة لتطبيق ما تعلمته

  1. مساعد شخصي لسطح المكتب: برنامج يقرأ المهام من ملف CSV، يرسل تنبيهات، ويستخدم APIs لجلب الطقس أو الأخبار.
  2. لوحة تحليلات بيانات: استخدام pandas وmatplotlib/plotly لبناء تقارير ورسوم بيانية تفاعلية.
  3. خادم REST صغير: عبر Flask أو FastAPI لتقديم بيانات من قاعدة بسيطة.
  4. أداة لأتمتة المهام: سكربت ينظف ملفات، يعيد تسمية الصور، أو يرسل رسائل بريدية بناءً على ملفات Excel.
  5. Bot للتليجرام أو ديسكورد: يستجيب للأوامر، يجلب بيانات من الإنترنت، ويتفاعل مع المستخدمين.

10. مقارنة سريعة لأطر عمل الويب في بايثون

الميزة / الإطار Django Flask FastAPI
الفلسفة إطار كامل (Batteries Included)، يوفر كل ما تحتاجه تقريبًا. خفيف ومُخصّص، يعطيك حرية الاختيار. مصمم للواجهات البرمجية الحديثة، يعتمد على الأنواع.
أفضل استخدام منصات متكاملة، تطبيقات إدارة المحتوى، مشاريع ضخمة. واجهات مصغرة، نماذج أولية، تطبيقات صغيرة/متوسطة. واجهات APIs عالية الأداء، تطبيقات تعتمد على Async.
المنحنى التعليمي متوسط، لكنه مفصل وواضح بفضل التوثيق الغني. منخفض، بسيط جدًا للبداية. متوسط، لكن يتطلب معرفة بالأنواع وasync/await.
الأدوات المدمجة ORM، لوحة إدارة، نظام مصادقة، قوالب. حد أدنى—تحتاج لإضافة المكتبات بنفسك. توليد توثيق OpenAPI تلقائي، دعم async مدمج.
المجتمع ضخم، مع موارد وشروحات لا تُعد. واسع، مدعوم من مجتمع Flask الكلاسيكي. ينمو بسرعة، مدعوم من مطوري الواجهات البرمجية.

11. عادات تطوير احترافية

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

الخاتمة

مبروك! إذا وصلت إلى هنا، فأنت على أعتاب التحول من “مستخدم لأوامر بايثون” إلى “مطور بايثون” يملك أدوات التفكير والتصميم. المرحلة الثانية قد تبدو مليئة بالتفاصيل، لكن كل خطوة فيها تفتح لك بابًا جديدًا. استمر في بناء المشاريع، ولا تخف من إعادة كتابة الكود أو تحسينه. بايثون تمنحك الاستقلالية، المجتمع يمدّك بالدعم، وأنت تمتلك الآن المهارات لتصعد إلى المرحلة الثالثة بثقة وفضول.

#زهران ممدانى

إرسال تعليق

أحدث أقدم