لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 05/31/23 في كل الموقع
-
اريد ان استشيركم في حاسوب وجدته وأريد شراءه، نوع الحاسوب DELL والجيل السابع Cor i7 ، ورام 8GB ،وبه تطش ومكتوب touch 10 point تقريبا ، ولكن الويندوز الاصلي له 7 وحاليا هو ويندوز 10pro ، وشاشته صغيرة نوعا ما ، هل هو ممتاز للبرمجة وخيار جيد للبدء ؟؟ وجزاكم الله خيراً.3 نقاط
-
برنامج بايثون لطباعة الشكل ادناه * * * * * * * * * * * * * * *2 نقاط
-
السلام عليكم. أن أسمع على يوتيوب أناس يقولون أنه لازم أن أتعلم جميع مجالات البرمجة مثل تطوير المواقع، تطوير التطبيقات IOS و Android يعني Native، تطوير تطبيقات سطح المكتب لنظام MacOS و Windows و Linux. و الله أسمع هذا يعني لو وجدت عمل يحتاج IOS فأنت تشتغل IOS، و لو يحتاج ويب تشتغل ويب و هكذا. أنا أسمع هذا الكلام، يعني أنت تكون شخص يعرف كيف يفعل كل شيء. هل هذا الكلام صحيح؟ أيضاً أسمع أنه يجب تعلم لغة C و بعدها ++C حتى أتأسس بشكل صحيح و أتعلم كيف أفكر، أنا آسف جداً لأنني أطلت في الكلام و لكنني أحتاج أن أفهم و شكراً جداً.1 نقطة
-
السلام عليكم انا الحمد الله اتعلمت اساسيات البرمجه وكمان اتعلمت لغة python واتعلمت لغة SOL بالاضافه الهياكل البيانات والخورزميات وكمان حلت مشاكل برمجه كتير ومازلت حتي الانا وبعد كد بتدأ تعلم مجال Machine Learning ماذا تنصحوني ؟ يعني كيف اطور نفيسه في مجال تعليم الاله المجال صعب اوي ؟ هل المجال فيه ابداع ام مجرد تنفيد خورزميات فقط؟ وكيف انا اصمم الخورزميات بنفيسه؟1 نقطة
-
السلام عليكم انا حاليا كل ما اسمع فيديوهات المدربين بكون فاهم كويس جدا , لكن لما اجرب احل لوحدي مش بعرف لازم ارجع تاني للفيديو عشان احل هل طبيعي كده في الاول ولا المشكله فيا انا1 نقطة
-
كيف يا أ.قيس اتابع الابحاث والحاجات الجديد ؟ وسوال كمان لوسمحت هو انا الازم اتعلم نظام لنيكس ؟1 نقطة
-
1 نقطة
-
و عليكم السلام، يجب عليك أن تكون على اطلاع جيد بالرياضيات، خاصة الجبر الخطي و الاحتمال و التحليل. يمكنك الإطلاع على المحاضرات من جامعات عالمية مثل MIT لهذه المواد، بالطبع هي باللغة الانكليزية. بعد ذلك دائماً حاول تطبيق ما تعلمته، قم ببناء تطبيق يستعمل الذكاء الصنعي لوحدك، عندها ستواجد مشاكل و ستتعلم كيف تحلها، بالطبع تحتاج إلى أن تكون على إطلاع بما سبق و ذكرته حيث أن أغلب المشاكل التي تواجهك في هذا المجال ليست مشاكل برمجية و إنما مشاكل منطقية غالباً ما يكون سببها متعلق بالرياضيات، مثلاً اخترت توزع احتمالي غير منطقي للمسألة التي تحاول حلها، أو هناك مشاكل في المشتقات و الكثير من المشاكل الأخرى. المجال ليس سهل بالطبع فهو جديد و الأبحاث فيه تظهر كل يوم فعليك أن تكون على إطلاع دائم على كل ما هو جديد. المجال فيه إبداع بالطبع، ليس مجرد تطبيق خوارزميات، حتى في حال اخترت أن تقوم بالتطبيق فقط بدون البحث العلمي، فإنه عليك أن تكون على مستوى جيد من الفهم حتى تستطيع حل المشاكل التي تواجهك. تصميم خوارزميات ذكاء صنعي بنفسك ليس بالموضوع السهل أبداً، عليك في البداية أن تصبح جيد في المجال و تصبح قادر على بناء التطبيقات المعروفة، من ثم عليك القيام بقراءة الكثير من الأوراق البحثية حتى تصبح على إطلاع على كل ما هو جديد، بعد ذلك يمكنك البدء في عملية البحث لتطوير خوارزميات جديدة، كما أنا الأمر في الغالب يتطلب وجود تجهيزات لتدريب النماذج التي تريد تطويرها، بالطبع يمكنك الاشتراك بالخدمات التي تقدمها الكثير من الشركات من سيرفرات تدريب، و لكن الأمر مكلف جداً، و من الجيد إذا كان بإمكانك إكمال دراستك في جامعة تقدم هذه الأمور، كما أن وجود أحد يوجهك هو أمر ضروري لذلك أنصحك بالدراسة الأكاديمية في جامعة من أجل هكذا مجال.1 نقطة
-
من الطبيعي أن تشعر بمثل هذا الشعور عندما تحاول حل التمارين بمفردك بعد مشاهدة الفيديوهات. عند مشاهدتك للمدربين في الفيديوهات، فإنهم يشرحون ويوضحون الخطوات بشكل مباشر ومفصل، مما يجعلك تشعر بالفهم الجيد. لكن عندما تحاول حل التمارين لوحدك، قد تواجه تحديات تتعلق بتطبيق الأفكار والمفاهيم التي تعلمتها. قد يكون السبب في عدم قدرتك على حلها بشكل مستقل هو عدم الاستراتيجية الصحيحة في التفكير، لكن لا تقلق إذا كنت بحاجة للعودة للفيديوهات أثناء حل التمارين في البداية، فهذا أمر شائع. مع ممارسة مستمرة وتدريب، ستكتسب المزيد من الثقة والمهارة في حل المسائل بمفردك. استمر في التعلم والتدريب وسترى تحسنًا تدريجيًا في قدراتك لحل المشكلات التي تواجهك.1 نقطة
-
في البداية ذلك أمر طبيعي جدًا، لكن عليك بمعرفة الطريقة الصحيحة، وهي مشاهدة 4 فيديوهات مثلاً لو كانت صغيرة ثم التطبيق عليها، أم لو كان الفيديو كبير فعليك بمشاهدة نصفه ثم التطبيق بمفردك ثم إكمال الفيديو، ثم إعادة التطبيق مرة أخرى من البداية بمفردك. والأمر يبدوا ممل ولديك إحساس يدفعك لضرورة الإنتهاء من الدورة، لكن لا تستمع له فأنت من ستعاني، والوقت الذي تظن أنك تهدره هو من سيجنبك العودة بشكل متكرر للدراسة من جديد. أنت بحاجة إلى التكرار والتكرار هنا لا أقصد مشاهدة الفيديو أكثر من مرة، بل مرتين كافية جدًا ثم التطبيق أكثر من مرة لو احتجت إلى ذلك حتى تفهم الكود الذي تكتبه وعليك بالتغيير قليلاً أو إنشاء مشروع مختلف بنفس الفكرة مثلاً وهكذا لتجبر نفسك على التعلم وعلى تجربة أشياء جديدة ولا تخف من ذلك الجميع مر بنفس التجربة، الفارق هو من يجتهد ويصبر بشكل أكبر ولمدة أطول، لذلك تجد القليل يتحمل تجربة تعلم البرمجة. ولا مشكلة بالعودة كل فترة للمراجعة وتثبيت ما قمت بدراسته سواء بمشاهدة الفيديو أو كتابة الكود، فالتعلم عملية تكرارية على فترات متباعدة، وأنت لسة آلة بل بحاجة إلى المراجعة على فترات متباعدة والأهم هو كتابة الكود. وأنصحك بقراءة النقاشات التالية:1 نقطة
-
لا يمكن أن تتعلم جميع مجالات البرمجة: البرمجة هي مجال واسع جداً ويشمل العديد من المجالات مثل تطوير المواقع، تطوير التطبيقات المحمولة، تطوير تطبيقات سطح المكتب، وغيرها الكثير. يتم تطوير هذه التطبيقات باستخدام لغات البرمجة المختلفة وتقنيات البرمجة المختلفة. إذا كنت تحاول تعلم كل شيء، فستجد صعوبة في تحقيق التخصص والتميز في مجال محدد. التخصص في مجالين على الأكثر: يفضل المطورون التخصص في مجال واحد أو اثنين على الأكثر، لأن هذا يسمح لهم بتحقيق التميز في هذا المجال وتطوير مهاراتهم بشكل أفضل. وبالتالي، يمكنهم التركيز على تعلم لغات البرمجة والتقنيات التي تناسب هذا المجال بدلاً من إنفاق الوقت والجهد في تعلم كل شيء. تعلم اللغات المناسبة لكل مجال: كل مجال يتطلب لغات البرمجة وتقنيات مختلفة. على سبيل المثال، لتطوير تطبيقات iOS، يجب أن تتعلم لغة Swift و Objective-C، في حين أن تطوير تطبيقات Android يتطلب تعلم لغة Kotlin و Java. ولتطوير تطبيقات سطح المكتب، يجب تعلملغات مثل C++ و Java و Python وغيرها. لذلك، يجب عليك تحديد المجال الذي تريد العمل فيه وتعلم اللغات والتقنيات المناسبة لهذا المجال. بالنسبة لتعلم لغة C و C++: يمكن أن يكون مفيداً في بعض المجالات مثل تطوير البرمجيات المنخفضة المستوى وتطبيقات الألعاب والتطبيقات المتقدمة. ومع ذلك، فإنه ليس من الضروري تعلم هذه اللغات لتصبح مطوراً ناجحاً في جميع المجالات. يمكنك تحديد المجال الذي تريد العمل به وتعلم اللغات والتقنيات المناسبة لهذا المجال. ونصيحة بعد تحديد المجال الذي تريد العمل به وتعلم اللغات والتقنيات المناسبة، يجب عليك العمل على تطوير مهاراتك وخبرتك في هذا المجال. يمكنك البدء بتطوير مشاريع صغيرة والعمل على تطبيق ما تعلمته وتحسينه بشكل مستمر بدلاً من التنقل بين المجالات.1 نقطة
-
هذا الكلام غير صحيح بالمرة، عليك أولاً بتحديد المجال الذي تريد العمل به بناءًا على المطلوب في سوق العمل لديك أي تستطيع العمل به بخبرة سنة أو مستوى Fresh، ولديك مثلاً مجال تطوير الويب أو تطبيقات الهاتف أو .NET فإذا اخترت مجال الويب فدائمًا ما أن تصبح Full-stack في البداية وذلك سيتيح لك الكثير من الفرص ثم التخصص في الواجهة الخلفية أو الأمامية بعد سنتين إلى ثلاث من الخبرة العملية. وإذا كان لديك الوقت، فأنصحك بتعلم أساسيات البرمجة عن طريق C++ ثم تعلم أساسيات بايثون بشكل سريع، ثم دراسة المسار الخاص بالمجال الذي اخترته. وإذا كان مستواك في علوم الحاسب ضعيف نسبيًا، فأنصحك بتعلم الأساسيات من خلال بايثون. وقد تم النقاش بالتفصيل عن سؤالك في النقاشات التالية:1 نقطة
-
1 نقطة
-
يحدث هذا الخطأ على سبيل المثال عند تشغيل الأمر `php artisan migrate` الذي يقوم بتنفيذ عمليات التهجير (migrations) في Laravel وإنشاء جداول قاعدة البيانات المحددة في الملفات الموجودة في المجلد `database/migrations`. بالنسبة لحل هذا الخطأ، يمكن مراجعة اسم الجدول المحدد في الملفات migration والتأكد مما إذا كان هناك جدول بنفس الاسم موجود في قاعدة البيانات بالفعل. وفيحدث هذا الخطأ، يمكن حذف الجدول الحالي إذا كان غير مهم أو إعادة تسمية الملف migration لتغيير اسم الجدول المحدد فيه. وبالطبع يجب تأكيد الأمر عند إنشاء جدول جديد في قاعدة البيانات للتأكد من عدم وجود جدول بنفس الاسم موجود بالفعل. ويمكن أيضاً استخدام الأمر php artisan migrate:fresh بدلاً من php artisan migrate لحذف جميع الجداول الحالية في قاعدة البيانات وإنشاء جداول جديدة من جديد، ولكن يجب الانتباه إلى أن هذا الأمر سيؤدي إلى فقد جميع البيانات الموجودة في الجداول الحالية. ويمكن أيضاً استخدام أمر php artisan migrate:refresh الذي يقوم بحذف جميع الجداول الحالية في قاعدة البيانات وإعادة إنشائها من جديد، وذلك بدلاً من استخدام `php artisan migrate:fresh` الذي يقوم بإسقاط جميع الجداول وإعادة إنشائها من جديد، مما يؤدي بالضرورة إلى فقد جميع البيانات الموجودة في الجداول الحالية. ويمكن استخدام الأمر `php artisan migrate:refresh` على سبيل المثال في حالة تعديلات على بنية الجداول أو إضافة حقول جديدة، ويمكن أن يساعد على تحديث الجداول بشكل أكثر فعالية. ويجب الانتباه إلى أن استخدام هذا الأمر سيؤدي إلى فقد جميع البيانات الموجودة في الجداول الحالية كذلك.1 نقطة
-
عند الرغبة بتحويل قيمة كائن إلى قيمة بدائية نستخدم الدالة public xxx xxxValue() كما الكود أدناه : public class Main { public static void main(String[] args) { // Integer f = 12; long g = f.longValue(); System.out.print (g); } } عند تشغيل الكود في برنامج intellij سنحصل على النتيجة : E:\SETUP\jdk\bin\java.exe "-javaagent:P:\SETUP\jetbrain\intellij\IntelliJ IDEA Community Edition 2023.1.2\lib\idea_rt.jar=54249:P:\SETUP\jetbrain\intellij\IntelliJ IDEA Community Edition 2023.1.2\bin" -Dfile.encoding=UTF-8 -classpath P:\untitled\out\production\untitled Main 12 Process finished with exit code 0 ويمكننا استخدام الكود التالي بدون استخدام هذه الدالة : public class Main { public static void main(String[] args) { // Integer f = 12; long g = f; System.out.print (g); } } وسنحصل على نفس النتيجة, إذاً لماذا توجد هذه الدالة؟ وأي الطريقتين هي الأسرع؟1 نقطة
-
السلام عليكم ، أنا لم أفهم ماهو الفرق بين let و var و بالتحديد لم أفهم ماهي القيمة الإبتدائية التي تعطى للvar1 نقطة
-
الخطأ يعني أن الجدول 'posts' موجود بالفعل في قاعدة البيانات ولا يمكن إنشاؤه مرة أخرى، وذلك أمر طبيعي يحدث عندما تحاول تشغيل عملية إنشاء جدول عن طريق التهجير والجدول بالفعل موجود في قاعدة البيانات. لذلك الأمر الصحيح هو التالي: php artisan migrate:fresh --seed فهو يستخدم في Laravel لإعادة إنشاء وتحديث قاعدة البيانات بالجداول والبيانات الأولية، و يتكون من عدة أجزاء: "php artisan": يشير إلى تشغيل أمر Laravel عبر واجهة سطر الأوامر. "migrate:fresh": يعني أنه سيتم إعادة إنشاء كل الجداول في قاعدة البيانات، ويتم حذف جميع الجداول الموجودة في قاعدة البيانات وإعادة إنشائها بناءًا على ملفات الترحيل (migrations) الموجودة في مشروع Laravel. "--seed": يشير إلى أنه سيتم تشغيل ملفات بزر البيانات الأولية (seeds) بعد إعادة إنشاء الجداول، وملفات البزر تستخدم لإضافة بيانات افتراضية أو تجريبية إلى قاعدة البيانات بعد إعادة إنشاء الجداول.1 نقطة
-
دالة xxxValue() في جافا تستخدم لتحويل قيمة كائن من النوع xxx إلى قيمة بدائية من النوع المناسب، حيث xxx هو نوع الكائن الأصلي. مثلاً، في الكود الخاص بك، f.longValue() يقوم بتحويل قيمة الكائن f من النوع Integer إلى قيمة بدائية من النوع long. والدالة xxxValue() توجد في العديد من أنواع الكائنات في جافا، مثل Integer, Double, Float, Long, Boolean, وغيرها، وتستخدم للتحويل بين هذه الأنواع المختلفة. أما بالنسبة للاختلاف بين استخدام الدالة xxxValue() وعدم استخدامها في الحالة التي ذكرتها، في حالة قام الكود بالتحويل المباشر مثل long g = f;، يتم تنفيذ عملية التحويل ضمن عملية التجاوز الضمني (implicit casting)، والتي تتم بشكل تلقائي من قبل جافا، وذلك لأن الكائن f من النوع Integer يمكن تحويله بشكل ضمني إلى long. بالنسبة لأيهما أسرع، فلا يوجد اختلاف كبير في الأداء بين الطريقتين، فتتم عملية التحويل في حالة استخدام الدالة xxxValue() ضمن الدالة نفسها، بينما تتم عملية التحويل بشكل ضمني في حالة استخدام عملية التجاوز الضمني. عمومًا، الفرق في الأداء بين الطريقتين غير ملحوظ وغالبًا لا يؤثر على أداء البرنامج.1 نقطة
-
1 نقطة
-
في حالتك هذه لا فرق، حيث أنك تقوم بتخزين متغير ذو سعة أقل في متغير ذو سعة أكبر. في حالات أخرى مثلاً عندما تريد تخزين float في long فعليك القيام بما يدعى التحويل casting، و هو تحويل القيمة من float إلى long. و عندها تكون هذه الدالة مفيدة لذلك. فائدة أخرى، هي أنك تقوم بشكل واضح بتحديد أنك تريد التحويل، حيث أن من يقرأ الكود الثاني قد يعتقد أنك عن طريق الخطأ قمت بذلك، بينما في حال استعملت الطريقة فمن الواضح أنك تريد هذا التحويل.1 نقطة
-
حاول القيام بالتعديلات التالية عليك بتعديل الدالة app.get() للحصول على البيانات المحدثة من Google Sheet، باستخدم googleSheets.spreadsheets.values.get للحصول على الصفوف المحدثة بدلاً من الصفوف الكاملة، وتستطيع استخدام علامة الوقت (timestamp) لتتبع آخر تحديث للبيانات. app.get('/', async (req, res) => { try { // كود الاستدعاء والتحقق من المصادقة والترخيص لخدمة Google Sheets API هنا const spreadsheetsId = "19Z6XyZSTDvGt1VwL17znI8GoRUvTP0OMwckHujP312E"; const range = "Sheet1!A:E"; // تعديل نطاق البيانات حسب الاحتياج const getRows = await googleSheets.spreadsheets.values.get({ auth: auth, spreadsheetId: spreadsheetsId, range: range, }); const updatedData = getRows.data.values; // قم بتحديث البيانات في قاعدة بيانات MongoDB هنا // يمكنك استخدام مكتبة Mongoose لتحديث البيانات في موديل User for (const data of updatedData) { const user = { userName: data[0], // تأكد من تعديل الفهرس بناءً على هيكلة البيانات في جوجل شيت // قم بتحديث المزيد من الحقول إذا لزم الأمر وفقًا لهيكل البيانات في جوجل شيت }; await User.findOneAndUpdate({ userName: user.userName }, user, { upsert: true, // إضافة السجل إذا لم يكن موجودًا }); } res.send(); } catch (error) { console.log(error); res.status(500).send(); } }); وتأكد من تعديل المدى (range) لتناسب هيكلة البيانات في Google Sheet، وفي الكود السابق، استخدمت "Sheet1!A:E" كمثال، حيث يتم افتراض وجود 5 حقول (من A إلى E) في كل صف. وفي حلقة for، قم بتحويل البيانات المستلمة من Google Sheet إلى كائنات user واستخدم findOneAndUpdate لتحديث السجلات الموجودة في قاعدة البيانات أو إضافة سجل جديد إذا كان غير موجود (upsert: true).1 نقطة
-
ألف مبروك يا منتصر، وسنك صغير ما شاء الله عليك صراحة، واصل إجتهاد وهتحقق أكتر بكتير إن شاء الله، وركز إنك تتعلم الأساسيات كويس ومتستعجلش إنت لسة صغير وحاول تشتغل على مشاريع بعد الأساسيات ومتركزش أوي على تعلم إطارات العمل والمكتبات وتتجاهل الأساسيات. لأنها هي اللي هتخليك تتعلم وتستخدم أي لغة وإطار عمل أو مكتبة بسهولة بعد كدة، وتتعلم أسرع. حاول بناء مشروع كبير باللغات الأساسية التي تعلمتها، مثل تنفيذ تطبيق SPA باستخدام HTML, CSS, JS فقط وستتعلم الكثير من ذلك.1 نقطة
-
1 نقطة
-
تتنوع لغات البرمجة في أهدافها واستخداماتها، وتتباين فيما بينها في درجة السهولة، فمن لغات البرمجة ما هو سهل التعلم ويستخدم صيغًا مفهومة تحاكي اللغة الطبيعية للتعبير عن التعليمات البرمجية المختلفة، ويتبع قواعد مرنة ومتساهلة مع الأخطاء، ومنها ما صعب التعلم ويملك مفردات صعبة وتراكيب لغوية مقعدة. ونظرًا لوجود المئات من لغات البرمجة المختلفة ومتنوعة الاستخدامات، قد تقع في حيرة من أمرك و تروادك الكثير من التساؤلات مثل: سنحاول في هذا المقال أن نجيبك على كافة هذه التساؤلات، من خلال تسليط الضوء على أسهل لغات برمجة التي يمكنك تعلمها في بداية مشوارك البرمجي، ونوضح أبرز مجالات استخدام كل لغة منها، ونختم المقال بجملة من النصائح التي تساعدك على تعلم البرمجة. ما هي البرمجة؟ قبل البدء في تعلم البرمجة، من المهم أن تعرف ما معنى البرمجة، ولم يجب عليك تعلمها؟ وما الذي يمكنك القيام به في حال تعلمت إحدى لغات البرمجة؟ قد تبدو لك كلمة البرمجة معقدة وصعبة لكنها في الواقع ليست كذلك. فالبرمجة بأبسط تعريف هي عملية التواصل بينك وبين جهاز الحاسوب لتطلب منه حل مشكلة ما أو تنفيذ مهمة معينة، ومن خلال البرمجة يمكنك إرسال الأوامر والتعليمات للحاسوب لينفذها لك. فأجهزة الحاسوب بارعة وسريعة بتنفيذ التعليمات وما تُلقَّن به وعاجزة عن التصرف من تلقاء نفسها، وتحتاج لمن يرشدها لما يجب عليها القيام به، وهي لا تفهم إلا لغة الآلة الثنائية المكونة من أصفار وواحدات فقط وهي لغة غير مقروءة أو مفهومة للبشر، لذا في حال أردت أن تتواصل مع جهاز حاسوب بلغة الآلة سيكون الأمر صعبًا عليك، ولن تتمكن بالمقابل من التخاطب معه بلغتك الأم ولا باللغة الانجليزية لأنه لن يفهمها بالمقابل، فما الحل؟ الحل هو في إيجاد لغة مشتركة للحوار والتواصل وهو ما تقوم به لغات البرمجة التي تشكل لغة وسيطة للتخاطب وتملك قواعد وأسس في الكتابة يمكنك كمبرمج فهمها وتعلمها بسهولة وبالإمكان ترجمتها إلى لغة الآلة ليفهمها الحاسوب بدوره وينفذها لك. لا تقتصر البرمجة على الحواسيب بل تشمل الهواتف المحمولة والأجهزة اللوحية وغيرها من الأجهزة الإلكترونية فكافة هذه الأجهزة تحتاج للتخاطب معها من خلال لغة برمجة مخصصة كي تعمل على النحو المنشود وتؤدي المهام المطلوبة. تشبه عملية تعلم البرمجة عملية تعلم الطبخ إلى حد كبير، فعندما تتعلم طريقة إعداد طبق ما لأول مرة عليك أن تتعرف على كافة المكونات اللازمة وتتبع طريقة الإعداد لكل وصفة وتطبقها واحدة تلو الأخرى لتنجز الطبق المطلوب، ويجب قبل البدء بالطبخ أن تكون على دراية بالمطبخ وأدواته بالطبع! لن تختلف الأمور في البرمجة كثيرًا عن هذا المشهد. من الأفضل قبل أن تخطو خطواتك الأولى في تعلم البرمجة أن تتعلم أساسيات البرمجة وهي مفاهيم تشترك فيها البرمجة وتُطبق في كافة لغات البرمجة ثم تبحث بعد ذلك عن لغة البرمجة المناسبة كي تتعلمها، ويمكنك بدء تعلم البرمجة وتعلم مفاهيم علوم الحاسوب الأساسية على التوازي وإن واجهك أي مفهوم أو مصطلح أثناء رحتلك في تعلم البرمجة، فيمكنك التوقف وتعلمه وإكمال الطريق. للمزيد من المعلومات حول اختصاص علوم الحاسوب ومجالاته وتطبيقاته وأهم فرص العمل المتوفرة في هذا المجال يمكنك مطالعة مقال المدخل الشامل لتعلم علوم الحاسوب. بعدها، ستجد أن هناك العديد من لغات البرمجة التي يمكنك أن تتعلمها لتتخاطب مع الحاسوب، وتتفاوت هذه اللغات في درجة صعوبتها، فمنها ما هو سهل التعلم ومرن في القواعد وقريب بشكل كبير من اللغة الطبيعية، ومنها ما هو صعب ومعقد. وفي بداية تعلم البرمجة يفضل أن تبدأ بلغة سهلة تناسبك كمبتدئ وتتعلم من خلالها مهارات التفكير البرمجي والمنطقي، ومهارات حل المشكلات ثم تبدأ بتعلم تطوير البرامج. والمقصود بالبرامج هنا من التعليمات التي تهدف لتحقيق مهمة معينة والمكتوبة بلغة برمجة معينة. أسهل لغات البرمجة للمبتدئين تعتبر لغات البرمجة التالية من أسهل لغات البرمجة للمبتدئين: بايثون Python جافاسكريبت Javascript روبي Ruby سي C جافا Java جو Go PHP بيرل Perl R ماتلاب Matlab نناقش في الفقرات التالية سمات كل لغة من هذه اللغات، ونوضح أبرز استخداماتها والأسباب وراء اعتبارها من أسهل لغات البرمجة. 1. لغة بايثون تعد لغة بايثون واحدة من لغات البرمجة الأكثر شيوعًا على مستوى العالم، وتزداد شعبيتها بين أوساط المبرمجين مع مرور الوقت لكونها لغة سهلة متعددة الأغراض يمكن من خلالها إنشاء مواقع الويب وتطبيقات الحاسوب والألعاب وتطبيقات الذكاء الصنعي …إلخ. تعتبر لغة بايثون من أسهل لغات البرمجة التي ينصح المبتدئون بتعلمها لكونها تستخدم صيغة بسيطة تحاكي اللغة الإنجليزية في كتابة التعليمات البرمجية، وهي لا تستخدم الأقواس ما يجعل قراءتها وفهمها أسهل من الشيفرات البرمجية للغات البرمجة الأخرى. فضلًا عن كونها لغة مفتوحة المصدر وتملك مجتمع دعم كبير ونشط وتملك عددًا هائلًا من المكتبات التي تخدم أغراضًا مختلفة وتوفر موردًا غنيًا لأي شخص يرغب بالبرمجة باستخدامها. على سبيل المثال لكتابة برنامجك الأول في لغة بايثون والذي يطبع عبارة Hello world على الشاشة كل ما عليك هو كتابة سطر برمجي وحيد كالتالي: print("Hello world") في حين يكون الكود المكافئ للكود أعلاه في لغة أصعب مثل "C#" بالشكل التالي: using System; public class HelloWorld { public static void Main(string[] args) { Console.WriteLine ("Hello World"); } } لابد أنك لاحظت من هذا المثال البسيط مدى بساطة لغة بايثون وسهولة كتابة التعليمات فيها ما يجعلها من أسهل لغات البرمجة على الإطلاق. إذا كنت ترغب بتعلم لغة باثيون توفر لك أكاديمية حسوب دورة تطوير التطبيقات باستخدام لغة Python باللغة العربية التي تبدأ معك من أساسيات اللغة وصولًا إلى تطوير تطبيقات ويب احترافية. توفر أكاديمية حسوب أيضًا كتابًا لتعلم لغة بايثون وهو كتاب البرمجة بلغة بايثون كما ستجد في عشرات المقالات والدروس المنوعة حول تعلم بايثون من قسم بايثون. 2. لغة جافاسكربت جافاسكربت هي لغة برمجة مخصصة لتطوير الويب تتيح لك تضمين ميزات متقدمة على صفحات الويب، فمن خلالها يمكنك تحويل صفحات الويب الثابتة إلى صفحات تفاعلية نابضة بالحياة، كإضافة الصور المتحركة والنوافذ المنبثقة والتحكم في الرسومات والوسائط المتعددة …إلخ. تعد جافاسكربت من لغات البرمجة الأكثر شعبية في العالم وهي مطلوبة بشدة في سوق العمل لكونها إحدى التقنيات الأساسية للويب بالاشتراك مع HTML و CSS التي تستخدم في كل مكان على الويب. تعد لغة جافاسكربت من أسهل لغات البرمجة للتعلم لكونها عالية المستوى يمكنك اختبارها وتشغيلها مباشرة وبكل سهولة في متصفح الويب وتجربة تأثيرها على عناصر صفحات الويب. لذا ينصح بها لأي مبتدئ يرغب في تطوير مواقع الويب أن يتعلم تطوير التطبيقات باستخدام لغة JavaScript لاسيما أن استخدامها لم يعد يقتصر على تطوير الواجهات الأمامية Frontend فحسب بل يمكنك من خلال جافاسكربت تطوير الواجهات الخلفية Backend أيضًا وبناء تطبيقات رائعة تعمل على الخادم باستخدام أطر عمل مخصصة مثل Node.js. قبل أن تتعلم لغة جافا سكريبت سيكون من الأفضل أن تتعلم التقنيات البرمجية الأخرى والسهلة التعلم والتي تشكل مع جافاسكربت وحدة متكاملة مثل لغة HTML و CSS. ننصح أيضًا لتعلم جافاسكربت بكتاب البرمجة بلغة جافاسكربت واطلع على توثيق جافاسكربت على موسوعة حسوب. لغة HTML قبل أن نناقش أسباب اعتبار HTML أسهل لغة ينصح بتعلمها للمبتدئين، دعونا نجيب على التساؤل التالي "هل HTML لغة برمجة؟" الجواب لا! HTML ليست لغة برمجة من الناحية الفنية لكونها لغة غير مخصصة لإعطاء التعليمات للحاسوب أو إجراء العمليات الحسابية والمنطقية، بل تعتبر "لغة توصيف" Markup language مستخدمة في تطوير الويب وهي إحدى اللبنات الأساسية لصفحات الويب. تقوم HTML بتوصيف البيانات وتغليفها داخل وسوم خاصة تحدد هذه البيانات وتوضح للمتصفح الغرض منها كي يتمكن المتصفح من قراءة هذه البيانات والتمييز بينها مثل تحديد العناوين والفقرات والصور والروابط والجداول …إلخ. وعرضها بناء على هذا الوصف. وبالرغم من أن HTML لا تعتبر لغة برمجة، إلا أن تعلمها وإنشاء صفحات مواقع الويب باستخدامها يعتبر خطوة أولى سهلة يمكنك القيام بها لبدء تعلم تطوير الويب وتكمن سهولتها في اعتمادها بنية بسيطة تعتمد على الوسوم "tags"، التي تحدد من خلالها كيفية عرض مختلف العناصر على صفحة الويب بطريقة مفهومة لا تتطلب منك أي خبرة فنية مسبقة. على سبيل المثال كود HTML التالي يصف للمتصفح طريقة عرض عنوان بمستوى ثانٍ "Heading 2" وقائمة مرتبة "Ordered list": <H2>أسهل لغات البرمجة</H2> <OL> <LI>HTML <LI>CSS <LI>Python <LI>Ruby <LI>Java <LI>Javascript <LI>PHP <LI>C++ </OL> كما تلاحظ الكود بديهي وسهل الفهم وسيعرضه المتصفح بالشكل التالي: للمزيد، ارجع إلى مقال تعلم لغة HTML. لغة CSS إذا كانت لغة HTML تسمح بتوصيف بنية موقع الويب الخاص بك للمتصفح، فإن لغة CSS هي التي تجعل هذه البنية أنيقة ومنسقة وجميلة المظهر. CSS هي اختصار لـ Cascade Styling Sheets وهي كذلك لا تعد لغة برمجة بالمعنى الدقيق، بل تعد لغة وصفية تستخدم لتنسيق عناصر لغة HTML. حيث تضيف لغة CSS تنسيقات للعناصر التي توصفها لغة HTML مثل تحديد أنواع الخطوط المستخدمة في فقرة ما أو ألوان النصوص في فقرات الموقع أو محاذاة العناصر وتخطيطها مما يجعل الموقع أكثر جمالية. على سبيل المثال، لتغيير لون ونوع الخط المستخدم في عناصر HTML السابقة، وتغيير الهوامش الداخلية والخارجية للقائمة سنكتب بعض قواعد CSS لتنسيقها كالتالي: H2 { color: blue; font-family: 'tahoma', serif; } OL { list-style-type: none; margin:2; padding: 2; color: gray; } ستظهر القائمة أعلاه بعد التنسيق بالشكل التالي: كما ترى من الكود أعلاه فاللغة بسيطة للغاية، وصياغة تعليماتها وقواعدها الأساسية سهلة الفهم لاسيما عند إجراء تنسيقات بسيطة وأساسية لعناصر صفحة الويب، لكن بالطبع إذا أردت التعمق في تصميم الويب وتعلم أكثر من مجرد التنسيقات البسيطة وتطوير واجهات مستخدم احترافية وجذابة بصريًا فستحتاج للغوص في خصائص تفصيلية أكثر صعوبة ودقة ودمجها مع لغة HTML وأيضًا لغة جافاسكربت. دورة تطوير واجهات المستخدم ابدأ عملك الحر بتطوير واجهات المواقع والمتاجر الإلكترونية فور انتهائك من الدورة اشترك الآن 3. روبي Ruby تعد لغة روبي لغة برمجة عالية المستوى وهي مفتوحة المصدر وتدعم نمط البرمجة كائنية التوجه OOP ومرنة للغاية. ولكونها لغة برمجة متعددة الأغراض يمكنك من خلال تعلمها إنشاء تطبيقات منوعة مثل تطبيقات سطح المكتب ومواقع الويب، كما يمكنك استخدامها لاستخلاص بيانات صفحات الويب Web scraping والزحف إليها وهو أمر مهم لتحسين محركات البحث وفهرسة المواقع. تمتلك لغة روبي بنية بسيطة تتطلب كتابة القليل من الشيفرات البرمجية لإنجاز المهام المطلوبة ما يجعلها واحدة من أسهل لغات البرمجة في التعلم والتي ينصح بها للمبتدئين. فلكتابة برنامجك الأول الذي يطبع عبارة Hello World على الشاشة في هذه اللغة كل ما عليك هو كتابة سطر برمجي واحد كما يلي: puts "Hello World" تجدر الإشارة هنا لأن لغة روبي رغم بساطتها وسهولة كتابة تعليماتها، إلا أنها قد تصبح أكثر تعقيدًا عندما تحاول تنفيذ أوامر احترافية ومتقدمة أكثر، بكلام آخر من السهل تعلم روبي لكن من الصعب احترافها. إذا لم تكن لديك أي خلفية برمجية وكنت مهتمًا بتعمل لغة روبي من الصفر وصولًا للاحتراف فيمكنك اتباع دورة تطوير تطبيقات الويب باستخدام لغة Ruby التي توفرها أكاديمية حسوب وبناء تطبيقات متنوعة كالألعاب وتطبيقات إدارة المحتوى والشبكات الاجتماعية. كما ستتعلم إطار عمل Ruby on Rails المكتوب بلغة روبي والذي يساعدك على بناء تطبيقات ويب فعالة واحترافية. 4. سي C تعد لغة C واحدة من أقدم لغات البرمجة وهي لغة برمجة إجرائية متعددة الأغراض تم تطويرها عام 1972 وتتمتع إلى اليوم بشعبية كبيرة. تعتبر لغة C من أسهل لغات البرمجة تعلمًا لكونها تستخدم فقط 32 كلمة وأسلوب بناء الجمل فيها بسيط ومفهوم، كما توفر C مجموعة غنية من المكتبات التي تساعد المبرمج على اختصار كتابة الكثير من الأكواد وتشغيل التعليمات البرمجية بسهولة، ولكونها لغة عريقة ومعروفة على نطاق واسع فإن أي مشكلة تواجهها ستجد حلها بسهولة على شبكة الإنترنت. لهذا السبب يتعلمها معظم المبرمجين قبل الانتقال إلى لغة أكثر تقدمًا. فإذا تعلمت لغة C سيكون السهل عليك تعلم جميع لغات البرمجة الأخرى مهما بلغت درجة صعوبتها بسرعة أكبر، وستتمكن من تطوير وبرمجة تطبيقات سطح المكتب والألعاب وبرامج أنظمة التشغيل واللوحات الإلكترونية الصغيرة مثل أردوينو وراسبيري باي وغيرها من البرامج المنوعة. لكتابة برنامج بلغة "C" يطبع عبارة Hello World على الشاشة سيكون الكود كما يلي: #include <stdio.h> int main() { printf("Hello world"); return 0; } قد تتساءل "ماذا عن تعلم لغة C++؟" في الواقع بالرغم من كون C++ واحدة من أكثر لغات البرمجة شيوعًا وتتمتع بأداء عالي وميزات قوية وتوسع لغة C وتضيف لها مفاهيم البرمجة كائنية التوجه OOP، وتستخدم من قبل كبرى شركات التكنولوجيا العملاقة إلا أنها لغة صعبة وبناء الجمل فيها معقد لذا لا ينصح للمبتدئين البدء بها لتعلم البرمجة بل تبدأ الخطوات أولًا بتعلم لغة C ثم تنتقل إلى لغة C++. 5. جافا Java تعد لغة جافا واحدة من لغات البرمجة الأشهر عالميًا، وهي لغة عالية المستوى ومتعددة الاستخدامات، وتتميز بكونها واضحة ومنظمة بشكل جيد وهي تستند إلى لغة سي في أسلوب كتابة التعليمات البرمجية "C-like". تعتبر جافا خيارًا جيدًا للبدء بتعلم البرمجة فهي تمتلك العديد من الميزات القوية وتملك عددًا كبير من المكتبات مفتوحة المصدر وتستخدم على نطاق واسع، وبتعلمها ستتمكن إنجاز مهام متنوعة مثل برمجة مواقع الويب وتطبيقات الجوال والأنظمة المصرفية وأنظمة إدارة علاقات العملاء "CRM" وتطبيقات البيانات الضخمة. سيكون برنامجك الأول بلغة جافا لطباعة عبارة الترحيب Hello World على الشاشة كما يلي: class MyClass{ public static void main(String args[]) { System.out.println("Hello World"); } } ما يجعل لغة جافا سهلة التعلم هو كونها تشبه لغة C وهي لغة مستقرة تعتمد البرمجة كائنية التوجه التي تستخدم الأصناف والكائنات بشكل أساسي لتنفيذ المهام، كما أنها لغة واسعة الانتشار وتوفر الكثير من الموارد للمتعلمين الجدد، ففي حال قررت تعلم هذه اللغة ستجد مجتمع دعم كبير من المطورين عبر الإنترنت وستحظى بالكثير من موارد التعلم المجانية. لغة كوتلن Kotlin إذا كنت لا تفضل تعلم لغة جافا وتجد تعليماتها طويلة وعصية على الفهم، فيمكنك بدلًا من ذلك تعلم لغة البرمجة كوتلن Kotlin، فلغة كوتلن هي من أسهل لغات البرمجة الحديثة نسبيًا فقد ظهرت عام 2011 من قبل شركة JetBrains وهي ذات الشركة التي طورت بيئة التطوير المتكاملة IntelliJ IDEA لتطوير جافا. لاحظ هنا أن برنامج طباعة Hello World على الشاشة بلغة كوتلن يكتب بشكل أكثر اختصارًا من مكافئة في جافا: fun main(args:Array){ println("Hello World"); } من أبرز الفروقات بين لغة جافا ولغة كوتلن هو أن الشيفرات البرمجية في كوتلن أكثر إيجازًا وتعبيرًا من نظيرتها في جافا، كما أن جافا هي في الأساس لغة كائنية التوجه بينما تدعم كوتلن مفهوم البرمجة الوظيفية وهي تعتبر اليوم منافسًا حديثًا لجافا لاسيما في تطوير تطبيقات أندرويد. ولكونها حديثة فهي لا تملك نفس المستوى من الدعم الذي تتلقاه جافا وقد لا تجد الكثير من مصادر التعلم العربية لها، ورغم ذلك تكتسب كوتلن شهرة وشعبية بالتدريج بين المبرمجين العرب في الآونة الأخيرة ولها مستقبل واعد ويمكنك البدء بتعلمها وتطوير مشاريعك البرمجية بها لاسيما إذا كنت تنوي التخصص في مجال تطوير تطبيقات الهاتف الجوال. يمكنك الاطلاع على الدروس والمقالات حول لغة كوتلن التي توفرها أكاديمية حسوب وتقرر إن كانت لغة مناسبة لأهدافك في التعلم وعلى توثيق لغة كوتلن في موسوعة حسوب. 6. لغة GO لغة GO أو Golang هي لغة برمجة حديثة نسبيًا طورتها جوجل عام 2007 من أجل تطوير البرامج بسهولة وسرعة، وهي تستخدم بشكل أساسي لتطوير تطبيقات الويب وواجهات برمجة التطبيقات. اكتسبت اللغة شعبية كبيرة بسرعة في أوساط المبرمجين لكونها بسيطة وسهلة القراءة وتملك قواعد سهلة وميزات بسيطة وبحسب المطورين تعتبر لغة GO هي لغة C للقرن الحادي والعشرين، وهي منتشرة اليوم مدعومة على نطاق واسع، وتستخدمها شركات كبيرة ومعروفة مثل جوجل ودروب بوكس Dropbox وأوبر بفضل أدائها السريع والاحترافي. ما يجعل لغة جو واحدة من أسهل لغات البرمجة هو أن عدد الكلمات المفتاحية في اللغة ضئيل مقارنة بباقي اللغات، كما أنها لا تحتوي على حلقة while ولا تدعم البرمجة الكائنية التوجه بالطريقة المعهودة في باقي لغات البرمجة، والهدف من هذه المحدودية جعلها لغة بسيطة ومباشرة وسريعة الإنتاجية. ورغم بساطتها فهي قادرة على تلبية احتياجات المبرمجين كما أنها سريعة جدًا في التشغيل والتنفيذ. يمكنك كتابة برنامجك الأول لطباعة عبارة Hello World بلغة GO بعبارات بسيطة ومفهومة كما يلي: package main import "fmt" func main() { fmt.Printf("Hello World!") } من السهل تعلم لغة جو إذا كنت معتادًا بالفعل على لغات مثل Java و C# ،بالرغم من أن بناء الجمل سيختلف قليلًا في بعض المواضع عن لغات البرمجة المعروفة لكنك ستألف هذه الاختلافات وتعتادها بسرعة. إذا كنت مهتمًا بتعلم لغة جو، يمكنك مطالعة العديد من الدروس المفيدة حول لغة GO. ومنها سلسلة مقالات البرمجة بلغة Go 7. لغة PHP لغة PHP هي لغة برمجة مفتوحة المصدر ظهرت عام 1990 وتستخدم بشكل أساسي في تطوير الويب فمعظم مواقع وتطبيقات الإنترنت اليوم تعتمد في تطوير واجهاتها الخلفية على لغة PHP. تعتبر PHP لغة سهلة التعلم للمطورين المبتدئين فهي بسيطة ومرنة في الاتصال مع قاعدة البيانات وسيكون تعلمها بديهيًا إذا كانت لديك خلفية سابقة في لغات البرمجة. ولكونها تحظى بشعبية كبيرة بين مطوري الويب فهي تمتلك العديد من مجتمعات الدعم عبر الإنترنت وتوفر الكثير من موارد التعلم المجانية مما يساعدك على العثور على إجابات على كافة الأسئلة التي تواجهك في رحلة التعلم. تجدر الإشارة إلى أن لغة PHP قد تكون غير مناسبة لتطبيقات الويب الكبيرة، كما أن شعبيتها قد انخفضت قليلًا في السنوات الأخيرة، لكنها لا زالت تستحق التعلم، فهي تتطور باستمرار وتضاف إليها ميزات جديدة مثل البرمجة كائنية التوجه، وتدعم أطر عمل رائعة مثل Laravel و Symfony وتستخدم في بناء نظم إدارة المحتوى الأكثر شهرة عالميًا مثل ووردبريس WordPress ودروبال Drupal والتي يوفر لك تعلمها فرص عمل كبيرة في مجال تطوير الويب. توفر أكاديمية حسوب دورة تطوير تطبيقات الويب باستخدام لغة PHP التي تمكنك من تعلم تطوير مواقع ويب احترافية بتقنيات وأطر عمل مختلفة كما تتضمن العديد من المقالات الاحترافية المفيدة حول تعلم لغة PHP. 8.لغة بيرل Perl لغة البرمجة بيرل هي لغة برمجة عالية المستوى ومفتوحة المصدر مشتقة من لغة البرمجة C، طُوِّرت اللغة بداية لمعالجة الملفات والنصوص، لكنها أصبحت تستخدم اليوم كلغة عامة الأغراض وتصلح لإنجاز مجموعة واسعة من المهام. تعتبر لغة بيرل من أسهل لغات البرمجة للتعلم لكونها مرنة وقابلة للتوسع ويمكن استخدامها في تطوير أي نوع من التطبيقات البرمجية. وتعتمد بيرل شعارًا خاصَا بها وهو "There's More Than One Way To Do It" والذي يعني أن لدى المبرمج أكثر من طريقة للقيام بالأمر. سيكون برنامجك الأول بلغة "بيرل" لطباعة Hello World على الشاشة بسيطًا جدًا كما يلي: print "Hello World!"; بتعلم لغة بيرل ستتمكن من تطوير أي برامج ترغب بها كتطبيقات إدارة النظم وقواعد البيانات وتطبيقات الواجهات الرسومية والشبكات وتطبيقات الويب …إلخ. 9. لغة R طورت لغة R عام 1993 وهي لغة مخصصة للدارسين والباحثين في مجال تحليل البيانات والإحصاء وتدعم خوارزميات تعلم الآلة مثل الانحدار والتصنيف وأشجار القرار …إلخ. تكمن قوة هذه اللغة في كونها مفتوحة المصدر ومتوافقة مع جميع أنظمة التشغيل وتوفر الكثير من المكتبات والحزم المتعلقة بالإحصاء وتساعد على اختصار الكثير من التعليمات البرمجية، وهي لغة تتطور وتحدث باستمرار وتملك مجتمع دعم قوي. لذلك ينصح بتعلم هذه اللغة للمبرمجين الراغبين بتطوير الأدوات الرياضية والإحصائية أو تطيقات الذكاء الصناعي أو تطبيقات تحليل البيانات على وجه الخصوص، وليست الخيار الأسهل للبدء بتعلم البرمجة إذا كانت لك أهداف أخرى للتعلم. على سبيل المثال لطباعة عبارة Hello World بلغة "R" كل ما عليك هو كتابة السطر البرمجي التالي: print("Hello World!") لكن سهولة وقوة اللغة لا تكمن هنا فحسب، بل تبرز عند الحاجة لتنفيذ العمليات الرياضية، على سبيل المثال لاحظ سهولة كتابة كود برمجي بلغة "R" يقوم بفرز عناصر متجه تصاعديًا وتنازليًا ويجد أكبر وأصغر عنصر في هذا المتجه: x<- c(4,7,10,8,30,6,5,2,4) sort(x) sort(x,decreasing=TRUE) max(x) min(x) يمكنك تعلم المزيد عن هذه اللغة من خلال سلسلة مقالات ودورس أكاديمية حسوب التي تشرح البرمجة باحترافية باستخدام لغة R. 10. لغة Matlab تستخدم لغة ماتلاب بشكل أساسي في التطبيقات الهندسية والعلمية مثل تطبيقات تحليل البيانات ومعالجة الإشارات والصور وأنظمة التحكم والاتصالات اللاسلكية والروبوتات. وهي لغة برمجة مخصصة للاستخدام من قبل الباحثين والدارسين لحل المشكلات الهندسية والعلمية بأسهل طريقة، ويعتمدها ملايين طلاب الدراسات في الكليات والجامعات وكبرى المؤسسات مثل آبل وجوجل و تسلا لكونها تساهم في تسريع وتيرة أعمالهم. توفر ماتلاب ميزات رائعة مثل التوثيق الجيد وامتلاك عدد كبير من المكتبات الخارجية وإمكانية تطوير الأكواد الحسابية وتنفيذ واختبار الخوارزميات الخاصة بك بسهولة، كما أنها تملك قاعدة بيانات كبيرة من الخوارزميات المضمنة التي تسهل معالجة الصور وإنشاء مقاطع فيديو للمحاكاة إضافة لتسهيل مهام تحليل وتمثيل البيانات وغيرها من الميزات التي تجعل منها لغة البرمجة الأولى وربما الوحيدة في مجال الدراسات والأبحاث. تعلم أسهل لغة برمجة مقابل لغة البرمجة التي أريد تعملها قد تقرر تعلم واحدة من أسهل لغات البرمجة التي ذكرناها أعلاه ولكنك تكتشف بعد فترة وجيزة أنها لا تلبي متطلباتك! لذا قبل أن تحدد أسهل لغة برمجة كي تتعلمها من الضروري أن تحدد سبب رغبتك في تعلم البرمجة، وما الذي تريد أن تحققه من تعلمها، وما هي الأهداف التي تريد الوصول لها. فتحديد أهدافك يساعدك على تحديد مسار التعلم الصحيح واختيار اللغة المناسبة التي تمكنك من تحقيق هذه الأهداف. فإذا كنت ترغب على سبيل المثال في تطوير تطبيقات للهاتف الجوال، فعليك أن تتعلم لغة البرمجة المناسبة لهذا الغرض مثل جافا أو دارت، كما يتوجب عليك كذلك أن تمتلك المعرفة الكافية عن نظامي التشغيل iOS و Android. أما في حال كنت تريد أن تصبح مطور مواقع ويب، فعليك أن تتعلم أولًا لغة HTML ولغة CSS وإن كانت هذه التقنيات ليست لغات برمجة بالمعنى الدقيق كما سنشرح بعد قليل، إلا أن تعلمها يعتبر أحد المتطلبات الأساسية لتعلم تطوير المواقع ثم تتعلم لغات برمجة المواقع المناسبة مثل جافاسكربت أو PHP. وتذكر أن صعود السلم يكون درجة درجة! لذا بعد أن تقرر اللغة التي تريد تعلمها احرص على إتقان أساسيات البرمجة بهذه اللغة، وابدأ بكتابة برامج وتطبيقات بسيطة، ثم انتقل بالتدريج إلى مواضيع أكثر تعقيدًا ولا تستعجل تحقيق نتائج مبهرة وإنجاز تطبيقات احترافية من بداية تعلمك. وبكل تأكيد لن تتعلم إن لم تطبق! فمهما قرأت من دروس واستمتعت لمقاطع تعليمية حول البرمجة سيكون هذا جيدًا بلا شك لكن لمرحلة معينة فلن تتقن ما تعلمته إلا إذا وضعت كل هذه المعلومات في حيز التنفيذ وتعلمت كيف تصحح الأخطاء البرمجية. وللمزيد يمكنك مطالعة مقال كيف تتعلم البرمجة: نصائح وأدوات لرحلتك في عالم البرمجة. في الختام تذكر أن تعلم البرمجة قد لا يكون أمرًا سهلًا في البداية. كما أن أول لغة برمجة تتعلمها ستكون بالنسبة لك أصعب لغة حتى لو كانت من أسهل لغات البرمجة في العالم، لذا يتطلب منك تعلمها التحلي بالصبر والتدرب على طريقة التفكير كمبرمج واكتساب مهارات حل المشكلات، بعدها يكون أمر الانتقال إلى أي لغة برمجة وتعلمها أكثر سهولة. لذا من الأفضل عندما تبدأ تعلم أي لغة برمجة أن تختار أسهل لغة برمجة تلبي أهدافك من التعلم، وتمتلك مجتمع دعم كبير وموارد تعلم جيدة. وتذكر أنك لست مضطرًا للبقاء أسيرًا لأي لغة برمجة، ويمكنك التبديل إلى أي لغة أخرى في أي وقت. اقرأ أيضًا مجالات البرمجة تعرف على أعلى تخصصات البرمجة أجرا قواعد البرمجة ببساطة للمبتدئين تعرف على أشهر لغات برمجة الألعاب1 نقطة
-
لا يختلف اثنان على أهمية تعلم أساسيات البرمجة، فالبرمجة هي مهنة الحاضر والمستقبل، وهي تعتبر أحد المهارات الأساسية في عصرنا الذي بات يعتمد على التقانة في جميع جوانبه، فضلًا عن أن البرمجة قد أصبحت مادة أساسية في المناهج الدراسية في العديد من الدول بدءًا من المراحل الابتدائية. إذا اتخذت قررًا بتعلم أساسيات البرمجة من الصفر للاحتراف فهذا بلا شك قرار صائب، فالبرمجة توفر لك الكثير من فرص العمل، وتوسع مداركك، وتعزز تفكيرك النقدي، كما أنها تكسبك القدرة على حل المشكلات التي تواجهك بكفاءة أكبر، والأمر الجيد أن البرمجة تتميز عن غيرها من المجالات بكونها متاحة للجميع، ويمكنك تعلمها بشكل ذاتي بعيدًا عن أروقة الجامعات الطويلة. نشرح في مقال اليوم أساسيات البرمجة، ونستعرض أهم الأدوات التي تحتاجها كمبرمج، ونبين مفاهيم البرمجة الأساسية التي تشترك فيها معظم لغات البرمجة، وأهم المبادئ التي يمكنك اتباعها لتبرمج كالمحترفين. ما هي البرمجة؟ البرمجة باختصار هي إعطاء التعليمات لجهاز الحاسوب لينفذها باستخدام إحدى لغات البرمجة، ويتلقى الحاسوب هذه التعليمات ويترجمها ويفهمها وينفذها، ويُطلق على تسلسل التعليمات المكتوبة باستخدام لغة برمجة والتي تنجز مهمة محددة اسم برنامج. فنحن البشر نتواصل فيما بيننا بلغاتنا الطبيعية كالعربية أو الإنجليزية، أما الحاسوب فيحتاج لاستخدام لغة برمجة خاصة للتواصل معه، وعالم لغات البرمجة شامل ومنوع فهناك المئات من لغات البرمجة حاليًا، ونشير إلى أن لغة البرمجة هي لغة وسيطة بيننا وبين الحاسوب فحتى الحاسوب لا يفهم لغة البرمجة التي نكتبها بل تُحول كل لغة نكتبها إلى لغة يفهمها الحاسوب عبر أداة تحويل وتدعى اللغة التي يفهمها الحاسوب بلغة الآلة Machine Language التي تتكون من أصفار وواحدات. قبل أن تتعلم أساسيات البرمجة: حدد وجهتك قد تكون حددت لغة البرمجة التي تريد تعلمها وتبحث عن تعلم أساسيات هذه اللغة لذا وصلت إلى هنا، أو لم تحددها بعد، ولكن عمومًا تشترك كل لغات البرمجة بأساسيات واحدة إن تعلمتها سيسهل عليك التعامل مع أي لغة برمجة. قرار تعلم أساسيات البرمجة يشبه قرار الذهاب في إجازة، فأنت لن تذهب في إجازة دون أن تحدد الوجهة التي تريد الذهاب لها، وبناء على وجهتك تحدد مسارك الذي ستسلكه وتجهز مستلزماتك. وبالتالي السؤال الذي يجب أن تطرحه قبل أن تقرر تعلم أي لغة برمجة هو ما هو هدفي النهائي من تعلم البرمجة؟ وبناء على إجابتك تحدد مسار التعلم الصحيح واللغات والأدوات التي عليك تعلمها. ركز في البداية على لغة رئيسية واحدة تتعلم بها أساسيات البرمجة، ثم سيسهل عليك تعلم لغات أخرى حسب الضرورة، حيث الأساسيات والمفاهيم واحدة ولن تختلف من لغة إلى أخرى بل ما يختلف هو طريقة كتابة كل لغة والميزات التي توفرها للمبرمج، وبعبارة أخرى، الخطوة الصعبة هي الخطوة الأولى وهي خطوة تعلم أساسيات البرمجة. وتذكر أن تعلم البرمجة يحتاج لبعض الصبر والجهد، لا سيما عند تعلم إحدى لغات البرمجة لأول مرة كما أشرنا ويحتاج إلى تطبيق أيضًا لأن التعلم النظري شيء والتطبيق شيء آخر ففيه ستواجه الكثير من المشكلات وستتعلم بها حلها وتفاديها تدريجيًا حتى تكون مبرمجًا محترفًا. دورة علوم الحاسوب دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب اشترك الآن أهمية تعلم أساسيات البرمجة تعلم أساسيات البرمجة للمبتدئين يشبه إلى حد كبير تعلم قيادة السيارة، فعندما تجلس خلف مقود السيارة لأول مرة لن تكون قادرًا على القيادة بسلاسة على الفور، بالطبع! تذكَّر كيف تبدأ آنذاك باستكشاف أجزاء السيارة كالفرامل ودواسة البنزين وناقل الحركة، ثم التعرف على المفاهيم والمصطلحات الأساسية المرتبطة بالقيادة، وتلقي الكثير من التعليمات والملاحظات النظرية حول آلية القيادة أكثر من التركيز على القيادة بحد ذاتها. وبعدها تبدأ عملية التدريب على تنفيذ أوامر بسيطة مثل تشغيل السيارة وتحريكها رويدًا رويدًا في مكان مفتوح إلى أن تزداد التعليمات تعقيدًا وتصبح قادرًا على التحكم بالسيارة وقيادتها في كافة الظروف والطرق. بنفس الطريقة ستتعلم البرمجة، حيث عليك أن تتعلم بداية أساسيات البرمجة النظرية، ثم تكتب برامج باستخدام تعليمات بسيطة، ثم تتعلم كيف تكتب التعليمات بطريقة أكثر احترافية، ومع الممارسة والتطبيق ستتمكن من احتراف البرمجة وتطوير برامج متقدمة. وقد شرح مقال كيف تتعلم البرمجة: نصائح وأدوات لرحلتك في عالم البرمجة رحلة تعلم البرمجة بالتفصيل وقدم نصائح مهمة وأجاب على أسئلة شائعة حول تعلم البرمجة فارجع إليه للاستزدادة في هذا الموضوع. احصل على موقع إلكتروني مخصص لأعمالك أبهر زوارك بموقع احترافي ومميز بالاستعانة بأفضل خدمات تطوير وتحسين المواقع على خمسات أنشئ موقعك الآن أدوات مهمة لتعلم أساسيات البرمجة بعد أن تحدد اللغة التي ستتعلمها، تحتاج كخطوة أولى إلى إعداد بيئة التطوير لديك حتى تتمكن من كتابة شيفرة برمجية وتنفيذها كي تتواصل مع الحاسوب بتلك اللغة، والأدوات اللازمة لتعلم أساسيات البرمجة في البداية هي أداتين يحتاج إليهما كل مبرمج: محرر الشيفرة البرمجية أداة تحويل الشيفرة وتنفيذها محرر الشيفرة البرمجية تعتمد معظم لغات البرمجة على أوامر نصية، لذا ستحتاج إلى محرر أكواد لكتابتها، ومحرر الكود هو برنامج لتحرير النصوص مصمم خصيصًا لكتابة وتحرير الشيفرة المصدرية للبرامج، وتتميز بعض المحررات بأنها تتضمن ميزات تسهل كتابة الكود كتمييز الكلمات حسب بناء الجملة، ووضع مسافة بادئة لأسطر التعليمات البرمجية بشكل صحيح. ومن الأمثلة على محررات أكواد Notepad++ لنظام تشغيل ويندوز و gedit أو kate لنظام التشغيل لينكس. ملاحظة: بعض لغات البرمجة الموجهة للمبتدئين تعتمد على واجهات رسومية ولا تحتاج لمحررات نصية مثل لغة سكراتش والتي تدعى أحيانًا لغات برمجة رسومية، وللمزيد يمكنك الرجوع إلى مقال البرمجة باستخدام سكراتش. أداة تحويل الشيفرة وتنفيذها نكتب الكود المصدري عادة بلغة برمجة لا يفهمها جهاز الحاسوب مباشرة كما أشرنا، لذا يجب تثبيت برنامجًا يُحوِّل الشيفرة المصدرية للغة البرمجة بأكملها إلى لغة آلة Machine Code يفهمها الحاسوب ثم ينفذها، ويختلف هذا المُحول من لغة برمجة إلى أخرى ويُسمى إما مُصرِّف Compiler أو مُفسِّر Interpreter وبعض اللغات تحتاج إلى تصريف وآخر إلى تفسير وبعضها يحتاج إلى كلا العمليتين لتحويلها إلى لغة الآلة ثم تنفيذها. لتفهم الفرق بين المُصرِّف والمُفسِّر تخيل أن لديك وصفة مكتوبة باللغة التركية وأنت لا تعرف التركية وتريد أن تحضّرها. في هذه الحالة يمكن أن تطلب من أحدهم أن يترجم لك الوصفة بالكامل للغة العربية ويعطيها لك لتعدها متى ما أردت مستعينًا بهذه النسخة المترجمة Compiled، أو يمكنك أن تكلمه في كل مرة تريد فيها أن تحضر هذه الوصفة وتطلب منه أن يقرأها ويفسرها لك خطوة بخطوة Interpreted. بيئة التطوير المتكاملة IDE يمكنك أن تحصل على المحرر وأداة التحويل والتنفيذ على حدة وتثبتهما على جهازك، أو يمكنك بشكل بديل أن تعتمد على بيئة تطوير متكاملة IDE وهي اختصار العبارة Integrated Development Environment تتضمن كافة الأدوات اللازمة للتعامل مع لغة البرمجة. أمثلة على بيئات تطوير متكاملة: Microsoft Visual Studio NetBeans IntelliJ IDEA يمكنك في بيئة التطوير المتكاملة كتابة التعليمات البرمجية وتعديلها وتصحيحها وتحويلها ثم تنفيذها بسرعة وسهولة كل ذلك من مكان واحد، إذ توفر لك كافة الأدوات اللازمة لتكتب وتنفذ برامج بلغة معينة، كما توفر ميزات تساعدك في تطوير البرامج مثل تصحيح الأخطاء البرمجية، والإكمال التلقائي للتعليمات، وللتعرف أكثر على بيئة التطوير المتكاملة، يمكنك الرجوع إلى مقال مدخل إلى بيئة التطوير المتكاملة IDE. ملاحظة: يمكنك الاعتماد على مترجمات أو بيئات عمل برمجية متوفرة على الإنترنت، حيث توفر العديد من المنصات إمكانية كتابة وتنفيذ البرامج على متصفح الويب بدلًا من تثبيت وإعداد البرامج على الحاسوب المحلي. أساسيات البرمجة للمبتدئين تتنوع لغات البرمجة وتعدد استخداماتها إلا أنها تشترك في مجموعة من الأساسيات والمفاهيم، وتعلم هذه المفاهيم يمكّنك من التآلف من أي لغة برمجة، وإنجاز البرامج باستخدامها بمرونة أكبر، وأهم هذه الأساسيات: المتغيرات Variables الثوابت Constants أنواع البيانات Data types الكلمات المفتاحية Keywords التعليقات Comments بنى التحكم Control Structures الدوال Functions هياكل البيانات Data structure التكرار Iteration التعاود Recursion الكائنات Objects والأصناف Classes الوحدات Modules والمكتبات Libraries نشرح في الفقرات التالية كلًا من هذه الأساسيات البرمجية بمزيد من التفصيل، ونرفق بعض الأمثلة التوضيحية بلغات برمجة مختلفة. المتغيرات تستخدم المتغيرات Variables في البرمجة بشكل مشابه لاستخدامها في الرياضيات، فهي تخزن قيم البيانات من نوع محدد، ويمكن للمتغير احتواء قيمة واحدة في المرة الواحدة، فمتى ما وضعت فيه قيمة جديدة فإن القيمة السابقة المخزنة فيه سوف تحذف تلقائيًا. يمكن تشبيه المتغير بصندوق مفتوح في ذاكرة الحاسوب له اسم وعنوان خاص به، حيث يمكن إدخال القيم وإخراجها من هذا الصندوق حسب الطلب. وتسمى عملية وضع قيمة في المتغير بشكل مباشر الإدخال Input أو الإسناد Assignment أو أحيانًا الضبط Set، كما تسمى عملية الحصول على هذه القيمة وعرضها الإخراج Output أو الجلب Get. وتجدر الإشارة لأن بعض أنواع المتغيرات تكون محدودة الوصول، بمعنى أنها لا تسمح لك بالوصول المباشر لها سواء لتخزين البيانات ضمنها أو الحصول على القيم المخزنة فيها إلا عبر وسيط ويُسمى هذا الوسيط باسم ضابط setter وجالب getter على التوالي، والغرض من هذه العملية حماية المتغيرات من تعديلات غير مرغوبة كما سنوضح لاحقًا في فقرة الكائنات والأصناف التي أكثر ما تُستخدم فيها. لتعريف متغير في لغة البرمجة C++ عليك ذكر اسم المتغير ونوع البيانات التي تريد تخزينها في هذا المتغير وإسناد قيمة أولية فيه، على سبيل المثال لتعريف متغير باسم a لتخزين العدد الصحيح 10 بداخله نكتب ما يلي: int a = 10; كما يمكنك تعريف المتغير دون إسناد القيمة له في البداية وإسنادها لاحقًا بالشكل التالي: int a; a = 10; في حين لا تملك لغة بايثون أمرًا محددًا لتعريف المتغيرات، كل ما عليك هو كتابة اسم المتغير واستخدام علامة مساواة متبوعة بقيمة المتغير، وسوف تكتشف اللغة تلقائيًا نوع المتغير وحجم الذاكرة المناسب له كما يلي: a = 10 الثوابت تشير الثوابت Constants إلى قيمة أو كمية ثابتة لا نحتاج لأن نغيرها أو نعدلها أبدًا أثناء تنفيذ البرنامج، مثل سرعة الضوء، وعدد الدقائق في الساعة، والعدد Pi الذي يمثل نسبة محيط الدائرة إلى قطرها، وتسارع الجاذبية الأرضية، ومعدل نجاح الطالب وما إلى ذلك. فالثوابت البرمجية بمثابة صندوق تغلقه بإحكام بعد وضع قيمة فيه ولا يسمح لك بتغييرها في كود البرنامج، فبعد تحديد قيمة الثابت يسمح لك فقط بالوصول إلى قيمته، بخلاف المتغير الذي يمكنك الوصول إلى قيمته وإعادة تعيينها وتعديلها حسب حاجتك. لتعريف الثوابت في لغة C++ نستخدم الكلمة المفتاحية const ثم نكتب نوع البيانات واسم الثابت وقيمته كما يلي: const float PI = 3.14; const float GRAVITY = 9.8; const float SUCC_RATE = 0.5; في حين لا تميز بعض اللغات مثل لغة بايثون بين تعريف الثوابت والمتغيرات، حيث يمكنك تعريف الثوابت والتعامل معها كما تعرّف أي متغير، وتلتزم أنت بعدم تغيير قيمتها في سياق البرنامج، كما يمكنك التصريح الثوابت في ملف مختلف واستيرادها في برنامجك لتمييزها عن المتغيرات. PI = 3.14 GRAVITY = 9.8 ملاحظة: يشيع في أوساط المبرمجين تسمية الثوابت بحروف أجنبية كبيرة لتمييزها عن المتغيرات كما فعلنا في الأمثلة السابقة. أنواع البيانات أنواع البيانات Data types في لغات البرمجة هي عملية تحديد نوع وحجم القيمة التي يمكن أن تخزن في المتغير والتي يترتب عليها تحديد العمليات التي يمكن تطبيقها على هذه المتغير من طرف لغة البرمجة مثلًا السماح بتطبيق عملية الجمع والطرح على نوع الأعداد والسماح بعملية البحث والاستبدال على النصوص وهكذا. توفر لغات البرمجة العديد من أنواع البيانات مثل: الأعداد التي تنقسم إلى أعداد صحيحة integer numbers وأعداد عشرية floating point numbers، والمحارف Characters، والسلاسل النصية Strings، والقيم المنطقية Boolean …إلخ. على سبيل المثال في لغة البرمجة C++"" إذا كنت تحتاج في برنامجك إلى تخزين العمر، ستحتاج لمتغير من نوع بيانات عدد صحيح، ويمكنك تعريف هذا المتغير أو التصريح عنه باستعمال الكلمة المفتاحية int كما يلي: int age; فعندما استخدمنا الكلمة int هنا أخبرنا مترجم اللغة أن هذا المتغير مخصص لتخزين أعداد صحيحة فقط، ليحجز الحجم المناسب له في ذاكرة الحاسوب وينتظر منا إدخال قيم صحيحة فيه فقط، فإذا جربت تخزين نص أو عدد عشري فيه فستحصل على خطأ من أداة التحويل أثناء تحويل البرنامج إلى لغة الآلة وهذا ينطبق على الأمثلة الآتية أيضًا. وإذا احتجت لمتغير مخصص لتخزين قيمة عشرية مثل متوسط درجات الطالب، أو مساحة دائرة استخدم نوع البيانات float لهذا المتغير كما يلي: float avg; ولتعريف متغير مخصص لتخزين محارف مفردة يمكنك أن تستخدم نوع البيانات char كما يلي: char x; x = 'A'; أما لتخزين السلاسل النصية المكونة من عدة محارف فاستخدم نوع البيانات string كما يلي: string str = "This is a C++ string"; ولتخزين القيم المنطقية التي يمكنها أن تحتوي القيمة صواب true أو خطأ false والتي تفيد في اختبار الشروط، استخدم نوع البيانات bool كما يلي: bool con1 = false; bool con1 = true; إن التعامل مع أنواع البيانات أبسط في لغات أخرى مثل لغة بايثون، فأنت لا تحتاج لتحديد نوع بيانات للمتغير قبل استخدامه، لكون اللغة قادرة على استنباط وتعيين نوع بيانات المتغير تلقائيًا بمجرد أن تسند له قيمة ما، فبحسب نوع القيمة التي تسندها تحدد اللغة نوع البيانات المناسب له. إليك بعض الأمثلة على تعريف متغيرات من أنواع بيانات مختلفة في بايثون: v1 = "This is a Python string" #string v2 = 10 #int v3 = 10.33 #float v4 = True #bool لمزيد من المعلومات حول أنواع البيانات في لغات البرمجة، اطلع على مقال دليلك الشامل إلى أنواع البيانات. الكلمات المفتاحية تتضمن أي لغة برمجة مجموعة من الكلمات المفتاحية Keywords أو الكلمات المحجوزة Reserved Words، وهذه الكلمات لها معنى خاص ولا يمكن للمبرمج استخدامها لتعريف المتغيرات مثلًا. ولعلك انتبهت إلى قولنا كلمة مفتاحية على const وعلى int في الأمثلة السابقة في لغة C++ التي كانت كلمات محجوزة مخصصة لتعريف الثوابت البرمجية وأنواع البيانات، كما تعد الكلمتان True و False محجوزتين في بايثون لتمثيل القيمتين المنطقيتين صواب وخطأ على التوالي وقس على ذلك في أي لغة برمجة. وعليك أن تطلع على الكلمات المفتاحية ودلالة كل كلمة وطريقة استخدامها في اللغة التي تريد تعلمها ويكون عادة عددها محدود وبسيطة وقد تتكون من كلمة إنجليزية واضحة أو اختصار لها مثل الاختصار const لكلمة constants ثابت والاختصار init لكلمة integer عدد صحيح ومعرفة مما يتشكل الاختصار يُسهل عليك حفظ الكلمة خصوصًا وبما أن عددها محدود وبسيطة فلا تخف إن كانت لغتك الإنجليزية ضعيفة. التعليقات تعد التعليقات Comments من أساسيات البرمجة، والتعليقات هي عبارة عن نصوص وصفية تضاف للكود البرمجي لتسهيل فهمه وقراءته ويمكن أن تكون بأي لغة مثل اللغة العربية، وهي لا تنفذ في البرنامج حيث أن مترجم اللغة يتجاهلها ويعتبرها فراغات، لكنها مفيدة للمبرمج نفسه ليتذكر ما كتبه عند العودة للبرنامج لاحقًا، كما أنها تساعد أي شخص يقرأ الكود الذي كتبه المبرمج في فهم سير عمل البرنامج والهدف من كتابة تعليمات معينة فيه. تستخدم لغات البرمجة المختلفة أساليب مختلفة لكتابة التعليقات تنحصر عادة بالرموز الثلاثة # أو // أو /* */، على سبيل المثال في لغة C++ يمكنك كتابة التعليقات على سطر واحد بعد الرمز // وكتابة التعليقات متعددة الأسطر بين الرمزين /* */ كما يلي: /* هذا تعليق مكون من عدة أسطر */ //هذا تعليق مكون من سطر واحد أما في لغة بايثون فيمكنك كتابة التعليق أحادي السطر بعد الرمز # وكتابة التعليقات متعددة الأسطر بعد علامتي اقتباس أو ثلاث علامات اقتباس مفردة كما يلي: ''' هذا تعليق مكون من عدة أسطر ''' #هذا تعليق مكون من سطر واحد بنى التحكم تنفذ البرامج عادة بشكل متتابع من بداية الشيفرة إلى نهايتها تعليمة تلو الأخرى، لكن قد تحتاج في بعض الحالات لتغيير مسار التنفيذ وتجاوز بعض التعليمات أو تكرارها، وهنا يأتي دور بنى التحكم Control Structures التي تعتبر من أساسيات البرمجة لكونها تفيد المبرمجين في تحديد الاتجاه أو المسار الذي يجب الانتقال له بناء على عوامل معينة. بالعودة إلى مثال تعلم القيادة الذي ذكرناه بداية، تخيل أنك تسير في طريقك نحو مقر عملك، وصادفت إشارة حمراء أو اعترضتك سيارة إسعاف، ألن تحتاج عندها للتوقف لحين عودة الإشارة إلى اللون الأخضر أو التنحي لجانب الطريق لحين مرور الإسعاف ثم تتابع طريقك المعتاد. بنفس الطريقة تعمل بنى التحكم في الكود البرمجي، فهي تسمح للمبرمج بالتحكم في تدفق تنفيذ البرامج وفق حالات معينة، ومن أهم بنى التحكم البنى الشرطية if statement والبنى التكرارية loop statement. البنى الشرطية أما البنى الشرطية فتمكنك من اختبار شروط محددة قبل تنفيذ الكود البرمجي وتقوم بتنفيذه فقط عند تحقق هذه الشروط، مثلًا إذا كان لديك تعليمات برمجية تتضمن عملية قسمة، يمكنك اشتراط عدم تنفيذ هذه التعليمات عند محاولة القسمة على صفر. على سبيل المثال يقوم البرنامج التالي بلغة C++ بقسمة عددين عشريين ويختبر شرط القسمة على صفر: #include <iostream> using namespace std; int main() { float num1, num2, result; num1=18; num2=0; if (num2 == 0) { cout << "خطأ رياضي أنت تحاول القسمة على صفر"<<endl; } else { result=num1/num2; cout << "The result is "<< result << endl; } return 0; } تختبر التعليمة الشرطية if في الكود أعلاه إن كان المقسوم عليه num2 مساويًا للصفر (الذي يمكن أن يأتي من مواضع مختلفة مثل الطلب من المستخدم تزويدنا بقيمته)، وفي هذه الحالة تعرض العبارة "خطأ رياضي أنت تحاول القسمة على صفر" ولا تنفذ عملية القسمة num1/num2. الكود التالي كود مكافئ للكود السابق لكنه مكتوب بلغة بايثون: num1 = 18 num2 = 3 if num2 == 0: print("خطأ رياضي أنت تحاول القسمة على صفر") else: result = num1/num2 print(result) الأمثلة أعلاه كانت لشروط بسيطة، وستجد في لغات البرمجة أنواعًا عديدة من التعليمات الشرطية مثل if-else التي تمكنك من اختبار الشرط وعكسه، وتعليمة if المتداخلة التي تتضمن شرطًا فرعيًا داخل شرط رئيسي، وتعليمة switch التي تختبر شروط معتمدة على قيمة واحدة. كما ستتمكن من اختبار شروط مركبة من خلال المعاملات المنطقية مثل and و or و not. البنى التكرارية وأما البنى التكرارية أو حلقات التكرار فتمكنك من تكرار تنفيذ تعليمات معينة لعدد محدد أو مشروط من المرات، وتوفر على المبرمجين الكثير من الوقت في كتابة الكود. ستجد في أي لغة برمجة أنواعًا مختلفة من الحلقات مثل حلقات for التي تستخدم عندما تعرف عدد المرات التي تريد فيها تكرار التعليمات قبل التوقف، وحلقات while أو repeat التي تتشابه مع حلقات for لكنها تكرر مجموعة من التعليمات بعدد غير محدد من المرات يعتمد على استيفاء شرط معين. على سبيل المثال، إذا طلب منك أن تكتب برنامج لعرض ناتج ضرب العدد 5 بالأعداد من 1 إلى 10 فلا حاجة لأن تضرب العدد 5 في العدد 1 ثم في العدد 2 وهكذا وصولًا للعدد 10، يمكنك ببساطة كتابة حلقة تكرارية for كما في المثالين التاليين: حلقة for بلغة C++: int num=5; for (int i = 1; i < 11 ;i++) cout << num <<"X" << i << "="<< num*i << "\n"; حلقة for بلغة بايثون: num = 5 for i in range(1, 10): print(num, 'x', i, '=', num*i) الدوال الدوال Functions هي أجزاء مستقلة من الكود البرمجي لها اسم خاص بها وتشبه المصنع في عملها فتأخذ ممن يستخدمها دخلًا (إن وُجد) ثم تجري عمليات معالجة وتعيد إليه الناتج، ويدعى ما يُمرَّر إليها باسم المعاملات Parameters. تُكتب الدالة أو تعرّف مرة واحدة وتصبح بعدها قابلة لإعادة الاستخدام، حيث يمكن للمبرمج استدعاء أو مناداة الدالة في أي موضع في البرنامج مع تمرير قيم بيانات لها أو بدون، على سبيل المثال في حال أردت كتابة كود برمجي يعرض ناتج الضرب لعدد ما في الأعداد من 1 إلى 10 يمكنك تحويل الكود إلى دالة باسم displayMul وسيطها هو العدد المراد ضربه كما يلي: #include <iostream> using namespace std; // تعريف دالة لحساب نانج ضرب أي عدد في الأعداد من واحد لعشرة void displayMul(int num){ for (int i = 1; i < 11 ;i++) cout << num <<"X" << i << "="<< num*i << "\n"; } //استدعاء الدالة في البرنامج الرئيسي int main() { int num1 = 5; displayMul(num1); int num2 = 9; displayMul(num2); return 0; } عرفنا الدالة displayMul في المثال السابق بلغة C++ بكتابة نوع البيانات الذي تعيده الدالة وهو void أي لا شيء لأن الدالة تطبع القيمة ولا تعيد شيئًا، ثم اسمها ثم المعاملات الخاصة بها بين قوسين ()، ثم كتبنا التعليمات التي تقوم بها بين قوسين { }، ولاحظ أن الدالة لا تعيد شيئًا فلا يُشترط أن تأخذ أو تعيد شيئًا بل المهم أن تُنفِّذ عمليةً ما منوطة بها عند استدعائها. إليك أيضًا تعريف الدالة displayMul السابقة نفسها ولكن بلغة بايثون: def displayMul(num): for i in range(1, 10): print(num, 'x', i, '=', num*i) num = 5 displayMul(num) displayMul(9) ملاحظة: لا يمكنك استدعاء أو مناداة دالة في برنامجك إذا لم تقم بتعريفها أولًا، لأنك تحاول استخدام شيء غير موجود، لكن بعض الدوال تكون مضمنة ومعرفة مسبقًا في اللغة Built-in functions، ويمكنك استخدام هذه الدوال فورًا دون الحاجة لتعريفها بنفسك، على سبيل المثال الدالة "getline()"هي دالة جاهزة معرفة في لغة C++ تستخدم لإدخال السلاسل النصية من لوحة المفاتيح، والدالة print() هي دالة جاهزة في لغة بايثون تستخدم لطباعة قيم المتغيرات على الشاشة. هياكل البيانات هياكل البيانات Data Structures هي بنى برمجية مصممة لتضم مجموعة من البيانات أو المتغيرات، وقد تكون هياكل أولية كالأعداد الصحيحة والأعداد العشرية والمحارف كما شرحنا في أنواع البيانات، أو هياكل مركبة يمكن تشبيهها بمجموعة صناديق متلاصقة في ذاكرة الحاسوب باستطاعتها تخزين عناصر أو متغيرات متعددة من نفس نوع البيانات ويمكن لبعض هياكل البيانات أن تتضمن مزيجًا من أنواع بيانات مختلفة. فالمصفوفة Array، والقاموس Dictionary والكائن Object وغيرها أحد أنواع هياكل البيانات الشهيرة، على سبيل المثال يمكنك استخدام المصفوفات عندما تحتاج إلى تخزين مجموعة مكونة من عدة قيم لها نفس النوع في متغير واحد بدلًا من تخزين كل قيمة في متغير منفصل، ويمكنك بعدها تحديد أي عنصر من العناصر الموجودة في المصفوفة والوصول له من خلال موقعه أو فهرسه داخل هذه المصفوفة، وإليك مثال على تعريف مصفوفة لتخزين 5 أعداد صحيحة: في لغة C++: int marks[5] = {50,99,78,66,59}; في لغة بايثون: marks=[50,99,78,66,59] ملاحظة: قد تختلف أسماء هياكل البيانات من لغة برمجة إلى أخرى ففي لغة بايثون لا يُطلق عليها اسم مصفوفة array كما في لغة C++ بل اسم قائمة list حيث تختلف التسميات والمعنى واحد. هنالك العديد من هياكل البيانات التي لا يتسع المقال الحالي لذكرها، لذا ارجع إلى مقال هياكل البيانات لمزيد من التفاصيل. التكرار يعتبر مفهوم التكرار Iteration أحد أهم مفاهيم أساسيات البرمجة، وستحتاج له لاسيما عند التعامل مع هياكل بيانات مركبة في شيفراتك البرمجية مثل المصفوفات، فالتكرار يعني المرور على كل عنصر من عناصر البيانات المركبة على حدة وعلى التوالي لتنفيذ عملية أو مهام محددة عليه، وستجد أن التكرار صفة أيضًا تُسمى iterable تُطلق على أي متغير أو نوع بيانات يمكن المرور عليه وستراها غالبًا في التوثيقات. يمكنك تنفيذ التكرار في لغات البرمجة بطرق مختلفة، لكنه يعتمد بشكل أساسي على استخدام الحلقات التكرارية بأنواعها المختلفة، كما توفر بعض اللغات مكررات Iterators وهي عبارة عن دوال أو عمليات مخصصة تمكنك من المرور على جميع عناصر هياكل البيانات بطريقة منهجية وسهلة. على سبيل المثال للمرور عبر عناصر المصفوفة marks التي عرفناها في الفقرة السابقة وطباعتها في لغة C++ يمكن أن نكتب حلقة for مع استخدام متغير i يمثل تعدادًا نستخدمه كفهرس للوصول إلى كل عنصر من عناصر المصفوفة كما يلي: #include <iostream> using namespace std; int main () { int marks[5] = {50,99,78,66,59}; cout << "The marks are:"; for (int i = 0; i < 5; ++i) { cout << marks[i] << " "; } } أما في لغة بايثون يمكنك المرور عبر عناصر المصفوفة وطباعتها كما يلي: marks=[50,99,78,66,59] for m in marks: print(m) التعاود يعتبر التعاود Recursion أحد المفاهيم البرمجية الأساسية، وهو يعتمد على تقسيم المشكلات البرمجية إلى مشكلات أصغر يمكن حلها بسهولة، ويرتبط هذا المفهوم بالدوال البرمجية، حيث أن الدالة التي تكرر استدعاء نفسها حتى تصل لحالة حدية أو أساسية Base case تجعلها تتوقف عن عملية استدعاء نفسها وتعيد نتيجة معروفة عند هذه القيمة تعرف باسم الدالة التعاودية Recursive Function، وإذا لم تكن هناك حالة حدية تصل لها الدالة فهذا يعني أن الدالة ستكرر استدعاء نفسها إلى مالا نهاية. هذا الأسلوب البرمجي يصلح لحل المسائل التي تملك نمطًا هرميًا والتي يمكن حلها بسهولة عن طريق تحويلها لمسائل فرعية مشابهة أصغر. لكن في حال كان بإمكانك حل مسألة معينة عن طريق الحلقات التكرارية بسهولة فلا توجد ضرورة لاستخدام أسلوب التعاود في هذه الحالة، ولا تقلق إن لم تفهم شيئًا فقد أضفنا مثالًا مع مخطط يوضح لك المفهوم تاليًا. على سبيل المثال مسألة حساب عاملي أو مضروب عدد ما "n!" هي أشهر مسألة تعاودية بطبيعتها، فكما تعرف مضروب العدد 0 هو قيمة معروفة تساوي 1، وبالتالي يمكن اعتبار n=0 هو الحالة الحدية التي يمكن من خلالها حل مسألة المضروب لأي عدد بناء على القاعدة التالية: n! = n * (n - 1) عندما تبلغ قيمة العدد n=0 فسوف يعيد القيمة 1 للدالة وينتهي الاستدعاء المتكرر أو التعاودي لها. إليك مثال على إيجاد مضروب أو عاملي العدد n: بلغة C++: #include <iostream> using namespace std; int factorial(int n) { if (n < 0) { return 0; } else if (n == 0) { return 1; } else { return factorial(n - 1) * n; } } // استدعاء الدالة في البرنامج الرئيسي int main() { cout<< factorial(4); } بلغة بايثون: def factorial(n): if n < 0: return 0 elif n == 1: return 1 else: return n * factorial(n-1) print (factorial(4)) المخطط التالي يوضح طريقة استدعاء الدالة التعاودية وإعادتها للقيمة عند وصولها للحالة الحدية لا تقلق مرة أخرى إن لم تفهمه فهو من المفاهيم المعقدة والمرعبة للمبرمجين المبتدئين، وستفهمه تدريجيًا ولا يمكن أن يتضح بالكامل إلا إن طبقته وحتى رسمته على ورقة أو مخطط كما المخطط السابق. الكائنات والأصناف تعتبر الكائنات Objects والأصناف Classes أحد أساسيات البرمجة كائنية التوجه "OOP" حيث أن الكائنات تعتبر وحدات تتضمن مجموعة من المتغيرات ومجموعة الدوال البرمجية. والصنف Class هو بمثابة نموذج أو مخطط عام لتمثيل الكائنات، يمكن تعريفه واستخدامه لاشتقاق العديد من الأمثلة أو الحالات المختلفة من هذه الكائنات، ولهذا السبب يسمى الكائن نسخة من الصنف "instance". لنأخذ مثالًا من الواقع، يمكنك تعريف صنف يسمى Car لتمثيل السيارة، سيكون لهذه السيارة خصائص مختلفة تميزها كاللون والنوع والطراز وسنة التصنيع والسعر …إلخ. كما سيكون لها أفعال أو سلوكيات تقوم بها كفعل التشغيل وزيادة السرعة وتغيير الاتجاه والتوقف …إلخ. لذا نعرف صنفًا خاصًا يمثل السيارة ونشتق منه نسخ لسيارات مختلفة. برمجيًا يعرف الصنف بداخله متغيرات ودوال، وتحدد المتغيرات الخاصة بالصنف مميزات هذا الصنف بينما تحدد دوال الصنف "class functions" ما الذي يمكن للكائنات القيام به كما يحوي الصنف على دوال خاصة منها دالة تُدعى الدالة البانية "constructor" التي تُستدعى تلقائيًا عند إنشاء واستنساخ كائن من الصنف المُعرَّف ويمكن عبرها تمرير قيم تضبط الكائن الجديد الناتج مثلًا تضبط متغيراته وإليك مثال لتوضيح ذلك. على سبيل المثال، يمكن تعريف صنف يمثل هيكل دائرة، سنعرف لهذا الصنف متغير خاص به أو خاصية تمثل قيمة نصف قطر الدائرة، ودالة بناء تضبط قيمة نصف القطر أثناء إنشاء كل دائرة، ودالة لحساب مساحة الدائرة، ودالة أخرى لحساب محيط الدائرة يمكن استدعاءهما بعد إنشاء كل كائن من الصنف دائرة. المثال التالي يعرف صنف يمثل دائرة بلغة البرمجة C++ ويشتق نسختين أو كائنين مختلفين من هذا الصنف لكل كائن نصف قطر مختلف: #include<iostream> using namespace std; class Circle { const float PI = 3.14; // data members float radius; public: // contractor Circle(float radius) { this->radius = radius; } // member function float Area() { return radius*radius*PI; } float Perimeter() { return 2*radius*PI; } }; int main() { Circle circle1(3); cout << circle1.Area() << endl; cout << circle1.Perimeter() << endl; Circle circle2(4); cout << circle2.Area() << endl; cout << circle2.Perimeter() << endl; return 0; } والمثال المكافئ التالي بلغة بايثون يعرف صنف دائرة ويشتق كائنين منه: #تعريف صنف يمثل دائرة class Circle(): def __init__(self, radius): self.radius = radius def get_area(self): return (self.radius ** 2) * pi def get_perimeter(self): return self.radius * 2 * pi # إنشاء كائنات من الصنف Circle pi = 3.14 circle1 = Circle(3) print(circle1.get_area()) print(circle1.get_perimeter()) circle2 = Circle(4) print(circle2.get_area()) print(circle2.get_perimeter()) لا تقلق إن لم تفهم شيئًا مما سبق فمهوم الأصناف والكائنات مفهوم دسم معقد على المبتدئين، ولكن حاول إعادة قراءة الفقرة وتطبيق الأمثلة أو يمكنك تخطيه ببساطة فالمهم أنك تعرفت على المفهوم، أما إن أردت المزيد من التفاصيل، فارجع إلى مقال البرمجة كائنية التوجه من سلسلة تعلم البرمجة. الوحدات والمكتبات لعلك لاحظت عبارات تبدأ بالكلمة using أو include أو import في الأمثلة البرمجية السابقة وتساءلت عن أهمية وجودها! هذه العبارات ليست سوى أمثلة على استخدام وحدات ومكتبات جاهزة مختلفة في لغات البرمجة. تعتبر الوحدات Modules والمكتبات Libraries أحد مفاهيم أساسيات البرمجة التي من الضروري أن تعيها جيدًا، والهدف الأساسي من وجودها تسهيل كتابة التعليمات البرمجية وتمكين المبرمج من إعادة استخدامها دون الحاجة إلى كتابة التعليمات البرمجية الخاصة بها في الكود من جديد. فالمكتبات والوحدات توفر على المبرمجين إعادة اختراع العجلة وتمكنهم من التركيز على حل المشكلة بسهولة ومرونة أكبر. توفر كل لغة برمجة العديد من المكتبات التي تضم مجموعة من الدوال والأصناف والوحدات التي يمكنك استخدامها مرارًا وتكرارًا في التعليمات البرمجية الخاصة بك لأداء مجموعة من الوظائف المفيدة دون الحاجة لإنشائها من البداية، كما يمكنك تعريف الوحدات الخاصة بك. هناك العديد من الوحدات المضمنة في لغة بايثون مثلًا والتي يمكنك استيرادها بكتابة التعليمة import ولنضرب مثلًا باستيراد الوحدة math للاستفادة من الدوال الرياضية التي توفرها بالشكل التالي: import math print (math.sqrt(25)) print (math.pi) print (math.degrees(2)) print (math.radians(90)) print (math.sin(2)) print (math.cos(0.5)) إلى هنا نكون قد انتهينا من شرح أساسيات البرمجة للمبتدئين والتي تناولنا فيها أهم المفاهيم التي ستتعرف عليها بالتفصيل في أي لغة برمجية تنوي تعلمها قبل أن تتمكن من تطوير برامجك وتطبيقاتك بهذه اللغة. ونختم مقالنا بأهم النصائح والتوصيات التي تساعدك على تعلم هذه الأساسيات. 10 نصائح لتعلم أساسيات البرمجة إليك مجموعة نصائح سريعة تساعدك في رحلة تعلم البرمجة: حدد هدفك من تعلم البرمجة، ثم تعلم ما يلزمك من تقنيات لتحققه. لا تشتت نفسك بكثرة اللغات والتنقل بينها وركز على المفاهيم وطبقها بلغة واحدة بإتقان وتركيز. ضع خطة للتعلم والتزم بها دون تسويف. لا تضيع وقتك في البحث عن أفضل المصادر التعليمية والتنقل بينها بل اختر واحدًا فقط والتزم به للنهاية. طور مهارات البحث الفعال فهذا سيوفر عليك وقتًا كبيرًا ويساعدك في إيجاد حلول لمشاكلك البرمجية. رافق المجدين ومن يشاركونك الهدف والاهتمام نفسه فإن الصاحب ساحب كما يُقال. لا تتوقف عن التعلم وطور نفسك باستمرار. تحلَّ بالصبر والأناة فإن العلم بالتعلّم والحلم بالتحلّم. تقبل الفشل والخطأ فالفشل هو وسيلة للنجاح. طبق ثم طبق ثم طبق ما تتعلمه. الخلاصة تطرقنا في مقال اليوم لشرح أساسيات البرمجة للمبتدئين وتعرفنا على أهم المفاهيم البرمجية التي ستصادفك عند تعلم أي لغة من لغات البرمجة وذكرنا في الختام أهم الأسس والنصائح التي تساعد أي مبرمج لتعلم أساسيات البرمجة من الصفر حتى الاحتراف. قد لا تتمكن من هضم جميع المفاهيم مرة واحدة خصوصًا إن كنت مبتدئًا، لذا ارجع للمقال مرة ومرتين حتى تتأكد من استيعابك لتلك المفاهيم وضعه ضمن قائمتك المفضلة وطبق الأمثلة بلغة البرمجة التي تتعلمها أو تريد تعلمها. وإذا كان لديك أي تساؤلات حول أي شيء مر معك في المقال أو كنت قد بدأت فعلا بتعلم إحدى لغات البرمجة ولديك نصائح مفيدة تود أن توجهها للمبتدئين في تعلم البرمجة، نرحب بأن تشاركنا بها في التعليقات أسفل المقال. اقرأ أيضًا أسهل لغات البرمجة البرمجة كائنية التوجه دليلك الشامل إلى: برمجة التطبيقات فوائد تعلم البرمجة1 نقطة
-
لابد من نشر الموقع على شبكة الإنترنت حالما تنتهي من كتابة الشيفرة وتنظيم الملفات التي تكوّنه ليتمكن الجميع من الوصول إليه، إذ سنشرح في هذا المقال كيف تنشر موقعك التجريبي البسيط على الإنترنت بأقل جهد ممكن. ماهي الخيارات المتاحة يُعَدّ نشر موقع ويب موضوعًا معقّدًا لوجود طرق وأساليب كثيرة لتنفيذه، ولن نحاول في هذا المقال توثيق كل الطرق الممكنة، وإنما سنصف إيجابيات وسلبيات ثلاثة نهج مناسبة للمبتدئين، ثم نفصّل إحداها والتي تُعَدّ الأفضل للكثير من القراء. الحصول على استضافة واسم نطاق يفضِّل الكثيرون الدفع مقابل الحصول على استضافة واسم نطاق وذلك لتحكّم أفضل في محتوى ومظهر موقع الويب: الاستضافة Hosting: هي مساحة تخزين مُستأجَرة على خادم ويب تابع لشركة الاستضافة، إذ توضَع ملفات الموقع على هذا الخادم الذي يتيح محتواه للزائرين. اسم النطاق Domain name: هو العنوان الفريد الذي ستجد عليه موقع ويب محدَّد مثل /hsoub أو /google، ويمكنك استئجار اسم النطاق لعام أو أكثر من شركة مُسجّلة Domain Registrar. تستخدِم معظم مواقع ويب الاحترافية الطريقة السابقة لتنشر محتواها على شبكة الإنترنت، وبالإضافة إلى ذلك، سيتطلب الأمر برنامجًا يستخدِم بروتوكول نقل الملفات FTP لنقل ملفاتك إلى الخادم، ويمكنك الاطلاع على مقال أساسيات تحديد الكلفة المادية الكاملة لبناء موقع ويب، كما تتنوع برامج FTP كثيرًا، لكن وظيفتها بالمجمل هي استخدام المعلومات التي تزودك بها شركة الاستضافة وهي اسم المستخدِم وكلمة المرور واسم المضيف عادةً، وذلك لتأمين الاتصال مع خادم الاستضافة ونقل الملفات إليه، ثم يُظهِر البرنامج بعد الاتصال ملفاتك المحلية وملفات خادم الويب في نافذتين متجاورتين ليسهل نقل الملفات بين المكانين. نصائح لإيجاد استضافة ونطاق لا نرشح في هذا المقال أيّ شركة استضافة أو شركة مسجِّلة، فعليك البحث بنفسك عما يناسبك، إذ تتيح لك كل المسجلات وسيلةً للتحقق من توفر اسم نطاق معين وحجزه. تمنحك بعض مزودات الخدمة الموجودة على حاسوبك الشخصي أو ضمن شبكة مكتبك إمكانية استضافة محدودة لموقعك، إذ لن تكون الميزات المتاحة كثيرةً، لكنها ممتازة لتجربته الموقع. ستجد أيضًا خدمات استضافة مجانية مثل Neocities و Google sites و Blogger و Wordpress، وقد تجني فائدة ما تدفع، لكن موارد مجانية مثل هذه قد تكوِّن خيارًا تجريبيًا ممتازًا أيضًا. تزوّدك بعض الشركات بخدمتي الاستضافة وحجز أسماء نطاقات معًا. استخدام أدوات على شبكة الإنترنت مثل جيت-هاب و جوجل آب تساعدك بعض الأدوات في نشر موقعك مثل: جيت-هاب GitHub: وهو موقع كتابة شيفرة تشاركي يسمح لك برفع ملفات الشيفرة إلى مستودعات تخزين على منظومة التحكم بالإصدار Git، إذ تستطيع بعد ذلك مشاركة شيفرة المشاريع المختلفة والتعاون في العمل عليها، وطالما أنّ المنظومة مفتوحة المصدر، فيمكن لأيّ كان الوصول إلى الشيفرة على جيت-هاب واستخدامها والتعلم منها وتطويرها، كما تقدِّم جيت-هاب أيضًا ميزةً مفيدةً هي صفحات جيت-هاب GitHub Pages التي تسمح لك باستضافة شيفرة موقعك على ويب. محرّك جوجل آب Google App Engine: وهي منصة قوية تسمح لك ببناء وتشغيل التطبيقات بالاستفادة من البنية التحتية لجوجل، سواءً أردت بناء تطبيق ويب من الصفر أو استضافة موقع ويب ساكن، ولمزيد من المعلومات راجع مقال رفع موقع ويب إلى شبكة الإنترنت. هناك عدة خيارات أخرى مجانية، لكنك قد تتخطى بسهولة حدود الميزات المتاحة. استخدام بيئة عمل متكاملة مبنية على ويب هناك العديد من تطبيقات الويب التي تحاكي بيئة تطوير مواقع ويب وتسمح لك بإدخال شيفرة HTML و CSS وجافاسكربت واستعراض نتيجة تنفيذ الشيفرة على أساس موقع ويب حقيقي داخل نافذة المتصفح، وتُعَدّ هذه الأدوات عمومًا سهلة الاستخدام نسبيًا وممتازةً لأغراض التعلّم ومشاركة الشيفرة، إذ بإمكانك إذا أردت مشاركة أسلوب برمجي أو طلب مساعدة في تنقيح شيفرة من زميل في مكتب مجاور، كما أنها مجانية لبعض الميزات الأساسية، لكنها لا تزوّدك عادةً بمساحة لتخزين ملفات الدعم أو ملفات المساعدة والتي تدعى بالأصول assets مثل الصور، وحاول أن تجرب بعضها مثل JSFiddle و Glitch و JS Bin و CodePen g لتجد ما يناسبك. النشر باستخدام جيت-هاب سنناقش الآن كيف تنشر موقعك على صفحات جيت-هاب بسهولة: سجّل في موقع جيت-هاب أولًا وأكِّد امتلاكك عنوان البريد الإلكتروني الذي استخدمته في التسجيل. أنشئ مستودعًا لتخزين الملفات. أدخِل في الصندوق Repository name الظاهر في الصفحة الموضحة في الشكل التالي العبارة username.github.io، إذ يمثل username اسم المستخدم، فقد يُدخِل "مازن" الاسم "mazen.github.io" مثلًا، ثم فعِّل بعد ذلك الخيار Initialize this repository with a README وانقر بعدها زر أنشئ مستودعًا create repository. اسحب وأفلت محتوى الموقع ضمن المستودع واحفظ التغييرات. انتقل باستخدام متصفحك إلى الموقع "username.github.io -وفقًا لما اخترته-، وسيعرض محتوى موقعك. ترجمة -وبتصرف- للمقال Publishing your website. اقرأ أيضًا مدخل إلى خادم ويب. مدخل إلى أسماء النطاقات على شبكة الإنترنت. أساسيات تحديد الكلفة المادية الكاملة لبناء موقع ويب1 نقطة