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

عضو مبتدئ (1/3)
0
السمعة بالموقع
-
يشهد عالم البرمجة اليوم تسارعًا رهيبًا، إذ يحتاج المطورون إلى أدوات فعالة تساعدهم في تحسين جودة الكود، واكتشاف الأخطاء، وتسريع عملية التطوير. عادةً ما يلجأ المبرمجون إلى البحث اليدوي أو مراجعة الأكواد بأنفسهم، مما يستهلك وقتًا طويلًا وقد يكون غير دقيق. لهذا السبب، فإن دمج تقنيات الذكاء الاصطناعي مع بيئات التطوير تحسن من تجربة البرمجة وزيادة الإنتاجية. يعتبر Deepseek أحد الحلول القوية في هذا المجال، إذ يمكنه تقديم المساعدة في كتابة الكود، وتصحيحه، واقتراح تحسينات ذكية. مع ذلك يشاع استخدامه خارجيًا وأثناء وصوله بالإنترنت، وهذا قد يسبب بعض المشاكل الأمنية للمبرمجين. مع ذلك، هناك طريقة ستمكننا كمبرمجين من استخدامه محليًا داخل محرر الأكواد الذي نستعمله، ودون الحاجة لوصله بالانترنت. سنشرح في هذا المقال كيفية ربط محرر الأكواد VS Code بنموذج Deepseek الغني عن التعريف، لنحصل على تجربة برمجية أكثر سلاسة وكفاءة، مع الاستفادة من إمكانيات الذكاء الاصطناعي بطريقة آمنة ومتكاملة. متطلبات عملية الربط والتشغيل لتنفيذ عملية الربط، سنحتاج إلى تحميل وضبط الأمور الآتية: تثبيت محرر الأكواد Visual Studio Code: يمكن تحميله من الموقع الرسمي لمحرر VS Code واتباع خطوات التثبيت المعتادة لأي برنامج، وإن كان متاح لدينا فلا داعي للقيام بهذه الخطوة تحميل وتثبيت أولاما Ollama: وهي أداة مخصصة لتشغيل نماذج الذكاء الاصطناعي محليًا تثبيت ديبسيك Deepseek: نحمله من Ollama، وسنحمل نموذج Deepseek-R1 تثبيت إضافة Continue.Dev: لربط ديبسك مع محرر الأكواد VS Code تثبيت أداة أولاما Ollama ننزل أداة أولاما Ollama من الموقع الرسمي لها، وفقًا لنظام التشغيل الخاص بنا، ثم نثبته. نحمل النسخة التي تناسب حاسوبنا من خلال النقر على إسمها، على سبيل المثال ويندوز. نثبّت البرنامج بالضغط على خيار التثبيت Install كما هو موضح بالصورة الآتية: تثبيت نموذج Deepseek بعد تثبيت أولاما Ollama سنبقى ضمن نفس الموقع الرسمي لأولاما ونحمل منه نموذج Deepseek-r1 إما عن طريق البحث عن اسم Deepseek من خيار البحث بالصفحة الأساسية لأولاما كما هو موضح بالصورة الآتية: ملاحظة: يمكننا الوصول إلى DeepSeek-R1 بطريقة أخرى أيضًا، من خلال العودة إلى نفس الواجهة الرئيسية لأولاما ثم الضغط على خيار DeepSeek-R1، لننتقل مباشرةً الى DeepSeek-R1. سنجد هنا العديد من خيارات النماذج لديبسيك Deepseek، نختار أيّ واحد نريده حسب مساحة المتوفرة لدينا في الحاسوب، ثم ننسخ التعليمة الموجودة كما هو موضح بالصورة: في هذا الإعداد، اخترنا نموذج Deepseek 1.5b نظرًا لتوازنه بين الأداء الجيد والاستهلاك المعتدل للموارد، كما أنه لا يتطلب مساحة تخزين كبيرة، على عكس النماذج الأخرى التي تكون أكثر استهلاكًا للموارد. ومع ذلك، فإن اختيار النموذج الأمثل يعتمد على حجم المشروع وتعقيده، حيث أن المشاريع الصغيرة أو المتوسطة قد تستفيد من النماذج الخفيفة لتقليل استهلاك الموارد، بينما قد تتطلب المشاريع الكبيرة أو المعقدة، التي تحتاج إلى معالجة بيانات ضخمة أو فهم لغوي متقدم، استخدام نماذج أكبر ذات قدرات أعلى، حتى وإن كانت أكثر استهلاكًا للموارد. نضغط على خيار النسخ حيث يشير سهم الرقم 2 بالصورة أعلاه، ثم نتوجه إلى سطر الأوامر CMD بالحاسوب، ونلصق التعليمة ollama run deepseek-r1:1.5b التي نسخناها من الموقع ستظهر لنا الشاشة كالتالي: سوف نتأكد الآن من أن عملية تثبيت Deepseek-R1 قد تمت بنجاح من خلال طرح سؤال يستفسر عمن يكون، ونرى رده. حسب الرد الذي تحصلنا نكون قد تأكدنا من أن العملية تمت بنجاح تثبيت إضافة Continue.Dev Continue.Dev هي إضافة مميزة متاحة على محرر الأكواد VSCode، تتيح التفاعل مع نماذج الذكاء الاصطناعي داخل بيئة التطوير، مما يسهل على المبرمجين تحسين الأكواد وتطويرها بكفاءة. سوف نرى خطوات تثبيت هذه الاضافة كالتالي: نفتح محرر الأكواد VS Code الذي ثبتناه وننتقل إلى متجر الإضافات، نكتب Continue ثم نختار الإضافة Continue - Codestral Claude, and more من بين الخيارات التي ستظهر معنا. نضغط الآن على خيار تثبيت Install وننتظر حتى يتم التثبيت. في هذه المرحلة ستظهر لدينا أيقونة الإضافة Continue على شريط المحرر كما هو موضح في الصورة الآتية: نبدأ الآن بضبط إعدادات الإضافة بالضغط على أيقونة الإعدادات ونفتح ملف configuration الخاص بالاضافة باتباع الخطوات الثلاث الموضحة بالصورة على التوالي: سنجد أن الإعدادات الافتراضية بملف الإعدادات configuration كالتالي: ما علينا سوى ضبطها بما يتوافق مع النموذج المحمل معنا، وننسخ المعلومات الآتية واحدة واحدة إلى الكود المتاح بالملف، أو نستبدل الأجزاء التي تحتاج لتعديلات مباشرةً إلى الكود الآتي: ]: "models" } , "title": "DeepSeek Coder" , "model": "deepseek-r1:1.5b" "provider": "ollama" { , [ }: "tabAutocompleteModel" , "title": "Tab Autocomplete Model" , "provider": "ollama" "model": "deepseek-coder:1.5b-base" ,{ كما توضح الصورة الآتية: ملاحظة: يجب أن يكون اسم النموذج في الاعدادات هو نفس النموذج الذي قمنا بتحميله كما هو موضح في الصورة و نتأكد من حفظ التعديلات. عند هذه المرحلة ستظهر لنا أداة Deepseek كما هو موضح في الصورة وبنفس الاسم الذي أطلقناه عليها DeepSeek Coder: للتأكد من ضبط الأمور، سنجرب تشغيل النموذج كالآتي: وبهذا سنقول عملية تثبيت ديبسيك Deepseek محليًا بمحرر فيجوال ستوديو كود VS Code قد اكتملت بنجاح. والآن سنبدأ باستخدامه واختبار جودته. تجربة تشغيل الكود كما سبق ووضحنا، يمكن الاستفادة من ديبسيك في الأعمال البرمجية بأكثر من طريقة، وأول طريقة سنتحدث عنها ونجربها هي طلب كود منه. سنطلب من Deepseek كتابة كود برمجي لإنشاء متتالية فيبوناتشي للأعداد بين 0 و 100، ثم تشغيله على الـ Terminal في Visual Studio Code كالآتي: وكما هو واضح، لقد حصلنا على كود كامل متوافق مع المطلوب. لنقله إلى الكود الفعلي الذي نعمل عليه، سنضغط على أيقونة تطبيق الكود Apply، ليظهر الكود في الملف المقابل مباشرةً كما هو موضح في الصورة التالية: وعند اختبارنا للكود، ستظهر النتيجة بكل سهولة ودقة كما هو موضح بالصورة الآتية: تصحيح الأخطاء سنجرب في هذه المرة إعطاء نموذج ديبسيك كود به بعض الأخطاء ونطلب منه تصحيحها. لنفترض أنه لدينا كود برمجي بلغة بايثون لحساب القاسم المشترك الأكبر لعددين صحيحين GCD، ونريد إيجاد الخطأ في الكود وبعد ذلك تصحيحه. الكود الخاطئ هو التالي: def pgcd(a, b): """حساب القاسم المشترك الأكبر لعددين باستخدام خوارزمية إقليدس""" while b != 0: a = b a = b # خطأ في الحساب: لم يتم تحديث b بالقيمة الصحيحة b = a % b # سيؤدي ذلك إلى خطأ منطقي لأنه يستخدم a بعد تحديثه return a # خطأ في المسافة البادئة # الكود الرئيسي print("احسب القاسم المشترك الأكبر") number1 = int(input("ادخل الرقم الاول : ")) number2 = int(input("ادخل الرقم الثاني : ")) result = pgcd(number1, number2) print (f"القاسم المشترك الأكبر بين {number1} و {number2} هو : {result}") الأخطاء الموجودة في الكود الذي سنشاركه بالمحرر ونسأل ديبسيك عن صحته هي كالتالي: خطأ في الحساب: في الحلقة while، يجب تحديث a وb بالقيم الصحيحة (a, b = b, a % b) الكود الحالي يعيد تعيين a = b قبل استخدامه، مما يؤدي إلى حساب خاطئ. خطأ في المسافة البادئة: return a ليس بمحاذاة while ويؤدي إلى خطأ عند التشغيل. سنرى الآن إن كان ديبسيك Deepseek سينتبه لها ويحلها أم لا. لفعل ذلك، سنفتح أولًا ملف الكود كالتالي كما هو موضح في الصورة: نعين الملف الذي نريد فتحه على محرر الأكواد فيجوال ستوديو كود، والذي سيفتح مباشرةً على محرر الأكواد Visual Studio Code بمجرد الضغط عليه وتعيينه. ما علينا سوى تحديد الكود الذي نريد اختباره، وسيظهر لنا اختصار لوحة المفاتيح Ctrl+L، نضغط عليه وسينتقل مباشرةً للدردشة مع Deepseek. سنوضح هذه الخطوة بالتفصيل في الصورة التالية: نطلب من Deepseek تصحيح الأخطاء الموجودة بالكود المشارك معه، وسيعيد لنا النتيجة الآتية، وسنضغط على خيار Apply لتنفيذ التصحيح في الكود الموجود بالملف مباشرةً. وكما نلاحظ، لقد صحح دييبسيك الخطأين المتعمّدين اللذين تحدثنا عنهما بالأعلى، والعملية تمت بنجاح أمان الكود و البيانات و استراتيجيات الحماية في ظل استخدام Deepseek في ظل استخدام نماذج الذكاء الاصطناعي مثل Deepseek، يصبح تأمين الكود والبيانات أمرًا بالغ الأهمية، إذ قد يكون هناك خطر تسرب بيانات شخصية إذا لم يتم تشفير المدخلات والمخرجات كما يجب. ولهذا السبب سنوضح في ما يلي بعض التدابير لحماية البيانات في ظل استخدام Deepseek تعطيل تسجيل المدخلات الحساسة يجب أن نتأكد من عدم تسجيل المدخلات التي تحتوي على بيانات حساسة، على سبيل المثال : import os sensitive_data = "1234-5678-9012-3456" # بيانات حساسة مثل رقم بطاقة على سبيل المثال os.environ["SENSITIVE_INFO"] = sensitive_data # تخزينها كمتغير بيئي بدلاً من ملف منع إرسال البيانات عبر الإنترنت نتأكد من أن Deepseek لا يرسل البيانات إلى الإنترنت. ويمكننا حظر اتصالات الشبكة عبر الجدار الناري للحماية Firewall باستخدام Windows Defender Firewall بجهاز الحاسوب الخاص بنا في حال استخدام نظام ويندوز، أو استخدام جدران الحماية المدمجة في أنظمة التشغيل الأخرى في حال استخدام أنظمة أخرى، مثل جدار pf على macOS وجدار UFW Uncomplicated Firewall على Linux. ملاحظة: تجدر الإشارة إلى أن Deepseek عند وصله بفيجوال ستوديو كود سيعمل داخل محرر الأكواد فقط ولا يمتلك صلاحيات للوصول إلى الملفات أو البيانات خارج بيئة التطوير، مع ذلك الخطوات التي نقوم بها هي من أجل أخذ الحيطة لا أكثر. إيقاف تشغيل Deepseek في محرر الأكواد VS : الإيقاف المؤقت و الإيقاف الكلي في مرحلة ما، قد نحتاج أو نرغب في إيقاف تشغيل Deepseek R1 في Visual Studio Code، وهنا علينا اتباع الخطوات الآتية حسب طبيعة الإيقاف الذي نرغب به الإيقاف المؤقت من أجل إيقاف عمل ديب سيك مؤقتا بمحرر الأكواد VS Code، سنكتفي بفصله عن الرابط بينه وبين المحرر، وسنبحث عن أداة continue في Extensions ثم نضغط على خيار الإيقاف المؤقت Disable كما هو موضح كالتالي: الإيقاف النهائي من أجل التوقف كليًا عن استخدام ديبسيك في محرر أكوادنا، سنضغط على خيار إزالة التثبيت Uninstall بدلا من خيار Disable. بعد ذلك نزيل Ollama كليا من إعدادات جهاز الحاسوب بحذف تثبيته أيضًا بالضغط على خيار Uninstall ملاحظة: بمجرد إزالة اولا ما يتوقف تشغيل Deepseek تلقائيا. الخاتمة الى هنا نصل الى نهاية مقالنا، الذي وضحنا فيه كيفية تشغيل نموذج الذكاء الاصطناعي Deepseek على محرر الأكواد VS Code، للحصول على تجربة سهلة وسريعة ومرنة خلال عملنا البرمجي، مما يساعدنا في تسريع ورفع كفاءة تصحيح الأخطاء، واقتراح حلول ذكية، وتوليد أكواد متوافقة مع المعايير الحديثة. المصادر كيفية تثبيت DeepSeek R1 واستخدامه على حاسوبك المحلي How to use Deepseekk-R1 for free in Visual Studio Code اقرأ أيضًا دمج مساعد الذكاء الاصطناعي GitHub Copilot مع محرر الأكواد VS Code أشهر إضافات Visual Studio Code استخدام الذكاء الاصطناعي لكتابة وتصحيح أكواد CSS
-
تُعَد كتابة كود برمجي احترافي مثل مهندسي البرمجيات اليوم من أبرز المهارات التقنية المطلوبة، لما لها من دور في رفع جودة وكفاءة الكود البرمجي الذي كلما كان مكتوبًا بتسلسل منطقي وبخطوات احترافية محكمة، انعكس ذلك على ارتفاع جودة المشروع البرمجي وزادت دقته، وقلت أخطاؤه. سنشرح في هذا المقال المفاهيم الأساسية لكتابة كود برمجي بجودة عالية مثل مهندسي البرمجيات، مع تقديم أمثلة توضيحية من شأنها تطوير مهارات المبرمج وتمكينه من تحويل الأفكار إلى نتائج ملموسة والوصول إلى مستوى احترافي. فهم وتحليل المشكلة البرمجية من المهم فهم وتحليل المشكلة البرمجية أولًا لبناء كود برمجي فعال واحترافي؛ ولفعل ذلك، لا بد من فهم الأهداف المرجوة من الكود، وتحليل متطلباته وتصميم حل برمجي مناسب له. حسب مثال مشروعنا بهذا المقال، سيكون ذلك كما يلي: فهم الأهداف المرجوة وتسطيرها مع تحليل المشكلة والتفكير بطريقة حلها برمجيًا نجد أن أهداف الكود الذي سنكتبه في هذه الحالة هي: حساب متوسط درجات الطلاب، ونحتاج لذلك إلى حساب المتوسط الحسابي لدرجات الطلاب تحديد أعلى وأقل درجة تحديد عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط تحليل متطلبات الكود البرمجي نحدد هنا ما هي البيانات أو المدخلات التي يحتاجها الكود للعمل بشكل صحيح، والتي هي في هذه الحالة قائمة تحتوي على درجات الطلاب مثل: 85 و 90 و 78 و 92 و 88. تصميم الحل البرمجي يسهّل استخدام المخططات الانسيابية لتصميم الحلول البرمجية عملية التفاعل مع المشكلة وفهمها بوضوح؛ ورغم أنه اختياري إلا أنه مهم. في المثال التالي مخطط انسيابي لمثال المشكلة البرمجية التي نريد كتابة كود احترافي لها: شروط كتابة كود برمجي جيد مثل مهندسي البرمجيات تتطلب عملية كتابة كود برمجي مثل مهندسي البرمجيات، الالتزام بمعايير الكتابة الاحترافية لضمان وضوح وسهولة ونظام الكود. ومن أهم هذه المعايير ما يلي: استخدام أسلوب موحد في تسمية المتغيرات يجب استخدام نفس التسميات أو المفردات لنفس نوع المتغيرات عبر الكود لزيادة الاتساق. وكما يوضح المثال التالي، فطريقة التسمية غير موحدة، حيث تم اعتماد نمطين مختلفين، وهذا قلل من اتساق الكود ومفهوميته # تسمية سيئة gradeOne = 85 gradeTwo = 90 scoreThree = 78 في حين تم بالمثال التالي استخدام الأسماء المتسقة بكامل الكود على النحو gradeOne و gradeTwo و gradeThree. # تسمية جيدة gradeOne = 85 gradeTwo = 90 gradeThree= 78 استخدام أسماء واضحة ومعبرة للمتغيرات من المهم أن تكون أسماء المتغيرات والدوال واضحة ومفهومة، بحيث تعكس غرضها وتساعدك أو تساعد المبرمجين الآخرين لاحقًا على فهم الكود بسهولة. دعنا نأخذ المثال التالي بلغة البرمجة بايثون لتوضيح أهمية اختيار أسماء واضحة للمتغيرات: # كود سيء x = 85 y = 90 z = (x + y) / 2 وكما نلاحظ، يُعَد هذا المثال سيئًا لأن الأسماء x و y و z لا توضح غرض المتغيرات؛ على عكس المثال التالي الذي ستكون فيه الأسماء معبرة بوضوح عن محتويات المتغيرات، وهو درجات الطلاب: # كود جيد gradeOne = 85 gradeTwo = 90 averageGrade = (gradeOne + gradeTwo) / 2 يجب أن تعبر أسماء الدوال عما تفعله اسم الدالة يجب أن يعكس بدقة الوظيفة التي تؤديها. # سيء def calc(x, y): return x + y وكما نلاحظ، فاسم الدالة calc لا يوضح دورها، في حين أن استخدام اسم الدالة calculateAverage في المثال الآتي، عبر بدقة عن العملية التي تقوم بها الدالة. # جيد def calculateAverage(gradeOne, gradeTwo): return (gradeOne + gradeTwo) / 2 تقليل التكرار وجعل الكود سهل القراءة من المهم كتابة كود لا يحتوي على تكرار غير ضروري ويكون سهل القراءة لفهمه بسرعة: # كود سيء # حساب المعدل بطريقة غير فعالة totalOne = (85 + 90) / 2 totalTwo = (78 + 92) / 2 totalThree = (88 + 81) / 2 average = (totalOne + totalTwo + totalThree) / 3 وكما نرى، كتابة الكود بهذه الطريقة يؤدي إلى تكرار نفس العملية لحساب المتوسط الحسابي عدة مرات؛ على عكس المثال التالي، الذي سننشئ به دالة calculateAverage لجعل الكود أكثر وضوحًا ومرونة. # كود جيد # تعريف دالة لحساب معدل درجتين def calculateAverage(gradeOne, gradeTwo): return (gradeOne + gradeTwo) / 2 # استخدام الدالة لتقليل التكرار totalOne = calculateAverage(85, 90) totalTwo = calculateAverage(78, 92) totalThree = calculateAverage(88, 81) # حساب المعدل العام overallAverage = (totalOne + totalTwo + totalThree) / 3 إن استخدام الدالة calculateAverage يتيح إعادة استخدام نفس الوظيفة عدة مرات عند الحاجة، مما يقلل تكرار الكود ويحسن من تنظيمه وسهولة صيانته. طريقة تنظيم الكود وهيكلته تتجلى أهمية التنظيم الجيد للكود البرمجي في تحسين قابليته للقراءة، وتقليل احتمالية وقوع الأخطاء، وتسهيل عملية صيانته، مما يجعل تصحيح الأخطاء أو إضافة ميزات جديدة أمرًا أكثر سلاسةً وفعالية. للوصول إلى كود منظم واحترافي مثل مهندسي البرمجيات، يمكن اتباع الخطوات التالية: استخدام الفواصل والفراغات لتنظيم الكود نحاول إضافة فواصل مناسبة بين الأقسام المختلفة، وذلك بترك سطر فارغ بين تعريفات المتغيرات والدوال لجعل الكود أكثر وضوحا، على سبيل المثال: # تعريف المتغيرات gradeOne = 85 gradeTwo = 90 # دالة لحساب المتوسط def calculateAverage(gradeOne, gradeTwo): return (gradeOne + gradeTwo) / 2 # حساب المتوسط وطباعة النتيجة average = calculateAverage (gradeOne ,gradeTwo) print(average) تقسيم الكود إلى وحدات ووظائف صغيرة عند كتابة الكود، من الأفضل تقسيمه إلى دوال ووظائف صغيرة تنفذ مهمة واحدة فقط. هذا يسهل إعادة استخدام هذه الدوال في أماكن مختلفة، كما يسهل صيانة الكود وتحديثه. لحل المشكلة البرمجية الخاصة بمقالنا سنحتاج إلى عدة دوال تتمثل في حساب متوسط درجات الطلاب، ودالة لتحديد أعلى وأقل درجة، ودالة أخرى لحساب عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط، وأخرى تدعى بالدالة الرئيسية التي تنظم تنفيذ الخطوات. نلاحظ الكود التالي، المنظم والمهيكل لحل المشكلة البرمجية السابقة، والذي يتضمن الدوال الأساسية المطلوبة لتنفيذ الحل grades = [85, 90, 78, 92, 88] # تعريف دالة لحساب المتوسط def calculateAverage(grades): return sum(grades) / len(grades) # تعريف دالة لتحديد أعلى وأقل درجة def findHighestAndLowest(grades): highest = max(grades) lowest = min(grades) return highest, lowest # تعريف دالة لحساب عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط def countAboveAverage(grades,average): count = sum(1 for grade in grades if grade > average) return count # الوظيفة الرئيسية التي تنظم تنفيذ الخطوات def main(): grades = [85, 90, 78, 92, 88] # التحقق من إذا كانت القائمة فارغة if not grades: print("القائمة فارغة. لا يمكن إجراء الحسابات.") return # إنهاء التنفيذ إذا كانت القائمة فارغة # حساب متوسط الدرجات average = calculateAverage(grades) print(f"متوسط الدرجات: {average:.2f}") # تحديد أعلى وأقل درجة highest, lowest = findHighestAndLowest(grades) print(f"أعلى درجة: {highest}") print(f"أقل درجة: {lowest}") # حساب عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط aboveAverageCount = countAboveAverage(grades,average) print(f"عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط: {aboveAverageCount}") # استدعاء الوظيفة الرئيسية if __name__ == "__main__": main() استخدام التوثيق والتعليقات لشرح الأكواد التوثيق هو أحد العناصر الأساسية في كتابة كود احترافي مثل مهندسي البرمجيات، حيث يسهم في تسهيل فهم الكود وصيانته بسرعة وكفاءة. يساعد التوثيق الواضح والموجز على توضيح الغرض الرئيسي للكود وآلية عمله، مما يجعل التعامل معه أكثر سهولة سواء بالنسبة لك أو للمبرمجين الآخرين؛ مع ذلك من المهم تجنب الإفراط في التوثيق أو شرح التفاصيل الواضحة للحفاظ على التركيز على الجوانب الجوهرية فقط. حالة التوثيق المفرط يكون التوثيق مفرطًا إذا كان يشرح كل سطر برمجي دون الحاجة لكل ذلك، مما يشتت القارئ ويجعل الكود يبدو مزدحمًا، مثل: # قائمة تحتوي على درجات الطلاب # هذه القائمة تمثل درجات الطلاب في مادة معينة، وهي عبارة عن أرقام صحيحة grades = [85, 90, 78, 92, 88] # حساب متوسط الدرجات # يتم استخدام الدالة المدمجة sum لحساب مجموع الدرجات في القائمة # ثم يتم استخدام len لحساب عدد العناصر في القائمة average = sum(grades) / len(grades) # طباعة المتوسط # يتم طباعة متوسط الدرجات باستخدام دالة print # يتم تضمين المتوسط داخل سلسلة نصية باستخدام f-string print(f"The average grade is: {average}") حالة انعدام التوثيق رغم الحاجة له يكون الكود هنا غير واضح، وبدون إرشادات مساعدة على فهمه في التعليقات، بحيث يترك القارئ في حيرة بشأن الغرض أو المنطق العام للكود، مثل: grades = [85, 90, 78, 92, 88] average = sum(grades) / len(grades) print(f"The average grade is: {average}") حالة التوثيق الفعال يكون التوثيق فعال عندما يكون متوازن ويحوي توضيحات حسب الحاجة فقط ضمن الكود دون مبالغة، مثل: # قائمة تحتوي على درجات الطلاب grades = [85, 90, 78, 92, 88] # حساب متوسط الدرجات average = sum(grades) / len(grades) # طباعة المتوسط print(f"The average grade is: {average}") استخدام الحزم البرمجية والمكتبات الجاهزة يستخدم مهندس البرمجيات المحترف المكتبات الجاهزة والدوال المدمجة لتبسيط العمليات وتقليل عدد الأسطر المطلوبة في الكود البرمجي، بحيث تتميز كل لغة برمجة بالعديد من المكتبات والحزم التي تتناسب مع المشكلة البرمجية. لفهم الفرق، سنأخذ على سبيل المثال طريقة كتابة الكود بدون استخدام المكتبات الجاهزة والدوال المدمجة لحساب المطلوب في مقالنا كما هو واضح في الكود التالي: grades = [85, 90, 78, 92, 88] # تعريف دالة لحساب المتوسط def calculateAverage(grades): return sum(grades) / len(grades) # تعريف دالة لتحديد أعلى وأقل درجة def findHighestAndLowest(grades): highest = max(grades) lowest = min(grades) return highest, lowest # تعريف دالة لحساب عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط def countAboveAverage(grades,average): count = sum(1 for grade in grades if grade > average) return count # الوظيفة الرئيسية التي تنظم تنفيذ الخطوات def main(): grades = [85, 90, 78, 92, 88] if not grades: print("القائمة فارغة. لا يمكن إجراء الحسابات.") return # إنهاء التنفيذ إذا كانت القائمة فارغة # حساب متوسط الدرجات average = calculateAverage(grades) print(f"متوسط الدرجات: {average:.2f}") # تحديد أعلى وأقل درجة highest, lowest = findHighestAndLowest(grades) print(f"أعلى درجة: {highest}") print(f"أقل درجة: {lowest}") # حساب عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط aboveAverageCount = countAboveAverage(grades,average) print(f"عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط: {aboveAverageCount}") # استدعاء الوظيفة الرئيسية if __name__ == "__main__": main() وكما هو واضح، فالكود طويل وصعب القراءة. سنجرب الوصول لنفس نتيجة الكود، لكن باختصاره وتبسيطه عبر مكتبة مناسبة، وفي حالتنا سنستخدم مكتبة statistics لحساب المتوسط واستخدام الدوال المدمجة مثل max و min لتحديد أعلى وأقل درجة، لتكون النتيجة كما في الكود الآتي: import statistics def main(): # قائمة درجات الطلاب grades = [85, 90, 78, 92, 88] # حساب متوسط الدرجات باستخدام مكتبة statistics average = statistics.mean(grades) print(f"متوسط الدرجات: {average:.2f}") # تحديد أعلى وأقل درجة باستخدام max و min highest = max(grades) lowest = min(grades) print(f"أعلى درجة: {highest}") print(f"أقل درجة: {lowest}") # حساب عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط aboveAverageCount = sum(1 for grade in grades if grade > average) print(f"عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط: {aboveAverageCount}") # استدعاء الوظيفة الرئيسية if __name__ == "__main__": main() وكما هو واضح، فطريقة كتابة هذا الكود كانت أبسط وأوضح وأكثر احترافية. اختبار الكود البرمجي وتصحيحه يقوم مهندس البرمجيات باختبار الكود عبر تجربة تنفيذه والتأكد من أن الكود يحقق الأهداف المطلوبة، كما يقوم باكتشاف الأخطاء وتصحيحها لضمان صحة النتائج وتحسين أداء الكود. يمكنك اختبار الكود البرمجي من خلال: اختبار الوظائف الفردية: بحيث يتم اختبار كل دالة على حدة باستخدام بيانات إدخال مختلفة للتحقق من صحة النتائج اختبار التكامل: يتم التحقق من كيفية تفاعل الدوال أو الوحدات البرمجية مع بعضها البعض دعنا نأخذ مثالًا عن كيفية اختبار دوال الكود البرمجي السابق: # اختبار الكود def testCalculateAverage(): grades = [85, 90, 78, 92, 88] expectedAverage = 86.6 assert abs(calculateAverage(grades) - expectedAverage) < 0.01, "خطأ في دالة حساب المتوسط" def testCountAboveAverage(): grades = [85, 90, 78, 92, 88] average = 86.6 expectedCount = 3 assert countAboveAverage(grades, average) == expectedCount, "خطأ في حساب عدد الطلاب فوق المتوسط" def runTests(): # تشغيل اختبارات الكود testCalculateAverage() testCountAboveAverage() print("جميع الاختبارات ناجحة!") if __name__ == "__main__": runTests() ملاحظة: يمكن استخدام الأسلوب اليدوي في الاختبار لكن في التطبيقات الاحترافية تستخدم أطر عمل مخصصة للاختبارات يمكن الاعتماد عليها. الفرق بين الكود البرمجي الاحترافي لمهندسي البرمجيات والكود العادي لكي نتمكن من كتابة كود احترافي مثل مهندسي البرمجيات، يجب أن نكون قادرين على التمييز بين تقنيات كتابة الكود الاحترافي وتقنيات الكتابة العادية. تتميز الأكواد الخاصة بمهندسي البرمجيات ببعض الميزات، نذكر ما يلي: عدم وجود الأكواد الميتة نقصد بعدم وجود أكواد ميتة، أن لا نستعمل الأجزاء غير المستخدمة في البرنامج، لأنها تضيف تعقيدًا غير ضروري فالكود الخاص بمهندس البرمجيات المحترف يكون خاليًا منها، في المثال التالي بعض التعليمات البرمجية التي لا تحتاجها الدالة calculateAverage لحساب المتوسط الحسابي: def calculateAverage(grades): total = sum(grades) aboveAverageCount = countAboveAverage(grades,average) #تعليمة برمجية ميتة average = 86.6 # تعليمة برمجية ميتة unused_variable = "This is not used" # تعليمة برمجية ميتة average = total / len(grades) return average مع ذلك يجب الانتباه إلى أنه من الممكن في بعض الحالات ظهور الأكواد الميتة في المشروع بسبب تغييرات سابقة، أو أثناء تجربة حلول مختلفة، أو نتيجة استبدال منطق معين دون إزالة الكود القديم. تقليل التعقيد Cyclomatic Complexity يتميز كود مهندس البرمجيات المحترف بتقليل تعقيد الكود، مما يجعله أكثر قابليةً للفهم والصيانة. يجب أن تكون الدوال قصيرةً وبسيطة، بحيث لا تحتوي على الكثير من الشروط أو العمليات المعقدة. التعامل مع البيانات بفعالية أكبر قد يقوم الكود العادي بمعالجة البيانات بطريقة غير فعالة، مثل التكرار في التعامل مع القوائم أو استخدام العمليات البطيئة، لكن في كتابة مهندس البرمجيات للكود، لا بد له من التعامل معها بفعالية أكبر. نلاحظ المثال التالي طريقة عادية لكتابة الكود: # الكود العادي def countAboveAverage(grades, average): count = 0 for grade in grades: if grade > average: count += 1 return count في حين أن الكود الاحترافي يكون أبسط شكلًا وأقل تكرارًا كما يلي: # الكود الاحترافي def countAboveAverage(grades, average): return sum(1 for grade in grades if grade > average) التفكير في قابلية التوسع يتميز كود مهندس البرمجيات المحترف بالقابلية للتوسع والتعديل في المستقبل، مما يضمن أن الكود يمكن تطويره بسهولة عند الحاجة إلى إضافة ميزات جديدة على سبيل المثال: # الكود العادي def calculateSum(grades): return sum(grades) وكما نرى، فالكود أعلاه بسيط وواضح، لكنه غير قابل للتوسع أو التطوير مستقبلًا، في حين أنه يمكن كتابته بشكل أكثر احترافية قابلة للتوسع على النحو الآتي: # الكود الاحترافي (قابل للتوسع) def calculate(grades, operation): if operation == 'sum': return sum(grades) elif operation == 'average': return sum(grades) / len(grades) else: raise ValueError("Operation not supported") الخاتمة إلى هنا نكون قد وصلنا إلى نهاية مقالنا الذي تناولنا فيه أساسيات كتابة كود برمجي احترافي مثل مهندسي البرمجيات. نأمل أن نكون قد قدمنا معلومات مفيدة، وساعدنا في التعرف على الأساسيات التي تساهم في تحسين المهارات البرمجية. يجب أن نتذكّر دائمًا أن البرمجة ليست مجرد كتابة أكواد، بل هي رحلة تعلم مستمرة تعتمد على التفكير المنطقي والإبداعي، وأن نحرص على تطوير مهاراتنا البرمجية باستمرار، فمجال البرمجة يشهد تطورًا متسارعًا كل يوم، مما يفتح أمامنا آفاقًا وفرصًا جديدة. المصادر So you want to be a professional coder أهم النصائح لكتابة أفضل كود المدونة العربية Clean Code: A Handbook of Agile Software Craftsmanship The Pragmatic Programmer اقرأ أيضًا مهندس البرمجيات من هو وما هي مهامه تعرف على تخصص هندسة البرمجيات