1. المفهوم العظيم للغة البرمجة
قبل البدء بالحديث عن البرمجة، فلنضع في بالنا أن هناك فرقاً كبيراً بين المبرمج و المصمم.
هنا نتحدث عن البرمجة، وسنتعرف إلى الفرق بين البرمجة و التصميم بعد قليل.
إليك هذا:
لنفترض أنك وصلتَ إلى أمام البائع لتشتري هاتفاً، كيف تُخبر البائع بالنوع الذي ترغب بشراءه؟
لا بُد و أن تُخاطب البائع لتطلب مبتغاك، أليس كذلك؟ ولكن ماذا إذا كان البائع لا يتحدث لسانك ولا لغتك؟
لن تستطيع أن تحصل على ما ترغب به إلا إذا وجدت شخصاً يستطيع أن يتحدث مع البائع بلغته.
هذا هو حالك مع الحاسب…
أنت المشتري و الحاسب هو البائع، أنت يا صديقي تحتاج إلى هذا البائع لما يملكه من مميزات و قدرات لا تملكها أنت، لذا يجب عليك أنت أن تتعلم كيف يتحدث هذا البائع (الحاسب) و كيف تستطيع أن تحصل على ما ترغب به.
لغاتُ البرمجة ليست إلا “لغات” 📚 بمعنى الكلمة، ما تؤديه فقط هو ترجمة ما ترغب به إلى ما يستطيع الحاسب تأديته.
ولكن، لماذا لغات البرمجة مختلفة؟
اللغة العربية بها 28 حرفاً، و الإنجليزية 26 حرفاً، إحدى الكلمات العربية تحتاج إلى جملة كاملة بالإنجليزية لترجمتها مثل “أنُلزمُكموها”.
هكذا اللغات تختلف عن بعضها في قدراتها و تكويناتها، مع وجود فروقات طفيفة في لغات البرمجة.
لغات البرمجة مثل اللغات الطبيعية لها ذخيرة لغوية و كلمات، و لكن تتميز أن اللغة بعد تطورها قد تأخذ إسماً آخر.
الجافا مثلاً تطورت من لغة C++ ، سُميّت جافا و أصبحت لغة برمجة مختلفة 🚸 و إضافة إلى لغات البرمجة الكثيرة!
تعلم البرمجة - لغة جافا
خذ هذه المعلومة:
مهما اختلفت لغات البرمجة، فجميعها في نهاية الأمر تتحول إلى شيء وحيد، و هو الصفر واحد، فمهما اختلفت لغات البرمجة تظل هي لغات عليا تسهل على المتحدث (المبرمج) أن يتخاطب مع الحاسب.
هذا التسهيل ضروري لأن الحاسب في الحقيقة يتعامل فقط مع شيئين هما 0 و 1، و من الصعب على المبرمج أن يكتب أوامره بالصفر و الواحد لأن عملية التحويل صعبة و الكتابة كثيرة .. مثل أن يكتب بدل الرقم 3 [11] و بدلاً من الرقم 9 [1001].
2. إتخاذ قرار: البرمجة أم التصميم؟
سترى لاحقاً كيف أن البرامج حازت على نصيب الأسد من التحكم في حياتنا و تسيير أمورنا و تسهيلها، ولكن من هم منشئو هذه البرامج.
المسمى الوظيفي لمن ينشؤون البرامج من الأمور التي فيها خلطٌ لهذا وجب علينا أن نتطرق إليها.
وظيفتان منتشرتان في عالم البرمجة: مصمم برامج و مبرمج.
الفرق بين المبرمج و المصمم
المهم في الأمر:
هاتين الوظيفتين أو المهمتين (البرمجة و التصميم) مرتبطيتن معاً كما الإخوة لا تفترقان بتاتاً، و لكن بينهما فروق جوهرية لا بد ان تعلمها حتى تستطيع أن تحدد مسارك المهني و العملي.
حتى نعرف تلك الفروق لا بد أن نتعرف إلى طريقة عمل البرنامج 👀.
البرامج تتكون من شاشة يراها المستخدم، هذه الشاشة هي التي يتعامل معها المستخدم، يُدخل فيها بياناته و يختار منها ما يرغب باختياره، يعتقد بعض المُستخدمين أن هذا هو البرنامج، و لكن الحقيقة هي أن هذه الشاشة تماثل هيكل للسيارة.
جميعنا يستقل السيارات و نعلم أن السيارة تتحرك عند الضغط على دواسة الوقود و تتوقف بالضغط على المكابح، و لكن هل تعمل السيارة إذا امتلكنا دواسة وقود فقط و ظللنا نضغط عليها؟ ☺
بالتأكيد لا بُد من وجود شخص آخر ليقوم بتجهيز العمليات الخلفية التي لا يراها سائق المركبة، فحركة المركبة تعتمد تماماً على ما يحدث عن الضغط على دواسة الوقود، و ليس على الضغط على الدواسة فقط. تتفق معي أليس كذلك؟
إذا ما اتفقت معي فأنت قد ملكت الفرق بين المصمم و المبرمج.
في شاشة تسجيل الدخول مثلاً يكون المصمم هو من يصمم شكل الشاشة التي يراها المستخدم و يضع الصور و يختار الألوان و يُنشئ الأزرار و الأماكن التي سيكتب فيها المستخدم.
أما المبرمج فهو من يُنشئ العمليات الخلفية لشاشة تسجيل الدخول، فعندما يدخل المستخدم إسمه و كلمة المرور فإن البرنامج يتعرف على هذه البيانات هل هي مسجلة مسبقاً أم أنه شخص يحاول سرقة الحسابات.
من يُنشئ عملية التعرف هذه هو المبرمج.
خلاصة الأمر، أي برنامج يخدم المستخدم لا بد فيه من واجهة مستخدم و عمليات خلفية، يقوم بهما المصمم و المبرمج سوياً.
لكل من المبرمج و المصمم صفات شخصية يتسمون بها ليستطيعا التعامل مع مجالهما باحترافية و ينجحا فيه
صفات شخصية المصمم
تذوق الألوان 🍻.
الإبداع و الإبتكار.
صفات شخصية المبرمج
التفكير المنطقي.
القدرة على حل المشاكل.
3. إنتشار البرمجة خارقٌ للعادة
توجد أسباب كثيرة لتتعلم البرمجة، ربما تملك هدفاً مُسبقاً ولكن ربما معرفتك بالآفاق التي وصلتها البرمجة تزيد من فضولك لهذا المجال.
ما يعجبني في هذا المجال أن البرمجة تصب في مجال النظم، و النظم تخدم جميع المجالات البشرية، بل أكثر من ذلك أرى أن البرمجة هي التي صنعت من عصرنا عصرنا…
أوّاهُ لحياتنا بلا برامج 💘
نمو عدد البرامج في قووقل بلي
نمو عدد البرامج في قووقل بلي
من المجالات التي تؤثر فيها البرمجة الآن -وليس جميعها-
برمجة الترفيه: من الشائع أن تكون قد لعبت أو أنك تدمنُ اللعب الآن على أحد الألعاب التي لا تعمل إلا على كرت شاشة خاص لجمال رسوماتها، هذه الألعاب فيها قدر عالٍ جداً من البرمجة.
و لكن يظل الأمر أن الألعاب الحاسوبية ليست الوحيدة في مجال الترفيه، فإدارة الملاهي الكبيرة و الألعاب فيها و البرامج السياحية و إصدار تذاكر الطيران و غيرها من الأمور التي تؤثر فيها البرمجة بقوة.
برمجة الطب: ما أدق التشخيص و أنت ترى الطبيب يطلب منك إصدار صورة اشعة مُلائمة لحالك لتذهب -سلمك الله من كل سوء- إلى أخصائي الأشعة ليلعب الأزرار التي تُدار عن طريق برنامج ليُجري لك الأشعة.
الطب بصورة خاصة وصل إلى درجة أعلى بأن الطب له تخصص يُسمى بنظم المعلومات الطبية!
برمجة السياسة: من المرات النادرة التي ربما ترى فيها السياسة في مدونة علوم، و لكنها تتأثر أيضاً بمجال البرمجة بشدة، فإدارة أنظمة الإقتراع و الحكومات الإلكترونية و التطبيقات التي تسهل حياة البشر من أهم ما يمكن أن تفعله الحكومات لمحكوميها.
برمجة علوم الفضاء: يجعلني أتعجب جداً ذاك القدر من الدقة الذي يتوفر ببرامج تُدير ماكوكاً فضائياً، أن الجزء من الثانية يعني حياة بشر و جهود سنين عددا! فلغة HAL/S مثلاً تلعب دوراً دقيقاً في ناسا.
ولكن حتى تعرف تأثير البرمجة على علوم الفضاء، هل تذكر الصور التي تصاحب إقلاع أو هبوط أحد الصواريخ؟ دوماً تجد عدداً من المهندسين يجلسون أمام عدد كبير من الشاشات و يقفزون فرحاً عند نجاح العملية.
برمجة المنازل: ليس هذا الأمر مزحاً، مهما صغرت البرامج تبقى برامجاً، فالمكيف يملك مؤقتاً، و التلفاز يُبرمج لإستقبال القنوات و الغسالة تعمل إلكترونياً بلا تدخل بشري لإحتوائها على برامج مُختلفة.
ما يجب أن تعلمه تماماً أن البرمجة الآن تؤثر على كُل منحى من مناحي حياتنا بلا استثناء، لذا فإن مجال البرمجة ما زال متطوراً و ما زال سوق عمله يتطلب الكثير من المُبرمجين المختصين.
4. السؤال الأسطوري: تعلم البرمجة سهل أم صعب؟
“هل تعلم البرمجة صعب” ، “هل يمكن تعلم البرمجة“
هل واجهتك هذه الأسئلة أو جالت بخاطرك في يومٍ ما؟
أتفق معك إبتداءً أن تحديد مدى صعوبة أو سهولة ما ترغب بتعلمه يجب أن لا يكون المعيار الوحيد لمواصلة التعلم، أليس كذلك؟
إليك هذا السر:
وفقاً لتجاربي مع المبتدئين بتعلم البرمجة فإنهم يسألون أنفسهم و غيرهم هذا السؤال ليس لمعرفة درجة صعوبة أو سهولة البرمجة، و إنما للتأكد من قدرتهم على تعلم البرمجة.
في بعض الأحيان أيضاً يُخلط ما بين تعلم البرمجة و تعلم نظام التشغيل، لن نتحدث عن نظام التشغيل في هذه الجزئية ولكن نتحدث عنه في الجزء التالي مباشرة.
إذا ما كُنت ترغب في تعلم أي علم من العلوم فبدايتُه أن تثق أنك ستستطيع تعلمه و أن تبذل أقصى جهدك لتعلمه 💪.
البرمجة ليست بعيدة عن بقية العلوم، لذا سأضع بين يديك إجابة السؤال عن صعوبة و سهولة تعلم البرمجة لتنساه.
النقطة الأولى التي أرى أن تضعها بالإعتبار هي أن تعلم البرمجة يحتاج إلى مجهود. ستقضي ساعات وأيام من القراءة و التعلم حتى تصل إلى درجة المعرفة التي تعينك على إجراء التجارب و الحصول على الخبرات.
النقطة الثانية البرمجة تعتمد على المنطق، لن تجد زقاقاً واحداً في البرمجة لا يعتمد على المنطق، حتى العشوائية فيها منطقية. تأكد أنك ستتعامل مع المنطق بكثرة في تعلمك للبرمجة و إنشاء برامجك.
تعلم البرمجة الوقت مع الخبرة
الإجابة:
البرمجة ليست سهلة ولا صعبة، و إنما تحتاج إلى مجهود لتتعلمها، إذا وثقت أنك تستطيع أن تتعامل مع النقطتان السابقتان فأرى أن تعلم البرمجة سيكون سلسلاً ممتعاً.
ولا شيء يُضاهي رؤية نتاج مجهودك و تعلمك (البرامج) و هي تعمل أمام ناظريك.
5. نظام التشغيل الحاضن للغة البرمجة
كلنا على الأقل سمع بنظام التشغيل ويندوز Windows. هناك معرفة لازمٌ استصحابها في تعلمك للبرمجة تتعلق به.
إنها معرفة مفهوم و أنواع نظم التشغيل، إذا كُنت تعرف جيداً ما هي نظم التشغيل و أنواعها فاقفز إلى الجزئية التالية.
هيا فلنتعرف على عمل نظام التشغيل.
إن الحاسب الذي تستخدمه أو يستخدمه غيرك يتكون من أجهزة إلكترونية (معالجات و ذواكر و مخازن بيانات..إلخ) لن تعمل دون أن يوجد مدير يتحكم بهذه الأجهزة.
هذا المدير يسمى بنظام التشغيل، لاحظ أن إسمه يدل على وظيفته [تشغيل الحاسب].
ينقسم مجال الويب الى شقن هما الويب ديفلوب والويب ديزاين والفرق بينهما كما يلى
الوب ديزاينر Web Designer هو مصمم مواقع الويب ،ووظيفته الأساسية هي إنشاء موقع بالكامل و لكن تركيزه يكون على الشكل و الجمال و الإخراج العام،ولكن إذا كان في الموقع وظائف متقدمة مثل المواقع التي تعمل بنظام العضوية أو مواقع المزادات فهنا يأتي دور مطور الويب Web Developer و الذي يركز على الوظيفة أكثر من الشكل،فهو مبرمج بعكس المصمم الذي يجب أن يكون فنان و له ذوق في الألوان،أما المطور فاهتمامه الأساسي على وظائف الموقع المتقدمة و الأشياء التي تحتاج لبرمجة.
مصمم الوب يحتاج للآتي:
لتعلم الفوتوشوب (أو أي برنامج معالجة صور يقوم مقامه مثل Firework)
تعلم تصميم اللقطات المتحركة ببرنامج الفلاش (او ما يقوم مقامه من برامج إنتاج الفلاشات),
تعلم تصميم الصفحات ببرنامج مثل Dreamweaver أو Frontpage أو Microsoft Expression
إضافة إلى مهارات التعامل مع CSSو قليل من لغة JavaScript و كيفية إعداد المنتديات و غرف الشات و التعامل مع أحد برامج إدارة المحتوى مثل Joomla أو Drupal او Xoops
و هو مجال أسهل نوعاً ما من وظيفة المطور Developer و الحاجة إليه أكثر من المطور و لكن راتبه أقل من المطور
أما مطور الوب Web Developer
يحتاج لتعلم أحد التالي :
لغة PHP مع قاعدة البيانات MySql
أو أحد لغات microsoft .Net مثل لغة C# مع قاعدة بيانات SQL Server
أو لغة جافا مع قاعدة البيانات Oracle
او برمجة Cold Fusion مع أي قاعدة بيانات
أو البرمجة بلغة الأكشن سكريبت في برنامج الفلاش
أو لغة Ruby أو لغة Perl او لغة Python مع قاعدة البيانات MySql
هذا بالإضافة إلى مهارات لغة HTML و لغة JavaScript و التعامل مع CSS و AJAX
و من الممكن ان يجمع بعض هذه اللغات و التقنيات في عمل واحد
و احيان كثيرة يكون المصمم و المطور هو نفس الشخص (يكون يفهم في الجانبين و له ذوق فني)
مجال إحتياج المطور يكون في الشركات الكبيرة التي تقوم بتصميم مواقع إحترافية أو برامج تشتغل عبر الإنترنت عن طريق المتصفح.
أما أغلب المهام العادية فيستطيع مصمم الوب عملها،و خصوصاً إذا أتقن استخدام برنامج إدارة محتوى معين (جملة دروبال نيوك زووبس ..... ) و إذا أتقن معرفة
السكريتات التي يحتاجها في الموقع،لأن السكريبتات تمكنه من إضافة وظائف على الموقع دون أن يعرف البرمجة.
يمكن ان نجد مطور + مصمم في شخص واحد
ولكن انى اؤمن بالتخصص والتركيز
لان التخصص عنوان التميز
الموبايل...
ينقسم برمجة الموبايل الى 3 انواع
1- بالنسبة لعائلة جالاكسي والتي تستخدم نظام تشغيل أندرويد فبرامجها تكتب بلغة الجافا مع إضافة مكتبات خاصه بالاندرويد مكتوبه أيضا بالجافا ، ويمكن استخدام برنامج eclipse كبيئة تطوير مع إضافة كل من مكتبات الجافا والأندرويد .
2- أما بالنسبة لبرامج تلفونات نوكيا القديمة فنظام تشغيلها يسمى سامبيان وبرامجه أيضا تكتب بالجافا ، يمكن إضافة java SE لبرنامج eclipse لتطوير هذه البرامج .
3- عائلة آبل يسمى نظام تشغيل جوالاتها IOS وتستخدم Objective C لكتابة برامجها على برنامج بيئة تطوير يأتي مدمج مع النسخ الأخيرة من نظام تشغيل الكمبيوترات المحموله الخاصه بالشركه أو يمكن تنزيله من متجر آبل .
أصبحت لغات البرمجة متداخلة في المهام وقريبة من بعضها، لذلك يكون داماً هناك في بداية أي مشروع أو جزء منه، ماهي لغة البرمجة التي سوف نستخدمها لكل جزء من المشروع. وفي هذا المقال سوف أتناول بإذن الله نوعية معينة من البرامج وهي برامج سطح المكتب الموجهة لعموم الاستخدام، أي الاستخدام حول العالم مثلاً وليس داخل مؤسسة أو شركة معينة. إذا كان الهدف الاستخدام داخل مؤسسة معينة فسوف يختلف الوضع، أو إذا كان البرنامج برنامج ويب مثلاً أو خدمة ويب فلا تصلح المقارنة في هذه المقالة أيضاً.
رأيي كمستخدم ومبرمج أن أنسب لغات برمجة لعمل برامج سطح مكتب يتم توزيعها لعدد كبير من المستخدمين ليس لك علاقة إدارة بهم، هو استخدام لغات البرمجة التي ينتج عنها برامج تنفيذية طبيعية في أنظمة التشغيل المختلفة Native executables مثل لغة س++ ولغة أوبجكت باسكال، واللغات التي لا تصلح هي اللغات التي تحتاج لآلة إفتراضية VM مثل لغة جافا ودوت نت، واﻷسواء هي لغات الـ scripting التي تجبر المبرمج على وضع الملفات المصدرية للبرنامج عند المستخدم و تحتاج لتثبيت مفسر حتى يتمكن المستخدم من تشغيل البرنامج.
السبب وراء هذا الافتراض هو اﻵلي:
أن اللغات التي تحتاج لآلة افتراضية تجبر المستخدم بتثبيت تلك الآلة وغالباً يكون هُناك نوع معين، مثلاً نُسخة معينة لمعمارية معينة، حيث أنها ليست من مكونات نظام التشغيل، إنما هي مكتبة لطرف ثالث third party، لاهي جزء من نظام المستخدم ولا هي جزء من مكتبات مطور ذلك البرنامج، ونفس القياس للغات البرمجة المُفسرة scripting. وفي المقابل فإن لغات البرمجة الطبيعية ينتج عنها برامج تنفيذية لنظام التشغيل لا تحتاج لمكتبات أو طبقة وسيطة حتى يعمل البرنامج، لذلك تكون سهلة التثبيت وتعمل مباشرة دون الحاجة لتثبيت إضافات.
البرامج الطبيعية تكون سريعة حيث أنها برامج تنفيذية بلغة اﻵلة، أما المُفسّرة فهي غير تنفيذية ويتم تحويلها إلى لغة اﻵلة أثناء التنفيذ كذلك التي تحتاج لآلة افتراضية
لبرامج الطبيعية قليلة استهلاك الموارد خصوصاً الذاكرة، أما المُفسرة أو التي تحتاج لآلة إفتراضية فإن حجم اﻵلة اﻹفتراضية أو المفسر يكون كبير جداً ويستهلك ذاكرة أثناء تشغيل تلك البرامج