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

عبد الوهاب بومعراف

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

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

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

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

    2

كل منشورات العضو عبد الوهاب بومعراف

  1. ليس بالضرورة تحميله أو تثبيته فليس له علاقة بإلغاء أو توقيف الإضافات. بالنسبة لهذه الإضافة فهي عبارة عن أداة لتنسيق الكود تلقائيا تستخدم في محررات النصوص مثل VS Code، وتقوم بترتيب الكود وتنظيمه وفق قواعد موحدة لتجعله أكثر وضوحا وسهولة في القراءة. وتعمل مع لغات عديدة مثل JavaScript، TypeScript، HTML، CSS، وغيرها. يمكنك العمل من خلالها حتى ب Vue فهي تدعمها وعند تثبيتها وتفعيلها ستقوم تلقائيا بتعديل الكود عند الحفظ، مثل إزالة الفراغات الزائدة وضبط الأقواس والأسطر الطويلة. لتثبيتها في VS Code يمكنك البحث عنها في قسم الإضافات باسم "Prettier - Code formatter"، ثم فعّل خيار التنسيق التلقائي عند الحفظ من الإعدادات. أما لإلغاء التثبيت يمكنك البحث عن اسم الإضافة التي ترغب في إلغائها ثم اضغط غلى Uninstall ثم سيتم حذفها وتعطيلها.
  2. وعليكم السلام ورحمة الله، البرمجة كائنية التوجه (OOP - Object Oriented Programming) وتصميم البرمجيات (Software Design) مفهومان مختلفان ولكنهما مترابطان في علم هندسة البرمجيات. فالبرمجة كائنية التوجه هي نمط برمجي يعتمد على مفهوم "الكائنات" حيث ينظر إلى البرنامج على أنه مجموعة من الكائنات التي تتفاعل فيما بينها من خلال خصائص (Attributes) وسلوكيات (Methods). هذا النمط يركز على الكائن كوحدة أساسية لبناء البرمجيات، ويعزز مفاهيم مثل التغليف (Encapsulation)، الوراثة (Inheritance)، والتعددية الشكلية (Polymorphism)، مما يسمح بإعادة استخدام الكود وتنظيمه بطريقة تسهل الصيانة والتطوير. أما تصميم البرمجيات فهو مرحلة أوسع وأشمل وتتعلق بكيفية بناء النظام البرمجي ككل بطريقة منظمة وقابلة للتوسع والتعديل. يشمل تصميم البرمجيات وضع الهياكل المعمارية للنظام، مثل كيفية توزيع المهام بين الوحدات المختلفة، وكيفية تفاعل هذه الوحدات مع بعضها، واختيار أنماط التصميم (Design Patterns) المناسبة لحل مشاكل متكررة في تطوير البرمجيات. تصميم البرمجيات لا يقتصر على OOP فقط، بل يشمل أي نمط برمجي، سواء كان إجرائيا وظيفيا أو كائني التوجه. الفرق الجوهري يكمن في أن OOP هو أسلوب من أساليب البرمجة يستخدم خلال مرحلة التنفيذ، بينما تصميم البرمجيات هو نشاط سابق للتنفيذ يهدف إلى وضع خطة وهيكل عام للنظام. OOP يمكن أن يستخدم كأداة ضمن عملية تصميم البرمجيات إذا كان التصميم يتطلب بناء النظام حول كائنات ولكن التصميم يتعامل مع مسائل أكبر، مثل مبدأ الفصل بين المهام (Separation of Concerns)، وتعريف الواجهات، وإدارة التعقيد، وضمان القابلية للاختبار، والأداء، والأمان. أما تصميم البرمجيات يشبه وضع المخطط المعماري لبناء منزل، بينما OOP يشبه اختيار نوع الطوب والطريقة التي يتم بها تركيب الجدران قد يحتوي تصميم البرمجيات على استخدام OOP كأحد المكونات، ولكنه لا يتوقف عليه.
  3. بالنسبة لاحتراف البرمجة فإنّه أساسا هذا المجال مصنّف ضمن المجالات طويلة الأمد، أي أنّ تعلمها قد يستغرق أشهرا وحتى سنوات. والسر وراء تحقيق الاحتراف فيها ليس سرعة التعلم بل جودة التعلم، وليس في من ينهي الدورات أولا بل من يستفيد منها أقصى استفادة وبما أنك طلبت ذلك سنساعدك لتحصيل ما يجب تحصيله. الاجتهاد والاستمرارية مطلوبان فأرجو منك عدم الانقطاع أكثر من أسبوعين متواصلين خلال مسيرتك التعليمية كي لا يحدث هناك فجوة كبيرة، وإن حدثت لك ظروف فلا بأس فلا يكلف الله نفسا إلا وسعها، يمكنك عمل مراجعة خفيفة ثم المواصلة من حيث توقفت. الأمر الثاني هو التطبيق العملي، فلا يمكن أن تكون مبرمجا من خلال الدروس النظرية بمفردها، لذا فالتطبيق العملي على ما تدرس أهم عامل سيساعدك لتستفيد من الدروس. كذلك الكثيرون يتجاهلون التوثيقات الرسمية للغة البرمجة أو التقنية التي يتعلمونها وهذا الأمر سيجعلك لا تعرف آخر التحديثات والتطورات الحاصلة. من الأفضل أن تبقى مواكبا لما يتمّ طرحه كي تستطيع المنافسة في السوق، ولكن ذلك لا يجب أن يكون قبل دراسة الأساسيات والتمكن منها جيدا.
  4. تعلم البرمجة كائنية التوجه (OOP) لا يعني أنك ستستخدمها دائما في كل مشروع، خصوصا في بدايات مشاريع تعلم الآلة وعلم البيانات ففي هذه المجالات يفضل في العادة الكتابة الإجرائية لأن التجريب السريع مطلوب، والكود يكون بسيطا ومؤقتا لكن عندما يتطور المشروع، وتظهر الحاجة إلى التنظيم وإعادة الاستخدام، يبدأ دور OOP في الظهور استخدام OOP يكون منطقيا عندما يصبح المشروع معقدا أو طويل الأمد، أو عندما يتم العمل ضمن فريق مثلا في مشروع فيه عدة مراحل مثل التحميل، المعالجة، التدريب، التقييم، والحفظ، يمكن وضع كل مرحلة في كلاس خاص وهذا يسهل تعديل أي جزء دون التأثير على بقية الكود. كذلك إن كان لديك أكثر من نموذج أو أكثر من نوع بيانات، فالبرمجة الكائنية توفر طريقة ممتازة للتعامل مع هذا التنوع، مكتبات مثل scikit-learn تعتمد على OOP أيضا وكل نموذج يتم تمثيله بكائن له وظائف محددةيمكنك إنشاء كلاس ModelHandler يحتوي على الوظائف الخاصة بالنماذج التي تستخدمها وهكذا ستتجنب تكرار الكود وتجعل مشروعك أكثر وضوحا. ال OOP مفيدة جدا في بناء APIs، أو في ربط النموذج مع الواجهة، أو في نشره على السحابة لكن لا يشترط أن تبدأ بها منذ السطر الأول.
  5. في JavaScript الكلمة المفتاحية this تشير إلى السياق الذي يتم فيه استدعاء الدالة وهي عنصر مهم في البرمجة الكائنية أين تأخذ this قيمة مختلفة حسب طريقة استدعاء الدالة، وليس حسب مكان تعريفها. فمثلا إذا تم استدعاء دالة من داخل كائن باستخدام object.method()، فإن this تشير إلى ذلك الكائن كالتالي: const user = { name: "Hsoub", greet() { console.log(this.name); } }; لاحظ هنا أن this تشير إلى user. أما إذا استدعيت الدالة في الوضع العام (global) فإن this تشير إلى window في المتصفح مثل الذي هنا: function show() { console.log(this); } أي أن الكلمة المفتاحية this تستخدم للإشارة إلى السياق الذي تنفذ فيه الدالة، أي إلى الكائن الذي يملك الدالة أثناء وقت التنفيذ. وقيمة this لا تتحدد عند تعريف الدالة بل عند استدعائها، وهذا ما يجعل فهمها دقيقا وحساسا للسياق. فعندما يتم استدعاء دالة كجزء من كائن، فإن this تشير لذلك الكائن كما في المثال الأول، أما إذا تم استدعاء الدالة بشكل مستقل خارج كائن، فإن this في الوضع العادي تشير إلى الكائن العام مثل window في المتصفح أما في الوضع الصارم فستكون undefined. وفي الأصناف (classes) أو عند بناء كائنات جديدة، تشير this إلى النسخة الجديدة التي يتم إنشاؤها وكذلك عند استخدام this داخل أحداث في DOM، فإنها تشير إلى العنصر الذي وقع عليه الحدث. يوجد هناك نوع خاص من الدوال في JavaScript يسمى الدوال السهمية (arrow functions) وهذه لا تمتلك قيمة this خاصة بها، بل تأخذ قيمتها من السياق الخارجي الذي كتبت فيه. لذا يجب الانتباه إلى عدم استخدام الدوال السهمية في حالات تتطلب قيمة this ديناميكية ففي حالة إعادة استخدام دوال معينة مع كائنات مختلفة، يمكن تعديل قيمة this باستخدام bind أو call أو apply وهذه الأساليب تسمح بتحديد القيمة الدقيقة ل this بشكل صريح.
  6. للأسف فبيئة سكراتش لا تدعم خاصية التمرير التلقائي (scrolling background) بشكل مباشر ولكن مع ذلك يمكن تجاوز هذا القيد عبر استخدام أربع صور تمثل الخلفية، بحيث تعامل كل صورة على أنها كائن (Sprite) مستقل. في البداية يجب أن تحمّل الصور الأربع إلى سكراتش بحيث تضع كل واحدة منها في Sprite منفصل بعد ذلك يتم ترتيب هذه الصور بجانب بعضها البعض أفقيا بحيث تتصل نهايات الصور ببدايات الصور التالية دون وجود فجوات ويفضّل أن تكون الصور مصممة مسبقا لتتناسق بصريا عند الاتصال، مما يضمن عدم ظهور أي خطوط فاصلة بين كل صورتين عند الحركة. لنقل مثلا أن كل صورة بعرض 480 بكسل، فستكون مواضع الصور في البداية كالتالي: الصورة الأولى في x = 0 الثانية في x = 480 الثالثة في x = 960 الرابعة في x = 1440 بعد ترتيب الصور يجب كتابة كود برمجي لكل Sprite على حدة، يجعلها تتحرك بشكل مستمر نحو اليسار بمقدار ثابت مثلا -5 في كل تكرار للحلقة. ويمكن استخدام الكتلة "عندما تبدأ الراية الخضراء" لبدء الحركة، متبوعة بكتلة "كرر إلى الأبد"، ثم كتلة "غير x بمقدار -5"، مما يجعل الصورة تنزلق إلى اليسار مع الزمن. والجزء الأهم في هذه التقنية هو التحقق من موقع كل Sprite بشكل مستمر فإذا تجاوزت الصورة الطرف الأيسر للشاشة أي إذا أصبح موضعها أقل من x = -480 مثلا فهذا يعني أنها خرجت من مجال الرؤية، وهنا يجب أن تعاد إلى أقصى يمين الخلفية لتستمر في الحركة بشكل دائري. ولتحقيق ذلك نضيف شرطا داخل حلقة التكرار مثل: إذا كانت x < -480، فإننا نعيد الصورة إلى x = 1440 (أي بعد آخر صورة). وهذا يمكّن الخلفية من الدوران بلا توقف، ما يمنح انطباعا بحركة لا نهائية، وهي الطريقة المعتمدة في الكثير من ألعاب المنصات. من المهم أيضا أن تكون الصور الأربعة ذات جودة ودقة متساوية، ومتناسقة من حيث الألوان والمشهد، حتى لا يشعر اللاعب أو المشاهد بوجود تقطّع أو تغيّر مفاجئ في الخلفية أثناء الحركة. وإن كان هناك عناصر مرئية مثل الأشجار أو الجبال، فيفضّل أن تكون امتداداتها من صورة إلى أخرى طبيعية وسلسة.
  7. كلاهما صحيح وممكن، لكن من الأفضل أن تبدأ باستخدامه من خلال تضمين الرابط المباشر داخل ملف HTML باستخدام الوسم <script> حيث تتيح لك هذه الطريقة التركيز على المفاهيم الأساسية دون الحاجة إلى إعداد بيئة تطوير معقدة، مما يسهل عليك فهم آلية عمل Vue والتعامل مع البيانات والمكونات البسيطة. أما إذا كنت تسعى لتعلم Vue بشكل احترافي وتطمح إلى بناء تطبيقات حقيقية وقابلة للتوسع، فإن استخدام الأمر التالي: npm create vue@latest لإنشاء مشروع متكامل عبر الطرفية هو الخيار الأنسب لأنه يوفر بيئة تطوير متقدمة تتيح لك التعامل مع بنية المشروع، نظام التوجيه، إدارة الحالة، وأدوات البناء الحديثة، وهو ما يتطلب مستوى أعمق من الفهم والاستعداد للعمل في فرق تطوير أو إنتاج مشاريع جاهزة للنشر. يمكنك الرجوع دوما إلى التوثيق الرسمي للاطلاع أكثر على التحديثات الخاصة به مباشرة: https://vuejs.org/
  8. وعليكم السلام البيانات في الواقع العملي تختلف كثيرا عما يقدّم في الدورات التعليمية. ففي الكورسات، تكون البيانات عادة نظيفة، منسقة، ومهيأة مسبقا لأغراض التعلم، حيث تزال القيم المفقودة وترتب الأعمدة وتوضّح المتغيرات بشكل مبسّط لتسهيل الفهم والتركيز على المفهوم المطلوب. أما في الواقع فإن البيانات تكون غالبا فوضوية وغير مكتملة، وقد تحتوي على قيم مكررة أو متناقضة، مما يتطلب وقتا وجهدا كبيرين في مرحلة التحضير والتنظيف قبل البدء بأي تحليل أو بناء نماذج. كما أن التعامل مع البيانات الحقيقية يتطلب أدوات متقدمة ودراية بكيفية معالجة المشكلات غير المتوقعة. ولذلك فإن اكتساب المهارات التقنية يجب أن يرفق دائما بفهم عملي لكيفية التعامل مع تحديات البيانات الواقعية وتحليلها.
  9. في دورة الذكاء الاصطناعي وفي مختلف الدورات الأخرى يتم وضع في عين الاعتبار احتمال عدم وجود أي خبرة مسبقة في البرمجة. لذلك سيتم البدء من الصفر، خطوة بخطوة، لكن بما أنك لا تملك أي فكرة عن المجال بعد، فأنصحك بالاشتراك بداية في دورة علوم الحاسوب لأخذ نظرة عامة عن المجال والتأسيس فيه، ثم يمكنك بعد ذلك التخصص في مجال ترى نفسك يمكنك أن تبدع فيه وتختار المضيّ فيه. يمكنك الاطلاع عليها من هنا:
  10. وعليكم السلام ورحمة الله، يجب أن نفهم جيدا أن الشيفرة التالية: data_train.isna().sum() تستخدم في مكتبة Pandas لحساب عدد القيم المفقودة (missing values) في كل عمود من أعمدة DataFrame. ولكن من المهم أن نفهم أن هذا الكود لا يتعرف على القيمة -1.0 على أنها مفقودة، بل يتعرف فقط على القيم التي تم تمثيلها فعليا ك: في حالة البيانات من نوع float أو object. أي أنه وبمعنى آخر ف -1.0 هي قيمة عددية صالحة من وجهة نظر Pandas، حتى لو كانت تستخدم أحيانا كترميز يدوي للدلالة على نقص البيانات. أما NaN فهي ليست قيمة عددية، بل تمثل حالة غياب القيمة تماما، كأن تكون الخانة فارغة أو لا تحتوي على أي معلومة. لذا في حال ما إذا أردت أن تعتبر -1.0 قيمة مفقودة، فيجب أن تقوم بتحويلها صراحة إلى NaN باستخدام دالة مثل: replace(-1.0, np.nan) لأن مفهوم NaN يعني أن الخلية لا تحتوي على أي قيمة تستخدم في التحليل أو النمذجة، بعكس رقم مثل -1 أو 0 الذي يبقى رقما قابلا للتعامل معه ما لم يتم تحويله يدويا إلى NaN.
  11. هذا الأمر طبيعي والجميع قد يشعر بذلك خاصة عندما لا يكون قد قام بتطبيقات عملية كثيرة على ما يتعلمه. ومع مرور الوقت ستجد نفسك تنفذ وتنجز المشاريع دون الرجوع إلى الشروحات وهذا لا يأتي بين عشية أو ضحاها، فهو ثمرة الاستمرارية. يمكنك طلب الشروحات حينما يستصعب عليك الأمر، لكن أنصحك دوما بمحاولة التجربة بمفردك في البداية وحينما تجد نفسك قد استنفذت جميع الوسائل لحل التطبيق يمكنك طلب الشروحات أو الرجوع إلى الدرس، أو حتى الاعتماد على التوثيقات الرسمية للغة التي تعمل عليها وه ذا لتستفيد أقصى استفادة من المحتوى الذي يتم تقديمه. يمكنك مراجعة هذا المصدر لتحقيق أكبر استفادة من الدورات التي اشتركت فيها من هنا:
  12. وعليكم السلام ورحمة الله، كلاهما يؤديان نفس الوظيفة لكن طريقة التنفيذ تختلف قليلا ففي الكود الأول: tof_columns = [col for col in df.columns if col.startswith('tof_')] يتم المرور على كل اسم عمود في df.columns باستخدام list comprehension، ويتم تطبيق دالة startswith('tof_') على كل اسم عمود وهذه الطريقة تعتمد على تنفيذ سلسلة من العمليات داخل مفسر Python نفسه، مما يجعلها أقل كفاءة عند التعامل مع عدد كبير جدا من الأعمدة، لأن كل اسم عمود يتم التحقق منه بطريقة تكرارية يدوية، بينما في الكود الثاني: tof_columns = df.filter(like='tof_').columns يتم استخدام دالة filter() المدمجة في pandas، وهي مكتوبة بلغة C أو Cython داخل مكتبة pandas نفسها وهذه الطريقة أسرع وأكثر كفاءة لأنها تعتمد على عمليات منخفضة المستوى (low-level operations) داخل pandas لمعالجة أسماء الأعمدة دفعة واحدة بدون المرور التكراري على كل عمود باستخدام Python. لذا فمن حيث الكفاءة والسرعة، الكود الثاني غالبا ما يكون أسرع قليلا، خاصة مع عدد كبير من الأعمدة، لأن df.filter() مكتوبة باستخدام Cython أو C داخل مكتبة pandas، مما يجعلها أكثر كفاءة من استخدام startswith(). ومع ذلك يبقى الفرق في الأداء سيكون ضئيلا جدا ولن يكون ملحوظا إلا في حال وجود عدد هائل من الأعمدة.
  13. في نماذج تعويض القيم المفقودة يتم التعرف على القيم المفقودة من خلال تمثيلها بصيغة معيارية وهي np.nan، و هذه النماذج لا تعتبر القيم مثل -1 أو أي قيمة عددية أخرى كمفقودة بشكل تلقائي، إذ تعاملها كبيانات صحيحة، وبالتالي يتعين على المستخدم قبل تطبيق أي من هذه النماذج أن يقوم بمعالجة البيانات أولا واستبدال أي رموز مخصصة لتمثيل القيم المفقودة مثل -1 بـ np.nan، و هذه الخطوة ضرورية لضمان أن النماذج تتعرف على القيم المفقودة وتعوضها بطريقة صحيحة بناء على الأنماط الموجودة في البيانات.
  14. في العادة يتأخر الرد بعض الشيء بسبب الضغط الموجود على مستوى مركز المساعدة. لكن لا داعي للقلق، سأحاول إيصال إنشغالك للفريق المختص، يمكنك الانتظار إلى حين يتم الرد عليك وموافاتك بأي جديد بخصوص مشكلتك. إلى حين ذلك أرجو التحقق جيدا من أن الحساب المسجل به الدخول هو نفسه حقا الذي قمت بتسديد المستحقات به أول مرة.
  15. أرجو التواصل مباشرة مع فريق دعم أكاديمية حسوب وسيتم التعامل معك وإخبارك بما يجب فعله بالضبط. بما أنك دخلت بنفس الحساب الذي قمت بتسديد قيمة الدورة به فهذا يعني أن تبويبة "دوراتي" ستظهر عندك قريبا. فعادة يتأخر الأمر بعض الوقت إلى حين ظهورها بمفردها وفي حال تأخر الأمر يمكنك مراسلتهم لتفحص إن كان هنالك أي مشكلة. يمكنك تجربة الذهاب إلى هذا الرابط: https://academy.hsoub.com/courses/
  16. نعم يمكن إزالة الأعمدة النصية التي لا تحتوي على قيم مفقودة والاحتفاظ فقط بالأعمدة الرقمية التي تحتوي على القيم المفقودة، لأن هذه النماذج مصممة للعمل على البيانات الرقمية فقط، إذ تعتمد على أساليب إحصائية وحسابية لا تتوافق مع القيم النصية، و من المهم أيضا التأكد قبل إزالة الأعمدة النصية من أنك تحتفظ بنسخة من ترتيب الأعمدة الأصلي حتى تستطيع بعد التعويض إعادة دمجها بشكل صحيح دون فقدان الترتيب أو الارتباط بين البيانات، و من الجيد الانتباه إلى أن التعويض يعتمد على خصائص البيانات الرقمية الأخرى، لذا من الأفضل فحص توزيع البيانات والقيم المتطرفة لأنها قد تؤثر على دقة النتائج، و بعد الانتهاء من التعويض ينصح بمراجعة البيانات المعالجة للتأكد من منطقية القيم المضافة قبل إعادة دمج الأعمدة النصية وضمان جاهزية البيانات لخطوات التحليل أو النمذجة التالية.
  17. وعليكم السلام ورحمة الله،ذ هل تقصدين مشروعا جاهزا ومتفوح المصدر؟ أم تريدين خطوات لمشروع مماثل لتنجزيه بنفسك؟ في حال كنت تبحثين عن مشروع جاهز يمكنك إيجاد الكثير منها على غيتهاب وتدور حول الطبول بشكل عام، إلا أن المبادئ والتقنيات المستخدمة فيها قابلة للتطبيق على آلة الطار أو أي آلة أخرى إذ يمكنك الاستفادة من هذه المشاريع كنقطة انطلاق مع تخصيص الخوارزميات والتأثيرات البصرية لتناسب خصائص هذه الآلة. يمكنك إنجاز مشروع عملي يستخدم فيديو لآلة الطار بحيث تقومين فيه بتحديد موضع الآلة داخل الفيديو باستخدام تقنيات كشف الأجسام أو التقطيع (segmentation)، ثم تتبع حركة اليد أو العصا لتحديد لحظة ومكان الضربة بدقة. وعند كل ضربة تقومين بإدراج تأثير بصري في الموضع المناسب باستخدام مكتبة رسوميات مثل Unity أو Three.js، بحيث يظهر التأثير بشكل واقعي ومتزامن مع الإيقاع.
  18. دورة جافا سريكبت إكمالها لوحدها ليس معيارا لإيجاد وظيفة مباشرة، فإيجاد وظيفة يعتمد على عدة عوامل، وليس فقط إتقان الجانب التعليمي. على سبيل المثال حينما نتحدث عن العمل، فيوجد العمل الحر، والوظائف عند الشركات المحلية والخاصة، العمل الحضوري والعمل عن بعد. لذلك فالأمر لا يقتصر فقط حول التمكن من المهارات، لذلك ننصح دوما بإعداد بورتفوليو يمثل معرض أعمال جيد لك ويكون محدثا وفقا لمهاراتك الحالية، أيضا النبذة التعريفية الخاصة بك يجب أن تكون محل جذب وتعكس بصدق ما تستطيع أن تقدمه. وبخصوص السيرة الذاتية فهي ضرورية جدا للحصول على وظيفة ويجب أن تكون أيضا ملائمة ومحدثة وفقا للمنصب الذي ترغب في التقدم إليه. مع ذلك لا داعي للقلق وحاليا ينصح بالتركيز مع الدروس والتطبيقات العملية، وحين تقدمك للامتحان ونجاحك فيه، سيتم مرافقتك وتهيئتك لهذه الأمور التي تحدثت لك عنها، والحديث عنها الآن قد يشتتك فقط.
  19. من الأفضل أن تبدأ بمعالجة القيم المفقودة قبل القيام بأي خطوة لاستخراج الميزات، و السبب أن وجود القيم الناقصة قد يؤثر على دقة وموثوقية النتائج في أي مرحلة لاحقة، سواء أثناء التحليل أو النمذجة، وأيضا استخراج الميزات يعتمد على البيانات المتوفرة، فإذا لم تكن البيانات مكتملة أو نظيفة، ستصبح الميزات الناتجة غير مستقرة أو قد تحمل ضوضاء لا داعي لها، لهذا الترتيب مهم جدا لضمان جودة سير العمل وتحقيق أفضل أداء ممكن للنموذج أو التحليل في النهاية.
  20. في مقابلات توظيف المبرمجين عادة يتم التركيز على فهم مستوى المرشح في المهارات التقنية والمعرفية، لذلك تطرح أسئلة عن الخلفية التعليمية والخبرة العملية وطريقة التفكير عند مواجهة المشكلات، و يتم أيضا طرح أسئلة تقنية للتأكد من إلمامه باللغات المطلوبة والأدوات المستخدمة في العمل، إضافة إلى أسئلة تقيس القدرة على التعلم والتكيف مع التغيرات، و الهدف الأساسي من هذه الأسئلة هو تقييم مدى ملاءمة الشخص للوظيفة ولثقافة الشركة، حاول التحضير الجيد فقط على حسب المنصب الذي ستتولاه.
  21. يمكنك ذلك و هذا يتم عادة عبر إعدادات DNS وتوجيهه نحو خادمك، ثم برمجيا في تطبيقك تمييز كل طلب حسب اسم النطاق الفرعي ومعالجته وفق حساب المستخدم المقابل، من ناحية التكلفة فشركة تسجيل النطاق لا تحتسب رسوما إضافية لكل نطاق فرعي لكن التكاليف الحقيقية تأتي من الموارد التي يستهلكها هذا النظام: إذا كان لديك آلاف أو ملايين النطاقات الفرعية النشطة، ستحتاج إلى بنية تحتية قوية، خوادم مرنة، وربما CDN أو حلول توسيع، وكل هذا يزيد تكاليف الاستضافة والصيانة، خصوصا إذا كان كل نطاق فرعي يقدم محتوى ديناميكيا ومختلفا.
  22. صحيح الذكاء الإصطناعي غيّر طريقة كتابة الأكواد، حيث أصبح بإمكانه إنشاء شفرات كاملة بسرعة فائقة، مما يقلل الحاجة للأعمال الروتينية التي كان يقوم بها المبرمجون المبتدئون، لكن هذا لا يعني أن تعلم البرمجة أصبح بلا فائدة، بل العكس الذكاء الاصطناعي أداة مساعدة وليس بديلا عن المبرمج المحترف الذي يفهم المنطق ويحل المشكلات المعقدة، ويضبط الأكواد المولّدة آليا التي قد تحتوي أخطاءً أو نقصا في الكفاءة، و صحيح أن بعض الوظائف التقليدية ستقل، لكن الطلب سيزيد على المبرمجين الذين يجيدون استخدام الذكاء الاصطناعي كمساعد، ويتمتعون بمهارات متقدمة، و أرى أنه إن أردت البقاء في المجال، ركز على التخصص في مجالات عميقة مثل تعلم الآلة وطور مهاراتك في التحليل والابتكار، لأن هذه أمور لا يستطيع الذكاء الاصطناعي محاكاتها بعد.
  23. الخيار المحبب والمفضل في مجتمع التقنيين والمبرمجين هو التعامل من خلال أدوات خارجية مثل GitHub وذلك لتنظيم العمل بشكل احترافي. ف GitHub يعد منصة مثالية لإدارة الأكواد والمشاريع، حيث يمكنك هناك إنشاء مستودع مشترك وتوزيع المهام باستخدام Issues، ومراجعة التعديلات عبر Pull Requests، مما يجعل العمل الجماعي منظما وموثقا هذا في حال كنت ترغب في بناء فريق والعمل بشكل احترافي. أما في حال كنت تقصد التعلم الجماعي فيمكنك بدلا من إنشاء فريق للتعلم أن تطرح أسئلتك سواء العامة أو المتعلقة بالدورات وسيجيبك عنها المدربون ويساعدوك على فهمها على أحسن وجه، وفي حال كنت ترغب في مشاركة معلومة أو لديك سؤال عام ففضاء الأسئلة العامة هنا مفتوح للجميع دون استثناء.
  24. شيء جميل أنك ترغب في متابعة هذه الأخبار ولتسهيل الأمر عليك يمكنك الاعتماد على مصادر موثوقة ومعروفة وهذا لتفادي الوقوع في فخ الأخبار الكاذبة والمغلوطة وحرب الإشاعات، وتشمل هذه المصادر مواقع الأخبار التقنية الرائدة مثل TechCrunch و Wired و MIT Technology Review و IEEE Spectrum وهي تغطي الأخبار والتطورات بشكل يومي، بالإضافة إلى المدونات الرسمية للشركات الكبرى مثل مدونة Google AI ومدونة Microsoft AI ومدونة Meta AI ومدونة OpenAI التي تنشر التحديثات المباشرة حول منتجاتهم وأبحاثهم، كما يمكنك متابعة المنصات الأكاديمية مثل arXiv.org للأوراق البحثية الجديدة و Nature و Science للدراسات المحكمة. وأنصحك أيضا بمتابعة التقارير الدورية من مؤسسات الأبحاث الكبرى مثل Stanford HAI و McKinsey Global Institute فهي تقدم تحليلات شاملة واتجاهات طويلة المدى في مجال الذكاء الاصطناعي ولا تكتفي فقط بما تم التوصل إليه حاليا.
  25. المدونة الوحيدة التابعة لمنصة حسوب هي مدونة حسوب i/o ويمكنك الوصول إليها من خلال هذا الرابط: https://io.hsoub.com/webdev يمكنك الانتقال إلى مجتمع "تطوير الويب" والنقاش هناك فهو مجتمع يضم أكثر من 93 ألف متابع وهو مجتمع مخصص لمناقشة وتبادل الخبرات حول تطوير الويب، أما إن كنت تقصد المواقع المخصصة للمشاكل البرمجية والتحديات فهنالك الكثير منها يمكنك تصفحها والتعلم من خلالها وبعضها ما سأذكره الآن: لديك منصة Codewars التي تتميز بتحديات مصنفة حسب الصعوبة (Kyu) فهي تعد مكانا ممتازا للتدرّب على مفاهيم البرمجة المختلفة من خلال تمارين قصيرة ودقيقة. Exercism يقدّم تمارين تفاعلية مع مراجعات من مبرمجين محترفين، ويدعم تعلم JavaScript بأسلوب تعاوني. HackerRank وLeetCode من أبرز المنصات التي تستخدمها الشركات التقنية في اختبارات التوظيف، وتحتوي على مشاكل خوارزمية وهياكل بيانات مع شروحات وتحليلات مفصلة للحلول. Topcoder وCodechef مناسبان لمن يحب المنافسات، فهما يوفران مسابقات دورية قوية تنمي التفكير التحليلي والسرعة في الحل. Coderbyte SPOJ CodeSignal
×
×
  • أضف...