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

لوحة المتصدرين

  1. Mustafa Suleiman

    Mustafa Suleiman

    الأعضاء


    • نقاط

      7

    • المساهمات

      13209


  2. Ali Ahmed39

    Ali Ahmed39

    الأعضاء


    • نقاط

      4

    • المساهمات

      138


  3. محمد Fahmy

    محمد Fahmy

    الأعضاء


    • نقاط

      4

    • المساهمات

      986


  4. لينا الزعبي

    لينا الزعبي

    الأعضاء


    • نقاط

      3

    • المساهمات

      47


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 05/25/23 في كل الموقع

  1. السلام عليكم كيف أختار مساري البرمجي؟ والماد فيه صعوبه عند اختيار المجال بالنسبه المبرمجين الجديد؟
    2 نقاط
  2. الإصدار 1.0.0

    8153 تنزيل

    لغة جافاسكربت JavaScript هي لغة برمجة شهيرة موجودة حيث وجدت متصفحات الويب فهي أحد الركائز الثلاثية لتطوير الويب مع لغة HTML ولغة CSS فبها مجتمعة تُبنى واجهات الويب وبذلك لا غنى للغة جافاسكربت في مجال الويب إذ تساهم في إضفاء التفاعلية على صفحات الويب وبدونها تصبح الصفحات جامدة، كما أنها تُنجز أي عمليات برمجية ومنطقية في الصفحات مثل التحقق من مدخلات المستخدم وسلامة البيانات. استخدام جافاسكربت لا ينحصر في المتصفح بل يمتد إلى تطبيقات أوسع إذ تُشغل شيفرات لغة جافاسكربت خارج المتصفح في بيئة Node.js وبذلك يمكن استخدام لغة جافاسكربت في بناء مختلف التطبيقات أشهرها حاليًا بناء خوادم الويب وهنا أصبح بالإمكان استعمال لغة جافاسربت في تطوير الواجهات الأمامية والواجهات الخلفية لصفحات الويب بمختلف أنواعها والحديث عن اللغة وميزاتها يطول لذا لن أتوسع في التمهيد بالتحدث عن اللغة لأن الكتاب كله عنها وخصوصًا باب المقدمة. هذا الكتاب مترجم عن الكتاب The JavaScript Language: Part 1 الجزء الأول لكاتبه إيليا كانتور Ilya Kantor وهو بحجم 1000 صفحة وفيه يشرح لغة جافاسكربت شرحًا كاملًا لكل ميزاتها وتفاصيلها ويعد أفضل وأول مرجع تعليمي أجنبي لتعلم لغة جافاسكربت. ويوجد جزء ثان للكتاب يتحدث عن استعمال جافاسكربت في المتصفحات تحديدًا وجزء ثالث يتحدث عن مواضيع متفرقة ومتقدمة عن جافاسكربت يكمل فيها الجزأين السابقين ويتمم الحديث عن لغة جافاسكربت ليكون الكتاب بأجزائه الثلاثة مرجعًا كاملًا عن لغة جافاسكربت. دورة تطوير التطبيقات باستخدام لغة JavaScript تعلم البرمجة بلغة جافا سكريبت انطلاقًا من أبسط المفاهيم وحتى بناء تطبيقات حقيقية. اشترك الآن يُقسم الكتاب إلى 14 فصلًا أو بابًا كل منها مقسوم إلى فصول فرعية أصغر تتحدث عن موضوع محدد من اللغة ولكل قسم مقدمة وخاتمة وتمارين منفصلة، والفصول مرتبة ترتيبًا متدرجًا بدءًا من المواضيع الأساسية وحتى المواضيع المتقدمة بما يناسب المتعلم الجديد الذي يريد تعلم لغة جافاسكربت من الصفر دون خبرة مسبقة، وأما إن كنت تملك خبرة مسبقة بلغة جافاسكربت فيمكنك قراءة الفصول وفق الترتيب الذي تريد والرجوع إليها وفقًا لأبوابه وفصولها الفرعية. الكتاب مدعوم بشيفرات عملية كثيرة وهي جاهزة للتجريب في المتصفح لذا تجدها تعتمد على دالة المتصفح alert التي تعرض رسالة على شكل مربع منبثق في صفحة المتصفح وبالتالي يمكنك تجريب الشيفرات بنسخها ولصقها في طرفية المتصفح console وسيدلك فصل أدوات المطور على كيفية استخدام هذه الأداة إن لم تكن تعرفها من قبل. تجد في نهاية كل قسم تمارين ننصح بالتدرّب عليها بعد قراءة القسم قبل الاطلاع على الحل ثم الرجوع إلى الحل وموازنته مع حلك الناتج، وهذا يحقق أقصى استفادة أثناء تعلمك لغة جافاسكربت، وضع في بالك أن حل هذه التمارين يساعدك على تعلم لغة جافاسكربت من جهة وعلى حل الأسئلة البرمجية التي تُسأل في مقابلات العمل لذا لا تهملها. يمكنك قراءة الكتاب على شكل فصول منشورة على موقع أكاديمية حسوب مباشرةً إن كنت تحب القراءة على المتصفح مباشرة أو إن كنت تجد صعوبة في نسخ الشيفرات أو تجريبها، وتجد روابط الفصول تاليًا مجموعة ضمن وسم "دليل تعلم جافاسكربت": الباب الأول: مقدمة مقدمة إلى لغة JavaScript محررات الشيفرة البرمجية أدوات المطور DevTools الباب الثاني: أساسيات جافاسكربت المثال الأول: أهلًا بالعالم! بنية الشيفرة البرمجية الوضع الصارم: النمط الحديث لكتابة الشيفرة المتغيرات variables أنواع البيانات Data Types الدوال التفاعلية: confirm ،prompt ،alert التحويل بين الأنواع العاملات operators عاملات الموازنة العاملات الشرطية العاملات المنطقية عامل الاستبدال اللاغي ?? حلقتا التكرار while و for التعليمة switch الدوال في JavaScript تعابير الدوال أساسيات الدوال السهمية مراجعة لما سبق الباب الثالث: الاعتناء بجودة الشيفرة تنقيح الأخطاء في chrome نمط كتابة الشيفرة التعليقات شيفرة النينجا البرمجية الاختبار الآلي باستخدام mocha تعويض نقص دعم المتصفحات الباب الرابع: الكائنات: تأسيس المفاهيم الكائناتَ Objects نسخ الكائن: الفرق بين القيمة والمرجع كنس البيانات المهملة الدول في الكائنات واستعمالها this الباني والعامل new التسلسل الاختياري ‎.?‎ النوع الرمزي Symbol التحويل بين نوع كائن إلى نوع أولي الباب الخامس: أنواع البيانات توابع الأنواع الأولي النوع number: الأعداد النوع string: السلاسل النصية المصفوفات Arrays توابِع المصفوفات المُكرَّرات Iterables النوع Map الخرائط والنوع Set الأطقم النوع WeakMap والنوع WeakSet مفاتيح الكائنات وقيمها ومدخلاتها الإسناد بالتفكيك النوع Date: التاريخ والوقت صيغة JSON وتوابعها الباب السادس: التعامل المتقدم مع الدوال التعاود Rescursion والمكدس Stack المعاملات «البقية» ومعامل التوزيع المنغلقات Closure ومجال المتغيرات إفادة «var» القديمة الكائن العمومي Global object كائنات الدوال وتعابير الدوال المسمّاة NFE صياغة «الدالة الجديدة» new Function المُهلة setTimeout والفترة setInterval المزخرفات والتمرير: التابعان call وapply ربط الدوال Function binding الحديث عن الدوال السهمية مرة أخرى الباب السابع: ضبط خاصيات الكائنات رايات الخاصيات وواصِفاتها جالبات الخاصيات Getters وضابطاتها Setters الباب الثامن: الوراثة النموذجية الوراثة النموذجية Prototypal inheritance الوراثة النموذجية بتعمق F.prototype النماذج الأولية الأصيلة Native prototypes توابِع النماذج الأولية والكائنات بلا proto الباب التاسع: الأصناف Classes صياغة الأصناف الأساسية وراثة الأصناف Class inheritance الخاصيات والتوابع الثابتة الخاصيات والتوابع الخاصة والمحمية توسعة الأصناف المضمنة في اللغة فحص الأصناف عبر instanceof المخاليط Mixins الباب العاشر: التعامل مع الأخطاء التعامل مع الأخطاء: جرب... التقط try..catch الأخطاء المخصصة وتوسعة صنف Error الباب الحادي عشر: الوعود واللاتزامن والانتظار مقدمة إلى ردود النداء callbacks الوعود Promise سَلسلة الوعود Promises chaining التعامل مع الأخطاء: then وcatch واجهة الوعود البرمجية الدوال الواعدة: تحويل الدوال إلى وعود المهام السريعة مقابل الوعد لتنفيذ المهام لاحقًا اللاتزامن والانتظار async/await الباب الثاني عشر: المولدات والمكررات المتقدمة المولدات Generators المكررات والمولدات غير المتزامنة الباب الثالث عشر: الوحدات Modules مقدمة إلى الوحدات Modules تصدير الوحدات واستيرادها استيراد الوحدات ديناميكيًا الباب الرابع عشر: مواضيع متفرقة الوسيط Proxy والمنعكس Reflect الدالة "Eval" لتنفيذ الشيفرة البرمجية تقنية Currying النوع المرجعي Reference الأعداد الكبيرة BigInt
    1 نقطة
  3. import java.awt.*; import java.awt.event.*; import java.io.*; import javax.sound.sampled.*; import javax.swing.*; public class Drapeaux extends JPanel implements ActionListener { private int flag = 0; // Indicateur pour savoir quel drapeau doit être affiché (0 = Liban, 1 = Palestine, 2 = Arabie Saoudite) private Clip clip; // Objet pour jouer la chanson private boolean showMan = false; // Indicateur pour savoir si l'homme doit être affiché public Drapeaux() { try { // Charger le fichier audio File file = new File(System.getProperty("user.home") + File.separator + "Desktop" + File.separator + "أغنيه الأرض لنا والقدس لنا بدون موسيقى وبدون ايقاع (256 kbps) (shabakngy.com).mp3"); AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file); clip = AudioSystem.getClip(); clip.open(audioInputStream); } catch (Exception e) { e.printStackTrace(); } } public void paintComponent(Graphics g) { super.paintComponent(g); int width = getWidth(); int height = getHeight(); if (flag == 1) { // Dessiner le drapeau de la Palestine g.setColor(Color.BLACK); g.fillRect(0, 0, width, height / 3); g.setColor(Color.WHITE); g.fillRect(0, height / 3, width, height / 3); g.setColor(Color.GREEN); g.fillRect(0, height * 2 / 3, width, height / 3); g.setColor(Color.RED); int[] xPoints = {0, width / 4, 0}; int[] yPoints = {0, height / 2, height}; g.fillPolygon(xPoints, yPoints, 3); } else if (flag == 2) { // Dessiner le drapeau de l'Arabie Saoudite g.setColor(new Color(0x006C35)); g.fillRect(0, 0, width, height); // Dessiner l'épée g.setColor(Color.WHITE); int swordY = height * 2 / 3; int swordWidth = width * 2 / 3; int swordHeight = height / 40; int swordX = (width - swordWidth) / 2; g.fillRect(swordX, swordY, swordWidth, swordHeight); // Dessiner l'inscription Font font = new Font("Thuluth", Font.PLAIN, height / 4); g.setFont(font); FontMetrics metrics = g.getFontMetrics(font); String text = "لا إله إلا الله محمد رسول الله"; int textX = (width - metrics.stringWidth(text)) / 2; int textY = swordY - metrics.getHeight() + metrics.getAscent(); g.drawString(text, textX, textY); } else { // Dessiner le drapeau du Liban g.setColor(Color.RED); g.fillRect(0 ,0 ,width ,height); g.setColor(Color.WHITE); g.fillRect(0 ,height/3 ,width ,height/3); g.setColor(Color.GREEN); int treeHeight=height/3; int treeWidth=treeHeight/2; int treeX=(width-treeWidth)/2; int treeY=(height-treeHeight)/2; g.fillOval(treeX ,treeY ,treeWidth ,treeHeight); } if (showMan) { // Dessiner le corps g.setColor(Color.BLACK); g.drawLine(width / 2 ,height/4 ,width/2 ,height*3/4); // Dessiner les jambes g.drawLine(width/2 ,height*3/4 ,width*3/8 ,height); g.drawLine(width/2 ,height*3/4 ,width*5/8 ,height); // Dessiner les bras g.drawLine(width/2 ,height/2 ,width*3/8 ,height*1/4); g.drawLine(width/2 ,height/2 ,width*5/8 ,height*1/4); // Dessiner la tête g.drawOval(width*7/16,height/8,width/8,height/8); } } public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("Afficher la Palestine")) { flag =(flag ==1 ) ? flag :1 ; repaint(); } else if (e.getActionCommand().equals("Afficher l'Arabie Saoudite")) { flag =(flag ==2 ) ? flag :2 ; repaint(); } else if (e.getActionCommand().equals("Jouer la chanson")) { if(clip != null) { clip.setFramePosition(0); clip.start(); } } else if(e.getActionCommand().equals("Afficher l'homme")) { showMan=!showMan; } else if(e.getActionCommand().equals("Afficher le Liban")) { flag=0; } repaint(); } public static void main(String[] args) { JFrame frame= new JFrame("Drapeaux"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400 ,300); Drapeaux drapeaux= new Drapeaux(); frame.add(drapeaux); JPanel buttonsPanel= new JPanel(); frame.add(buttonsPanel , BorderLayout.SOUTH); JButton button1= new JButton("Afficher la Palestine"); button1.addActionListener(drapeaux); buttonsPanel.add(button1); JButton button2= new JButton("Afficher l'Arabie Saoudite"); button2.addActionListener(drapeaux); buttonsPanel.add(button2); JButton button3= new JButton("Jouer la chanson"); button3.addActionListener(drapeaux); buttonsPanel.add(button3); JButton button4= new JButton("Afficher l'homme"); button4.addActionListener(drapeaux); buttonsPanel.add(button4); JButton button5= new JButton("Afficher le Liban"); button5.addActionListener(drapeaux); buttonsPanel.add(button5); frame.setVisible(true); } } الذي فوق هو الكود والذي في الصورة هو ال error
    1 نقطة
  4. السلام عليكم هل الويب بيموت ؟ وما هو مسقبل مطور الويب؟
    1 نقطة
  5. - Write java program that read an integer from the user. The integer should be in range (10-50) When the user enter wrong number you must display error message and ask user to enter number again When the user enter number in the range from(10 -50) the program display welcome message and terminate. (you should submit screen for the program and the output)
    1 نقطة
  6. عليك بكتابة الصيغة الخاصة بالملف وهي .mp3 وسأشرح لك الكود: System.getProperty("user.home"): يستخدم للحصول على مسار مجلد المستخدم الرئيسي. هذا الجزء يعيد سلسلة النص التي تمثل مسار المجلد الرئيسي للمستخدم. File.separator: هو فاصل الدليل الذي يستخدم لتجنب مشاكل التوافق بين أنظمة التشغيل المختلفة. يتم استخدامه هنا لتحديد فاصل الدليل في المسار. "Desktop": يشير إلى اسم المجلد المستهدف، وهو مجلد سطح المكتب. "al kouds.mp3": اسم الملف الصوتي الذي يتم تحديده في المسار. وما يحدث هو دمج جميع هذه الأجزاء لإنشاء المسار الكامل إلى الملف الصوتي، والمسار النهائي يعتمد على مسار المجلد الرئيسي للمستخدم واسم المجلد المستهدف واسم الملف الصوتي.
    1 نقطة
  7. يوجد استثناء FileNotFoundException في رسالة الخطأ وهذا يعني أن الملف الذي تحاولي قرائته للتشغيل الصوتي غير موجود في المسار المحدد، ويجب التأكد من أن الملف الصوتي المطلوب موجود في المسار الصحيح. أي تحققي من المسار الذي تم تحديده للملف في الكود التالي، والأفضل تسمية الملف باسم بسيط باللغة الإنجليزية. File file = new File(System.getProperty("user.home") + File.separator + "Desktop" + File.separator + "أغنيه الأرض لنا والقدس لنا بدون موسيقى وبدون ايقاع (256 kbps) (shabakngy.com).mp3"); وإذا كان الملف غير موجود في المسار الصحيح، عليك بتحديد المسار الصحيح للملف الصوتي أو بنقل الملف إلى المسار الحالي المحدد في الكود.
    1 نقطة
  8. سأشرح لك الخطوات من البداية: عليك بتعديل ملف المشروع الرئيسي وهو لديك index.jsx بحيث تقوم بتعديل الـ Router وتضع بداخله basename له قيمة مماثلة تمامًا لاسم المستودع الخاص بمشروعك كالتالي: بعد ذلك عليك بتثبيت الحزمة التالية: npm i gh-pages والآن قم بإضافة سكريبت predeploy وdeploy إلى ملف package.json أي بجانب سكريبتات start وbuild لديك كالتالي: ولكن لاحظ اسم dist في الكود خاص بالمجلد النهائي الذي يتم عمل build له فإذا كان مختلف لديك فيجب تعديله، ولديك أنت في مشروعك اخترت dist كاسم للمجلد في إعدادات Webpack فلا مشكلة إذًا. والآن قم برفع مشروعك على GitHub كما تفعل ومن الأفضل أن تقوم بإنشاء مستودع جديد وحذف القديم وإليك طريقة حذف المستودع: وبعد رفع المشروع قم بتنفيذ الأمر التالي في مشروعك داخل منفذ الأوامر في محرر الأكواد VScode: npm run deploy والكود سينفذ أمر npm run buld بمفرده وسيتم إنشاء فرع جديد به الملفات الخاصة بمجلد dist لديك باسم فرع gh-pages ونشر مشروعك به وستجد به رابط Github pages كما بالصورة: وإذا استمرت المشكلة لديك استخدم استضافات أخرى مثل render وrailway.app وvercel، وأيضًا لديك Netlify.
    1 نقطة
  9. 1 نقطة
  10. اختيار مسار البرمجة يعتمد على عدة عوامل، ومن أهمها: 1. الاهتمامات الشخصية: يجب على المبرمج الجديد أن يحدد المجال الذي يثير اهتمامه ويستمتع بالعمل فيه، حيث يجب أن يكون العمل في هذا المجال ممتعاً بالنسبة له. 2. الفرص الوظيفية: يجب دراسة الطلب على المجال المختار في سوق العمل، والتأكد من وجود فرص وظيفية كافية ومستقبل واعد في هذا المجال. 3. الصعوبة والتعقيد: يجب على المبرمج الجديد أن يقيم مستواه الحالي من الناحية الفكرية والرياضية ويختار المجال الذي يناسب مستواه، حيث يمكن أن يكون بعض المجالات أكثر صعوبة وتعقيداً من غيرها (مثلا إذا منت لا تحب الرياضيات فمجال تعلم الالة والذكاء الاصطناعي لن يكون جيد لك). 5. الاتجاهات الحالية: يجب متابعة الاتجاهات الحالية في سوق العمل والتكنولوجيا، والتأكد من أن المجال المختار يتوافق مع هذه الاتجاهات. بالنسبة للمبرمجين الجدد، فقد يواجهون صعوبة في اختيار المجال الذي يريدون العمل فيه، ولكن يمكن تخفيف هذه الصعوبة من خلال القيام لعدة أمور: 1. تجربة المجالات المختلفة: يمكن للمبرمج الجديد العمل على مشاريع صغيرة في المجالات المختلفة، وذلك لتجربة المجالات المختلفة وتحديد المجال الذي يتناسب مع مهاراته واهتماماته. 2. الاستشارة: يمكن للمبرمج الجديد استشارة المبرمجين المحترفين، والمشاركة في مجتمعات المبرمجين والمنتديات وطرح الأسئلة والاستفسارات، حيث يمكن أن يحصل على توجيهات ونصائح قيمة. 3. التعليم المستمر: يجب على المبرمج الجديد الاستمرار في التعلم وتحديث معرفته بالمجالات المختلفة، وذلك عن طريق متابعة الأخبار التقنية والدورات التعليمية والمصادر الأخرى المتاحة على الإنترنت. خلاصة القول، يجب على المبرمج الجديد أن يتخذ قرار اختيار المجال الذي يريد العمل فيه بعناية، ويتأكد من أنه يتناسب مع أهدافه المهنية و مستواه من الناحية الفكرية والرياضية. كما يجب عليه الاستمرار في التعلم وتحديث معرفته بالمجالات المختلفة ومتابعة الأخبار التقنية والدورات التعليمية، والعمل على مشاريع صغيرة لتجربة المجالات المختلفة، واستشارة المبرمجين المحترفين والمشاركة في مجتمعات المبرمجين والمنتديات. كل هذه الأمور ستساعد المبرمج الجديد على اتخاذ قرار صحيح ومناسب بشأن مساره البرمجي، وستجعله مستعداً لمواجهة التحديات والنجاح في مجال عمله المختار. في النهاية أنصحك بمجال تطوير تطبيقات الموبيل
    1 نقطة
  11. سأجيب على أسئلتك بأسلوب بسيط يسهل فهمه مع أمثلة بلغة الجافاسكربت للتوضيح. 1. يتم استخدام الـ parameters في تعريف الدالة، وهي المتغيرات التي تأخذ قيمة من الـ arguments الممررة للدالة عند استدعائها. على سبيل المثال، إذا كان لدينا دالة لإضافة رقمين، فإن الرقمين هما parameters. أما الـ arguments، فيتم استخدامها عند استدعاء الدالة لتمرير البيانات إلى الدالة: function addNumbers(num1, num2) { return num1 + num2; } addNumbers(5, 10); // هنا قمنا بإرسال الـ arguments 5 و 10 إلى الدالة addNumbers والتي ستقوم بإضافتهما 2. الـ declaration هو عندما تقوم بتعريف المتغير أو الدالة في الكود، في حين أن الـ initialization هو عندما تقوم بتعيين قيمة للمتغير في نفس الكود. على سبيل المثال، إذا كان لدينا متغيرًا بإسم "x"، فإن الـ declaration هو عندما نقوم بكتابة "let x" في الكود، والـ initialization هو عندما نقوم بتعيين قيمة لـ "x" مثل "x = 5": let x; // هنا تم إعلان المتغير "x" x = 5; // هنا تم تهيئة المتغير "x" بقيمة 5 3. الـ Execution Context هو المكان الذي تعمل فيه الدالة ويحتوي على معلومات حول الدالة مثل قيمة الـ this والـ variables المستخدمة في الدالة: const person = { name: "John", greet: function() { console.log("Hello, my name is " + this.name); } } person.greet(); // هنا نستدعي الدالة greet الموجودة في person وستقوم بإظهار "Hello, my name is John" 4. الـ Lexical Environment هو المكان الذي تم بناؤه في الكود ويحتوي على المتغيرات والدوال المستخدمة في الكود. ويتم إنشاء الـ Lexical Environment عندما يتم تحميل الكود في الذاكرة: let x = 5; function addNumbers(num1, num2) { return num1 + num2 + x; // هنا ستستخدم الـ variable "x" من الـ Lexical Environment } addNumbers(3, 2); // هنا ستقوم الدالة بإضافة الرقمين 3 و 2 والمتغير "x" (الذي تم استدعاؤه من الـ Lexical Environment)
    1 نقطة
  12. اعذرني لو بدى لك الأمر قاسيًا بعض الشيء، ولكن لمصلحتك، فتلك الأسئلة تراود أي شخص ليس لديه خبرة في البرمجة أو مبتدأ في البرمجة ويشتت نفسه بتلك الأسئلة بدلاً من تعلم أساسيات البرمجة ثم إختيار المجال الذي يريد التخصص به. وسيجد الإجابة بنفسه، وهي أن تلك الأسئلة تطرح منذ سنوات، بل وبعضها خاص بلغة مثل PHP فكل عام يتم الإشاعة أن لغة PHP في طريقها للإندثار وهو ما لا يحدث، بل يزداد استخدامها بفضل إطار لارافيل. وبالنسبة لمجال الويب حاليًا، الأمر أصبح أسهل وأصعب في نفس الوقت عن ذي قبل. فهو أسهل من حيث إزدياد سهولة إنشاء وواجهة مستخدم بسيطة أو إعتيادية في وقت قصير، من خلال المكتبات ومنصات الـ Low code أو بدون كود عن طريق السحب والإفلات. وهو أمر جيد وله استخداماته، لكن أصعب من حيث إنشاء واجهة مستخدم مخصصة ومعقدة، حيث سيتطلب منك الأمر تعلم استخدام العديد من المكتبات لتنفيذ المشروع، فمثلاً عند استخدام React ستقوم بتعلم مكتبات أخرى مثل Redux وReact Router لإدارة حالة التطبيق وتوجيه المسارات، أيضًا تعلم CSS frameworks مثل Bootstrap أو Material-UI لتنسيق وتصميم العناصر الواجهة، أو استخدام مكتبة styled-components لكتابة تنسيقاتك بنفسك في مشروع React. وأيضًا استخدام مكتبة AXios لإدارة طلبات Ajax والتعامل مع الـ APIs، إلخ.. من المكتبات الأخرى، وناهيك أن بعض المشاريع تحتاج إلى استخدام إطار عمل Next.js. لذلك الأمر يصبح أسهل من ناحية لكن أكثر تعقيدًا من ناحية أخرى، وعليك باستخدام كافة الأدوات التي تسهل عليك المهمة وإنجاز مهامك بشكل أسرع، لكن اختر الأدوات بعناية وكلما كانت أقل كان أفضل لك حتى لا تتشتت.
    1 نقطة
  13. لا، الويب لا يموت ولن يموت. بالنسبة لمستقبل مطور الويب ، فإن هذا المجال مستمر في النمو والتطور ويوفر فرصًا كبيرة للعمل يمكنك استكشاف هذا بنفسك من خلال تصفح مواقع الوظائف من Linkedin و مستقل(للعمل الحر). بالإضافة إلى ذلك ، يتطلب الويب مهارات متعددة منها برمجة الواجهة الخلفية و الأمامية وبما أن تقنيات الويب تتغير باستمرار ، فإن مطور الويب يحتاجون إلى التعلم المستمر وتطوير مهاراتهم للبقاء على اطلاع بأحدث التقنيات. وإذا كنت تقصد هل سوف يقوم الذكاء الاصطناعي بأخذ مكان مطوري والويب فأنصحك بقراءة هذه النقاشات حتي تتضح لك الفكرة. وهذه المقالة. بشكل عام ، يعتبر مستقبل مطور الويب واعدًا ومليئًا بالفرص ، ويمكن للمطورين الذين يتمتعون بالمهارات اللازمة والقدرة على التعلم والتكيف مع التغييرات السريعة في تقنيات الويب أن يكونوا مطلوبين جدًا في سوق العمل.
    1 نقطة
  14. السلام عليكم ورحمة الله وبركاته، اننا نعمل بالجامعة على تسهيل لغة ال microcontrôleur من assembly language الى تحولها لبرنامج proton plus حتى تكون أسهل. لكن للأسف نزلت نسخة وعندما أضغط على run يعطيني error مكتوب فيه missing secuirty key. كيف أحل المشكلة ؟؟
    1 نقطة
  15. بحثت عن البرنامج وكل ما وجدته هو النسخة التالية: https://proton-ide.software.informer.com/2.0/ وتكلفته 19 دولار. وهناك برنامج آخر باسم Amicus18 Compiler وهو مجاني وقد يفيدك. وأيضًا هناك موقع عبارة عن محرر أكواد باسم protonide تفقديه وهو مجاني أيضًا. وهناك بعض البدائل ولا أدري إذا كانت ستفيدك أم لا: MPLAB X IDE: يعتبر MPLAB X IDE منتجًا قويًا وشهيرًا في عالم برمجة الميكروكنترولر. Arduino IDE: يستخدم Arduino IDE في برمجة الأجهزة المبنية على منصة Arduino، وسهل الاستخدام ويحتوي على محرر برمجة مبسط ومكتبة واسعة من الأمثلة والموردين. PlatformIO: بيئة تطوير مفتوحة المصدر ومتعددة الأغرا، و يدعم العديد من منصات الميكروكنترولر والأجهزة واللغات المختلفة مثل Arduino وESP8266 وESP32 وRaspberry Pi وغيرها. Code::Blocks: بيئة تطوير متعددة الأغراض وقابلة للتوسعة، ويدعم العديد من لغات البرمجة مثل C وC++ ويوفر واجهة سهلة الاستخدام ومجموعة من الميزات.
    1 نقطة
  16. لا هو البرنامج اسمو proton IDE نستخدمه لبرمجة الشرائح الإليكترونية هذا هو proton compiler
    1 نقطة
  17. سأوضح لك المصطلحات بالتفصيل وأمثلة لتوضيح الأفكار. الفرق بين الـ Parameters والـ Arguments Parameters: المتغيرات التي يتم تعريفها في تعريف الدالة وتستخدم لتمرير القيم إلى الدالة، وشير إلى المتغيرات التي يتعامل معها الدالة في داخلها. Arguments: القيم الفعلية التي يتم تمريرها إلى الدالة عند استدعائها، وتشير إلى القيم التي تمررها عند استخدام الدالة. مثال: لنفترض أن لدينا دالة بسيطة تسمى "add" تقوم بإجراء عملية جمع بين اثنين من الأرقام، حيث a و b هما parameters، أما الأرقام المحددة مثل 3 و 5 فهي arguments. function add(a, b) { // a و b هما parameters return a + b; } const result = add(3, 5); // 3 و 5 هما arguments console.log(result); // الناتج سيكون 8 الفرق بين الـ Declaration والـ Initialization Declaration: يتعلق بتعريف متغير أو دالة أو كائن بشكل عام، حيث يتم إعلان وجوده وتحديد نوعه واسمه، ولكن لا يتم تعيين قيمة محددة له في هذه المرحلة. Initialization: يتعلق بتعيين قيمة محددة لمتغير بعد تعريفه، أي تخصيص قيمة بداية للمتغير. مثال: في JavaScript، تستطيع إعلان المتغير باستخدام الكلمة الرئيسية var أو let أو const، ويمكنك تعيين القيمة باستخدام عامل التعيين =. let x; // هنا نقوم بالإعلان عن المتغير x x = 5; // هنا نقوم بتعيين قيمة 5 للمتغير x الـ Execution Context يشير إلى البيئة التي تتم فيها تنفيذ الكود، وتحتوي على المتغيرات المحلية والمعلومات الأخرى المتعلقة بالتنفيذ. يحتوي السياق على سجلات تتبع ترتيب تنفيذ الأوامر والمتغيرات المعرفة والقيم المحددة لها. مثال: عند استدعاء الدالة، يتم إنشاء Execution Context جديد يحتوي على المتغيرات المحلية والمعلومات اللازمة لتنفيذ الدالة. وعند انتهاء التنفيذ، يتم إزالة Execution Context ويعود التنفيذ إلى السياق السابق. function outer() { const x = 5; function inner() { console.log(x); } inner(); } outer(); // سيتم طباعة قيمة 5 في المثال السابق، الدالة الداخلية inner يمكنها الوصول إلى المتغير x المعرف في البيئة الخارجية (outer)، لأن Execution Context يحتفظ بالارتباط بين الدوال والقيم المرتبطة بها في نطاق الكود. الـ Lexical Environment يشير إلى المكان الذي يتم فيه تحديد القيم المرتبطة بالمتغيرات في الكود. يحتوي البيئة اللغوية على إعلانات المتغيرات والدوال والكائنات الأخرى، وتحدد كيفية الوصول إليها وكيفية تفاعلها مع بعضها البعض. مثال: في JavaScript، يتم تشكيل الـ Lexical Environment عند تحديد النطاقات اللغوية. أي عند البحث عن قيمة متغير، يتم البحث في Lexical Environment الحالي وفي البيئات الأبوية حتى يتم العثور على القيمة. function outer() { const x = 5; function inner() { console.log(x); } inner(); } outer(); // سيتم طباعة قيمة 5 هنا الدالة الداخلية inner يمكنها الوصول إلى المتغير x المعرف في البيئة اللغوية الخارجية (outer)، لأن Lexical Environment يحتفظ بالارتباط بين الدوال والقيم المرتبطة بها في نطاق الكود. شرح الدوال في JavaScript من موسوعة حسوب
    1 نقطة
  18. الفرق بين الـ Parameters والـ Arguments: Parameters (المعاملات): هي المتغيرات التي يتم تعريفها في تعريف الدالة وتستخدم لاستقبال القيم التي يتم تمريرها عند استدعاء الدالة. Arguments (الوسائط أو الوسائط الفعلية): هي القيم الفعلية التي يتم تمريرها للدالة عند استدعائها. وتكون الوسائط الفعلية قيم حقيقية يتم تمريرها للدالة بناءً على المعاملات المحددة في تعريف الدالة. الفرق بين الـ Declaration والـ Initialization: Declaration (التصريح): هو عملية إعلان المتغير أو الدالة دون تعيين قيمة أو تنفيذها. عند قيامك بإعلان متغير، فإنك تعلن عن وجوده ونوعه، ولكن لا يحتوي على قيمة محددة. Initialization (التهيئة): هو عملية تعيين قيمة لمتغير بعد تصريحه. عند تهيئة متغير، تعين قيمة محددة له. الـ Execution Context (سياق التنفيذ): Execution Context هو البيئة التي يتم فيها تنفيذ قطعة من الكود في لغة البرمجة. يتم إنشاء Execution Context لكل جزء من الكود الذي يتم تنفيذه ويحتوي على معلومات حول المتغيرات المتاحة ونطاقها والدوال المتاحة ونقطة تنفيذ الكود الحالية. الـ Lexical Environment (البيئة اللغوية): Lexical Environment هو جزء من Execution Context ويحتوي على معلومات حول المتغيرات المحلية والمتغيرات العامة المتاحة في النطاق اللغوي الحالي. ويتم استخدام البيئة اللغوية لحل الروابط بين المتغيرات والدوال وتحديد الوصول إليها.
    1 نقطة
  19. الفرق بين الParameters والArguments: في هذا المثال، لدينا دالة تسمى "addNumbers" تقوم بإضافة رقمين وإرجاع النتيجة: function addNumbers(num1, num2) { return num1 + num2; } يتم تعريف المتغيرات num1 و num2 كـ parameters في تعريف الدالة. وعند استدعاء الدالة، يتم تمرير الـ arguments وهي القيم الفعلية التي يتم إدخالها إلى الدالة، كما هو موضح في المثال التالي: var result = addNumbers(5, 10); console.log(result); // النتيجة هي 15 في هذا المثال، يتم تعريفالـ parameters num1 و num2 في تعريف الدالة "addNumbers". وعند استدعاء الدالة باستخدام الـ arguments 5 و 10، تتم إسناد القيم 5 و 10 إلى المتغيرات num1 و num2 على التوالي، وتقوم الدالة بإضافة المتغيرين وإرجاع النتيجة 15. الفرق بين الDeclaration والInitialization: في هذا المثال، لدينا متغير يسمى "name" يتم تعريفه في الكود وإسناد قيمة له في وقت لاحق: var name; name = "John"; console.log(name); // النتيجة هي "John" في هذا المثال، يتم استخدام الـ Declaration لتعريف المتغير "name" دون تحديد قيمة محددة له. ويتم استخدام الـ Initialization لإسناد القيمة "John" إلى المتغير "name" في الوقت الذي يتم فيه تعريفه، ويتم ذلك باستخدام علامة الـ "=" لإسناد قيمة "John" إلى المتغير "name". وبعد ذلك، يتم طباعة قيمة المتغير باستخدام console.log()، وتكون النتيجة "John". الـ Execution Context: في هذا المثال، لدينا دالة تسمى "greet" تقوم بطباعة رسالة ترحيب باستخدام المتغير "name": function greet(name) { console.log("Hello, " + name + "!"); } var message = "Welcome to my website!"; greet("John"); عند استدعاء الدالة "greet" باستخدام الـ argument "John"، يتم إنشاء Execution Context جديد يحتوي على المتغيرات التالية: المتغير "name" الذي تم تعريفه كـ parameter في دالة "greet". المتغير "message" الذي تم تعريفه في المستوى العلوي من الكود. يتم إنشاء Lexical Environment جديد لكل Execution Context، والذي يحتوي على الـ Identifier bindings التي تم تعريفها في هذا النطاق. في هذا المثال، يتم الوصول إلى المتغير "name" من خلال Lexical Environment الخاص بـ Execution Context الذي تم إنشاؤه لدالة "greet"، بينما يتم الوصول إلى المتغير "message" من خلال Lexical Environment العلوي للكود. الـ Lexical Environment: في هذا المثال، لدينا دالة تسمى "calculateArea" تقوم بحساب مساحة المستطيل باستخدام المتغيرات "width" و "height": ini function calculateArea(width, height) { var area = width * height; return area; } var width = 5; var height = 10; var result = calculateArea(width,height); console.log(result); // النتيجة هي 50 في هذا المثال، يتم تعريف المتغيرات "width" و "height" في المستوى العلوي من الكود، وتتم إسناد القيم 5 و 10 إلى المتغيرات على التوالي. وعند استدعاء الدالة "calculateArea" باستخدام الـ arguments "width" و "height"، يتم إنشاء Execution Context جديد يحتوي على المتغيرات التالية: المتغير "width" الذي تم تعريفه في المستوى العلوي من الكود. المتغير "height" الذي تم تعريفه في المستوى العلوي من الكود. المتغير "area" الذي يتم تعريفه داخل الدالة "calculateArea". يتم إنشاء Lexical Environment جديد لكل Execution Context، والذي يحتوي على الـ Identifier bindings التي تم تعريفها في هذا النطاق. في هذا المثال، يتم الوصول إلى المتغيرات "width" و "height" من خلال Lexical Environment العلوي للكود، بينما يتم الوصول إلى المتغير "area" من خلال Lexical Environment الخاص بـ Execution Context الذي تم إنشاؤه لدالة "calculateArea". وتتم إدارة المتغيرات في هذه الـ Lexical Environment، ويتم الوصول إليها من خلال الـ Execution Context الخاص بها. يمكنك الإطلاع على المزيد من المعلومات من خلال المقالة التالية
    1 نقطة
  20. - الفرق بين الParameters والArguments هو أن الParameters هي المتغيرات التي تحدد في تعريف الFunction، بينما الArguments هي القيم التي تمرر إلى الFunction عند استدعائها. مثلا، في الFunction التالية: function add(x, y) { return x + y; } x و y هما Parameters، وعندما نستدعي الFunction بهذه الطريقة: add(3, 5); 3 و 5 هما Arguments. - الفرق بين الDeclaration والInitialization هو أن الDeclaration هو إعلان اسم ونوع المتغير أو الFunction دون تحديد قيمته، بينما الInitialization هو تعيين قيمة مبدئية للمتغير أو الFunction. مثلا، في هذا المثال: var x; // declaration x = 10; // initialization function square(n) { // declaration and initialization return n * n; } - الExecution Context هو بيئة تشغيل للكود في لغة برمجة معينة. يحدد ما هي المتغيرات والFunctions والObjects المتاحة للكود في ذلك الوقت. عادة، يوجد Execution Context عام للبرنامج ككل، وExecution Contexts محلية لكل Function تستدعى. مثلا، في هذا المثال: var x = 10; // global variable function add(y) { // global function var z = 5; // local variable return x + y + z; } console.log(add(7)); // 22 console.log(z); // error: z is not defined الExecution Context العام يحتوي على المتغير x والFunction add، بينما Execution Context للFunction add يحتوي على المتغير y (الذي يأخذ قيمة Argument) والمتغير z (الذي يعرف داخل الFunction). عندما نستدعي add(7)، يتم إنشاء Execution Context جديد للFunction add ويتم تشغيل كودها داخله. عندما نحاول طباعة قيمة z خارج الFunction، نحصل على خطأ لأن z غير معرف في Execution Context العام. - الLexical Environment هو مفهوم مرتبط بالExecution Context، وهو يشير إلى كيفية تحديد مجال (Scope) المتغيرات والFunctions في لغة برمجة معينة. يعتمد الLexical Environment على كيفية كتابة الكود (Lexical Structure)، وليس على كيفية تشغيله (Dynamic Structure). مثلا، في هذا المثال: var x = 10; // global variable function foo() { // global function var y = 20; // local variable in foo function bar() { // local function in foo var z = 30; // local variable in bar console.log(x + y + z); // 60 } bar(); // call bar } foo(); // call foo الLexical Environment يحدد أن المتغير x متاح للFunctions foo و bar، وأن المتغير y متاح فقط للFunction foo و bar (ولكن ليس للبرنامج الرئيسي)، وأن المتغير z متاح فقط للFunction bar (ولكن ليس للFunction foo أو للبرنامج الرئيسي). هذه التراتبية في المجالات تسمى Lexical Scoping أو Static Scoping.
    1 نقطة
  21. تخزين البيانات في قواعد البيانات باستخدام نص عربي وإنجليزي مباشرة أو باستخدام معرفات فريدة وجلب البيانات المرتبطة معها لها سلبيات وإيجابيات مختلفة. إليك نظرة عامة على كل نوع: تخزين البيانات كنص عربي وإنجليزي: - إيجابيات: سهولة الفهرسة والبحث: يمكن البحث في البيانات باستخدام كلمات المفتاح الموجودة في النصوص بشكل مباشر. قابلية القراءة: يمكن قراءة البيانات بسهولة وفهمها بواسطة البشر. - سلبيات: استهلاك مساحة أكبر: قد يستهلك تخزين البيانات بصيغة النص المباشر مساحة أكبر في قاعدة البيانات. صعوبة الترتيب والفرز: قد تكون هناك صعوبة في تنظيم وفرز البيانات بشكل فعال. تخزين البيانات كمعرفات فريدة: - إيجابيات: كفاءة التخزين: يمكن توفير مساحة أقل في قاعدة البيانات من خلال استخدام معرفات فريدة بدلاً من تخزين النصوص المترجمة. سهولة الفرز والترتيب: يمكن فرز وتنظيم البيانات بشكل فعال باستخدام المعرفات الفريدة. - سلبيات: صعوبة القراءة: يتعذر على البشر قراءة البيانات بشكل مباشر وفهمها بسبب استخدام المعرفات الفريدة. صعوبة البحث: قد يتطلب البحث في البيانات استخدام جداول مرتبطة واستعلامات معقدة.
    1 نقطة
  22. تخزين البيانات بشكل مباشر كنص عربي وإنجليزي يمكن أن يسهّل العملية ويجعلها تبدو أكثر بساطة، ولكن يمكن أن يؤدي إلى مشاكل في حالة الترجمة أو البحث عن النصوص، لأن الكلمات العربية والإنجليزية تتباينفي نحوها وتهجئتها وقد تكون قد تم تخزينها بطريقة غير متوافقة مع بعض قواعد البيانات. من ناحية أخرى، تخزين البيانات كمعرفات فريدة يمكن أن يسهل البحث عن البيانات وتحديثها، ولكن يمكن أن يؤدي إلى زيادة حجم القواعد والتعقيد في التعامل معها. بالنسبة لتفضيل أي طريقة، فذلك يعتمد على الحاجة والغرض من التطبيق. إذا كان التطبيق يتضمن ترجمة نصوص أو البحث عن النصوص بشكل متكرر، فقد يكون من المفضل تخزين البيانات بشكل مباشر كنص عربي وإنجليزي. وإذا كان التطبيق يحتاج إلى تحديثات متعددة للبيانات أو تحديثات متعددة لقواعد البيانات، فقد يكون من المفضل تخزين البيانات كمعرفات فريدة. بشكل عام، يفضل استخدام معرفات فريدة لتخزين البيانات في قواعد البيانات بسبب المزايا العديدة التي توفرها، مثل البحث السريع والتحديثات السريعة. ومع ذلك، في بعض الحالات، قد يكون من المناسب استخدام تخزين المعلومات كنص عربي وإنجليزي، مثل في حالات البيانات الثابتة التي لا يتم تحديثها كثيرًا. بشكل عام، يعتمد الاختيار بين تخزين البيانات بشكل مباشر كنص عربي وإنجليزي أو تخزينها كمعرفات فريدة على احتياجات التطبيق ومتطلباته.
    1 نقطة
  23. الفرق بين الدالتين: الدالة increase(num): في هذه الدالة، يتم زيادة قيمة المعامل num بواحد (num++) ثم يتم طباعة القيمة الجديدة على الإخراج (console.log(num)). في حالة استدعاء الدالة increase(1)، يتم تمرير القيمة 1 كقيمة المعامل num. بما أن العملية num++ تزيد القيمة بعد الاستخدام، فإن قيمة num ستكون 2 وهي قيمة المخرج (console.log) في هذه الحالة. الدالة increase1(number): في هذه الدالة، يتم إرجاع قيمة المعامل number ثم يتم زيادة قيمة المعامل بواحد (number++). في حالة استدعاء الدالة increase1(1)، يتم تمرير القيمة 1 كقيمة المعامل number. وبما أن العملية number++ تزيد القيمة بعد الاستخدام، فإن قيمة المعامل المُرجَعَة ستكون 1 وليس 2. ومع ذلك، في المثال المعطى، لم يتم طباعة القيمة المُرجَعَة من الدالة increase1() بواسطة console.log، لذلك لن يتم عرضها في الإخراج. في الحالة الأولى، الدالة increase() تقوم بطباعة القيمة المحدثة من num بعد الزيادة (2)، بينما في الحالة الثانية، الدالة increase1() تقوم بإرجاع القيمة الأصلية من number قبل الزيادة (1).
    1 نقطة
  24. أولاً أود أن أشجعك على مواصلة تعلم البرمجة. إذا كان لديك الرغبة في الوصول إلى مستوى جيد في البرمجة، فيجب عليك العمل بجد والتركيز على تعلم الأساسيات بشكل جيد. بالنسبة للتشتت والضياع الذي تشعر به، يمكنك تحديد أهداف محددة ومركزة فيما تريد تحقيقه في تعلم البرمجة. على سبيل المثال، يمكنك تحديد هدفًا مثل بناء موقع ويب بسيط أو تطبيق محمول صغير، ومن ثم العمل على تحقيق هذا الهدف خطوة بخطوة. عندما تبدأ في تعلم البرمجة، يجب أن تتعلم الأساسيات أولاً. في حالتك، يمكنك البدء باختيار لغة برمجة واحدة والتركيز على تعلمها بشكل جيد. بعد ذلك، يمكنك العمل على فهم المفاهيم الأساسية للبرمجة مثل الشروط والحلقات والدوال والمصفوفات وغيرها. عندما تتعلم الأساسيات، يمكنك البدء في بناء بعض المشاريع الصغيرة. يمكنك العثور على مشاريع مفتوحة المصدر على الإنترنت ومحاولة فهمها وتعديلها وتحسينها. هذا سيساعدك على تحسين مهاراتك وفهم كيفية استخدام الأكواد التي تتعلمها في مشاريع حقيقية. لا تنسى أيضًا أن تتعلم من الأخطاء التي ترتكبها. عندما تواجه مشكلات أثناء كتابة الأكواد، حاول فهم ما هي المشكلة وكيف يمكنك حلها. يمكنك أيضًا طرح الأسئلة على المنتديات المخصصة للبرمجة أو الانضمام إلى مجتمعات التعلم عبر الإنترنت للحصول على المساعدة والنصائح من المتخصصين مثل أكاديمية حسوب. أخيرًا، يجب أن تتذكر أن تعلم البرمجة يتطلب الصبر والمثابرة. لا تشعر بالإحباط إذا واجهت صعوبات في البداية. استمر في التعلم والعمل بجد، وسترى تحسنًا في مهاراتك مع مرور الوقت.
    1 نقطة
  25. إن الأمر طبيعي، الانقطاع لوقت طويل له آثار سلبية في كافة المجالات و ليس فقط في البرمجة. لا أنصحك بمحاولة فهم كل اللغة، الدراسة النظرية فقط للبرمجة لن تجعلك مبرمج ناجح، عليك تعلم الأساسيات و من ثم محاولة التطبيق، دائماً حاول تطبيق ما يطلبه المدرب في البداية، ثم حاول تطبيق شيء ترغب به أنت، و لكن دائماً ابدأ بأفكار بسيطة و من ثم حاول تطويرها، لا تبدأ بفكرة معقدة من البداية فهذه طريقة غير جيدة. مثلاً تعلم في البداية تعليمات الإدخال و الطباعة و حاول فقط القيام ببعض العمليات الحسابية البسيطة في البرنامج الخاص بك. بعدها يمكنك تعلم العبارات الشرطية و محاولة مثلاً تطوير مثال العمليات الحسابية ليأخذ أكثر من خيار بحسب ما يدخله المستخدم. ثم يمكنك تعلم الحلقات التكرارية و مثلاً تطوير البرنامج ليبقى يعمل حتى يدخل المستخدم خيار يجعل الحلقة تقف و ينتهي البرنامج. هذه هي الطريقة الجيدة بشكل عام، أن تتعلم الأساسيات خطوة بخطوة و تقوم بالتطبيق التدريجي للأمور، نبدأ بالأمور السهلة و نبني عليها. أما في حال بدأت بمشروع معقد منذ البداية ستشعر باليأس لأنك ستواجه صعوبات كثيرة في نفس الوقت بدلاً من حلها تدريجياً، حتى أن المشاريع المعقدة يتم بناءها بهذه الطريقة، دائماً نبدأ بشيء بسيط و نزيد التعقيد تدريجياً.
    1 نقطة
  26. أنت لا تشعر بالضياع أو التشتت عزيزي، حتى من لديه خبرة كبيرة بالبرمجة إذا انقطع لفترة طويلة سينسى بالتأكيد، فالبرمجة تحتاج إلى ممارسة، فما بالك بمن درس لفترة صغيرة وانقطع بالتأكيد سيشعر بالضياع. وإذا كنت قد درست بشكل صحيح وبتأني وقمت بالتطبيق مرة مع المدرب ومرة بمفردك وحاولت التغيير قليلاً في المشروع لتتعلم أشياء جديدة من المشاكل التي ستواجهك، أو تستطيع مشاهدة بعض الفيديوهات ثم توقفت وقم بالتطبيق بمفردك وحاول الإضافة أو التغيير قليلاً لتتعلم. فلا مشكلة كل ما تحتاجه حاليًا هو مراجعة الدورة بشكل سريع أي تشغيل الفيديو على سرعة 1.5 أو 2 حسب ما يناسبك فإذا وجدت نفسك تسترجع المعلومات وتتذكر فعليك بالتطبيق على مشروع إذًا لتثبيت ما قمت بمراجعته. ولكن إذا وجدت نفسك لا تتذكر كم كبير من المعلومات أو تجد صعوبة في تنفيذ المشروع من البداية ولا تعرف ماذا تفعل بالكود، هنا يجب دراسة الدورة من البداية وبتأني وعدم الإنتقال من قسم إلى قسم إلا بعد التأكد أنك فهمت وطبقت بمفردك. ونصيحة، حاول ألا تشعر بالقلق عند تعلم البرمجة فالجميع بدأ من نفس النقطة، فأعطي نفسك بعض الوقت وإلتزم بمسار تعليمي وخلال فترة سيتحسن مستواك بشكل كبير. وأيضًا إذا واجهتك مشكلة قم بتقسيمها إلى أجزاء صغيرة وحاول تنفيذها ولا تنظر للمشكلة بشكل كامل، في البداية حاول التطبيق على أجزاء صغيرة ثم قم ببناء موقع كامل وستجد في الروابط التي أرفقتها لك موقع لتحديثات وتصاميم للتطبيق على ما تعلمته. وقد تم النقاش حول الطريقة الصحيحة لدراسة الدورات هنا بشكل مفصل: ولتجنب التكرار، أنصحك بقراءة النقاشات التالية فستجد بها إجابة على الكثير من الأسئلة لديك:
    1 نقطة
×
×
  • أضف...