المحتوى عن 'تعلم البرمجة'.



مزيد من الخيارات

  • ابحث بالكلمات المفتاحية

    أضف وسومًا وافصل بينها بفواصل ","
  • ابحث باسم الكاتب

نوع المُحتوى


التصنيفات

  • التخطيط وسير العمل
  • التمويل
  • فريق العمل
  • دراسة حالات
  • نصائح وإرشادات
  • التعامل مع العملاء
  • التعهيد الخارجي
  • التجارة الإلكترونية
  • الإدارة والقيادة
  • مقالات ريادة أعمال عامة

التصنيفات

  • PHP
    • Laravel
    • ووردبريس
  • جافاسكريبت
    • Node.js
    • jQuery
    • AngularJS
    • Cordova
  • HTML
    • HTML5
  • CSS
  • SQL
  • سي شارب #C
    • منصة Xamarin
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • Sass
    • إطار عمل Bootstrap
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • برمجة أندرويد
  • لغة Swift
  • لغة R
  • لغة TypeScript
  • سير العمل
    • Git
  • صناعة الألعاب
    • Unity3D
  • مقالات برمجة عامة

التصنيفات

  • تجربة المستخدم
  • الرسوميات
    • إنكسكيب
    • أدوبي إليستريتور
    • كوريل درو
  • التصميم الجرافيكي
    • أدوبي فوتوشوب
    • أدوبي إن ديزاين
    • جيمب
  • التصميم ثلاثي الأبعاد
    • 3Ds Max
    • Blender
  • نصائح وإرشادات
  • مقالات تصميم عامة

التصنيفات

  • خواديم
    • الويب HTTP
    • قواعد البيانات
    • البريد الإلكتروني
    • DNS
    • Samba
  • الحوسبة السّحابية
    • Docker
  • إدارة الإعدادات والنّشر
    • Chef
    • Puppet
    • Ansible
  • لينكس
  • FreeBSD
  • حماية
    • الجدران النارية
    • VPN
    • SSH
  • مقالات DevOps عامة

التصنيفات

  • التسويق بالأداء
    • أدوات تحليل الزوار
  • تهيئة محركات البحث SEO
  • الشبكات الاجتماعية
  • التسويق بالبريد الالكتروني
  • التسويق الضمني
  • التسويق بالرسائل النصية القصيرة
  • استسراع النمو
  • المبيعات
  • تجارب ونصائح

التصنيفات

  • إدارة مالية
  • الإنتاجية
  • تجارب
  • مشاريع جانبية
  • التعامل مع العملاء
  • الحفاظ على الصحة
  • التسويق الذاتي
  • مقالات عمل حر عامة

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
  • أندرويد
  • iOS
  • macOS
  • ويندوز

التصنيفات

  • شهادات سيسكو
    • CCNA
  • شهادات مايكروسوفت
  • شهادات Amazon Web Services
  • شهادات ريدهات
    • RHCSA
  • شهادات CompTIA
  • مقالات عامة

أسئلة وأجوبة

  • الأقسام
    • أسئلة ريادة الأعمال
    • أسئلة العمل الحر
    • أسئلة التسويق والمبيعات
    • أسئلة البرمجة
    • أسئلة التصميم
    • أسئلة DevOps
    • أسئلة البرامج والتطبيقات
    • أسئلة الشهادات المتخصصة

التصنيفات

  • ريادة الأعمال
  • العمل الحر
  • التسويق والمبيعات
  • البرمجة
  • التصميم
  • DevOps

تمّ العثور على 5 نتائج

  1. في عام 2003، قرأت مقالةً في مجلة "نيويورك تايمز" كانت قد تضمنت هذا الاقتباس عن "ستيف جوبس": روعة هذا التعبير غيرت مهنتي كمبرمج بشكل كامل. في نهاية اليوم أنا من يكتب"الشيفرة" ومن ينشئ المنتج بيديه. فكيف لأحد آخر أن يحدد كيف يعمل المنتج في النهاية؟ الحقيقة الكامنة لكل المبرمجين هي أنهم غارقون في الخلف ولا يتعاملون بشكل مباشر مع المستخدم. فالمستخدم لا يتعامل مباشرةً مع عملهم بل يتعامل مع ما يصنعه المصممون. اختلاف المنظور هو ما يمنع المبرمجين من رؤية الصورة بشكل كامل فهم يفتقدون أهم جزء وهو المستخدم. أيها المبرمجون، تعَلُّم التصميم يجعل من الممكن أن تقوموا بتجميع كامل النظام في عقولكم، من كيفية تعامل المستخدم مع منتجكم وحتى آخر مرحلة حيث تقومون بتخزين المعلومات في قاعدة البيانات الخاصة بكم. هذا المسار المتكامل يمكنك من تطوير منتج أفضل من المنتجات المنافسة. كَوني مبرمجًا منذ أكثر من 15 سنة فإن تعلمي للتصميم قد طوّر أدائي تطويرًا جذريًا. كثيرًا ما نسمع بأنه يجب على المصممين أن يتعلموا البرمجة ولكنني أؤمن بالعكس, للحصول على منتجات رائعة فإن المبرمجين عليهم أن يتعلموا التصميم. فهم التصميم يؤدي لفهم المستخدم عندما بدأت بتعلم التصميم كانت إحدى أكثر اللحظات التي وقفت وتساءلت فيها هي أنه على الرغم من أنني أعمل في الخلفية إلا أن ما اصنعه يجب عليه أن يجعل حياة المستخدم أسهل، فمستخدموك لديهم العديد من المشاكل التي يحاولون حلها وإذا ركزت فقط على حل المشاكل التقنية فقد لا تستطيع التوصل لحل للمشكلة. إحدى أفضل الطرق للتأكد من أنك على المسار الصحيح لخدمة الاشخاص الذين سيستعملون منتجك بالفعل هي الانخراط مبكرًا في عملية التصميم، ويفضَّل أن يكون منذ اليوم الأول. وإدراكك لمشاكل المستخدم منذ البداية يمكنك من اتمام العمل بسلاسة وبشكل تام. صرّح الريادي المشهور ومؤسس شركة "Y Combinator"، "بول غراهام" بالتالي: كل شيء ليس كما يبدو عليه سوف أعيد القول بأنه تقريباً من المستحيل أن يمر يوم بدون رؤيتك لمقال عن إذا ما كان يجب على المصممين أن يتعلموا البرمجة. ما يجهله الناس هو أن المبرمجين قادرون على تعلم التصميم ويجب عليهم تعلم التصميم للعمل بشكل أفضل مع المصممين والحصول على منتجات رائعة حقًا. ولسوء الحظ, هنالك نوع من التنافسية بين المبرمجين والمصممين على من يمتلك الوظيفة الأصعب، ومن على صواب، ومن على خطأ، ومن يعرف أكثر والعديد من النقاط الأخرى، وهذا التنافر عن العمل سويًا لا يفيد بأي شكل من الأشكال. بمجرد تعلمك للتصميم ستلاحظ بأن عمل المصممين ليس سهلاً كما يبدو، ومن الناحية الأخرى، تعَلَّم البرمجة وسوف تدرك بأن المبرمجين ليسوا متجهمين وهدفهم ليس افساد تصاميمك. عندها، سوف يتمكن كل من المصممين والمبرمجين بتقدير عمل الآخر واحترام ما يقومون به مما يؤدي لعملهم سوياً كفريق. استمتع أكثر بأداء عملك بالنسبة لي، أفضل شيء بالنسبة لتعلم التصميم هو أنني أستمتع بعملي أكثر من السابق. أصبحت قادرًا على الانخراط في محادثات هادفة مع المصممين عن طريق التحدث بلغتهم التي يفهمونها مما أكسبني شعورًا كبيرًا بالرضى، بالإضافة لذلك, اصبحت متلهفاً أكثر كلما اقتربنا من الاعلان عن مشروع جديد وهذا لأن مشاركتي تخطّت الجوانب التقنية التي تحدث في الخفاء. أيضًا, تعلُم التصميم يساعد المبرمجين على خلق منتج يعادِل بين الإبداع والمنطق بدون "مستند خصائص التشغيل" ومن الممكن تجنب قوالب الفوتوشوب "PSD" وبرمجة تصاميمك وتنسيقاتك بطريقة فعالة خلال كتابتك لشيفرة البرمجة. وعندما تجد ثغرات في تصميمك و في صفحات النسق (style sheets) فبإمكانك إصلاحها فورًا وإنهاء عملك بدون أي تأخير او قلق. التأقلم هنالك تدفق كبير للأجهزة الحديثة التي يتم انتاجها يومياً بمختلف الأشكال والأحجام لذلك فإن القدرة على التأقلم بأسرع ما يمكن هي شيء أساسي. يجب على المبرمجين أن يعملوا بتصميم متوافق مع هذه المتطلبات والمواصفات، وهذا يعني بأنه من المهم أن يكون المبرمجون قادرون على ملاحظة وتحديد هذه التغييرات. كيف سيتصرف التصميم عندما تنتقل من جهاز الكمبيوتر للهاتف المحمول أو الساعة الذكية؟ سوف تتمكن بمعرفتك التصميمية من التعامل مع عملك بأسلوب مختلف عما كنت سوف تفعل عادةً, مما يعطيك ميّزة تنافسية كبيرة وسوف توفّر الكثير من الوقت عليك وعلى فريقك. كثيرًا ما يختلط التصميم بالبرمجة في شركتي، وعندما يكون المبرمج يعرف عن التصميم فإن النتائج تكون أفضل على صعيد كل من سرعة العمل والجودة فيما ننتجه. كيف تعلمتُ التصميم أولى خطواتي كانت على موقع "DesignLab" حيث ساعدني احد المرشدين طوال الوقت، وقمت أيضًا بالانتساب لبرنامج التصميم على موقع "BLOC" وكان كلا الموقعين رائعين حقًا, ولكن بالطبع لا شيء يغني عن الممارسة المستمرة لذلك يجب عليك الممارسة يوميًا حتى تصل للدرجة المطلوبة. ترجمة -بتصرف- للمقال Why developers should learn design لصاحبه Christian Rennella
  2. "أريد تعلم البرمجة لكنني لا أعرف من أين أبدأ!" هذه هي أكثر عبارة تتردد على سمعي من حديثي العهد بالبرمجة، إذ يأتيني هذا السؤال مرارًا وتكرارًا؛ وفي كل مرة أحاول أن أجيب عنه في سياقه، أجد أنني أضيف معلومات جديدة على إجاباتي السابقة، لذا قررت كتابة هذا المقال بعنوان "تعلم البرمجة" لعله يفيد الراغبين في تعلم تطوير التطبيقات في بدء رحلتهم مع البرمجة. جدول المحتويات حرصًا على تنظيم المقالة ولتسهيل الوصول إلى القسم الذي تريده بسهولة، سنذكر هنا جدول المحتويات باختصار: ما هي البرمجة؟ لماذا تتعلم البرمجة؟ ما عليك معرفته لتصبح مبرمجًا الأدوات اللازمة للبدء في تعلم البرمجة لماذا هناك العديد من لغات البرمجة؟ مفاهيم البرمجة مصادر تعلم البرمجة تطوير واجهات المستخدم تطوير الواجهات الخلفية تعلم تطوير تطبيقات الجوال تطوير الألعاب تطوير الأنظمة المدمجة تطوير تطبيقات سطح المكتب كيفية اختيار لغة البرمجة التي تناسبك نصائح لتعلم البرمجة ما هي البرمجة؟ البرمجة هي عملية تقسيم مهمة معينة يراد تنفيذها عبر الحاسوب إلى أجزاء صغيرة ومترابطة وقابلة للتنفيذ بأوامر بسيطة. بعد ذلك، يجري كتابة هذه الأوامر والتعليمات بإحدى لغات البرمجة، والتي هي وسيلة للتخاطب مع الحاسوب. إليك المثال العملي التالي الذي يشرح ماهية البرمجة: إن كنت تتوقع زيارة صديق لك اليوم، واتصل بك ليقول لك: "أنا واقف بجانب الحديقة ولا أعرف كيف أصل إلى منزلك". أنت عادةً تمر كل يوم من جانب الحديقة وتعرف الطريق بينها وبين منزلك شبرًا بشبر. برأيك هل ينفع إن قلت له: "منزلي معروف وقريب من الحديقة وأنا كل يوم أمر من جانبها"؟ لا، بالتأكيد. تحتاج إلى أن تقسِّم المشكلة إلى أجزاء تمثل خطوات بسيطة يستطيع صديقك فهمها وتنفيذها. مثلًا، أخبره أن ينفذ الأوامر التالية: "سر إلى الأمام عشرة أمتار" ثم "اتجه إلى اليمين" ثم "سر إلى نهاية الشارع" ثم "اتجه إلى اليسار". أخبره بعد ذلك: "عُدَّ الأبنية الموجودة على اليسار حتى تصل إلى البناء الرابع" ثم "اصعد إلى الطابق الثاني" ثم "اطرق على الباب الذي سيظهر أمامك". مبارك! بهذه الطريقة، تستطيع أن تدل صديقك على منزلك بدقة. البرمجة هي الشيء نفسه تمامًا. فهل ترى التعابير المكتوبة بين قوسين؟ إنها التعابير التي تكتب بإحدى لغات البرمجة والتي تخاطب الحاسوب بدلًا من صديقك السابق. لغات البرمجة هي مجموعة من المفردات والقواعد اللغوية التي تشكل لغةً وسيطةً للتخاطب مع الحاسوب وأمره بتنفيذ تعليمات وأشياء محدَّدة. فلا الحاسوب يفهم لغة البشر ولا البشر يفهمون لغة الحاسوب، لذا كان هنالك حاجة ملحة لوجود لغة وسيطة يفهمها كلاهما؛ نتيجةً لذلك، انبثق مفهوم لغة البرمجة. بعبارة أخرى، لو أردنا أن نقول للحاسوب "افعل كذا"، فسنحتاج إلى لغةٍ مشتركةٍ بيننا وبينه ليفهم ما نبتغيه، وهنا يأتي دور لغات البرمجة، إذ يمكنك أن تعدّ لغات البرمجة على أنها وسيط بين المبرمج والحاسوب. يهتم المبرمج بالتفكير في تسلسل الخطوات التي على الحاسوب القيام بها لإتمام العمل المطلوب منه (مثل حساب العمر اعتمادًا على تاريخ الولادة)، ثم كتابة هذه الخطوات بترتيب منطقي بإحدى لغات البرمجة. ربما لاحظتَ في الجملة السابقة أن جزءًا من مهمة المبرمج هو التفكير المنطقي، وهذا يجعلنا ننتقل إلى السؤال الشائع "هل أستطيع تعلم البرمجة وأصبح مبرمجًا؟" أو "هل أنا مؤهل لأصبح مبرمجًا؟". لماذا تتعلم البرمجة؟ يبدو أن تعلم البرمجة ليس بالصعوبة التي توقعتها، لكنك تريد حافزًا يجعلك تتعلم البرمجة. تسمع كثيرًا أن البرمجة هي مجال المستقبل، وأن وظائف المبرمجين ستكتسح مجال التوظيف في السنوات القادمة؟ أستطيع أن أؤكد لك ذلك، كما أنَّ وظائف البرمجة هي من أعلى الوظائف دخلًا. فلو كنت تريد بدء مشوارك الاحترافي وتريد عملًا مستقرًا وذا دخلٍ ممتاز، فإن تعلم البرمجة والعمل بها هو أفضل خيارٍ أمامك. وظائف البرمجة مريحة عمومًا، فالعمل كله مكتبي أمام حاسوب في بيئة مريحة ومناسبة، وأغلبية الشركات تتبع نظام العمل 40 ساعة في الأسبوع (أي 5 أيام لمدة 8 ساعات يوميًا)، ولا تغفل عن قدرتك على العمل عن بعد من خلال الانترنت أو كمستقل في أوقات فراغك. تعلم البرمجة سيوسع أفق تفكيرك كثيرًا، خصوصًا أن تعاملك مع الحاسوب يتبع إلى التفكير المنطقي، وستجد أن البرمجة ستسهل لك القيام بأمور أخرى في الحاسوب. ما عليك معرفته لتصبح مبرمجًا يتردد الكثيرون في تعلم البرمجة متذرعين بأن مستواهم في الرياضيات ليس ممتازًا، وهذا ليس صحيحًا، فصحيحٌ أنَّ هنالك أمور تعترضك أثناء أداء عملك كمبرمج تتطلب خبرة في الرياضيات، إلا أنَّه قد تمر عليك فترات طويلة لا تحتاج فيها إلى مسائل رياضية. كل ما يلزمك للبدء في تعلم البرمجة هو الأساسيات التي يعرفها الجميع. إلى حين اعتراضك أية مسألة أو مشكلة تتطلب مهارة في الرياضيات، هنالك الكثير من المصادر والمراجع التي تستطيع الرجوع إليها آنذاك. بعبارة أخرى، أجِّل هذا الأمر قليلًا ولا تخف. الأهم من ذلك هو أن تكون قادرًا على التفكير بشكل منطقي. التفكير المنطقي التفكير المنطقي هو المهارة التي تجمع كافة المبرمجين تحت مظلة واحدة، وهي أساس كتابة الخوارزميات، إذ يجب أن تكون قادرًا على اكتساب هذه المهارة وتطويرها. الخوارزميات كلمة "الخوارزميات" هي الكلمة المرعبة التي ينفر منها البعض، فكل ما يتخيلونه عند ذكرها هو الرياضيات المعقدة والمعادلات الطويلة والرموز العجيبة، لكن الأمر بسيط جدًا؛ فالخوازرميات هي تطبيقٌ للتفكير المنطقي في خطوات متسلسلة واضحة تمامًا لحل مشكلة ما. لكي أوضِّح لك أن الخوارزميات ليست أمرًا معقدًا، سأخبرك بكيفية كتابة برنامج يسأل المستخدم عن سنة ميلاده، ثم يعيد عمره الحالي بالسنوات. الخطوة الأولى: إظهار رسالة نصية نطلب فيها من المستخدم إدخال تاريخ ميلاده. الخطوة الثانية: تخزين سنة الميلاد التي أدخلها المستخدم. الخطوة الثالثة: الحصول على السنة الحالية. الخطوة الرابعة: طرح مدخلات المستخدم من السنة الحالية. الخطوة الخامسة والأخيرة: إظهار الناتج. ما سبق هو خوارزمية بسيطة تتألف من خطوات متسلسلة، لكن إذا أمعنا النظر فيها سنجد خللًا في حال أدخل المستخدم تاريخًا أكبر من التاريخ الحالي، أي لو أدخل 2050 مثلًا بدلًا من 1995. عندها سيصبح العمر المعاد من الخوارزمية سالبًا، ويمكننا أن نحل هذه الإشكالية منطقيًا بوضع شرط يمنع المستخدم من إدخال تاريخ أكبر من التاريخ الحالي. إطارات العمل كلمة أخرى شائعة جدًا في عالم البرمجة هي "إطارات العمل" frameworks، إطارات العمل هي مجموعة من الشيفرات البرمجية التي تسهل على المبرمج إنشاء التطبيقات، بتوفير وحدات جاهزة تقدم خدمات مثل تسجيل المستخدمين، وإرسال البريد الإلكتروني، والتعامل مع قواعد البيانات. أي يمكنك أن تعدّها أدوات برمجية تساعدك في برمجة تطبيقك وتسهِّل لك فعل ذلك. الأدوات اللازمة للبدء في تعلم البرمجة تحتاج إلى حاسوبٍ بمواصفات جيدة (ليس من الضروري أن يكون من أفضل الحواسيب، وإنما أن يمتلك مقدارًا جيدًا من الذاكرة العشوائية). لا ننصح بمواصفات معينة أو نظام تشغيل معين، استعمل ما يحلو لك وما ترى نفسك معتادًا عليه (سواءً كان ويندوز أو لينكس أو ماك). ستحتاج أيضًا إلى اتصالٍ جيد بالإنترنت للوصول إلى المواد التعليمية، ولتنزيل البرمجيات والمكتبات اللازمة للتطوير. أما بخصوص أدوات التطوير، فستحتاج إلى برمجية لكتابة الشيفرات، وهنالك نوعان رئيسيان لها: المحررات النصية: مثل Visual Studio Code أو Atom أو Sublime Text أو Bracktes أو Notepad++‎. وهذه المحررات النصية تكون بسيطة في أغلبها، وتوفر ميزات أساسية مثل تلوين الشيفرات، وبعض ميزات الإكمال التلقائي، وتدعم أغلبيتها إضافات لزيادة وظائفها. وظيفة هذه المحررات النصية عمومًا هي تعديل الشيفرات بسهولة وسرعة. ننصحك بتجربة Visual Studio Code لشهرته حاليًا وكثرة إضافاته ودعمه الممتاز من شركة Microsoft. بيئات التطوير المدمجة: مثل Visual Studio و Eclipse و Android Studio و NetBeans و Apple Xcode وغيرها. وهذه البيئات توفر ميزات أكثر بكثير من المحررات النصية، مثل تشغيل الشيفرات وتنقيحها (debugging) وميزات التحكم بالإصدارات والاتصال بقواعد البيانات وخلاف ذلك. لماذا هناك العديد من لغات البرمجة؟ قد تتساءل، لماذا هناك العديد من لغات البرمجة؟ أليست هذه اللغات كلها تنفذ الهدف ذاته؟ لماذا لا يكون هنالك لغة موحدة بين المبرمجين والحاسوب؟ الحقيقة أنّه توجد لغة برمجة واحدة ولكن ليست إحدى اللغات التي تراها أمامك في الصورة. اللغة التي نشير إليها هي "لغة الآلة" التي يستطيع معالج الحاسوب قراءتها وفهمها. أتتساءل ما هي لغة الآلة وكيف تبدو؟ إليك مقطعًا منها: معلومٌ أنّ معالج الحاسوب لا يفهم شيئًا سوى الأصفار والواحدات، وهذه اللغة -أي لغة الآلة- هي تمثيل للأصفار والواحدات بطريقة تخبر الحاسوب بما يجب عليه فعله. الجدير بالذكر أن هذه اللغة عصية الفهم على البشر، إذ حتى إن استطعت كتابة شيفرة مثل الشيفرة الموضحة بالصورة (كما في السنوات الأولى من بداية اختراع الحاسوب)، لن يفهمها الآخرون ولن يستطيع أحد التعديل على الشيفرة وتطويرها لاحقًا باستثنائك. سعيًا لإيجاد لغة قريبة من لغة البشر، انقسمت لغات البرمجية إلى قسمين: لغات البرمجة منخفضة المستوى، ولغات البرمجة عالية المستوى وذلك تبعًا لمدى قربها من لغة الآلة أو لغة البشر على التوالي. أي أنّ لغات البرمجة منخفضة المستوى هي اللغات الأقرب للغة الآلة آنفة الذكر مثل لغة التجميع، ولغات البرمجة عالية المستوى هي اللغات الأقرب للغة البشر مثل لغة بايثون وجافا. تنفيذ البرامج المكتوبة بلغات برمجة عالية المستوى الحديث عن اللغات عالية المستوى واللغات منخفضة المستوى يقودنا إلى الحديث عن كيفية تنفيذ المعالج للشيفرة المكتوبة بلغة عالية المستوى لا يفهمها المعالج (أليس هذا ما تفكر به الآن؟). عرفنا أن المعالج يفهم الأوامر والتعليمات المكتوبة بلغة منخفضة المستوى (لغة الآلة)، إذ مَثَلُ هذه العملية كمَثَلِ شخصٍ أجنبي تعلم اللغة العربية وبدأ التحدث مع ناطقٍ باللغة العربية، إذ يمكن لهما التواصل مباشرةً - ليخبر كل منها ما يريد من الآخر فعله - دون وسيط. أمَّا مَثَلُ كتابة برنامج بلغة عالية المستوى أقرب إلى لغة البشر والطلب من الحاسوب تنفيذه كمثل ناطق باللغة الهندية يريد التخاطب مع ناطق باللغة العربية دون أن يفقه أحدهما لغة الآخر. في هذه الحالة، لن يستطيع أحدهما فهم ما يتكلم به الآخر وستفشل عملية التواصل. قد تقول: لماذا لا يحضران مترجمًا يترجم ما يقوله كل منها للآخر؟ حسنًا، هذا ما يحصل تمامًا عندما يراد تنفيذ برنامج بلغة لا يفهمها معالج الحاسوب. في اللغات البشرية، هنالك نوع واحد من المترجمين يعرفه الجميع للترجمة من لغة إلى آخرى؛ أما في لغات البرمجة، هنالك نوعان من المترجمين بين اللغات هما: المفسر، والمترجم. بناءً على ذلك، تنقسم لغات البرمجة إلى لغات مفسرة ولغات مترجمة. (من الآن وصاعدًا، كلما ذكرنا لغات البرمجة، فنحن نشير إلى لغات البرمجة عالية المستوى.) المفسر (interpreter): وهو برنامج خاصٌ يفسِّر الشيفرة المصدرية لبرنامج مكتوب بلغة عالية المستوى سطرًا بسطر ويحولها إلى لغة منخفضة المستوى لينفذها الحاسوب مباشرةً. المترجم (compiler): وهو برنامج خاصٌ يحوِّل الملفات المصدرية لبرنامج مكتوب بلغة عالية المستوى إلى ملف تنفيذي مكتوب بلغة الآلة دفعةً واحدةً، ثم يمكن تشغيل الملف التنفيذي على الحاسوب للقيام بالمهمة المطلوبة. لماذا يوجد الكثير من لغات البرمجة عالية المستوى؟ الآن وبعد أن عرفت الفرق بين لغة الآلة ولغة البشر، لربّما ما زلت تتساءل عن كثرة اللغات البرمجية عالية المستوى المتوافرة وعدم وجود لغة واحدة. نستطيع القول أنك خطوت خطوةً جيدةً للأمام إذ أصبحت الآن أكثر دقة. جواب سؤلك هو أنّ كل لغات البرمجة تُستخدم لتحويل فكرة منطقية إلى سلسلة أوامر يمكن للحاسوب أن ينفذها. فعلى سبيل المثال لا الحصر يمكنك استخدام أي من Ruby أو Java أو Python أو C#‎ أو Go أو JavaScript لبناء موقع ويب. لكن يمكنك أن تعدّ لغات البرمجة على أنها أدوات، وكل أداة تسهّل مهمة دونًا عن أخرى. فعلى سبيل المثال، السيارة والحافلة والدراجة والمحراث الزراعي كلها وسائط نقل، لكنها مختلفة الاستخدام؛ فلا يمكنك أن تذهب وعائلتك لقضاء إجازة صيفية مستخدمين المحراث الزراعي، كما لا يمكنك استخدام سيارة سباق في مدينة مكتظة ذات شوارع ضيقة للذهاب بها إلى العمل. مع أن آلية عمل هذه المركبات متشابهة. والأمر سيانٌ بالنسبة إلى البرمجة. خلاصة القول أنّ هنالك لغات برمجة متخصصة بإنشاء تطبيقات سطح المكتب، وأخرى متخصصة بإنشاء تطبيقات الجوال، وأخرى تستعمل خصيصًا لمواقع الويب، وأخرى لبرمجة العتاد، وهذا ما يحيلنا إلى الحديث عن مجالات البرمجة واللغات الأنسب لكلٍ منها. مفاهيم البرمجة "حسنًا، اقتنعتُ أن البرمجة مناسبة لي وليست صعبة كما كنتُ أتخيل، من أين أبدأ طريقي في تعلم البرمجة إذًا؟" قبل الإجابة عن السؤال السابق، سآخذ وقتي لأشرح لك بعض المفاهيم الخاصة بالبرمجة، ثم سنتحدث عن مجالات العمل فيها وما المسار الأفضل لتعلمك كلًا منها. أنت تعلم أن البرنامج هو سلسلة أوامر ينفذها الحاسوب لحل مشكلة ما، والبرنامج نفسه مكتوب بلغة يفهمها الحاسوب تسمى لغة الآلة. من الأمور الملحوظة التركيز كثيرًا على لغة البرمجة ذاتها أثناء بداية تعلم البرمجة. سأخبرك حقيقةً صادمةً: "لغة البرمجة التي تستعملها ليست بتلك الأهمية التي تتوقعها"، أنا لا أقول لك أن جميع لغات البرمجة متماثلة أو تُستعمل لنفس الاستعمالات، لكن لا تركِّز كثيرًا على تعلم كيفية الكتابة في لغة برمجة ما وتهمل المفاهيم البرمجية التي تقف وراءها. المتغيرات والثوابت عليك أن تتعرف على مفهوم المتغيرات variables المستعمل في جميع لغات البرمجة، والذي يعني إسناد قيمة ما إلى رمز أو كلمة وتخزين هذه القيمة في الذاكرة. فلو أردنا أن نخزن العبارة "Hello World" في متغير ما فنكتب شيئًا شبيهًا بما يلي: var variable_name = "Hello World"; أي أننا نسند الجزء الموجود على يمين إشارة المساواة إلى المتغير المذكور على يسار إشارة المساواة. يمكننا أن نستنتج من اسم "المتغيرات" أن قيمتها قابلة للتغيير خلال تنفيذ البرنامج، فيمكننا في مكانٍ ما من الملف المصدري أن نعيد تعريف المتغير السابق بكتابة: var variable_name = "New value"; أما الثوابت فهي تتشابه مع المتغيرات في كثيرٍ من النواحي، إلا أنك لا تستطيع إعادة تعريف قيمتها بعد تعريفها أول مرة. قد تستفيد من الثوابت عندما تكون متأكدًا تمامًا من عدم تغيير القيمة خلال فترة تنفيذ البرنامج. فلو أردنا تعريف ثابت اسمه pi يحتوي على القيمة 3.14 (والتي سنعرف أنها لن تتغير مطلقًا)، فيمكننا أن نكتب: const pi = 3.14; وإذا حاولتَ تغيير قيمة الثابت بعد تعريفه فستحصل على رسالة خطأ. الشروط تدعم جميع لغات البرمجة تعريف شروط تُنفَّذ في حالات معينة. ففي الخوازرمية السابقة التي شرحنا فيها حساب العمر، يمكننا أن نكتب الشرط بالعربية كما يلي: إذا كان (تاريخ الميلاد أكبر من التاريخ الحالي): نقول للمستخدم أن هنالك خطأ وإلا: سنحسب العمر بطرح تاريخ الميلاد من التاريخ الحالي وإذا أردنا كتابتها بإحدى لغات البرمجة فستبدو شبيهةً بما يلي: if ( user_birth > current_year ) { // ERROR! } else { age = current_year - user_birth; } لا تلقِ للأقواس بالًا، فهي جزء من لغة البرمجة، وقد تختلف من لغة لأخرى، وليست موضع اهتمامنا حاليًا. حلقات التكرار ماذا لو كانت لدينا قاعدة بيانات فيها أكثر من مستخدم ولكل مستخدم تاريخ ميلاد. لا تقل لي سنأخذ التواريخ يدويًا وندخلها إلى البرنامج! هذا مضيعةٌ للوقت، والصواب هو إنشاء حلقة تكرار تأخذ قيمة تاريخ الميلاد الخاص بكل مستخدم ثم تحسب عمره كما أسلفنا في القسم السابق. دعنا نعدل الخوارزمية البسيطة لنضيف تكرارًا فيها: ما أجمل البرمجة! تخيل لو كان عندك ألف مستخدم، وكان عليك حساب أعمارهم، يمكنك بضغطة زر أن تحسبها كلها. الدوال الدالة function هي مجموعة من التعليمات البرمجية التي تقبل مدخلات وتعيد القيمة المطلوبة. تكون الدوال عادةً قصيرةً وتقوم بمهمة وحيدة فقط. فمثلًا لو أردنا تعريف دالة باسم divide تقبل عددين، وتعيد ناتج قسمة العدد الكبير على الصغير، فيمكننا أن نكتب الخورزمية الآتية: مصادر تعلم البرمجة أول ما سيتبادر إلى ذهنك بعد قرارك تعلم البرمجة هو من أين سأتعلم؟ هنا يأتي دور القسم التعليمي المتكامل في حسوب ليقدم للمبتدئ (والمحترف على حدٍ سواء) محتوى علمي مميز ومبسط. تزخر أكاديمية حسوب بالمحتوى البرمجي على كافة مستوياته عن تعلم البرمجة، ستجد فيها أقسامًا تشرح لغات البرمجة وتقنياتها كلها. ولدينا قسم للأسئلة البرمجية التي يمكنك أن تطرح فيه سؤالك وسيجيب عليه أحد أفراد مجتمع أكاديمية حسوب. أضف إلى ذلك أن الأكاديمية توفر قسمًا للدورات المتخصصة التي تبدأ معك من الصفر وحتى احتراف لغة البرمجة التي تريد تعلمها مع كادر من المدربين المختصين الذي يقدمون لك المساعدة ويجيبون عن جميع استفساراتك. وهنالك قناة للأكاديمية على يوتيوب ننشر فيها دوريًا دروسًا قصيرةً عن تساؤلات محددة ومفاهيم البرمجة وخلافه. لا تنسَ الاشتراك في قناة الأكاديمية لتصلك الفيديوهات الجديدة. ماذا لو أردتَ التعمق أكثر في لغة معيّنة؟ تأتي هنا موسوعة حسوب التي توفِّر توثيقًا عربيًا كاملًا وعالي الجودة، مدعّمًا بالأمثلة لمختلف لغات البرمجة وتقنيات تطوير الويب والجوال. ستكون الموسوعة مرجعًا تعود إليه في مسيرتك البرمجية، وتستعين بها لمعرفة التفاصيل الدقيقة عن لغات البرمجة. فأنت لست مضطرًا لحفظ كل شيء في لغة البرمجة، إذ حتى المبرمجين المختصين ذوي الخبرة يعودون إلى التوثيقات بين الفينة والأخرى أثناء عملهم. لننطلق الآن للتحدث عن مجالات البرمجة الأساسية وما اللغات والتقنيات المستعملة فيها. تطوير واجهات المستخدم يبدأ أغلبية المطورين مشوارهم من خلال تعلم تطوير واجهات المستخدم عند اتخاذ قرارهم لدخول مجال تطوير وبرمجة مواقع الويب، وذلك لسهولة اللغات المستعملة في هذا المجال. هدف هذا المجال هو تطوير صفحات الويب التي تعرض محتوى مختلف مواقع الويب، وهي الصفحات التي تراها عند زيارتك لموقع أكاديمية حسوب أو موسوعة حسوب أو مستقل أو أي موقع آخر. تتألف صفحة الويب من مجموعة من المكونات، وتُكتَب هذه المكونات باستخدام لغة HTML، وبعد كتابة البينة الهيكلية للصفحة سنأتي على تنسيقها باستخدام لغة CSS، وهي اللغة المستعملة لإضفاء شكل وهيئة على عناصر HTML. أي أن عناصر HTML تصف محتوى الصفحة (مثل الترويسات والقوائم والمحتوى الرئيسي والفقرات والروابط والصور والفيدوهات)، وقواعد CSS تُعرِّف كيف يجب أن تبدو هذه العناصر (سواءً من ناحية الألوان أو المساحات أو الخلفيات أو الخطوط أو خلاف ذلك). تأتي لغة JavaScript مكملةً لهما وتستعمل لإعطاء بعض عناصر الصفحة صفاتٍ تفاعلية، مثل شريط متحرك من الصور أو قوائم تظهر عند وقوع حدث معيّن ...إلخ. هنالك تقنيات كثيرة تستعمل في تسهيل إنشاء الواجهات الأمامية وسنذكر بعضها: إطار Bootstrap لتسهيل تنسيق عناصر الصفحة. مكتبة jQuery لتسهيل التعامل مع عناصر الصفحة باستخدام JavaScript. لغة Sass لإنشاء ملفات CSS بسرعة وسلاسة. أدوات بناء مثل Gulp الذي يسهِّل تحويل الملفات المصدرية للتطبيق إلى النسخة النهائية التي ستعرَض للمستخدم. لتعلم تطوير واجهات المستخدم، ننصحك بالتسجيل في دورة تطوير واجهات المستخدم المقدمة من أكاديمية حسوب، والتي تحتوي على 34 ساعة فيديو تتوزع على ستة مسارات تعليمية تشرح أمثلة عملية تطبيقية شرحًا مفصلًا. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب لتتعرف على توثيق لغات البرمجة المذكورة، وذلك للاطلاع على تفاصيل وأمثلة أكثر عن كل جزئية من الجزئيات المشروحة في دورة تطوير واجهات المستخدم. اللغات والتقنيات المستخدمة في تطوير واجهات المستخدم: HTML و CSS و JavaScript و Bootstrap و Sass و jQuery و Gulp. تطوير الواجهات الخلفية قد تتساءل: ماذا يعني تطوير الواجهات الخلفية (backend)؟ وما الفرق بينه وبين تطوير واجهات المستخدم (frontend)؟ الفرق بينهما هو أن الواجهات الخلفية هي البرمجيات التي تُنفَّذ على الخوادم وتجري عمليات عليها مثل التعامل مع قواعد البيانات والملفات والخدمات الخارجية، أما واجهات المستخدم فهي الصفحات التي تظهر على شاشة الزائر في متصفحه. سأطرح عليك الخيارات المتاحة أمامك للبدء في مجال تطوير الواجهات الخلفية، وجميع اللغات المذكورة هنا هي لغات ناجحة وقوية ولا يهم أي لغة تختار منها، المهم أن تتطلع على شيفرات بسيطة من كل لغة وتتخذ قرار تعلمها، واحذر من تضييع وقتك في التنقل بين لغات البرمجة والبحث عن أفضلها، فكلُ لغةٍ ممتازةٌ في مجالها. تعلم البرمجة باستخدام لغة PHP بعد تبيان الفرق بين واجهات المستخدم والواجهات الخلفية، يمكن القول بأن أشهر لغة لتطوير الواجهات الخلفية هي لغة PHP، وتتفوق على اللغات المنافسة لها أضعافًا مضاعفة. تعلم البرمجة بلغة PHP أمر سلس، فهي لغة سهلة التعلم وبسيطة الشكل، والمجتمع حولها كبير وتطويرها مستمر. هذه اللغة هي خيار استراتيجي لمن يريد الدخول إلى مجال تطوير الواجهات الخلفية. هنالك عدد من البرمجيات المكتوبة بلغة PHP مثل ووردبريس WordPress ودروبال Drupal وميدياويكي MediaWiki (التي تشغِّل ويكيبيديا وموسوعة حسوب) وغيرها الكثير؛ إضافةً إلى عددٍ كبير من إطارات العمل مثل Laravel و Zend و CodeIgniter و Symfony و CakePHP و Yii وغيرها، وهذا ما يدل على إمكانيات اللغة الكبيرة والمجتمع الكبير الذي يحيط بها. لتعلم تطوير الواجهات الخلفية باستخدام PHP، ننصحك بالتسجيل في دورة تطوير تطبيقات الويب باستخدام PHP المقدمة من أكاديمية حسوب، والتي تحتوي على 19 ساعة فيديو تتوزع على خمسة مسارات تعليمية تبدأ بأساسيات لغة البرمجة PHP للمبتدئين، مرورًا بشرح أمثلة عملية تطبيقية بالتفصيل، ووصولًا لتطوير التطبيقات باستخدام إطار العمل Laravel. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق لغة PHP وإطار العمل Laravel. اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام PHP هي: PHP و Laravel وقواعد البيانات (مثل MySQL و PostgreSQL وغيرها). تعلم البرمجة باستخدام لغة روبي - Ruby إذا كنتَ تبحث عن لغةٍ أنيقة وسهلة الاستعمال فستجد ضالتك في لغة روبي Ruby فهي من أجمل اللغات وأسلسها كتابةً، وهي لغة برمجة عامة يمكن استخدامها لتطوير مختلف أنواع التطبيقات ومن ضمنها تطوير تطبيقات الويب. ذاع صيت روبي في تطوير الويب بعد نشر إطار العمل Ruby on Rails (يشار إليه اختصارًا "ريلز"). هنالك إطارات عمل أخرى مثل Sinatra لكن يبقى ريلز أشهرها. لتعلم تطوير الواجهات الخلفية باستخدام روبي، ننصحك بالتسجيل في دورة تطوير تطبيقات الويب باستخدام روبي المقدمة من أكاديمية حسوب، والتي تحتوي على 20 ساعة فيديو تتوزع على أربعة مسارات تعليمية تشرح أمثلة عملية تطبيقية شرحًا مفصلًا، وتشرح تطوير التطبيقات باستخدام إطار العمل ريلز. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق لغة روبي وإطار العمل ريلز. اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام روبي: روبي و ريلز وقواعد البيانات (مثل MySQL و PostgreSQL وغيرها). تعلم البرمجة باستخدام لغة جافا سكربت - JavaScript نعم! تستعمل JavaScript في تطوير الواجهات الخلفية أيضًا. الفضل يعود لبيئة Node.js التي تسمح للمطورين باستخدام JavaScript لكتابة برمجيات تعمل من جهة الخادم وذلك لتوليد صفحات ويب ديناميكية قبل إرسالها إلى المتصفح، وتستطيع Node.js التعامل مع الملفات وقواعد البيانات ومختلف أنظمة الشبكات وخدمات أنظمة التشغيل. هل يوجد أجمل من استخدام نفس اللغة لبرمجة الواجهات الأمامية لمواقع الويب والواجهات الخلفية؟ وكل ذلك باستخدام لغة سهلة التعلم والاستعمال ومدعومة دعمًا ممتازًا من المجتمع. لتعلم تعلم لغة JavaScript لتطوير الواجهات الخلفية من خلال التسجيل في دورة تطوير التطبيقات باستخدام JavaScript المقدمة من أكاديمية حسوب، والتي تحتوي على 13 ساعة فيديو تتوزع على ثلاث مسارات تعليمية تشرح أمثلة عملية تطبيقية شرحًا مفصلًا، وتشرح تطوير الواجهة الخلفية باستخدام Node.js. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق لغة JavaScript وبيئة العمل Node.js. اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام JavaScript: لغة JavaScript وبيئة Node.js وإطار العمل Express.js وقواعد البيانات (مثل MongoDB و MySQL و PostgreSQL وغيرها). تعلم البرمجة باستخدام لغة بايثون - Python لغة بايثون متعددة الاستعمالات، ويمكن عدّها على أنها أسهل لغة برمجة على الإطلاق، إذ تبدو شيفرتها البرمجية كأنها مقالة مكتوبة باللغة الإنكليزية. إذا أردتَ لغةً سهلةً ومدعومةً دعمًا ممتازًا ولها أطر عمل كثيرة فأنت تبحث عن لغة بايثون. الخيارات المتاحة أمامك هي إطار العمل جانغو (Django) وفلاسك (Flask) وغيرها، يمكنك تعلم لغة البرمجة بايثون لتطوير الواجهات الخلفية من خلال قراءة سلاسل المقالات عن تعلم بايثون في قسم البرمجة في أكاديمية حسوب، ثم الانتقال إلى تعلم إطار العمل جانغو أو فلاسك. يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق لغة بايثون. اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام بايثون: لغة بايثون وإطارات العمل المبنية عليها (مثل جانغو وفلاسك) وقواعد البيانات (مثل MySQL و PostgreSQL وغيرها). تعلم تطوير تطبيقات الجوال ازداد عدد تطبيقات الجوال لأنظمة أندرويد و iOS ازديادًا كبيرًا في الفترة الماضية، وأصبح لكل شركة أو خدمة تطبيق خاص بها يسهِّل على مستخدميها الوصول إلى الخدمات التي توفرها. النظامان الرئيسيان المسيطران على سوق الجوال حاليًا هما أندرويد ثم iOS. يمكن برمجة تطبيقات أندرويد بلغة Java أو Kotlin (أو غيرهما) وبرمجة تطبيقات iOS باستخدام Swift (وغيرها). ستكتشف أنَّ عليك تطوير تطبيقين منفصلين تمامًا، واحد لهواتف أندرويد وآخر لهواتف iOS، وذلك يسبب زيادةً في حجم العمل المطلوب وصعوبةً في إدارة التغييرات. بسبب ذلك، ظهر مفهوم "التطبيقات الهجينة"، وهي تطبيقات تعمل على نظام أندرويد و iOS دون أي تعديلات، وذلك باستخدام تقنيات مشتركة وهي تقنيات الويب. أي أصبح بإمكان مطوري الويب الاستفادة من معلوماتهم في تطوير تطبيقات الجوال باستخدام منصة كوردوفا Cordova. تسمح منصة كوردوفا للمبرمجين بالتعامل مع مختلف وظائف الجهاز باستخدام لغة JavaScript، مثل الوصول إلى الموقع الجغرافي، والتقاط صور بالكاميرا، والتعامل مع الملفات وخلاف ذلك. طوِّرت في الفترة الماضية تقنيات أخرى مبنية على JavaScript مثل ReactNative المبنية على مكتبة React.js والتي تسمح للمطورين بكتابة تطبيقات أصيلة (وليست هجينة) باستخدام تقنيات الويب. تستطيع تعلم تطوير تطبيقات الجوال عبر كوردوفا من خلال التسجيل في دورة تطوير تطبيقات الجوال باستخدام تقنيات الويب المقدمة من أكاديمية حسوب، والتي تحتوي على 15 ساعة فيديو تتوزع على أربعة مسارات تعليمية تشرح أمثلة عملية تطبيقية شرحًا مفصلًا. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق منصة كوردوفا. اللغات والتقنيات المستخدمة في تطوير تطبيقات الجوال: Java و Swift و Kotlin و Cordova و ReactNative. تطوير الألعاب تطوير الألعاب هو المجال الذي يحلم جميع مستخدمي الحاسوب بالدخول إليه. فالأغلبية تعرفوا على الحاسوب من خلال ألعاب الفيديو ومن ثم بدؤوا برحلة الاستكشاف عن البرمجة والتطوير. أغلب من يجيب عن تطوير الألعاب يقول "عليك بتعلم لغة C++‎" لكن دعني أفصِّل لك الأمر قليلًا. برمجة الألعاب تتطلب عملًا كثيرًا من فريق عمل كبير، مدعوم من شركة تجارية. من الصعب على مطوِّر وحيد أن ينشئ لعبة كاملة من الصفر دون فريق. تُطور أغلبية الألعاب باستخدام محرِّك (engine) والذي يسهِّل الأمر على المطورين ويتيح بيئة تطوير مناسبة للألعاب، ويتيح الميزات الأساسية لجميع الألعاب مثل التحكم بالكاميرا ونمذجة الشخصيات ثلاثية الأبعاد وتحريكها والأمور الفيزيائية الأخرى. هنالك عدد كبير من محركات تطوير الألعاب، ومن المرجح أنك شاهدت شعارها في الألعاب التي لعبتها من قبل، ومن أشهرها: Unreal Engine و Unity. يمكن التعامل مع هذه المحركات باستخدام عدِّة لغات، مثل C++‎ (وهي أشهرها)، وجافا (خصوصًا للألعاب على هواتف أندرويد) وحتى يمكن استخدام JavaScript في التعامل مع بعضها. تذكر أنّ الألعاب غير محدودة بتطبيقات سطح المكتب أو الهواتف، فهنالك ألعاب كثيرة تعمل على المتصفحات باستخدام تقنيات HTML5 و JavaScript. اللغات والتقنيات المستخدمة في تطوير الألعاب: C++‎ و Java و JavaScript ومحركات Unity و Unreal Engine. تطوير الأنظمة المدمجة الأنظمة المدمجة هي أنظمة حاسوبية شبيهة بالحاسوب ولكنها لا تملك كل ميزات الحاسوب الذي تراه أمامك الآن. بعبارة أخرى، النظام المدمج هو حاسوب صغير مبرمج لأداء مهام محددة فقط ومدمج ضمن الجهاز أو البيئة المراد استخدامه فيها. أنت الآن محاط بالكثير من الأنظمة المدمجة الآن مثل جهاز مقياس مستوى المياه وجهاز التحكم بالتلفاز وجهاز إنذار الحريق وأجهزة المراقبة ...إلخ. حتى إشارات المرور وتنظيم السير وألعاب الأطفال الآلية تصنَّف على أنها أنظمة مدمجة. هل سمعت أيضًا بمصطلح "إنترنت الأشياء"؟ إنترنت الأشياء هو نظام مدمج متصل بالإنترنت. نعم، بهذه البساطة! لابد الآن أن يتبادر إلى ذهنك الساعات والثلاجات والغسالات الذكية وطائرات الدرون وأنظمة المراقبة عن بعد وأنظمة البيوت الذكية، إذ كلها أمثلة على إنترنت الأشياء. كيفية برمجة الأنظمة المدمجة أشهر وأكثر لغة برمجة تستعمَل في برمجة الأنظمة المدمجة وإنترنت الأشياء هي لغة C (أي لغة سي) وكل اللغات المشتقة منها (مثل‎ لغة أردوينو C). تُستعمَل لغة C++‎ كثيرًا في هذا المجال، إذ تعدُّ لغة ذات مستوى أعلى من لغة C لدعمها للبرمجة كائنية التوجه. أضف إلى ذلك أنه بدأ حديثًا استعمال لغة بايثون في برمجة تطبيقات الأنظمة المدمجة مع أنها لم ترتبط تقليديًّا بهذا المجال سابقًا. صحيح أنَّ لغة بايثون ليست بقوة لغة C و C++‎ في هذا المجال إلا أنها تستمد ميزاتها وفعاليتها من المكتبات الهائلة المتوافرة فيها. بعيدًا عن C وبايثون، تستعمل في مجال الأنظمة المدمجة أيضًا لغات أخرى تنضوي ضمن "لغات توصيف العتاد" (Hardware Description Languages)؛ لغتي VHDL و Verilog هما من أشهر لغات توصيف العتاد المستعملة في هذا المجال. تُستعمَل مثل هذه اللغات في برمجة "مصفوفة البوابات المنطقية القابلة للبرمجة" (FPGA أي Field Programmable Gate Array). أخيرًا، قد تجد بعض المراجع تشرح برمجة الأنظمة المدمجة بلغة أخرى تدعى "لغة التجميع" (Assembly Language) التي تصنف من اللغات منخفضة المستوى. يتطلب تعلم البرمجة باستخدام هذه اللغة فهمًا واسعًا بمعمارية وحدة التحكم المركزية والمعالج بالمجمل لأنها أقرب لغة يفهمها الحاسوب. الانتقال إلى هذه اللغة قد يكون في مستويات متقدمة من تعلمك لبرمجة الأنظمة المدمجة وتطبيقات إنترنت الأشياء. من ميزات البرمجة بهذه اللغة هي التحكم الواسع بالعتاد والمعالج الذي لا توفره لغات أخرى. يقال أن هذه اللغة صعبة بعض الشيء ومعقدة، ولكن لا أرى ذلك! قد يكون سبب قول ذلك هو أن لغة التجميع هي لغة منخفضة المستوى وأقرب شيء إلى لغة الآلة ولا يستطيع من يلقي نظرة على شيفرة مكتوبة فيها فهمها مطلقًا إن لم يعرفها. تطوير تطبيقات سطح المكتب مجال تطوير تطبيقات سطح المكتب كالمحيط الواسع؛ إن لم تملك بوصلة وتعرف إلى أين تريد الاتجاه، ستضيع فيه حتمًا. هنالك الكثير من أنظمة التشغيل أشهرها - وأكثرها سيطرةً على السوق حاليًا - هي: نظام التشغيل ويندوز، ولينكس، وماك (macOS)، ويملك كل نظام تشغيل تطبيقات مكتبية خاصة به. لذلك، يجب عليك أولًا -قبل الدخول إلى سوق برمجة تطبيقات سطح المكتب- تحديد نظام التشغيل المستهدف. أي يجب الإجابة على السؤال التالي: هل يستهدف تطبيقك نظام تشغيل محدد، أم تريد لتطبيقك أن يعمل على عدة أنظمة تشغيل في آن واحد؟! بعد تحديد نظام التشغيل المستهدف، اطلع على اللغات المفضل استعمالها في ذلك النظام لبرمجة تطبيقاته؛ فعلى سبيل المثال، اللغات C و C++‎ و C#‎ و VB.NET هي الأكثر استعمالًا في برمجة تطبيقات نظام التشغيل ويندوز، واللغات C و C++‎ و Bash هي الأكثر استعمالًا في برمجة تطبيقات توزيعات نظام التشغيل لينكس. أمَّا نظام الشغيل ماك، فينفرد باستعمال لغة Objective-C. حسنًا، دعني أخبرك الحقيقة، كل لغة برمجة عامية الغرض يمكن استعمالها في برمجة التطبيقات، إذ أشهر اللغات التي تُدرَّس أكاديميًّا في هذا المجال هي لغة جافا (Java). لا يخفى على القارئ دخول لغة بايثون بقوة على هذا المجال نظرًا لامتلاكها الكثير من المكتبات الرائعة وسهولة صياغتها. دخلت مؤخرًا لغة جافاسكربت على سوق برمجة تطبيقات سطح المكتب عبر إطار العمل Electron (إلكترون)، إذ توظف في هذا المجال تقنيات تطوير الويب (HTML و CSS و JavaScript ...إلخ.). بدأ هذا الإطار ينتشر كالنار في الهشيم مما دفع شركات كبيرة لتطوير تطبيقات سطح المكتب الخاصة بها باستعمال هذا الإطار ومنها شركة Slack التي استعملت هذا الإطار لتطوير تطبيقها المكتبي. أعلم أنك الآن تشعر بالضياع من كثرة لغات البرمجة والتقنيات المستعملة في هذا المجال؛ معك حق، فقد أخبرتك بذلك منذ قليل. دخول هذا السوق يحتاج منك تحديد هدفك منه بالضبط. هل لديك فكرة تطبيق وتريد إنشاءه والربح منه؟ هل تريد العمل لدى شركة محددة؟ ما هي مواصفات التطبيق الذي تريد إنشاءه أو تريد العمل على تطويره؟ كل ذلك يلعب دورًا في تحديد لغة البرمجة الأنسب لك لتعلمها. في النهاية، إن تعلمت أساسيات البرمجة وأتقنت العمل على لغة برمجية محددة، سيسهل عليك الانتقال إلى لغة برمجة أخرى، إذ أغلب لغات البرمجة تشبه بعضها بعضًا من ناحية المفهوم والمضمون وتختلف بعض الشيء من ناحية الصياغة والشكل. لذلك، اطمئن من هذه الناحية. كيفية اختيار لغة البرمجة التي تناسبك يمكنك اختيار لغة البرمجة اعتمادًا على المجال الذي تحب العمل فيه، سألخص لك مسار التعلم لمختلف مجالات العمل: العمل كمطور ويب full-stack: يعني ذلك تعلم تطوير واجهات المستخدم، وتطوير الواجهات الخلفية. يمكن التخصص بمجال واحد من هذين المجالين فقط، إذ يُطلَب كثيرًا في سوق العمل مبرمجين متخصصين في واجهات المستخدم أو الواجهات الخلفية. العمل كمطور تطبيقات للهواتف المحمولة: يمكنك تعلم برمجة تطبيقات أندرويد أو iOS كلًا على حدة، أو استعمال تقنيات مثل كوردوفا للتطوير لكلا النظامين معًا. العمل كمطور تطبيقات سطح المكتب: يمكنك البدء بالتخصص في تطوير تطبيقات مكتبية لنظام تشغيل محدَّد (مثل نظام التشغيل ويندوز أو لينكس) عبر تعلم لغة البرمجة المستعملة في ذاك المجال (كما أشرنا إلى ذلك في قسم تطوير تطبيقات سطح المكتب)؛ خيار آخر هو تعلم اللغات والتقنيات التي تمكنك من تطوير تطبيقات عابرة للمنصات (تعمل على عدة أنظمة تشغيل) مثل استعمال إطار العمل Electron. العمل كمطور للأنظمة المدمجة والأنظمة الذكية: لغة C هي أساس هذا المجال، سواءً كنتَ تتعامل مع المتحكمات مباشرةً، أو تتعامل مع شريحة مثل أردوينو (والتي تمتلك لغةً مشتقةً من C). نصائح لتعلم البرمجة مشوار تعلم البرمجة طويل وشائق، وجميل ومسلٍ، لكنك قد تصاب بالإحباط في بداية طريقك لكثرة الأمور التي عليك الإلمام بها، لذا جهزت إليك النصائح الآتية من تجربتي في البرمجة: حدد هدفك من تعلم لغة البرمجة وسوق العمل الذي تريد دخوله واجعله واقعيًا. بدون هدف، أبشرك بأنك ستتخلى عن فكرة تعلم البرمجة بعد حين. انتبه إلى أن يكون هدفك واقعيًا وقابلًا للقياس والتجزيء على مراحل. بدون ذلك، ستفشل من أول عقبة وتترك تعلم البرمجة. أعرف نفسك جيدًا ونقاط قوتك وضعفك. كلنا لديه نقاط قوة وضعف، ولكن المفلح من عمل على ترميم وتحسين نقاط ضعفه في المجال الذي يرغب بتعلمه. رشح دورة واحدة وكتابًا واحدًا وابدأ بقراءة الكتاب ومتابعة الدورة تدريجيًّا ثم انتقل بعد الانتهاء إلى دورة أخرى وكتاب آخر، إذ سيجنبك ذلك التشتت بين الدورات الكثيرة والكتب العديدة. الشيء الذي أفعله قبل بداية تعلم شيء جديد هو ترشيح قائمة من عدة كتب ودورات ثم ترتيب هذه الكتب والدورات بحسب جودتها ومدى بساطتها وتعقيدها. أرقم الكتب والدورات وأبدأ بالخيار الأول منها. أحدد الوقت التقريبي الذي يأخذه كل خيار لدراسته وأجدول الخيارات البقية على رزنامتي الخاصة. لا تأخذ العلم إلا ممن تثق بعلمه، فالكثير من المبتدئين يحاولون مساعدة غيرهم وقد يضعون معلومات مغلوطة دون قصد. طبق ما تعلمته مباشرة، وأنشئ أي شيء من كل أمر جديد تتعلمه حتى لو كان رسمة بسيطة أو شيفرة من عدة أسطر فقط. فرحة إنجاز شيء مما تعلمته تدفعك لتعلم المزيد والاستمرار في طلب العلم. نظم وقتك بورقة وقلم، حدد بداية كل أسبوع خطةً لسائره والتزم بتنفيذها. أخبر أصدقائك أن لديك إلتزام وأمور مهمة عليك إنجازها. خصص وقتًا للاستراحة بالطبع ولا تنسَ نصيبك منها. في نهاية كل أسبوع، وازن مدى الإنجاز الذي حققته ومدى تطبيق الخطة التي وضعها وحاول أن تصل النسبة إلى 100%. أنصحك بقراءة ومتابعة استراتيجيات تنظيم الوقت ورفع الإنتاجية. لا تنسَ أن تكافئ نفسك في كل مرة تنهي فيها كتابًا أو تكمل العمل على مشروع. لا تنسَ حظك من الاستراحة، لأن طريق البرمجة قد يكون له بداية ولكن النهاية بعيدة ومتعبة -مثله مثل أي مجال آخر-. في النهاية أرجو لك كل التوفيق في مشوارك البرمجي. وأرجو منك أن تشاركنا تجربتك في تعلم البرمجة، لعل غيرك يستفيد منها.
  3. نشرح في هذا الفيديو طريقة تثبيت TypeScript وإعدادها لتستطيع الاستفادة منها في تطوير تطبيقاتك. يمكنك الاستعانة بتوثيق TypeScript في موسوعة حسوب المتاح باللغة العربية.
  4. حين يسألني أحدهم عن كيف يصبح مبرمجا وما هي المصادر التي يجب أن يعتمد عليها وما الخطوات التي يجب إتباعها، فإن الجواب المناسب الوحيد، والذي لم أقله بعد لأحد، هو ”إذا كنت تملك ما يؤهلك لأن تكون مبرمجا فإنك ستعرف طريقك بنفسك“. السبب هو أن البرمجة فن كما أنها علم. من منطلق أنها فن فهي تتطلب حدا أدنى من الموهبة وليس فقط الاكتفاء بحفظ القواعد، ومن حيث أنها علم فهي مبنية أساسا على المنطق وبصفة عامة على الرياضيات، التي تعتبر كابوسا لدى الطالب العربي. حين تملك الموهبة لتبدع بالبرمجة وحين تملك الإستعداد العقلي للتعامل مع النصوص البرمجية المجردة، فإنك آنذاك لن تحتاج لطرح السؤال السابق. الخلاصة.. إذا لم تكن قادرا على: الاستمتاع بالبرمجة وتذوقها كتذوق الشعر، التفكير المنطقي المجرد، وإيجاد الإبرة المناسبة بين كومة من الإبر، فلا تضيع وقتك في تعلم البرمجة، لأنك لن تتعلمها ولأنها لا تناسبك. إذا كنت ترى نفسك صالحا لتكون مبرمجا فلدي لك نصيحتان لا غير: (1) ابحث بنفسك، ستجد الكثير من المصادر المتنوعة وكثيرا من الآراء المتناقضة، وحدك ستكون قادرا على اختيار ما يناسبك. (2) النصيحة الثانية هي تمرن دائما. أول خطوة لكي تنطلق في تعلم البرمجة هي البدء فورا في البرمجة. لا يهم ماذا ستبرمج ولا كم الأخطاء التي سترتكب. المران المتواصل هو وحده الكفيل بتحسين قدراتك. سيكون من الجيد أيضا ألا تكتفي بالتمرن وحيدا، ثمة آلاف البرامج الحرة المتاحة للتطوير لمن يشاء. جرب أن تدلي بدلوك وأضف تعديلاتك على تلك البرامج. ستُرفض بعض التعديلات وستواجه الكثير من الانتقادات اللاذعة، لكنك تباعا ستحسن من جودة النصوص البرمجية التي تكتب، إلى أن تصبح محترفا فخبيرا. كيف تعلمت أنا البرمجة؟ ملاحظة أولية: لا أعتبر نفسي مبرمجا بعد، لكني على الأقل أعرف الأساسيات التي تتيح لي برمجة مشاريعي الخاصة. لفترة طويلة كنت أتعلم البرمجة بشكل نظري محض. لم يكن لدي جهاز كمبيوتر آنذاك وكنت أقتنص أي مصدر أجده بأي لغة كان. القراءة دون التطبيق ليست طريقة فعالة من أجل تعلم البرمجة، لكن لم يكن لدي غيرها (ما زلت حتى الآن أحب كتابة الأكواد في الورقة، حين أكون خارج البيت، ثم أنقلها للكمبيوتر لاحقا). كنت أقرأ كثيرا. لا أفهم أغلب ما أقرأ لكني كنت أخزنه في ذاكرتي لوقت آخر حتى أجد القطع الناقصة التي تتيح لي فهم الصورة الكاملة. أول ما تعلمته كان HTML&CSS، (أعتقد سنة 2000). الطريف أنني تعلمتهما بالإسبانية خلال ورشة نظمها طلبة إسبان في المدينة (هناك سمعت أول مرة بجوجل). لم أكن أعرف من الإسبانية إلا بضع كلمات مما دخل العامية المغربية ومما تشابه مع كلمات فرنسية. لكني قبل ذلك كنت قرأت بعض المعلومات المتفرقة حول HTML في مجلات عربية وفرنسية. بعد ذلك كانت لي بضع محاولات مع جافاسكريبت، لكن المشكلة آنذاك أن جافاسكريبت لم تكن تستخدم كلغة حقيقية كما الآن، بل فقط بغرض تزيين الصفحات ببعض الحركات الديناميكية، لذلك لم أتعلم منها الكثير. ثم جاء الدور على PHP. أظن سنة 2004. قرأت بعض الأساسيات في مواقع فرنسية ثم بدأت أحمل بعض السكريبتات الصغيرة وأعدل عليها قليلا. لكن كل ذلك كان على سبيل اللهو لا غير. رغم أنني بدأت آنذاك في تقديم خدمات تصميم المواقع وتركيب برامج PHP، إلا أنني لم أكن أنظر إلى الأمر بشكل جدي، ولم تكن البرمجة تزيد عن كونها مجرد هواية أخرى، لذلك لم أتعمق في تعلمها. إن كنت اليوم قد وصلت إلى مستوى معقول في PHP مع إمكانية لاستخدام لغات برمجة أخرى بسهولة نسبية، فإن ذلك راجع فقط للممارسة، التي رغم أنها لم تكن متعمقة إلا أنها ساهمت، بجانب قراءاتي المتواصلة، في وصولي إلى المستوى الحالي. أفضل المصادر التي صادفتها خلال مسيرتي البطيئة في تعلم البرمجة: جوجل: محرك بحث لا غنى عنه في أي مرحلة. دائما عد إليه لتجد حلول المشاكل التي تصادفها. stackoverflow: موقع مهم جدا للمبرمجين. يمكنك أن تجد فيه حلولا تقريبا لكل المشاكل التي قد تصادفها، ويمكنك أن تطرح أسئلتك وتتواصل مع المبرمجين المحترفين. PHP Manual: أفضل دليل لتعلم PHP هو دليل الاستخدام الرسمي، الذي يغنيه المبرمجون من كل أنحاء العالم بالتعليقات والأمثلة. PHP 5 Power Programming: كتاب مهم جدا، لا يعيبه سوى أنه لم يحدث منذ سنة 2004، وهي فترة طويلة عرفت خلالها اللغة الكثير من التحديثات. smashingmagazine: موقع شهير لا غنى عنه لأي مصمم. يتابع أيضا الجديد في HTML&CSS وجافاسكريبت. Beginning Ruby: أفضل كتاب لشرح أساسيات روبي. هو صالح أيضا حتى لمستخدمي اللغات الأخرى بحكم أساسيات البرمجة التي يتطرق لها. في نفس السياق، وجدت أن الإطلاع على إطار العمل RubyOnRails مهم جدا للحصول على أفكار جديدة وأساليب مختلفة في البرمجة يمكن الاستفادة منها عند استخدام لغات برمجة أخرى. شخصيا تغير أسلوب استخدامي لـ PHP تماما بعد أن بدأت في استخدام ريلز.
  5. إن القدرة على البرمجة هي مهارة رائعة حيث تعطيك شعورًا بالرضى على المستوى الشخصي والمهني، بالإضافة إلى أنها تمكّنك من البناء وحل المشاكل والاختراع. كما تستطيع أن تفتح لك أبوابًا لكل أنواع المهن بفوائد كبيرة، كمرتبٍ محترم أو حرية العمل من أي مكان وفي أي وقت، أو كلاهما معًا. من الطبيعي إذن أن نرى تزايد عدد الأشخاص من مختلف الخلفيات الذين يقررون أنهم يرغبون بتعلّم البرمجة. ولكنهم يصطدمون في بداية الطريق بحقيقة غير سارّة: تعلم البرمجة أمرٌ صعب. هناك الكثير من التعقيد والارتباك، وسيكون كل شيءٍ تقريبًا في البداية غير منطقي. وعلى عكس التوقعات، قد يستمر شعور "لا أفهم ذلك" لوقتٍ طويل من الرحلة تلك، دافعًا العقول المتحفزة للتعلم إلى الشعور باليأس، الضياع أو الرّغبة بالاستسلام. العبرة من القصة هي أنه عليك أن تكون مستعدًا. إن الطريق إلى فردوس البرمجة هو طريقٌ طويل، وبدون العقلية الصحيحة في البدء، سوف يفقد الطريق بريقه بسرعة. في هذا المقال، سأحاول تقديم بعض الإرشادات حول ما يجب توقعه في هذه الرحلة، وكيف تواجه ذلك، وماهي الأدوات والمصادر لتساعدك في رحلتك. ما يجب توقعه قد يبدو الأمر بديهيًّا، ولكن أول أمر عليك إدراكه هو أن البرمجة في جوهرها موضوعٌ تقني. المهارات التي ستكتسبها في البداية ستتطلب الكثير من "الدّقة" و "الصحة" ومحاولات المراوغة لن تفيدك إطلاقًا. عليك أن تتعلم قليلًا من الرياضيات، وكذلك الكثير من الأمور التي قد "تبدو" وكأنها رياضيات، مثل المنطق العمليّاتي. خلاص القول هي أن تعلم أساسيات البرمجة يتطلب الكثير من التركيز والتدريب. ولكن اعلم أن عددًا لا يحصى من الأشخاص، التقنيين وغير التقنيين، نجحوا باجتياز هذه الرحلة قبلك، فلا تشعر بالتثبيط. وكما سترى هناك كميّة هائلة من المصادر لأشخاص مثلك تمامًا للمساعدة على جعل هذه العملية أسهل ما يمكن. إن منحنى تعلم البرمجة أكثر ما يكون انحدارًا في بدايته. هناك كمية كبيرة من الأساسيّات التي عليك استيعابها، وذلك يتضمن الأجزاء المختلفة من لغة البرمجة (التعابير expressions، المُتغيّرات variables، أنماط البيانات data types، العمليات operators، الحلقات loops، الجمل الشرطيّة conditional statements، التوابع functions، الأصناف classes)، والتقنيات لفهم كم من الوقت والذاكرة سيستخدم حاسوبك لتنفيذ نصك البرمجيّ (درجة التعقيد). ستكتب الكثير من البرامج التي لن تعمل في أول مرة، وبالتالي ستتأقلم مع كابوس كل مُبرمج: التّنقيح debugging. عند تعلّمك كيفيّة كتابة البرنامج، ستصبح قادرًا على تعلم كيفيّة كتابة برنامج جيّد. إن كتابة برنامجٍ فعّال، سهل الفهم والقراءة ومن السهل تطويره، هو فنّ، وهذا أمر يتطوّر بشكلٍ مستمر. سوف تتمكن من البدء باستكشاف فلسفات برمجيّة وتنتقل من مجرد كونك "مُبرمج" إلى "مهندس برمجيّات". وهذه عملية تتطلب أيضًا الكثير من الوقت والتدريب، ولكن كلما تفوّقت في ذلك، فُتحت أمامك فرصٌ أكثر. كيفية تعلم البرمجة تختلف الرحلة إلى فردوس البرمجة من شخصٍ لآخر، ولكن هناك مبادئٌ مشتركة يمكن أن يستفيد منها جميع المسافرون. هذه العملية البسيطة التي أوصي بها إن كنت تبدأ بتعلم البرمجة الآن: 1. قم باختيار وجهتك: اختر لغة، أية لغة إن كنت جديًا في موضوع تعلم البرمجة، فلن يُهم كثيرًا أية لغة تختار، حيث تحمل معظم لغات البرمجة الرائجة نفس المفاهيم الأساسية، وعندما تتمكن من البرمجة في اللغة التي تعلمتها في البداية، سيكون من السهل أن تتعلم لغة أخرى بسهولةٍ أكبر. إن كنت تتعلم البرمجة ضمن برنامج جامعي، أو ما شابه، فمن المرجح أن يتم اختيار اللغة بالنيابة عنك. بكل الأحوال، إن لم تكن تعلم تمامًا ماذا تريد القيام به على المدى البعيد، هناك خمسة لغات فقط أنصح بالتفكير بها، وهي تحقّق توازنًا بين سهولة التعلم، تعدد استخدامات المعرفة التي ستكتسبها، والمجال الواسع من فرص العمل على المدى الطويل: Ruby، JavaScript، Python، C و Java. وهذه ملاحظاتٌ عامّة عن كل لغة لتساعدك على الاختيار: اللغات المفسرة من الأسهل البدء باللغات المفسّرة Interpreted Languages، وهذا لأنه يمكن تنفيذ النص البرمجي بمجرّد أن تتم كتابته، بينما تتطلب اللغات المجمّعة compiled languages، خطوة إضافية بين كتابة وتنفيذ البرنامج. كنتيجة، تسمح اللغات المفسرة ببرمجةٍ أسرع، ولكنها لا تستخدم موارد الحاسوب بالشكل الأمثل، ومن السهولة أن تمر الأخطاء دون الانتباه إليها. فهي مناسبة للتطبيقات التي لا يكون للأداء فيها أولوية. هذه اللغات رائجة في مجال تطوير الويب، حتى أن أحدها، JavaScript، هي اللغة الوحيدة التي يمكن تنفيذها مباشرة من متصفح إنترنت، مما ساهم بانتشارها كأحد أكثر اللغات المُربحة حتى الآن. تستخدم عادة من أجل المساوئ الميزات اللغة تطبيقات الواجهة الخلفية Backend ألق نظرة على Ruby on Rails - قد تؤدي المرونة الزائدة إلى كثير من الغموض حول ما يتم فعليًا - الأداء البطيء يجعلها غير مناسبة للتطبيقات المتقدمة. - قواعد كتابة شديدة المرونة. - سهلة البدء بها. - الطلب العالي عليها يؤمن الكثير من الوظائف. Ruby - تطبيقات الواجهة الأمامية، انظر React,Angular, Ember, jQuery . - تطبيقات الخلفية الخلفية، انظر Node.js . - قواعد الكتابة المعقدة قد تجعلها مُربكة أحيانًا. - تشكل تحدي للمبتدئين أكثر من Ruby و Python. - الخيار الوحيد لتطبيق مُضمّن في المتصفح. - ضرورية لكل موقع حديث. - الطلب العالي جدًا يؤمن وظائف كثيرة بمرتبات JavaScript - تطبيقات الواجهة الخلفية، انظر Django. - البحث العلمي والأكاديمي، انظر . SciPy. - الأداء البطيء يجعلها غير مناسبة للتطبيقات المتقدمة. - قابلية منخفضة للتوّسّع Scalling، تصميم اللغة يجعلها غير مناسبة للبرامج الضخمة. - أنيقة، قواعد الكتابة فيها محبوبة من طرف ممارسيها. - سهل البدء فيها. Python اللغات المجمعة Compiled Languages بعد أن يتم تجميع النص البرمجي، يتم تحويله من نصٍ برمجي يمكن قراءته من قبل البشر إلى نصٍ أمثل للآلة، قبل أن يتم تنفيذه. وتكون النتيجة أسرع وأكثر فعاليّة من اللغات المفسرة. والمجمّع (compiler) الذي يقوم بذلك، عليه كجزء من وظيفته أن يتأكد من أن كل ما في النص البرمجي "منطقي"، وبالتالي يستطيع أن يتعرف ويمنع أنماطًا عديدة من الأخطاء التي تكون اللغات المفسرة عُرضة لها. ولهذا السبب من الصعب اللوذ بالأخطاء أو البرامج السيئة مع هذه اللغات. كما ستُجبرك على اكتساب فهمٍ أعمق لما يجري فعلًا "تحت الغطاء"، وستتعلم أكثر بكثير عن كيفيّة عمل الحاسوب. والثمن، هو أن هذه اللغات تتطلب الكثير من الجهد، وتشكل تحديًا أكبر للمبتدئين. تستخدم اللغات المجمعة في التطبيقات التي تتطلب أداءًا وموثوقية، ويتضمن ذلك التطبيقات المضمنة، التي تعمل على عتادٍ ذو قدرات محدودة وتطبيقاتٍ ضخمة ومعقدة، حيث يؤدي خطأٌ صغير إلى كوارث ضخمة. تستخدم عادة من أجل المساوئ الميزات اللغة - أنظمة التشغيل. - ألعاب الفيديو المتطورة. - النظم المضمنة. - علم الروبوت والذكاء الصنعي. غالبًا الأكثر صعوبة للتّعلم في هذه القائمة. - بإمكانها توفير أداء أفضل أي من اللغات عالية المُستوى. - أكثر اللغات التي ستعلمك كيفية عمل الحاسوب. C - تطبيقات المشاريع الضخمة. - تطوير الويب. - تطوير تطبيقات الأندرويد. - قواعد الكتابة المعقدة قد تكون مرهقة للقراءة والعمل. - يعتبرها الكثيرون قديمة الطراز، غير مرنة وشعبيتها آخذة بالانخفاض. - بشكل عام، اللغة الأكثر استخدامًا. - صرامة الكتابة تفرض طريقة تفكير واضحة وفعّالة. Java HTML و CSS ليست لغات برمجة يجب الإشارة إلى أن HTML و CSS المستخدمة في كل صفحات الويب التي سبقت لك زيارتها ليست بلغات برمجة. إنما هي لغاتٌ وصفية presentational languages، تستخدم لتحديد كيف يجب أن تبدو الأشياء وماذا يجب أن تتضمن، ولكن لا تحدد كيف يجب أن تتصرف. ولكنها قد تكون مكانًا جيدًا للبدء لأنها سهلة التعلم، وستعلمك كيف تقوم بطباعة الأشياء بشكلٍ صحيح. وإذا كنت تنوي الخوض في مجال تطوير الويب عليك تعلمهما بأي حال من الأحوال. 2. ابدأ بشكل صغير التعلم سيأخذ وقتًا، وهنالك الكثير ليتم استيعابه. إذا حاولت بناء تطبيقٍ كامل في يومك الأول، لن تصل إلى نتيجة. كي تجنب نفسك الإحباط، ابدأ بحل مشاكل صغيرة وبسيطة، وتدرّج صعودًا من ذلك. على سبيل المثال، إن أول برنامج يتم كتابته عند تعلم أي لغةٍ جديدة هو برنامج "Hello, World !" (مرحبا بالعالم) والذي يقوم ببساطة بطباعة عبارة "Hello, World !" على الشاشة. وفي معظم لغات البرمجة من المستحيل كتابة برنامجٍ أبسطَ من ذلك. ووضوحًا لا يقدم هذا البرنامج الكثير من الفائدة، ولكنه يستلزم العديد من أساسيات اللغة لكتابته، فهو مثاليٌ لتتعرف على كيفية الكتابة في هذه اللغة. من هنا يمكنك البدء بكتابة برامج تطرح أو تضيف بعض الأرقام، ومن ثم شيئا تطبيقا يقرأ ما يكتبه المستخدم. بعد ذلك يمكنك تعلّم الجمل الشرطية، التي هي طريقة لاتخاذ قرارٍ ما، والحلقات التي تقوم بإعادة تنفيذ مهام معينة. وسرعان ما يصبح بإمكانك كتابة أول كائن Object، ومن هناك تستطيع تجريب بناء تطبيقاتٍ كاملة. 3. كن صبورا قد تشكل المفاهيم الجوهرية للبرمجة تحديًا حقيقيًا. ومعظمها لا يكون بديهيًا إن لم تكن تعلم كيف يعمل الحاسوب بشكلٍ مُعمّق. على سبيل المثال، عندما بدأت بالتعلم وجدت عملية التّنقيح debugging مثيرة للحنق، ولم أشعر أنها برمجة حتى. فعوضًا عن كتابة نصٍ برمجي جديد يقوم بأشياء جديدة ظريفة، كنت أمضي يومًا كاملًا في قراءة نصي البرمجي في محاولة لفهم أين أخطأت هذه المرة. في النهاية أكتشف أنني نسيت أن أضع فاصلةً منقوطة في مكانٍ ما، أو أني استخدمت عدة فراغاتٍ عوضًا عن فراغٍ واحد، وحين يصبح برنامجي جاهزًا للعمل يكون قد انتهى اليوم، وأشعر أني غبيٌ جدًا، وأن ما أقوم به هو إضاعة للوقت. سيحصل هذا الأمر معك، ويدفعك إلى الجنون. ولهذا فإن أحد عوامل النجاح هي أن تكون صبورًا، ولا تقسُ على نفسك. وتوصي بعض أفضل النصائح في هذا الموضوع أن تركز على العملية وليس الأهداف. فإن قمت بالتركيز على الهدف النهائي ("أريد بناء موقع في نهاية الشّهر القادم") سوف تشعر بالإحباط، وبأنك فاشل. بينما من خلال السماح لنفسك أن تأخذ كل الوقت اللازم لتحرزَ تقدمًا، سوف تحقق نجاحًا أكبر. 4. تدرب تدرب تدرب ومثل أية مهارة، سوف يتحسّن مستواك من خلال التدريب. لا يوجد شيء مماثل للجهد المبذول في شيء في سبيل تعلم القيام به. حتى لو خصصت بضعة ساعات أسبوعيًا، إن استمريت بالتدرب بانتظام، سوف تتمكن، يومًا ما، من كتابة البرامج. في النهاية سوف تكتسب حدسًا للأمور، وسيصبح أمرٌ تطلب منك يومًا كاملًا في البدء (مثل البحث عن خطأ ما)، يأخذ فقط بضع ثواني. حين تشعر أنك تمكنت تقريبًا من أساسيات البرمجة، فإن البدء بمشروعك الأول هو طريقةٌ رائعة للتدريب. فكر بتطبيقٍ بسيط ترغب ببنائه، مثل قائمة مهام، أو برنامج آلة حاسبة (مجددًا، ابدأ بشكل صغير)، وجرب القيام به. سيعلمك ذلك كيف تحل مشاكل هيكلية وتصميمية، وبناء أجزاء مختلفة تعمل معًا بشكل جيد. هذه هي المهارات الأساسية التي ستخولك أن تعتبر نفسك مبرمجًا. المراجع وفقًا لأهدافك، أسلوب التعلم الذي ستختاره وأساليبه قد ترغب باستخدام مصادر مختلفة خلال رحلتك. لمساعدتك على اختيار الأساليب المناسبة لك، هذا ملخص لبعض الأدوات التي تستطيع استخدامها، مُرتبة تقريبًا من التعلم الأكثر هيكلية إلى الأقل هيكلية. التعليم المنظم (ذو هيكلية) هذه هي الفئة التي تقدم مدربين، وظائف، اختبارات، درجات، مواعيد نهائية، وعواقب حقيقية في حال لم تضع دراستك في قمة أولوياتك. هذه الخيارات التي ستُجبرك على الذهاب إلى الدرس أو الرسوب في البرنامج. شهادة جامعة رسمية هي الخيار الأكثر كلفة، ولكن بالنسبة لكثيرين، الخيار الأكثر قيمة، ستقدم لك شهادة جامعية رسمية أفضل أساسٍ لحياة مهنية مزدهرة في البرمجية وتقنية الحاسوب. ستتلقى اعترافًا بإنجازاتك على شكل شهادة (أفضلية كبيرة عند دخول سوق العمل). ولكن الأهم من ذلك هو أنك ستتخرج ولديك فهمٌ عميق لكل ما يتعلق بالحاسوب، وقدراتك على كتابة برمجياتٍ فعّالة ومتطوّرة حقيقة، ستعكس ذلك. هذه الأمور التي ستتعلمها غالبًا بشكلٍ معمّق خلال أي برنامج جامعيّ محترم، والذي قد يصعب العثور عليه في أي مكان آخر للتدريب. الدارات الكهربائية – الأساس الفيزيائي لتقريبًا كل عتاديات الحاسوب. الدارات المنطقية الرقمية – كيف يمكن تمثيل الحقيقة والبنى المنطقية باستخدام الدارات. المعالجات الصغرية والأنظمة الحاسوبية – كيف تتحول الدارات المنطقية عند جمعها إلى آلة حاسوبية قابلة للبرمجة. وماذا يحصل على كل تلك الرؤوس المعدنية الصغيرة والأسلاك المطبوعة. أنظمة التشغيل – كيف تبرمج حاسوبًا ليدير، ينظم، يحمي نفسه ويمكّن أكثر من تطبيق من العمل جنبا إلى جنب بشكل آمن. قواعد البيانات – كيف تخزّن وتنسخ كميات كبيرة من البيانات دون خسارتها، إضرارها، أو جعل الوصول إليها مستحيلا. الشبكات – كيف تقوم حواسيب مختلفة وغير مرتبطة بالتحدث مع بعضها البعض. رياضيات متقدمة – متضمنةً الحساب والجبر الخطي. الأمر الأساسي لأي مهنة في المجالات المتطورة والمتقدمة. معالجة الإشارة – كيف تتخطى الحدود بين العالم التماثلي والعالم الرقمي وبالعكس. الأساليب العددية – عندما لا تتوافق مشاكل العالم الحقيقي كليًا مع الحاسوب. سوف ترهقك كلية الهندسة وعلوم الحاسوب، وعليك أن تضحي وتتفانى كي تكملها. ولكن الجائزة تستحق ذلك. جاهدتُ كثيرًا للحصول على شهادتي، ولكن ما يزال يوم قمت بتلقّي شهادتي أحد أكثر الأيام فخرًا في حياتي. الورشات المكثفة Bootcamps ظهر مؤخرًا ما يدعى بـ "الورشات المكثفة" لتلبية حاجات أولئك الذين لا يملكون الوقت أو الموارد للحصول على شهادات جامعية، ولكنهم مستعدون للعمل بجدّ والحصول على الحد الأدنى للبدء بحياة مهنية في تطوير البرمجيات. ومن حيث الكلفة والالتزام المطلوب، تقع الورشات المكثفة بين الشهادة الجامعية وخيارات التعليم الذاتي التي سنتحدث عنها بعد قليل. تمتد هذه الورشات بين 8-12 أسابيع من الدراسة المكثّفة وتكلّف حوالي 10،000 US$. يتم تغطية كمية كبيرة من المواد خلال وقت قصير، ستُضطر خلاله بالتضحية بكل التزاماتك الأخرى. ولكنها تعدك بتحضيرك لتصبح قادرًا على تطوير برمجيات بما يناسب العالم الحقيقي، ووضعك على طريق سريع لحياة مهنية في البرمجة. معظم الورشات تحاول تأمين وظيفة لك فور تخرجّك. وهي ظاهرة حديثة. بالتالي من الصعب قياس معدل نجاحهم، وما زال على العديد منهم تطوير سجلٍ مُثبت لتأمين وظائف لخرّيجيهم. وبعد قول ذلك، لا يمكن أن نتوقع إلا أن تتحسن البرامج المتوافرة حاليًا في ظل نمو هذه الظاهرة. طالما تقوم بالبحث بحذر، قد تجد أن هذا الخيار مثاليٌّ بالنسبة لك. معظم الورشات المكثفة هي برامجٌ محليّة، فعليك البحث عن ما هو متوافرٌ في منطقتك. التعلم شبه المهيكل تتزايد المصادر المتوافرة يوميًا لأولئك الذين يعملون بالشكل الأفضل مع عنصر من التنظيم، والإرشاد، ولكن لا يملكون الوقت أو الموارد للالتزام في برنامج جامعيّ، أو ورشة مكثّفة. تتوافر هذه الخيارات عادة كليًا على الإنترنت، والعديد منها هو مجانيٌّ بشكلٍ كامل. ونظرًا لتزايد الطلب على هذه الخدمات، فقد تطورت هذه الأدوات بشكل كبير من حيث التعقيد والقيمة المُقدمة. قادت معظم هذا التطور طبعًا مساقاتٍ MOOCs في تطوير البرمجيات، حيث يقدم تعلّم وتعليم البرمجيات من خلال برمجيات فوائدَ واضحة. مساقات على الإنترنت مفتوحة وضخمة MOOCs إن هذه المساقات هي مصادرٌ هائلة، وتقدم خطواتٍ كبيرة في مجال المساواة وكلفة التعليم. فهي تقدم معظم هيكلية وإرشاد صفوف أعرق جامعات العالم، بشكل مفتوح، في أي مكان، لأي شخص يملك اتصالًا بالإنترنت. والعديد من هذه المساقات مجانيٌّ كليًا، بالرغم من أنه مع مبلغٍ إضافي (وتعهد بالدراسة)، يمكن الحصول على شهادة مُكتسبة للعديد من الصفوف، بشكل مكافئ لشهادة الجامعة. هناك العديد من منصات متوافرة على الإنترنت مع مساقاتٍ يقوم بتدريسها أساتذة من أعرق جامعات العالم، ومنصات اجتماعية بحيث تقوم أنت وزملاؤك حول العالم بمساعدة بعضكم البعض على التعلم. هذه بعض أفضل المصادر: Coursera EdX Udacity يجب أن تعلم، أن هذه المساقات تجري متابعة مكافئة لتلك التي تجدها في الجامعة، لذا كن مستعدًا للعمل بجد لاجتيازها. مواقع تعليمية مرشدة إن كنت تحب الهيكلة والإرشاد ولكنك لا تحبذ المواعيد النهائية، هنالك العديد من المنصات التي تقدم تدريب "خطوة بخطوة" مؤتمت، باستخدام عدة طرق للإيصال. بعضها يستخدم الفيديوهات التعليمية، وأخرى النصوص. يتضمن العديد منها محررات تفاعلية للنصوص البرمجية كي تتدرب ضمن متصفحك. تعطيك هذه مرونة للعمل وفق السرعة التي تختارها، سواءٌ كان ذلك بمعدل نصف ساعة يوميًا، أو عشر ساعات في عطلة نهاية الأسبوع. في حين تطلب العديد من هذه المنصات رسمًا اشتراكيًا للوصول إلى محتواها، تقدم معظمها فترةً تجريبية بحيث يمكن البدء بها فورًا، وتقرر بعد ذلك إن كانت تناسبك أم لا. Kahn Academy Udemy Codecademy Code Avengers Code School Treehouse Lynda Pluralsight هذه قائمة قصيرة فقط، أجر بعض البحث واستكشف ماذا يوجد هنالك أيضًا. التعليم غير المهيكل لأولئك الذين يرغبون بالبحث عن طريقهم الخاص، أو تطوير معرفتهم في أوقات فراغهم، دون ضغط الدروس المُهيكلة، تقدم الأدوات التالية مقاربة ذاتية التوجيه. وحتى لو قمت باعتماد أحد المقاربات السابقة، ستجد العديد من هذه المصادر مساعد في تقوية عملية التعلم الخاصة بك، أو منصّة لتتدرب من خلالها. مواقع للتدريب إذا كان هدفك فقط هو حل مشاكل برمجية، فإن الإنترنت ستقدم لك ذلك. تقدم المواقع التالية مجموعات متزايدة باستمرار من تحديات البرمجة، إلى جانب واجهة تفاعلية لكتابة النصوص البرمجية، لحل المشاكل، لتقييم حلولك بشكل آني، وكيف تبدو مقارنةً مع حلول مستخدمين آخرين. Exercism.io CheckiO CodeChef CodeEval Codewars Codility HackerRank الفيديوهات أظن أنه من غير العملي تعلم البرمجة بشكل خامل/غير تطبيقي، ولكن إن أردت استيعاب بعض المفاهيم العميقة، بين الاجتماعات ربما، فإن سلاسل المحاضرات هذه هي من أفضل الموجود. إن كنت تحب مثل هذه الأمور ابحث عن مصادر أخرى مشابهة على YouTube والويب. MIT OpenCourseWare Stanford University Lecture Series الكتب حتى مع كل الروائع التي تقدمها التكنولوجيا، مازال البعض يفضل الاستغراق في قراءة كتاب للوصول إلى فهم أعمق للموضوع. إن كنت تحب التعلم بهذه الطريقة، فهناك الكثير من الكُتب المجّانية المتوفرة على الإنترنت مثل هذه القائمة List of Free Learning Resources. في الختام تعلم البرمجة هو رحلة شخصية جدًا، يبدأ الجميع من مصادر وأهداف مختلفة، ويواجهون تحديات وفرص مختلفة كذلك خلال الطريق. لا تقلق حول ما يقوم به الآخرون أو كيف وصلوا إليه. حتى بالنسبة لبعض المبرمجين ذوي الخبرة، فإن هذه الرحلة لا تنتهي حقًا، فهنالك دائمًا أشياء جديدة يمكن تعلّمها. ترجمة -وبتصرف- للمقال: Learn To Code: Tips and Tools لصاحبه: Nick McCrea. حقوق الصورة البارزة: Designed by Freepik.