هذا الشهر بدأت تعليم نفسي البرمجة من الصفر. اخترت بالتحديد برمجة الموبايل لأجهزة iOS بلغة Swift. وسيكون مرجعي للتعلم هو كتب Apple عن لغة Swift، أهمها The Swift Programming Language (Swift 3.1) و App Development with Swift.

الرحلة ستكون طويلة وصعبة، بالتالي نحتاج لدعم وتحفيز بعضنا البعض للتقدم، ولهذا انشأت حساب تويتر @iosAppsRobot وفتحت مجموعة في Slack، لنتشارك النقاش او الحلول حول المصاعب التي تواجهنا. الانضمام الى مجموعة سلاك سيكون عبر الدعوات حسب نظام سلاك الذي لا يسمح بالتسجيل المتفوح. يمكنك طلب الدعوة بإرسال رسالة تتضمن البريد الالكتروني الخاص بك على حسابي في تويتر @iosAppsRobot.

ايضاً كنوع من التحدي والالتزام الشخصي سأنشر في هذه المدونة عن كل شيئ أتعلمه، وسأتعمد البدء من الاساسيات حتى لو كانت سهلة للمبتدئين، ولكن كتابتها باللغة العربية قد تكون مفيدة للجيل الجديد ومن لا يجيد اللغة الانجليزية ويبحث عن مصدر عربي للتعلم والانطلاق. بالطبع لن اتمكن من كتابة دليل جديد باللغة العربية لهذه اللغة او بيئة تطوير تطبيقات  iOS ولكن سأحاول كتابة تدوينة او موضوع عن كل جزء مهم في هذه اللغة حتى يكون مفتاح للنقاش والتواصل والتحفيز مع من يدرس نفس الامر في هذه المرحلة. 

لماذا اخترت iOS Apps؟

هذا السؤال لا يوجد له اجابة واضحة. الاختيار بين انواع البرمجة مثل موبايل/ويب/ديسكتوب يعبتر خيار شخصي بالدرجة الاولى ولايجب تفسيره. اذا كنت تملك دافع لتعلم البرمجة مثل انتاج تطبيق خاص بك او بدء مسيرة مهنية في هذا المجال الذي تحبه، فلا تقلق ابداً حول المسميات او اللغات التي تجدها امامك لانها كثيرة ولا تنتهي. عليك ان تعمل وتتعلم ماتحب فقط، بعد ان تبحث وتجرب وتقارن بين كل الخيارات التي امامك. بالنسبة لي فأنا املك دافع واهداف لادخل مجال برمجة الموبايل بالتحديد، ولأني مستخدم لـجميع منتجات Apple وتعجبني الثقافة والاتجاه التي تسير عليه الشركة سواء في منتجاتها كهاردوير او تصميم وبرمجة، وحينما اعمل على اي هاتف Android اشعر بأني غريب واتمنى العودة الى موطني :d بالتالي كان من المستبعد تماماً ان اتعلم تطوير Android. عموماً كل هذه اللغات مجرد  أدوات والمهم هو تعلم البرمجة نفسها ويمكنك الان ان تبدأ بما تحب ومستبقلاً قد تحب شيئ اخر وتكمل معه او تنتقل اليه بسهولة حتى لو كان في مجال اخر مثل الويب او الديسكتوب او غيره. الآن استمتع بالتعلم!

لماذا نتعلم Swift؟

الاجابة بسيطة.. لانها الخيار الانسب من Apple لبرمجة تطبيقات iOS/macOS/watchOS/tvOS. بالطبع ليست الخيار الوحيد اذ توجد اطر عمل من لغات اخرى تمكنك من برمجة تطبيقات iOS، ولكن طالما هدفك هو iOS فتمسك بلغة Swift ولا تذهب لمكان اخر، لان تلك الاطر والخيارات من وجهة نظري تعتبر موجهه للمطورين الحاليين بتلك اللغات بالتالي يمكنهم بناء تطبيق iOS بما يمكلون حالياً من ادوات وخبرات. ولكن انت كمبتدئ لا داعي ان تاخذ منعطف كبير لبرمجة iOS بل اذهب مباشرة الى اللغة الأم واستمتع ايضاً بالسهولة والمرونة التي توفرها لك أبل في بيئة تطوير تطبيقاتها مثل Xcode والذي يعتبر من اقوى مميزات العمل والانتاجية لمطوري iOS مثلاً ولن تجد مثله في تلك البدائل المختلة.

نبذة عن Swift

في عام 2014 اعلنت شركة Apple عن لغة Swift كلغة حديثة ومتطورة تكون بديلة للغة objective-c التي اصبحت بعمر 30 سنة والتي تعرف ايضاً بأنها معقدة وصعبة في التعلم، هذا يتضاد مع طموح أبل في توسيع ثقافتها وزيادة عدد المطورين على منصاتها، بالتالي كان الحل او التوقيت المناسب لاخراج لغة جديدة متطورة.

ميزات سويفت كلغة حديثة تعتبر كثيرة جداً، بالنسبة للمطورين يمكن قراءة كل المميزات في دليل اللغة بموقع الشركة، ولكن بالنسبة للمبتدئين يمكن ان ألخص أهم النقاط التي يمكنهم فهمها في التالي:

  • سهولة ووضوح تركيبة كتابة اللغة Syntax بحيث يكون لديك كود نظيف وسهل للقراءة او العمل معه.
  •  Optional اسلوب فريد وجديد للتعبير في حال كانت قيمة المتغير موجودة او لا والهدف ان يضمن لك التحكم في مختلف السيناريوهات المتوقعة للعمل مع القيم التي تدخلها.
  • Type inference تضمن معرفة انواع البيانات وتحديد الأخطاء بشكل سريع وتلقائي مما يحفظ وقتك في العمل ويزيد انتاجيك كمطور.
  • Type safety لغة أمنة تماماً تتطلب تفسير وتحديد نوع كل عنصر تضيفه للكود، بالتالي ابل لن تسمح لك بانتاج وبناء تطبيق به اخطأ وتزعج المستخدم بكثرة انهيارات تطبيقك.
  • اللغة المعتمدة من Apple على الاقل للـ 30 سنة القادمة كما حصل مع لغتها السابقة، مالم يحدث تغيير مفاجئ او منعطف حاد في عالم التقنية وهذا مستبعد بالنظر الى مكانة الشركة ووضوح رؤيتها. 

في عام 2015 سويفت أصبحت لغة مفتوحة المصدر بالتالي اصبح لدى اللغة مجتمع اكبر مما انعكس على سرعة تطور اللغة وتوسعها حتى وصلت الى منصات اخرى مثل Linux وخرجت اطر عمل كلغة ويب server-side مثل Vapor. كل هذا يعني ان اللغة ستكون اكثر قيمة وفائدة لك كمطور مما لو ظلت محتكرة على منصات الشركة.

Hello World!

حينما تنخرط في دراسة او تعلم أي لغة برمجة جديدة من اي مصدر، في الغالب سيكون اول شيئ تتعلمه هو طباعة هذه العبارة الشعبية "Hello world!" على الشاشة بالتالي تكون قد انجزت ابسط برنامج بتلك اللغة.

في البداية يجب ان تعرف بعض المعلومات البسيطة عن كتابة الاكواد البرمجية كالتي:

  • الكود البرمجي يكون محفوظ في ملف ينتهي بامتداد .swift
  • كل سطر جديد في الملف يمثل عبارة او سطر برمجي واحدة، او يكون كتلة/قطعة من العبارات والاسطر لتقوم جميعها بتنفيذ أمر واحد.
  • يتم تنفيذ كل الاسطر البرمجية في الملف بالترتيب من الأعلى الى الاسفل.
  • حساسية الآحرف، المسافات، والرموز كلها مهمة جداً في كتابة الاسطر البرمجية. سواء في اسماء المتغيرات او في كتابة القيم. حينما تخطآ في حالة حرف واحد فسيحدث خطآ في برنامج بالكامل وينهار.
  • يتم تغيير المدخلات السابقة المرتبطة به. مثلاً اذا ادخلت متغير جديد في سطر ثم لاحقاً اعدت ادخال الكود
  • التطبيق قد يتضمن الكثير من الملفات المنفصلة التي تتضمن الكثير جداً من العبارات والاسطر بلغة سويفت البرمجية، لاحقاً يتم تجميعها بواسطة المترجم وهو برنامج داخلي يقوم بتحويل اكواد لغة البرمجة الى لغة تفهمها الاجهزة وتستطيع معالجتها.

كيف تكتب Hello world! في سويفت؟

print("Hello world!)

print() هي دالة تأخذ أي نص وتطبعه في الكونسول الذي يستخدمه المبرمجون لرؤية حالة البرنامج الذي تتم كتابته بحيث يخرج لهم النتيجة بعد تنفيذ الكود.

كل شيئ في لغات البرمجة يدور حول البيانات، ادخال البيانات وتخزينها، معالجتها، اخراجها. ولدينا عدة مفاهيم أساسية مرتبطة بالبيانات، مثلاً المتغيرات ونواع البيانات واشياء اخرى سنتكلم عنها في الدرس القادم.

الان قم بتحميل تطبيق Xcode حتى تكتب برنامج الاول Hello World! :)

Playground 

هذه الميزة هي احد افضل مميزات Swift والعمل معها، ليس للمتعلمين فحسب، بل حتى للمطورين الفعليين لانها تسمح بكتابة الاكواد وتنفيذها بشكل سريع لتجربتها ورؤية النتيجة فوراً مع كل تعديل تقوم به، وتسمح لك ايضاً بكتابة عدد لا محدود من الاكواد سواء للتعلم او حتى للاختبار ومقارنة نتائج التعديلات على الكود قبل نقله للمشروع الاصلي. هي بالفعل playground لان كل هذه التجارب تتم بابسط واسهل طريقة ممكنة في شاشة بتصميم مألوف وممتع مقارنة باستخدام كونسل تقليدي او Terminal نظام macOS.

للتذكير كل تعديل تقوم به في playground سيعيد تنفيذ كل الاكواد من الاعلى للاسفل كما لو كان ملف برمجي حقيقي في مشروع وتطبيق فعلي. نتائج الكود ستظهر في الجانب الايمن من الشاشة، ايضاً يمكنك ان تشاهد النتائج او مخرجات الكود في الجانب الاسفل بإلضغط على ايقونة اظهار الكونسل من الشريط السفلي للتطبيق.

بعد ان تعمل playground جديد ستجد بشكل افتراضي الكود التالي:

//: Playground - noun: a place where people can play  import UIKit  var str = "Hello, playground" 

الكود في السطر رقم 1 يظهر باللون الاخضر لانه تعليق لن يتم تنفيذه في البرنامج وانما موجود لك انت او لاي شخص اخر سيقرأ الكود من بعدك. وطريقة كتابة التعليقات في سويفت تكون باستخدام // متتالية ثم كتابة نص التعليق في سطر واحد فقط. ويمكنك كتابة تعليق متعدد الاسطر بوضع /* في اول السطر و */ في نهايته.

// تعليق في سطر واحد  /* تعليق متعدد الاسطر  بعدد أسطر لا محدود */


بالنسبة للكود في السطر الثالث import UIKit فهو مخصص لاستدعاء اطار UIKit واستعمال كل شيئ فيه، وسنتعلم كل شيئ عنه في المستقبل القريب ان شاء الله.

اما الكود في السطر 5 وهو var str = "Hello, playground" فهو كالاتي:

  • في بداية السطر يتم انشاء متغير جديد variable (اختصاره var في سويفت) ليكون حاوية لتخزين بيانات جديدة سيتضمنها. ثم مسافة وبعدها يتم كتابة اسم المتغير (في هذه الحالة اسم المتغير str)
  • ثم مسافة ثم علامة = وتعني منح القيمة التي تلي هذه العلامة الى المتغير السابق
  • ثم مسافة تليها علامتي تنصيص "" بداخلها النص، وهي طريقة كتابة النصوص في سويفت "هكذا"

المهم ان تفهمه الان انك تستطيع الان تغيير قيمة المتغير باعادة كتابة اسم المتغير ثم = ثم ادخال القيمة الجديدة، وكل هذا يكون في نهاية الكود الجهاز الذي وجدته افتراضياً في playground، وكما قلنا سابقاً ان تنفيذ الاكواد البرمجية يكون من الاعلى للاسفل دائماً واي تغيير تحدثه في الاسفل ويتضمن علامة = مثلاً فهذا يعني انك استبدلت القيمة السابقة التي قمت باضافتها في الاعلى.

الان كمتعلم عليك ان تستخدم الدالة print() لطباعة نص في الكونسل اسفل Xcode ولديك مهمتان محددة:

  • اطبع المتغير str الذي وجدته في playground
  • اطبع Hello world! مباشرة الى الدالة بدون استخدام متغير

هذا كل شيئ للمقدمة. استمتع بالتجربة واسكتشاف وتعلم كل شيئ بنفسك، لان ما اكتبه انا ليس الا مجرد ملاحظات بسيطة بهدف توثيق تجربة التعلم والتحفيز. وعليك ان تعلم ان اهم المهارات التي يجب ان تتحلى بها كمبرمج هي مهارة البحث والتجربة بنفسك عن اي مشكلة او اي شيئ تجده امامك ولا تفهمه. الكتب او اليوتيوب ان كنت تهوى الفيديو كطريقة تعلم + قوقل هو صديقك الاول في رحلة التعلم. وأنا سأكون صديقك الثاني سواء على تويتر او مجموعة سلاك تفضل بسؤالي عما لا تستطيع بنفسك ان تجد اجابة له.


-------------------------------

# تحديث1: أحاول في مجموعة سلاك اعداد تمارين تفاعلية من اعدادي واضيف عليها تمارين كتاب Apple التعليمي حتى ترسخ الفهم للمبتدئين تماماً وسأضع هنا التمارين الخاصة بهذا المقال. بإمكانك ارسال الحل لنا في مجموعة سلاك اطلب دعوة من حسابي في تويتر.

افتح playground جديدة في Xcode احذف الاكواد الموجودة افتراضياً استخدم الدالة (print) اطبع عبارة "Hello world!" ثم قم بكتابة تعليق متعدد الاسطر يتضمن وصف موجز لهدفك من تعلم البرمجة  ------  اسئلة اضافية  // سؤال رقم 1: ماهي الميزة التي تجعل سويفت لغة امنة؟  A. Type safety B. Type inference C. Error handling D. Optionals  // سؤال رقم 2: ماذا سيطبع الكود التالي  let helloWorld = "Hello, world!" let helloPlayground = "Hello, playground!" let goodbyePlayground = "goodbye, playground!"  print("Testing, testing, 1-2-3")