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

عضو مبتدئ (1/3)
0
السمعة بالموقع
-
يتساءل العديد من مستخدمي منصة تيكتوك عن كيف يمكن لهذه المنصة أن تقدم لنا محتوى يبدو وكأنه مصمم خصيصًا لنا، حتى قبل أن نبحث عنه؟ لا بد أن هذا السؤال قد تبادر إلى ذهن الكثيرين ممن لاحظوا الدقة اللافتة في الاقتراحات التي تظهر لهم، والتي أثبتت أنها تعتمد بقوة على الخوارزميات في جذب انتباه المستخدمين. في مجال علوم الحاسوب، تُعرف هذه الآليات بخوارزميات أنظمة التوصية، وهي تعتمد على تحليل مستمر لسلوك المستخدمين. ويتم بناء هذه الأنظمة على جمع وتحليل كميات هائلة من البيانات المتعلقة بالتفاعلات اليومية، مثل ما يشاهده المستخدم، وما يضغط عليه، أو ما يتجاهله. وبطبيعة الحال، تكوّن هذه البيانات نموذجا شخصيًا يتيح للمنصة تيكتوك وغيرها إمكانية تقديم محتوى مخصص يواكب اهتمامات المستخدم واحتياجاته. سنتعمق في آلية عمل هذه الخوارزميات عمليًا بهذا المقال، وسنقدم شرحًا تطبيقيًا مبسطًا يوضح كيف تعمل أنظمة التوصية في تيكتوك، مما يسهم في تسهيل فهم هذه التكنولوجيا واستكشاف تطبيقاتها المتنوعة. سنستخدم للعمل بهذا المقال قاعدة بيانات التي تحتوي على مجموعة من بيانات الفيديوهات التي تتمثل في أسماء الفيديوهات والوسوم المرتبطة بها والعديد من البيانات المختلفة. هذه البيانات ستساعدنا في تطبيق الخوارزميات وقياس التشابه بين الفيديوهات المختلفة، مما يتيح لنا بناء نظام توصية عملي. آلية عمل خوارزمية التوصية في منصة تيكتوك تقوم خوارزميات التوصية التي تعتمدها منصة تيكتوك باقتراح محتوى مخصص يتحسن بمرور الوقت مع استمرار المستخدم في قضاء الوقت على المنصة، ولأجل ذلك يتم العمل على: جمع البيانات: وتشمل أنواع التفاعلات المتمثلة في الاعجابات والتعليقات ومدة المشاهدة وتخطي المحتوى تصنيف المحتوى حسب النوع: بتحديد موضوع الفيديو وجودته وملاءمته لاهتمامات المستخدمين، يتم استخدام تقنيات مثل تحليل ميزات الفيديو وتتبع أداء الفيديو تصنيف المحتوى حسب مبدأ التصفية التعاونية: تستخدم لتوليد التوقعات بناءً على سلوك المستخدم السابق لاعتماد اقتراحه من عدمه على أصحاب السلوكيات والاهتمامات المتشابهة تهيئة بيئة العمل لبناء نظام توصية شبيه بنظام توصية تيكتوك تعتمد خوارزميات تيكتوك كثيرًا على لغة البرمجة بايثون Python، خاصةً في تقنيات الذكاء الاصطناعي والتعلم الآلي لتطوير خوارزمياتها، بالإضافة إلى لغات برمجية أخرى مثل ++C و Java و Go. لكن نظرًا لأننا سنركز في هذا المقال على خوارزميات التوصية، فسنبني نظام توصية مشابه قائم على لغة بايثون، وسنحتاج لأجل ذلك إلى كل من: مكتبة pandas: لقراءة ومعالجة البيانات إطار العمل scikit-learn: لتحويل البيانات النصية إلى شكل يمكن لنموذج التوصية التعامل معه. قاعدة البيانات التي سنعمل على أساسها بهذا المقال نثبت المكتبات وأطر العمل التي نحتاجها على النحو الآتي: pip install pandas scikit-learn قراءة و تحليل البيانات الضخمة لفهم سلوك المستخدمين سنطلب الآن قراءة البيانات وتحميلها من قاعدة البيانات المستخدمة وطباعة أول خمس صفوف منها باستخدام مكتبة Pandas. import pandas as pd #DataFrames للتعامل مع البيانات وتحليلها باستخدام رابط ملف البيانات لتيكتوك بصيغة خام (raw) من GitHub # ratings_url = "https://raw.githubusercontent.com/Peter-Lankton/tik-tok-data/main/tik_tok_analytics.csv" ratings = pd.read_csv(ratings_url) عرض أول خمس صفوف من البيانات للتحقق من التحميل بنجاح # print(ratings.head()) وكما نلاحظ تتم قراءة خمس صفوف من قاعدة البيانات على النحو الآتي: تحتوي البيانات تحتوي على معلومات حول مقاطع فيديو مختلفة مثل اسم الفيديو، التكنولوجيا المستخدمة في الفيديو، ووقت التحميل، اليوم الذي تم فيه رفع الفيديو، وأسئلة وأجوبة، ووجود الترجمة، والمشاهدات، والمشاركات، والتعليقات، والإعجابات، والوسوم؛ وسنستفيد منها لبناء نظام توصيات يقترح ما يجب على المستخدم مشاهدته بعد ذلك، بناءً على تفضيلاته الحالية للفيديو. ستظهر لنا التعليمة التالية عدد الأعمدة و عدد الصفوف، بالاضافة الى نوع كل عمود و عدد القيم غير الفارغة: ratings.info() وستكون النتتيجة على النحو التالي: <class 'pandas.core.frame.DataFrame'> RangeIndex: 102 entries, 0 to 101 Data columns (total 17 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Video_Name 102 non-null object 1 Tech 101 non-null float64 2 Upload_time 102 non-null int64 3 Day 102 non-null int64 4 Q_and_A 102 non-null int64 5 has_captions 102 non-null int64 6 Views 102 non-null int64 7 Shares 101 non-null float64 8 Comments 102 non-null int64 9 Likes 102 non-null int64 10 Hashtags 83 non-null object 11 Cover 102 non-null int64 12 Length 102 non-null int64 13 avg_watch 102 non-null int64 14 Location 101 non-null float64 15 Humor 101 non-null float64 16 Hat 100 non-null float64 dtypes: float64(5), int64(10), object(2) memory usage: 13.7+ KB معالجة البيانات سنضيف بهذه المرحلة معالجةً جيدةً لنظام توصيتنا ليكون أقرب إلى نظام التوصية المستخدم على تيكتوك. ونلاحظ كيفية معالجة البيانات وإدخالها بسهولة في النموذج. وفي أول خطوة من عملية المعالجة سنعمل على إزالة التكرارات، من خلال التحقق مما إذا كانت هناك أي أسماء مكررة للفيديوهات، فهي زائدة عن الحاجة بالنسبة للخوارزمية ويجب إزالتها. # حساب عدد القيم المكررة في العمود ratings.duplicated(subset='Video_Name').sum() # 11 # إزالة التكرار df = ratings.drop_duplicates(subset='Video_Name') # التأكد من إزالة التكرار df.duplicated(subset='Video_Name').sum() # 0 أخذ عينات عشوائية بعد التأكد من إزالة التكرارات، سنعمل على حل المشاكل التي قد تقع بها الذاكرة، وسنعمل على أخذ عينات عشوائية على النحو التالي: sample_size = 91 # عدد البيانات في الصفوف # أخذ العينة df = df.sample(n=sample_size, replace=False, random_state=80) # إعادة ضبط الفهرس df = df.reset_index() # إزالة عمود 'index' الناتج من reset_index() df = df.drop('index', axis=1) تنظيف البيانات ستحتاج البيانات الموجودة بقاعدة البيانات المستخدمة في هذه المرحلة الى التنظيف، ويكون ذلك من خلال ازالة المسافات البيضاء من عمود Video_Name لتجنب حدوث الأخطاء، إذ لو اعتمدنا التسمية العادية دون تنظيف، فقد يتسبب هذا بالحصول على نظام أقل دقة وصحة؛ فقد يعد الفيديو ?strong math for ml مثلًا و الفيديو strong opinion متشابهين. توضح الصورة التوضيحية التالية مثالًا عن ازالة المسافات البيضاء من أسماء الفيديوهات: وسنتتبع هنا كل مرحلة من مراحل تنظيف قاعدة البيانات، لتشمل كل أسماء الفيديوهات كما هو موضح في الكود كالتالي: def clean_Video_Name(Video_Name): result = str(Video_Name).lower() # تحويل النص إلى حروف صغيرة (lowercase) return(result.replace(' ','')) # إزالة المسافات من النص df['Video_Name'] = df['Video_Name'].apply(clean_Video_Name) # يتم تطبيق التنظيف على كل قيمة في العمود باستخدام الدالة "clean_Video_Name" df.head() وستكون النتيجة على النحو: نحوّل الآن بيانات اسم الفيديو والوسوم إلى أحرف صغيرة: # تحويل جميع القيم في عمود "Video_Name" إلى حروف صغيرة (lowercase) df['Video_Name'] = df['Video_Name'].str.lower() # تحويل جميع القيم في عمود "Hashtags" إلى حروف صغيرة (lowercase) df['Hashtags'] = df['Hashtags'].str.lower() # عرض أول خمس صفوف من DataFrame للتحقق من التغييرات df.head() بعد ذلك ندمج الأعمدة المستخدمة في نظام التوصية، بحيث يتم تكوين نص واحد لكل صف يتكون من جميع القيم النصية التي كانت موجودة في الأعمدة. # حذف الأعمدة غير المطلوبة df2 = df.drop(['Tech', 'Upload_time', 'Day', 'Q_and_A', 'has_captions', 'Views', 'Shares', 'Comments', 'Likes', 'Cover', 'Length', 'avg_watch', 'Location', 'Humor', 'Hat'], axis=1) # تحقق من الأعمدة المتبقية print(df2.columns) print(df2.head()) # دمج النصوص في الأعمدة المتبقية df2['Data'] = df2[df2.columns[1:]].apply( lambda x: ' '.join(x.dropna().astype(str)), axis=1 ) # عرض النتيجة print(df2['Data'].head()) وستكون النتيجة كالتالي: تحويل أطر البيانات Dataframe إلى تمثيلات عددية من أجل تحويل النصوص إلى تمثيلات عددية تعبر عن تكرار الكلمات في مجموعة النصوص من أجل تسهيل فهم النصوص وتحليلها بدقة من طرف النموذج، سوف نستخدم دالة ()CountVectorizer من مكتبة Scikit-Learn كالتالي: # استيراد CountVectorizer من مكتبة sklearn لتحويل النصوص إلى تمثيل عددي from sklearn.feature_extraction.text import CountVectorizer # إنشاء كائن CountVectorizer لتحويل النصوص إلى متجهات تمثل تكرار الكلمات vectorizer = CountVectorizer() # تطبيق fit_transform على عمود 'Data' في DataFrame df2 لتحويل النصوص إلى تمثيل عددي # fit_transform تقوم بتدريب CountVectorizer على البيانات وتحويل النصوص إلى مصفوفة من التكرارات vectorized = vectorizer.fit_transform(df2['Data']) حساب تشابه الفيديوهات لبناء نظام التوصية في أنظمة التوصية، الهدف الأساسي هو اقتراح محتوى يتناسب مع اهتمامات المستخدم. يعتمد ذلك على إيجاد تشابه بين المحتوى المعروض والمحتوى الذي سبق أن تفاعل معه المستخدم؛ إذ لو اعتمدنا فقط على التطابق الحرفي بين أسماء الفيديوهات أو الوسوم، فقد نفقد العديد من العلاقات المهمة بين المحتوى، فقد يحدث تشابه بالكلمات أحيانًا رغم وجود اختلاف تام بالمحتوى، بالتالي اقتراح الفيديو بناءً على الكلمات المستخدمة وحدها، لن يكون كافي، ولهذا السبب سنحول أسماء الفيديوهات والوسوم إلى متجهات عددية باستخدام دالة ()CountVectorizer، ثم نحسب درجة التشابه بين هذه المتجهات باستخدام دالة cosine_similarity من مكتبة sklearn. بمعنى آخر، يمكننا استخدام تشابه جيب التمام لقياس مدى تشابه الفيديوهات من خلال مقارنة تمثيل البيانات. اسم الفيديو والوسم. # استيراد cosine_similarity من مكتبة sklearn لحساب التشابه بين المتجهات باستخدام مقياس جيب التمام from sklearn.metrics.pairwise import cosine_similarity # حساب التشابه بين المتجهات التي تم إنشاؤها باستخدام CountVectorizer # سيتم حساب تشابه جيب التمام بين كل زوج من المتجهات similarities = cosine_similarity(vectorized) # طباعة مصفوفة التشابه بين الفيديوهات أو النصوص print(similarities) نلاحظ النتيجة كالتالي : وكما هو واضح، تتراوح نتائج نسبة التشابه بين 0 و1، و يمثل كل متجه تشابه فيديو بالنسبة إلى فيديو آخر؛ لكن نظرًا لعدم ذكر عناوين الفيديوهات هنا، سنحتاج مجددًا لتعيين هذا المتجه إلى إطار البيانات السابق. ملاحظة : متجه التشابه هو تمثيل عددي يعبّر عن مدى التشابه بين كل فيديو وآخر. يتم حسابه باستخدام دالة Cosine Similarity، بحيث تكون كل قيمة في المتجه مؤشرًا على درجة القرب بين الفيديوهات بناءً على اسم الفيديو والوسم. # تحويل مصفوفة التشابه إلى DataFrame باستخدام pandas # نقوم بتحديد الأعمدة على أنها أسماء الفيديوهات (من العمود 'Video_Name')، والصفوف على أنها الوسوم (من العمود #'Hashtags') df = pd.DataFrame(similarities, columns=df['Video_Name'], index=df['Hashtags']).reset_index() # عرض أول 5 صفوف من DataFrame لتفقد النتيجة df.head() في هذه المرحلة حولنا متجه التشابه إلى إطار بيانات يحتوي على أسماء الفيديوهات المدرجة رأسيًا وأفقيًا. تمثل قيم إطار البيانات تشابه جيب التمام بين الفيديوهات المختلفة. نلاحظ أيضًا أن الخط القطري يساوي دائمًا 1.000، وهو يعرض تشابه كل فيديو مع نفسه. عرض التوصية للمستخدم سنستخدم إطار البيانات السابق لعرض توصيات الفيديوهات للمستخدم، بحيث يتم ارجاع أفضل 5 فيديوهات مشابهة في حال إدخال فيديو واحد. كما يلي: # إذا كانت لديك مصفوفة التشابه 'similarities' وبيانات الفيديو 'df2' similarities_df = pd.DataFrame( similarities, index=df2['Video_Name'], columns=df2['Video_Name'] ) # دالة للحصول على التوصيات بناءً على الفيديو المدخل def get_recommendations(video_name, top_n=5): if video_name in similarities_df.columns: recommendations = ( similarities_df[video_name] .nlargest(top_n + 1) # الحصول على أفضل N+1 (بما في ذلك الفيديو نفسه) .iloc[1:] # إرجاع أسماء الفيديوهات الموصى بها ) return recommendations.index.tolist() else: return f"'{video_name}' not found in the video list." # مثال للاستخدام input_video = 'strongopinionk8s' # نستبدله بالفيديو الذي نرغب في الحصول على التوصيات بناءً عليه recommended_videos = get_recommendations(input_video, top_n=5) print("Recommended videos:") print(recommended_videos) وهنا سنلاحظ النتيجة المتمثلة في أحسن خمس فيديوهات مقترحة: Recommended videos: ['housefoundation', 'showinghowresucanworks', 'recommendeddatacourses', 'softwareengineering?', 'firstdataanalyticshw'] الخاتمة يمكن القول أن خوارزميات أنظمة التوصية هي جوهر التجربة الرقمية المخصصة التي تقدمها منصات التواصل الاجتماعي؛ فمن خلال تحليل سلوك المستخدمين وتفاعلهم مع المحتوى، يمكن لهذه الخوارزميات أن تقدم توصيات دقيقة تتناسب مع اهتماماتهم الشخصية. باستخدام تقنيات مثل التعلم الآلي وتحليل البيانات الضخمة، تستمر هذه الأنظمة في تحسين دقة التوصيات مع مرور الوقت، مما يعزز تجربة المستخدم بشكل كبير. المصادر tik-tok-data TikTok Algorithm with Machine Learning Recommendation System in Python Understanding Social Media Recommendation Algorithms TikTokData اقرأ أيضًا التمثيل المرئي للبيانات باستخدام Scikit-Learn مع Matplotlib و Seaborn خوارزميات الذكاء الاصطناعي التفاعل مع رسائل WhatsApp باستخدام الذكاء الاصطناعي
-
يشهد عالم البرمجة اليوم تسارعًا رهيبًا، إذ يحتاج المطورون إلى أدوات فعالة تساعدهم في تحسين جودة الكود، واكتشاف الأخطاء، وتسريع عملية التطوير. عادةً ما يلجأ المبرمجون إلى البحث اليدوي أو مراجعة الأكواد بأنفسهم، مما يستهلك وقتًا طويلًا وقد يكون غير دقيق. لهذا السبب، فإن دمج تقنيات الذكاء الاصطناعي مع بيئات التطوير تحسن من تجربة البرمجة وزيادة الإنتاجية. يعتبر 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 اقرأ أيضًا مهندس البرمجيات من هو وما هي مهامه تعرف على تخصص هندسة البرمجيات