منذ يومين وعندما قمت بمراسلة كلّ من قام بالتسجيل في دورة بناء التطبيقات لأجهزة أيفون، قمت بالاعتذار ممّن لا يعلم أساسيات البرمجة أو بشكل أصحّ ممّن لم يقم بتعلّمها سابقا أو قد برمج سابقا، وبناء على ذلك راسلني أحدهم ممّن اعتذرت منهم مُبديا رغبته في تعلم أساسيات البرمجة لكي يستطيع الالتحاق بهذه الدورة وقد قمت بإجابته على عجل. وعليه فإني سوف أطرح في هذه المقالة بشكل مفصل أكثر أهم الأساسيات التي على المبرمج أن يعرفها ويتعامل معها وذلك تمهيدا للتفكير بمنطق الحاسوب وكيفية بناء التطبيقات.
من أهم أساسيات البرمجة هو التفكير المنطقي لحل المشكلات وهذا يكون قبل تعلم أيّ لغة برمجة وفي العادة يمكن تعليمها على الورق باستخدام الخوارزميات لبناء وحلّ المشكلات بتسلسل منطقي يساعدنا على التفكير بشكل منطقي لحل المشكلات.
في الصورة المقتبسة من موسوعة ويكيبيديا:
" خريطة انسيابية تمثل خوارزم إقليدس لحساب القاسم الأعظمي المشترك (g.c.d.) بين عددين a وb في موضعين يدعيان A وB. يتمّ الخوارزم عبر سلسلة من عمليات الطرح المتتالية في حلقتين: إذا كان الفحص B ≤ A ينتج عنه "نعم" (أو قضية صائبة) فإنّ العدد b في الموضع B أقل من أو يساوي العدد a في الموضع A) ثم يعين الخوارزم B ← B - A (بمعنى أن العدد b - a يبدل القيمة السابقة b). بالمثل، إذا كان A > B فإن A ← A ّ- B.حينما تصبح (محتويات) B مساوية لـ 0، وينجم عن ذلك قاسم مشترك أكبر في A."
بعد التعلم على الخوارزميات يأتي دور تعلم أيّ لغة برمجة لترجمة أو تطبيق الأشكال الخوارزمية إلى كود برمجي ليقوم بعمل نفس الوظيفة، وهناك بعض الأساسيات التي تشترك بها لغات البرمجة لتأدية نفس الوظيفة، ولكن ربما بشكل مختلف من ناحية التنسيق أو ما يسمى تركيب اللغة (Syntax).
في البداية دعنا نتعرف على أهم هذه الأساسيات التي تشترك فيها معظم لغات البرمجة وفي حال إتقانها بأيّ لغة برمجة تقريبا من اللغات القوية فأنت ستكون مستعدا لتعلم أيّ لغة برمجة جديدة، فما عليك سوى معرفة طريقة هيكلية اللغة الجديدة.
- تركيب بناء اللغة (Syntax)
- طريقة حجز والتعامل مع المتغيرات (Variables)
- طريقة بناء المعاملات / المقارنة (Operators)
- الجمل الشرطية (If...Else)
- جمل الحالات (Switch)
- جمل التكرار والدورات الشرطية (While Loops)
- جمل التكرار (For Loops)
- طريقة بناء ومناداة الدوال (Functions)
- التعامل مع الحروف والنصوص (String)
- التعامل وبناء المصفوفات (Array)
- التعامل مع التاريخ (Date & Calendar)
- الوصول واستدعاء وظائف النظام (System Reference)
- التعامل مع الأخطاء (Error & Exception)
- التعامل مع الملفات والمجلدات في النظام (Filesystem & Directory)
- التعامل مع قواعد البيانات وجمل الاستعلام (Database SQL)
- عناصر التحكم وواجهة المستخدم (User Interface)
تركيب بناء اللغة Syntax
بناء تراكيب أغلب اللغات متشابه خصوصا تلك التي تعتبر من اللغات المشهورة والقوية، مثلا (C/C++) أو (Java) أو (C#) أو على مستوى الويب (PHP)، أما اللغات الأخرى الأقل بساطة كحال (Visual Basic) أو على مستوى الويب (ASP) فإنّها أيضا شبيهة إلى حدّ ما ولكن الانتقال منها إلى الأخرى قد يكون أصعب بعض الشيء لأنها أسهل أما العكس صحيح.
فمثلا من التراكيب في بعض اللغات وضع فاصلة منقوطة في نهاية كل سطر ، والبعض الآخر تختلف المتغيرات باختلاف حالة الأحرف الكبيرة أو الصغيرة.
طريقة حجز والتعامل مع المتغيرات Variables
المتغيرات يمكن اعتبارها كمستودعات صغيرة - مناطق في الذاكرة - يتمّ حجزها لإسناد قيم إليها والتعامل معها ويجب معرفة أنواع المتغيرات المختلفة، فهناك نصية وأخرى رقمية ومتغيرات خاصة بالتواريخ وأخرى بالحروف وللتعاملات المنطقية؛ ولكل منها استخداماتها وطريقة للتعامل فيما بينها.
طريقة بناء المعاملات / المقارنة Operators
المقارنات هي المفهوم البسيط مثل (>= <) أي (أكبر من أو يساوي أو أصغر من أو لا تساوي)، حيث إنّها تستخدم لمعرفة قيم المتغيرات أو القيم من العناصر الأخرى وتختلف باختلاف اللغات، مثلا في (Visual Basic) في حال أردنا تطبيق مقارنة لا تساوي فإننا نستخدم (<>) أما في (Java) فإننا نستخدم (!=) وكذلك الحال هناك معاملات مثل (And) و (OR) والتي تعني (و) و (أو).
الجمل الشرطية If...Else
بتركيبها البسيط تستخدم الجمل الشرطية في التحقق من شرط لتنفيذ شيء ما، مثلا ( إذا كان محمد أكبر من علي فقم بضرب علي أولا) أو بشكل برمجي.
if (Mohammed > Ali) { kill Ali 1st; }
جمل الحالات Switch
تستخدم هذه الجمل لتكرار جمل الشرط وتعتبر في حال كانت قيمة المتغير أكثر من حالة، مثلا:
هل محمد أصغر من 13
إذن محمد طفل
هل محمد أصغر من 17
إذن محمد مراهق
هل محمد أكبر من 50
إذن محمد كهل
أو بشكل برمجي:
switch (mohammed)
{
case < 13:
mohammed="kid";
case < 17:
mohammed="teen";
case > 50:
mohammed="old";
}
جمل التكرار For Loops
جمل التكرار تستخدم كثيرا في تكرار نفس الكود الموجود ضمن الدوارة وأبسط مثال على ذلك؛ لو افترضنا بأن نزيد رقما معينا بواقع واحد في كل مرة مثلا:
أضف إلى المتغير (A) بزيادة (1) في كل مرة على مدى عشر مرات
For i = 1 To i = 10
Print i
Next
جمل التكرار والدورات الشرطية While Loops
هذه الجمل شبيهة بجمل التكرار العادية ولكنها تحتوي على شرط للتحقق في بدايتها أو نهايتها، وفي حال تحقق الشرط يتمّ الخروج من هذه الدوارة حتى لو لم تتم دورتها الكاملة.
طريقة بناء ومناداة الدوال Functions
الدوال ببساطة هي عبارة عن وحدات من الكود تؤدي وظيفة محددة، ويوجد العشرات منها داخل بنية اللغة بشكل جاهز للاستخدام؛ كما يمكنك بناء وظائفك بنفسك في حال أردت استخدام نفس الوظيفة في أكثر من مكان وبهذا تستطيع استدعاءها أكثر من مرة دون الحاجة لتكرار استخدامها مثلا : لو أردت قص عدد معين من الحروف من جملة نصية.
Print Mid(Str, 1, 3)
التعامل مع الحروف والنصوص String
التعامل مع الحروف يختص بشكل أكبر باستخدام المعاملات والدوال الخاصة بها مثل دوال القص والمقارنة وتكبير الحروف وتحويلها والبحث داخلها.
التعامل وبناء المصفوفات Array
المصفوفات هي عبارة عن متغير لحفظ القيم ولكنها يمكن أن تحتوي على أكثر من قيمة واحدة وبعدد غير محدود، كما يمكن تعريفها لتكون ذات بعد واحد أو ذات بعدين أو أكثر لتحفظ قيم كثيرة بناء على البعد بشكل متداخل، مثلا يمكن حفظ مصفوفة متغير باسم (Day) يحوي بداخله أسماء كل الأيام.
التعامل مع التاريخ Date & Calendar
التعامل مع التاريخ من مقارنات وعمليات جمع وطرح وتغيير نمط العرض وطريقة الحساب بناء على المنطقة الزمنية وغيرها من الوظائف الكثيرة المتخصصة بالتواريخ، فمثلا لو كان لدينا تاريخ ميلاد وأردنا معرفة العمر الحالي أو أردنا معرفة الفارق الزمني بين وقتين بالثواني.
الوصول واستدعاء وظائف النظام System Reference
هناك وظائف خاصة بكل نظام تشغيل يدعمها ويمكّنك من استخدامها ويمكن تسميتها ب (API)، أي لو أردنا معرفة تاريخ الجهاز الحالي فإننا نطلبه من النظام أو حال أردنا معرفة في حال هل تمّ تحريك الجهاز وتغيير وضعيته، كما هو الحال في الهواتف الذكية؛ فإن النظام يمكّننا من معرفة ذلك لنقوم نحن بالتصرف بناء على ذلك.
التعامل مع الأخطاء Error & Exception
من أهم الأشياء التي يحتاجها المبرمج هو معرفة الأخطاء والتعامل معها، مثلا في بناء عمليات للتحقق في حال طلبت من المستخدم أن يدخل التاريخ فقام بإدخال التاريخ بالشكل التالي (32/05/2011)، حيث لو قمت بتمرير هذه القيمة داخل دوال النظام فإنّه سيكون هناك خطأ؛ حيث إنّه لا يوجد ما يسمى يوم (32) في أيّ شهر، لذا هناك أخطاء من المستخدم يمكن أن تتكهّن بها وهناك أخطاء قد تحدث بسبب النظام، مثلا انقطاع الإنترنت عن الجهاز وكان تطبيقك بحاجة إليها وبدلا من انتظار المستخدم أو حصول خطأ يمكنك إخباره بأنّه لا يوجد اتصال بالإنترنت للمحاولة في وقت آخر.
التعامل مع الملفات والمجلدات في النظام Filesystem & Directory
أغلب التطبيقات تتعامل مع الملفات في نظام التشغيل كالحفظ والتحرير والاسترجاع وتحتاج بناءً على ذلك معرفة أين تخزن الملفات وطريقة التخزين ومعرفة حالة الملف في حال كان المستخدم من النظام أو تطبيق آخر على سبيل المثال.
التعامل مع قواعد البيانات وجمل الاستعلام Database SQL
أغلب التطبيقات شهرة تلك التي تتعامل أو تحتوي على قاعدة بيانات، وأفضل طريقة لتنظيم البيانات وعرضها والبحث عنها هو باستخدام قواعد البيانات، فمثلا لو أردنا بناء تطبيق (قاموس عربي-إنجليزي) فأنت ستقوم بتخزين قائمة بكل الأسماء العربية والإنجليزية مسبقا في قاعدة البيانات لتتمكّن من البحث عن الكلمة ومعناها المقابل باللغة المطلوبة.
عناصر التحكم وواجهة المستخدم User Interface
هناك في كل نظام تشغيل عناصر تحكم افتراضية يألفها المستخدم ويتعامل معها ومنها مثلا على سبيل المثال (زر الأمر ومربع النص ومربع الخيار)، وهنا تأتي المعرفة من معاينة التطبيقات الأخرى ومحاكاتها مثلا أو في معرفة وظيفة كل عنصر تحكم واستخدامه في المكان الأمثل بالطريقة التي تتناسب مع وظيفته؛ فمثلا عندما تتعدد لديك الخيارات يمكن أن تستخدم (مربع سرد اختيار) أو تستخدم ما يسمى (دائرة خيار) وكلاهما يؤدي نفس الوظيفة، حيث إنّه لا يمكن أن يتمّ اختيار بين هذه المجموعة من الخيارات إلا قيمة وحيدة ولكن بحكم نوع القيمة أو عددها أو شكلها على الشاشة المعروضة تحدد أنت العنصر المناسب وكلما كنت مستخدما جيدا للتطبيقات كلما استطعت بناء تطبيق جيد.
في النهاية، هناك الكثير من الأمور الأخرى الواجب تعلّمها في كل لغة برمجة، ولكن إتقانك لهذه الأساسيات يؤهلك لسهولة تبنّي أيّ لغة برمجة والانتقال من واحدة إلى أخرى وبالتأكيد التفكير بشكل منطقي لكيفية حلّ المشكلات وسهولة فهم أيّ كود برمجي تقوم بقراءته لأيّ لغة تقريبا.