اذهب إلى المحتوى

Mustafa Suleiman

الأعضاء
  • المساهمات

    20334
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    494

كل منشورات العضو Mustafa Suleiman

  1. الخادم يعمل لا مشكلة فهو يعرض رسالة hell bun عند زيارة الرابط، قمت بمحاولة التسجيل فحدث خطأ، ما هي الأخطاء التي تظهر في الـ logs على الاستضافة؟
  2. نعتذر لكِ عن أي إنزعاج أثناء تواجدك بالأكاديمية، قمت بتفقد الأمر ومنصة الأكاديمية تعمل بشكل سليم وسريع. هل لديكِ إضافة مانع إعلانات في المتصفح لديكِ؟ أحيانًا تسبب مثل تلك الإضافات مشاكل لمشغل الفيديو بالأكاديمية لسبب ما، لذا استثني الأكاديمية من المواقع التي تعمل عليها الإضافة، بمعنى ضعي الموقع في قائمة white list. أيضًا هل الإنترنت لديكِ مستقر؟ فربما يوجد مشكلة به، للتأكد في حال المشكلة تظهر على الهاتف أيضًا إذن المشكلة من شبكة الإنترنت لديك، حاولي تعديل إعدادات الـ DNS للشبكة لديكِ إلى جوجل أو Cloudflare والأداة التالية جيدة حمليها واختاري من القائمة الـ dns ثم apply https://dnsjumper.net أو ربما المشكلة في المتصفح، حاولي تحديثه أو استخدمي متصفح آخر.
  3. آلية الإختبار هي كالتالي: بعد إنهاء 4 مسارات من الدورة على الأقل، أو الدورة بالكامل عليك رفع المشاريع التي قمت بها بالدورة على حسابك في github، ثم التحدث لمركز المساعدة وإخبارهم أنك تريد التقدم للإختبار وتوفير روابط المشاريع على github. ثم الإنتظار لبعض الوقت لحين مراجعة المشاريع وسيتم الرد عليك، وتحديد موعد لإجراء مقابلة، وبها يتم: إجراء محادثة صوتيّة لمدة 30 دقيقة يطرح المدرّب عليك أسئلة متعلّقة بالدورة والأمور التي نفّذتها خلالها. يحدد لك المدرّب مشروعًا مرتبطًا بما قمت به أثناء الدورة لتنفيذه خلال فترة محددة تتراوح بين أسبوع إلى أسبوعين. إجراء محادثة صوتيّة أخرى لمدّة 30 دقيقة يناقش بها مشروعك وما نفذته وتطرح أسئلة خلالها. إن سارت على جميع الخطوات السابقة بشكل صحيح، تحصل على الشهادة أو يرشدك المدرّب لأماكن القصور ويطلب منك تداركها ثم التواصل معنا من جديد.
  4. الواجهة الخلفية ليست بتلك السهولة بل معقدة أكثر من الواجهة الأمامية، الفكرة أنك لا تتعامل مع تصميم والألوان بل منطق برمجي فقط، وبالطبع ليس دائمًا فهناك مشاريع الواجهة الأمامية بها معقدة أكثر. ولا تتنقل بين اللغات والتقنيات بشكل عشوائي، في البداية يجب الإلتزام بمسار مُحدد ولا مشكلة في تغيير التخصص حيث أنك في مرحلة استكشاف لمجال البرمجة، ويجب الآن التعمق في تخصص محدد لاكتساب خبرة به لدخول سوق العمل. حاليًا المطلوب أكثر هو Full-Stack، وتستطيع التغلب على مشكلة الضعف في الواجهة الأمامية من خلال استخدام إطار عمل مثل Tailwind ومكونات جاهزة من خلال shadcn لكن بالطبع يشترط تعلم الأساسيات HTML, CSS, JS والوصول لمستوى متوسط على الأقل بهم.
  5. ما تقوم به غير صحيح، أنت في مرحلة التعلم لذا يجب التعمق في التقنيات المطلوبة في سوق العمل، وهي Node.js وفي وقت فراغك فيما بعد تستطيع الإطلاع على bun.js للمعرفة ليس أكثر فهي تقنية جديدة ليست ناضجة ومستخدمة بشكل كافٍ بعد. لا تقم بتعلم ما تفضله أنت بل المطلوب في سوق العمل، وإلا ستجد نفسك تعلمت مهارات غير مطلوبة ويضيع مجهودك نسبيًا، فهناك الكثير من المفاهيم المشتركة بالطبع، لكن لكل تقنية مفاهيم خاصة بها وبحاجة إلى التعمق بها واكتساب خبرة من خلال المشاريع. تعلم Bun.js بعد أن تحصل على وظيفة وتتقن Node.js.
  6. مبارك لك مجهود تُشكر عليه، الآن تنتقل لمرحلة المراجعة والاستعداد للإختبار، هل قمت بالتطبيق العملي على الدروس؟ حيث هناك تطبيقات عملية مطلوب تسليمها، وكذلك الممارسة العملية هي الأهم عند تعلم البرمجة وليس المشاهدة. ليس المطلوب منك رفع التطبيقات العملية البسيطة، بل المشاريع العملية الكاملة، بمعنى في قسم "استخراج البيانات من الويب Web scraping" يوجد تطبيق عملي ستوظف به ما تعلمته، فذلك مطلوب منك رفعه. وفي مسار "تطبيقات عملية على النماذج النصية الكبيرة LLMs" مطلوب منك التطبيقات التي سنقوم بها في ذلك المسار. بالتالي لتجنب إدخال نفسك في متاهة مفرغة، أرجو إنشاء مجلد للدورة ثم بداخله قم بإنشاء عدّة مجلدات حيث مجلد لكل مسار في الدورة. وبداخل كل مجلد قم بوضع التطبيقات العملية التي قمنا بها في ذلك المسار. ثم رفع المجلد الرئيسي بالكامل بما يحتويه من مجلدات على مستودع GitHub وتوفير الرابط الخاص به عند التقدم للإختبار. وفي حال وجود مشروع به الكثير من الملفات والمجلدات ويحتاج إلى مجلد خاص به مثل مشروع "تخصيص نموذج لغة باستخدام LangChain و OpenAI" هنا تقوم برفع المشروع على مستودع GitHub منفصل خاص به. ويجب تعلم مهارة استخدام GIT ومنصة GitHub فهي أساسية لا غنى عنها، ستجد مصادر هنا: ولمراجعة الدورة عليك بتنفيذ مشاريع مشابهة لما قمت به بالدورة، لكن على بيانات جديدة وستجد ذلك في موقع Kaggle، ثم العودة للدروس لمراجعة نقاط الضعف التي وجدتها لديك. أي قم بمراجعة مسار مسار من خلال التطبيق العملي، وفي حال المسار نظري، لخص أهم النقاط التي تعلمتها منه، واشرح لنفسك بشكل شفهي كيف تعمل الخوارزمية مثلاً.
  7. أرجو توضيح هل أكملت دورة الذكاء الاصطناعي فقط؟ أم هناك دورات أخرى؟ وهل قمت بدراسة الدورة بالكامل أم مسارات محددة فقط؟ وهل يوجد مسارات تخطيتها؟
  8. يوجد طلب على المجالين، لكن النصيحة بشكل عام ضررها أكثر من نفعها، لذا يجب توضيح ظروفك من أجل الحصول على نصيحة مناسبة لك، أي ما وضعك الحالي وما هو هدفك وما هي بلدك وما مستوى اللغة لديك وهكذا. بشكل عام، من حيث سهولة دخول سوق العمل فمجال الأمن السيبراني أفضل في تلك النقطة، حيث توجد وظيفة محددة اسمها محلل مركز عمليات أمنية - SOC Analyst Tier 1 وتلك الوظيفة مصممة للمبتدئين لمراقبة التنبيهات الأمنية والتعامل معها. أيضًا في الأمن السيبراني، شهادات مثل CompTIA Security+ أو Certified Ethical Hacker (CEH) لها وزن وتأثير في الحصول على وظيفة، وحتى أهم من الدرجة الجامعية.
  9. غالبًا يوجد تضارب بين z-index و overflow، فلديك حاوية div لها الكلاس .field تحتوي على القائمة المنسدلة select، وحاوية أخرى أسفلها التي تحتوي على قائمة المواضيع التابعة ولها الكلاس .box وقمت بتعريف ما يلي للكلاس .box: .box { position: relative; z-index: 1; } خاصية z-index: 1 تجبر الـ div على أن يرتفع طبقة واحدة فوق العناصر الأخرى التي ليس لها z-index محدد والتي تعتبر z-index: auto أو 0. بالتالي عند فتح القائمة المنسدلة select، تظهر خياراتها لكن بما أن العنصر .box الذي يقع تحتها له z-index أعلى من الحاوية التي توجد بها القائمة، فيظهر فوق خيارات القائمة ويغطيها. وقمت بالفعل بحل المشكلة من خلال: @media (min-width: 801px) { .field:focus-within { z-index: 9999; } } لرفع الـ .field إلى طبقة عليا عند التركيز على القائمة، ولكن يبدو أن Firefox لا يزال يعطي الأولوية لسياق التكديس الذي أنشأه .box أقصد خاصية z-index أيضًا التعليق الذي كتبته /* تحت السيلكت عند الفتح */ يعني أنك تريد أن يكون العنصر تحت القائمة، ولكن z-index: 1 يفعل العكس حيث يضعه فوق العناصر التي ليس لها z-index، ويجب إزالته. قم بتجربة إزالة z-index: 1 من العنصر .box، فهو ليس ضروري ويسبب المشكلة وبما أن العنصر .box يأتي بعد .field في ترتيب الـ HTML، فلن تكون هناك حاجة لإعطائه z-index ليبقى في مكانه. .box{ border:1px solid var(--line); border-radius:12px; padding:10px; max-height:340px; overflow:auto; background:var(--card); position:relative; /* z-index:1; */ }
  10. الكود المشترك في دالة والوراثة تنبعان من نفس المبدأ الأساسي وهو Don't Repeat Yourself - DRY لكنهما ليسا نفس الشيء، بل تطبيقان مختلفان لهذا المبدأ في نموذجين برمجيين مختلفين. فالكود المشترك في البرمجة الإجرائية مثل لغة C، فكرته هي أنه لو لديك مجموعة من الأسطر التي تتكرر في دالتين أو أكثر، تستطيع وضعها في دالة مساعدة جديدة، ثم تستدعي الدالة المساعدة من كل الأماكن التي تحتاجها. أي علاقة استخدام أو استدعاء فالدالة find_parent والدالة check تستخدمان نفس منطق التنقل في الشجرة، لمشاركة منطق أو خوارزمية محددة بين عدة دوال. بينما الوراثة في البرمجة كائنية التوجه OOP مثل C++, Java, Python، فلا تشارك مجرد جزء من الكود، بل تشارك هوية وسلوك كامل، أي طريقة لإنشاء Class جديدة بناءًا على كلاس موجود، فالكلاس الجديد الابن يرث كل الخصائص أي المتغيرات والسلوكيات وهي الدوال من الكلاس الأصل الأب. لذا يوجد علاقة نوع من، فالسيارة هي نوع من المركبات، والقطة نوع من الحيوانات، أي إنشاء تسلسل هرمي بين الكائنات، حيث يرث كائن متخصص كل صفات وسلوكيات كائن أعم منه. ليس كذلك، فكتابة الكود بتلك الطريقة غير عملية، بل يستخدمون مفاهيم برمجية مثل الوراثة والمبادئ الخاصة بها مثل Method Overriding. أي إنشاء كلاس عام اسمه Enemy يحتوي على كل الخصائص والسلوكيات المشتركة بين كل الأعداء في اللعبة، ووداخل دالة die() في الكلاس Enemy الأساسي، يكتبون الكود مرة واحدة فقط، ثم لكل نوع مختلف من الأعداء، يتم إنشاء كلاس جديدة يرث من الكلاس Enemy الأساسي. وبما أن Soldier و Sniper و Guard جميعهم يرثون من Enemy، فيحصلون تلقائياً على دالة die() بنفس الكود المشترك دون الحاجة لكتابتها مرة أخرى، وعندما يموت أي منهم في اللعبة، يتم استدعاء نفس الدالة die() من الكلاس الأب، فيصدر نفس الصوت وتحدث نفس الحركة. وبالنسبة للعدو المميز كزعيم مثلاً له صوت وحركة موت مختلفة؟ يتم استخدام مبدأ تجاوز التابع Method Overriding حيث لكلاس الزعيم أن يرث من Enemy أيضًا، لكن يُعيد كتابة دالة die() الخاصة به لتنفيذ سلوك مختلف.
  11. يجب تعديل الكود لربط Form3 بنافذة invoice الأصلية، أي ستقوم بإضافة مُنشئ constructor جديد إلى Form3 يقبل كائن من نوع invoice ويخزنه. ثم تعديل نافذة invoice لتمرير نفسها إلى Form3، ثم تعديل معالج حدث النقر dataGridView3_Click في invoice.cs لتمرير النسخة الحالية من نافذة الفاتورة this إلى Form3. أرفقت لك الملفين بعد التعديل. Form3.cs invoice.cs
  12. لم يعد هناك حاجة إلى الفلاش بسبب تطور لغات الويب، حيث HTML5 الخاصة بتطوير الهيكل الأساسي للصفحة، تم بها إضافة عناصر قوية حلت محل الفلاش مباشرة، وهي<canvas> عبارة عن لوحة رسم رقمية تستطيع الرسم عليها وتحريك العناصر باستخدام الجافاسكريبت لإنشاء رسوم متحركة، ألعاب، إعلانات تفاعلية، ورسوم بيانية. أيضًا <video> و <audio> لتشغيل الفيديو والصوت مباشرة في المتصفح دون الحاجة لمشغل فلاش. كذلك لغة CSS3 وهي لغة التصميم والتنسيق، وأصبحت قوية جداً في إنشاء التأثيرات والحركات، عن طريق Transitions أي الانتقالات لعمل تأثيرات ناعمة عند تغير حالة عنصر ما، كتغيير اللون أو الحجم عند مرور الماوس، والرسوم المتحركة Animations لإنشاء سلاسل حركية معقدة ومتكاملة مثل تحريك إعلان عبر الشاشة باستخدام keyframes. بجانب SVG وهي تقنية رسوميات متجهة كالفلاش ولكن بمعيار ويب مفتوح، وحجمها صغير، لا تفقد جودتها عند تكبيرها، ويمكن التحكم في كل جزء منها وتحريكه باستخدام CSS و JavaScript، بالتالي مثالية للشعارات والأيقونات والرسوم التوضيحية المتحركة. وحاليًا يتم استخدام برنامج Adobe Animate CC والذي هو نفسه برنامج فلاش القديم ولكن تم تطويره ليقوم بتصدير الملفات بصيغة HTML5 Canvas و JavaScript بدلاً من ملفات SWF.
  13. استخدم تقنية Hybrid Search مع نموذج embedding متعدد اللغات، بمعنى يوجد نماذج Embedding عربية متقدمة فالنماذج الحديثة تفهم المرادفات تلقائيًا: from sentence_transformers import SentenceTransformer model = SentenceTransformer('sentence-transformers/paraphrase-multilingual-mpnet-base-v2') # أو model = SentenceTransformer('aubmindlab/bert-base-arabertv2') لديك أيضًا CAMeLBERT. وذلك لنتمكن من البحث الدلالي Semantic Search والذي يفهم المعنى بحيث يجد قطة و بسة و هرة. كذلك Keyword Search للبحث بالكلمات، والذي يعتمد على TF-IDF لمطابقة الكلمات النصية لتضمن دقة النتائج عند التطابق الحرفي. وابدأ بـ 0.7 للـ embedding و 0.3 للكلمات المفتاحية، وفي حال يوجد أكثر من 10,000 خدمة، استخدم FAISS للسرعة، وأعد حساب الـ embeddings عند إضافة خدمات جديدة.
  14. يجب تثبيت bun أولاً من خلال تنفيذ الأمر التالي في منفذ الأوامر powershell powershell -c "irm bun.sh/install.ps1|iex" ثم أغلق منفذ الأوامر ومحرر الأكواد vscode، وأعد تشغيلهم وتنفيذ التالي للتحقق من التثبيت: bun --version من المفترض أن يظهر لك إصدار bun في حال لم يظهر، إذن يجب إضافة bun لمتغيرات البيئة من خلال تنفيذ التالي في منفذ الأوامر powershell [System.Environment]::SetEnvironmentVariable( "Path", [System.Environment]::GetEnvironmentVariable("Path", "User") + ";$env:USERPROFILE\.bun\bin", [System.EnvironmentVariableTarget]::User ) ثم أغلق منفذ الأوامر ومحرر الأكواد vscode، وأعد تشغيلهم وتنفيذ التالي للتحقق من التثبيت: bun --version
  15. أرفق مجلد المشروع بشكل مضغوط لتفقده
  16. قمت بتجربة تسجيل مستخدم وتم الأمر بشكل سليم: لا تحاول فتح روابط التي تستقبل طلبات POST في المتصفح، فهي لن تعمل لأن المتصفح يرسل طلب get عند التوجه للرابط في شريط العنوان.
  17. يجب ألا تدع نافذة الفاتورة تُدمر عند إغلاقها، بل قم بإخفائها فقط، لتحتفظ النافذة ببياناتها وهي الأصناف الموجودة في الـ DataGridView، وفي المرة التالية التي تحتاجها، ستقوم بإظهارها مرة أخرى بدلاً من إنشائها من الصفر. في invoice.cs أو ما شابه لديك أنشئ الدالة التالية: private void invoice_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; this.Hide(); }
  18. منهج الدورة تم إعداده لدراسته بالترتيب، بحيث يتم التدرج في الشرح وشرح الأساسيات اللازمة في البداية لدراسة المسارات اللاحقة، وذلك ما قمت به بالفعل حيث درست لغة البرمجة اللازمة وهي بايثون. تنتقل بعدها للمسار التالي في الدورة وهو تطبيقات عملية على النماذج النصية الكبيرة LLMs، وهكذا أي تدرس الدورة بنفس الترتيب، وفي حال واجهت صعوبة تستطيع السؤال أسفل الدروس في التعليقات، وفي حال سؤال عام نضعه هنا في قسم أسئلة البرمجة كما فعلت. لكن للنصيحة، الأفضل التأني قليلاً عند دراسة اللغة البرمجية الأولى، لذا أنصحك بالتعمق في بايثون ودراسة المسار الأول من دورة بايثون فهو مجاني لك وبه تفصيل أكثر حول لغة بايثون ومشروع أيضًا، والمسارات الأولى من جميع الدورات الأخرى متاحة لك بشكل مجاني أيضًا.
  19. تقصد الحل الأول؟ هل قمت بإغلاق الفورم ff من زر الإغلاق X، فالنظام سيقوم بتدميره Dispose، وفي المرة التالية عند إضافة صف إليه، البرنامج سيحاول الكتابة على ورقة تم رميها بالفعل، وسيظهر خطأ ObjectDisposedException. لذا عرف الفورم خارج الحدث، على مستوى الكلاس أي الفورم الرئيسي: public partial class MainForm : Form // اسم الفورم الرئيسي لديك { Form4 ff; public MainForm() { InitializeComponent(); } // باقي الكود هنا private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { if (ff == null || ff.IsDisposed) { ff = new Form4(); } ff.dataGridView4.Rows.Add(label2.Text, textBox1.Text); if (!ff.Visible) { ff.Show(); } else { ff.BringToFront(); } } } } عرفت المتغير ff على مستوى الكلاس ليحتفظ بقيمته ولا يتم تدميره مع كل ضغطة Enter. و if (ff == null || ff.IsDisposed) قبل أن نستخدم ff، نتأكد هل هو غير موجود null أو هل تم إغلاقه وتدميره IsDisposed إن كان كذلك، ننشئ نسخة جديدة منه، لنضمن أننا دائماً نتعامل مع فورم صالح للاستخدام. و if (!ff.Visible) لمنع فتح الفورم مرة أخرى في حال مفتوحبالفعل، وبدلاً من ذلك يجلبه للأمام باستخدام BringToFront().
  20. أرسل صورة للرد الذي يظهر لك عند إرسال طلب Get إلى رابط الخادم على الاستضافة من المفترض أن تحصل على: Hello Bun!
  21. ما قصدته هو إختبار الخادم الذي قمت برفعه على الاستضافة وليس الخادم المحلي، أي إرسال طلب لعنوان الخادم على الاستضافة وليس localhost في حال ظهرت مشكلة cors قم بتعديل الكود للسماح بجميع الطلبات من أي مصدر مؤقتًا لتفقد ما المشكلة: app.use(cors()); app.use(cors()) تضع رأس الاستجابة Access-Control-Allow-Origin: * لإخبار المتصفح أن أي موقع ويب مسموح له بالوصول إلى الخادم.
  22. ستحتاج إلى بعض الوقت لاكتساب خبرة نشر المشاريع على الاستضافة، ستواجهك مثل تلك المشاكل في البداية وستتعلم منها. قبل أي شيء، هل الخادم يعمل بشكل سليم؟ قم بإختباره عن طريق postman بإرسال طلب إلى رابط الاستضافة، وفي حال لم يعمل تفقد رسائل الخطأ التي تظهر على الاستضافة من خلال لوحة التحكم
  23. مدة الإنقطاع كبيرة، ستحتاج إلى المراجعة من البداية وستكون سريعة في تلك المرة لأنك قمت بالدراسة من قبل، ثم يجب مباشرًة التطبيق على مشروع عملي لتثبيت ما تعلمته ولا مشكلة في إعادة المشروع الخاص بالمسار أو مشروع غيره. وفي حال الإنشغال مرة أخرى، حاول تخصيص ساعتين على الأقل للدراسة بشكل شبه يومي، تنظيم الوقت هو الأهم أثناء الدراسة الجامعية. ولا تقم بدراسة الدورة من البداية في كل مرة تنقطع بها، مثلاً أنهيت نصفها، هنا تستطيع إعادة تنفيذ مشروع عملي قمت به بالدورة وإعادة مراجعة النقاط التي لا تتذكرها جيدًا.
  24. ما هي مدة الإنقطاع وما هي الدورة التي كنت تدرسها؟ وما هو الوقت المتاح لك للدراسة بشكل يومي؟ في البداية الاستمرارية هامة جدًا، وذلك حال تعلم أي شيء في الحياة، في البداية تحتاج إلى الاستمرارية لاكتساب المهارة، كالطفل الذي يتعلم المشي يحاول باستمرار ويفشل ويحاول، لو توقف عن المحاولة وظل قاعدًا لن يتعلم المشي، أيضًا أصل الإنسان النسيان ويوجد ما يسمى منحنى النسيان. بداية تخزين المعلومات، يكون الاسترجاع سهلًا، ولكن مع مرور الوقت، يتلاشى الاسترجاع ويصبح أصعب، ويعني منحنى النسيان أن هناك فترة تتلاشى خلالها المعلومات بشكل سريع في البداية، ولكن مع مرور الوقت، يصبح معدل النسيان أقل وأقل، ويتم الحفاظ على الجوهر الأساسي للمعلومات المهمة. فبعد مرور يوم واحد من التعلم، هناك انخفاض في الاسترجاع الدقيق للمعلومات، ويعتمد مدى النسيان على عوامل مثل طبيعة المعلومات ومدى تكرارها وأهميتها بالنسبة للشخص تتراوح نسبة النسيان بعد مرور يوم واحد بين 20% إلى 40% من المعلومات. وبعد 3 أيام من 50% إلى 70% وبعد مرور أسبوع ترتفع النسبة إلى 70% وحتى 90%، وذلك في حال لم تقم بإعادة تكرار ما تعلمته وذلك من خلال تنفيذ مشاريع للتطبيق على ما تعلمته وتثبيت المعلومات واستخدام ما سبق وتعلم أمور جديدة. لذا تحتاج إلى إعادة الدراسة من البداية والإنتظام قدر الإمكان بتخصيص وقت كل أسبوع لو كنت مشغولاً، أو يوميًا لو لديك القدرة على ذلك بحد أدنى ساعتان. في حال انشغلت وتوقفت، فعلى الأقل حاول أسبوعيًا إعادة كتابة التمارين التي قمت بها في الدورة أو تنفيذ تمارين جديدة، أو محاولة استرجاع ما تعلمته في كل مسار لكي لا تنسى، ثم استكمال الدورة عند القدرة على ذلك.
  25. الأمر ليس متعلق بجوجل، بل بلغات البرمجة الأساسية المشتق منها أغلب لغات البرمجة وهي Java، وC#، وC++ والتي اعتمدت ذلك التنسيق منذ بداياتها، وبالتبعية جوجل تستخدم تلك اللغات بكثافة، لذا تبنت الـ Style Guides أو الأسلوب الخاص بتلك اللغات، لكونها الممارسات الأفضل التي أثبتت فعاليتها على مر السنين. وبالطبع ليس فرضًا على الجميع استخدامه، فالأمر يعتمد بشكل أساسي على اللغة المستخدمة في المشروع، حيث كل لغة برمجية لها مجتمعها واصطلاحاتها الخاصة، واتباع اصطلاحات اللغة هو الممارسة الأفضل. فبايثون مثلاً لديها style guide خاص بها وهو PEP والذي يوصي بـ CapWords أي CamelCase لأسماء الأصناف، وsnake_case للمتغيرات والدوال. ولغتي Java و C#‎ تعتمد على CamelCase لأسماء الأصناف هو قاعدة شبه مقدسة ولا يُنصح بخرقها، بينما Ruby تستخدم CamelCase للأصناف والوحدات، وsnake_case للدوال والمتغيرات. Rust أيضًا تستخدم CamelCase للأنواع (structs, enums) وsnake_case للدوال والمتغيرات.
×
×
  • أضف...