منشور

المسميات الوظيفية في مجال علم الحاسوب

يشرح هذا المقال أشهر المسميات الوظيفية التي تجدها في إعلانات التوظيف للشركات، والخاصة فيما يتعلق بالبرمجة وعلم الحاسوب

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

مهندس برمجيات

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

ويأتي بعد التخطيط التنفيذ، أي البرمجة، وبعد البرمجة الاختبار، أي تشغيل التطبيق واختبار جميع وظائفه الموصوفة في التقرير والتأكد أنها تعمل بالشكل المطلوب، وبشكل آمن. ثم يأتي بعد مرحلة الاختبار التصدير والنشر للمستخدم النهائي (deployment)، قد يتطلب النشر تنصيب التطبيق على السيرفر، في حال كان تطبيق وب مثلًا، وهذا يتطلب معرفة بأمور أخرى مثل نظام لينكس والتطبيق المستخدم لعمل سيرفر مثل Apache أو Nginx بالإضافة للمعرفة بأمور أخرى خاصة بالتعامل مع السيرفر.

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

مهندس إدراة البرمجيات (DevOps Engineer)

تجمع كلمة DevOps بين كلمتي Development و Operations. وهو مصطلح جديد وُضع محاولةً لحل مشكلة ما..دعني أشرح لك الحكاية..

لنقل أنك قمت بعمل تطبيق وب، ورفعته للسيرفر، وهو الآن يعمل ومتاح للمستخدمين، جميل. لقد حان الوقت الآن لكي تضيف ميزة جديدة للتطبيق، فكيف تقوم بذلك؟

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

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

development-cycle.png

تسمى عملية النشر بالإنجليزية بـ deployment وقد تسمع عنها كثيرًا.

ماهو إذًا الـ DevOps؟

لا تتم العملية أعلاه في الشركات الكبيرة (أي في المشاريع الكبيرة) من قبل شخص واحد، ولا فريق واحد، بل يمكن أن يكون هناك فريق لكل مرحلة من المراحل الظاهرة في الصورة أعلاه. ولكننا هنا نهتم بفريقين رئيسيين، وهم المطورين developers والذين يقومون بالتنفيذ والاختبار المبدئي وتصدير التطبيق، وهذا هو الجزء Dev من الاسم لدينا (من development)، ثم يأتي دور فريق التشغيل operation، والمسؤول عن تحديث نسخة التطبيق على السيرفر والتأكد من عملها بدون أي مشاكل.

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

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

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

وهنا يظهر لدينا مصطلح جديد، وهو ما يُعرف بـ CI/CD وهو اختصار لـ continuous integration و continuous delivery. يُقصد بالـ integration هو اختبار ودمج التغييرات الجديدة في الفرع الرئيسي للمشروع على Git، والـ delivery هو النشر باختصار. حيث يقلل الدمج المستمر والسريع من حدوث تعارضات في الكود بين المطورين، ويساعد النشر المستمر والسريع على حل المشاكل التي يعاني منها المستخدمين في التطبيق وبسرعة، وكذلك على توفير مزايا جديدة للمستخدمين. والمهم هنا هو أتمتة تلك العمليات، حيث يتطلب الدمج والنشر دائمًا خطوات ثابتة معروفة، ويتم بأتمتتها (جلعها تتم بشكل تلقائي) تسريع العملية والتقليل من احتمالية حدوث أخطاء.

الهدف إذًا من عملية DevOps هو نشر التغييرات بجودة عالية وبسرعة. لنراجع إذًا التقنيات المطلوبة هنا بحسب ماذكرنا، أي التقنيات المطلوبة في عمليتي التطوير والتشغيل:

  1. لغات البرمجة: المستخدمة في تطوير تطبيق الشركة.
  2. Git: لتنسيق العمل بين المطورين والتحكم بإصدارات التطبيق وحفظ تاريخ التطبيق (حيث يُحفظ كل إصدار رئيسي وجزئي للتطبيق بحيث يمكن التراجع لنسخة سابقة)
  3. Jenkins (أو ما شابه): يُستخدم ﻷتمتة مهام التصدير والاختبار والنشر
  4. المعرفة بنظام لينكس: حيث تستخدم معظم السيرفرات على الإنترنت نظام لينكس، لذا يتطلب المعرفة بنظام التشغيل ذاك وكيفية ضبطه بالشكل الصحيح لتنصيب وتشغيل التطبيق عليه
  5. لغة Bash script: تُستخدم ﻷتمتة المهام على نظام لينكس، ويقابلها Powershell على نظام ويندوز.
  6. المعرفة بكيفية إدارة السيرفرات: حيث يُستخدم مثلًا سيرفر (تطبيق) nginx لتطبيقات الوب، ويجب المعرفة به وكيفية ضبطه بالشكل الصحيح وبحسب متطلبات التطبيق، هذا بالإضافة طبعًا ﻷدوات ومهام أخرى تتعلق بالسيرفر وإدارته، مثل إنشاء عدة سيرفرات لتخديم الكثير من المستخدمين في نفس الوقت، وهذا يتطلب ما يمسى بـ load balancer لتوزيع المستخدمين على تلك السيرفرات وعدم حدوث ضغط على سيرفر واحد دون الآخر، ويُستخدم لذلك تطبيقات مثل kubernetes.
  7. المعرفة بأساسيات الشبكات والحماية: من أجل أخذ الإجراءات اللازمة لجعل التطبيق والسيرفر الذي يعمل عليه التطبيق آمنًا.
  8. المعرفة بما يُسمى بـ containers أي الحاويات، وذلك كما ذكرت أعلاه لتتبع اعتماديات التطبيق وتصديرها مع التطبيق، وبالتالي لضمان عمل التطبيق على أي جهاز آخر. ويُستخدم عادةً تطبيق docker لذلك.
  9. المعرفة بخدمات الوب التجارية الشهيرة والتي قد تستخدمها الشركة لتشغيل التطبيق (بدلًا من عمل سيرفر خاص بها)، مثل AWS و Azure و Google cloud. وبالتالي، التقنيات المطلوب معرفتها من مهندس DevOps هي التقنيات هذه. علمًا أن الأدوات والمهام التفصيلية تختلف من شركة ﻷخرى.

أليس هذا كثيرًا؟

طبعًا. لم يُقصد بعملية DevOps أن تكون منصب وظيفي، ومن الصعب عمومًا وجود شخص واحد يعلم بكل هذه الأمور، ولكن الشركات الآن تطرحه في إعلانات التوظيف لديها على أنه مسمى وظيفي، مطلوب DevOps Engineer! ولكن الجانب الجيّد أن المهندس هنا لا يعمل على تطوير التطبيق نفسه، فتبقى مهمة التطوير للمطورين (بحسب ما يشيع من معلومات..)، ولهذا أسميت المنصب بالعربي “مهندس إدارة البرمجيات” وليس “مهندس تطوير وتشغيل البرمجيات”.

ويُطلب طبعًا شهادة جامعية في المجال. ويُطلب عادةً خبرة سابقة كذلك!.

وأخيرًا، تعرض الصفحة التالية خارطة طريق لهذا المجال ومصادر مجانية لتعلم أدواته: https://github.com/milanm/DevOps-Roadmap

مدير قواعد البيانات

راجع المقطع الأول من “تطوير الخلفية” بما يخص قواعد البيانات. حيث تم ذكر النوعين الرئيسين لقواعد البيانات. وهذا ما يجب تعلمه.

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

يتطلب المنصب هذا غالبًا شهادة جامعية في المجال.

مهندس البيانات

يُطلب من مهندس البيانات التعامل مع بيانات ضخمة غير منظمة، والمطلوب منه فهمها وتنظيفها وتنظيمها ووضعها في قاعدة بيانات بشكل صحيح، للتمكن من التعامل معها واستخراج المعلومات منها بسلاسة وبالشكل المطلوب. المطلوب هنا المعرفة بقواعد البيانات وكيفية تصميمها لتلائم البيانات المعطاة، وكذلك المعرفة ببايثون في الغالب أو جافا. والمعرفة بالتطبيقات الشهيرة المختصة بالتعامل مع البيانات الضخمة، مثل Apache Spark، وكذلك التطبيقات التي تعالج البيانات الضخمة الموجودة على سيرفرات مختلفة، مثل Apache Hadoop و Apache Kafka.

مهندس تعلم الآلة

هذا المجال الذي شاع كثيرًا في السنوات الأخيرة، وأخذ دعاية كبيرة حتى أكبر من حجمه الطبيعي. على أية حال، ليست وظيفتنا تقييمه في هذا المقال (من المخطط مناقشة ذلك في مقال منفصل).

يتطلب العمل في هذا المجال المعرفة بأساسيات الإحصاء (statistics)، والخوارزميات، ثم خوارزميات تعلم الآلة الشائعة، ويتم العمل غالبًا باستخدام لغة بايثون، حيث تحوي مكتبات جاهزة لتعلم الآلة وكذلك للتعامل مع البيانات ومعالجتها.

ويجب كذلك فهم مبدأ التعلم العميق (deep learning) وخوارزمياته، وتطبيقاته.

وطبعًا يجب معرفة التعامل مع البيانات وتحليلها وعرضها بشكل رسوم بيانية (data visualization).

يُستخدم تعلم الآلة في العديد من المجالات، منها معالجة اللغات المحكية (Natural Language Processing)، والرؤية (computer vision) حيث يتم تطوير موديلات تعطي وصفًا للصور وما تحتويها. بالإضافة لمجالات أخرى كثيرة، ولكل مجال خوارزمياته الخاصة. يشمل أي مشروع تعلم آلة الخطوات التالية:

  1. قراءة البيانات. إما أن تُعطى البيانات لك من قبل الشركة أو العميل، أو يمكنك العثور على بيانات جاهزة على موقع مثل Kaggle. أو يمكنك كذلك جمع البيانات بنفسك! ولكن العملية الأخيرة خارج موضوعنا هنا.

  2. فهم البيانات وتحليلها (ويتضمن ذلك عرض البيانات بشكل مخططات ورسوم بيانية لفهمها) وحذف البيانات غير السليمة أو التي لا تعطي معلومات مفيدة. وتهيئة البيانات المتبقية للتدريب.

  3. تطبيق خوارزميات تعلم الآلة (تعطيك المكتبات على بايثون دالات جاهزة)، أو بناء مودل تعلم آلة (machine learning model) خاص بك (وهذا ما يجب عليك فعله، أو القدرة على فعله بصفتك مهندس تعلم الآلة)، ثم تدريبه على تلك البيانات، بعبارة أخرى، تدريب الآلة على تلك البيانات.

  4. عرض النتائج بشكل مخططات ورسوم بيانية.

  5. تقييم النتائج التي تم الحصول عليها، أي تقييم أداء المودل، ويتطلب غالبًا إعادة التدريب بعد إجراء بعض التعديلات على المودل أو على البيانات وطريقة تمثيلها.

  6. حفظ المودل الذي تم تدريبه وتصديره للاستخدام.

مصادر مفيدة:

  • لتعلم لغة بايثون: كتاب Dive into Python3 by Mark Pilgrim
  • كتاب تعلم البرمجة من الصفر مع بايثون 3. ترجمة هشام رزق الله
  • لتعلم الآلة: كتاب Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition by Aurélien Géron.

الشهادة الجامعية مطلوبة للعمل في الشركات.

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

عالم البيانات

يتشابه كثيرًا مع مهندس تعلم الآلة، فقد ذكرت لك أن أي مشروع تعلم آلة يبدأ بفهم البيانات وتحليلها وعرضها على شكل رسوم بيانية، وهذه هي مهام عالم البيانات، بالإضافة لاستخدام خوارزميات تعلم الآلة كذلك وذلك لفهم البيانات بشكل أفضل، وهو ما يسمى تعدين البيانات (data mining). إذًا متطلبات هذه الوظيفة هي نفس متطلبات مهندس تعلم الآلة.

مهندس شبكات

وهو المسؤول عن تصميم وإدارة الشبكة الداخلية للشركة وكذلك السيرفر الذي تقدم الشركة خدماتها عبره. والإدارة تعني التأكد من عمل الشبكة بالشكل الأمثل والأفضل أداء، بالإضافة لحماية الشبكة ورفع مستوى الأمان فيها.

يتطلب هنا معرفة نظرية بكيفية عمل الشبكات، وكذلك المعرفة التطبيقية في هيكليات الشبكات المختلفة وكيفية اختيار الأمثل وتصميم الشبكة بالشكل الأفضل. ويتطلب معرفة بالتطبيقات المستخدمة لمراقبة الشبكة وإدارة المستخدمين على الشبكة، مثل تطبيق Active directory على الويندوز. ولا بد طبعًا من تعلم أساسيات سطر أوامر لينكس وذلك ﻷن معظم السيرفرات على شبكة الإنترنت اليوم تستخدم نظام تشغيل لينكس. ويتطلب كذلك المعرفة بالبرمجة لكتابة أكواد ﻷتمتة بعض المهام.

يُطلب شهادة جامعية في مجال الحاسوب في الغالب، بالإضافة غالبًا لشهادة من جهات مختصة بالشبكات (وهي الأهم فعليًا).

من أشهر الجهات التي توفر تعليم وشهادات في هذا المجال هي Cisco. ويوفر موقع skillsforall.com جزء من دورات Cisco بشكل مجاني.

مهندس الخدمات السحابية

أي خدمة تُقدم لك الآن عبر الإنترنت فهي خدمة سحابية، فالمقصود بالسحابة هو السيرفر. جوجل درايف ومستندات جوجل مثلًا هي خدمات سحابية.

وُضع هذا المصطلح عندما وُجدت خدمات يستخدمها الملايين، مثل اليوتيوب، ولم يعد يكفي سيرفر ولا ثلاثة ولا عشرة لتلك الخدمات، أي أن الخدمات تلك تتطلب وجود العديد من السيرفرات حول العالم لتخدم هذا العدد الهائل من طلبات المستخدمين وفي نفس الوقت. وهنا وُضعت تطبيقات أخرى لإدارة السيرفرات المختلفة لنفس التطبيق، وهو ما يُعرف بالأنظمة الموزعة (distributed systems) والتي تم الإشارة لها في مسار أسس علم الحاسوب على هذه المنصة.

لذا يُطلب منك هنا المعرفة بإدارة الخدمات السحابية والتطبيقات الخاصة بتوزيع الطلبات على السيرفرات المختلفة، كما يُطلب منك معرفة بخدمات تجارية شهيرة مثل AWS أو Azure أو Google cloud أو غير ذلك. وطبعًا أساسيات الشبكات وحمايتها. وكذلك المعرفة بإدارة قواعد البيانات. بالإضافة لمتطلبات أخرى بحسب كل شركة.

يُطلب في الغالب شهادة جامعية في المجال بالإضافة لشهادة تُمنح من أحد الخدمات المراد التعامل معها مثل AWS. حيث توفر شركات تلك الخدمات (أي أمازون وميكروسوفت مثلًا) برامج تدريبية وتمنح شهادات فيها.

مهندس نظم

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

تختلف التقنيات والمتطلبات كثيرًا من قطاع لآخر ومن شركة لأخرى. ولا تخلو مهام مهندس النظم من مهمة تقديم الدعم التقني، حيث يحل المشاكل التي تطرأ على الأجهزة المستخدمة، وعلى الشبكة، لذا تتطلب غالبًا معرفة بالشبكات، وبأنظمة التشغيل، وحماية التطبيقات، وحماية الشبكة. وكما ذكرت لك، لا يُقصد عادةً من كلمة نظم هنا أنظمة تشغيل الحاسوب، وإنما أنظمة الشركة، فإذا كانت شركة في القطاع المالي فيكون لديها تطبيق أو تطبيقات برمجية في ذلك القطاع، وتلك هي أنظمتها. وقد تكون وظيفة مهندس النظم حينها هو اختبار النظام ذاك، ودمج المزايا الجديدة بشكل صحيح، ومراقبة السيرفر الذي يعمل عليه التطبيق والتأكد من عمله بشكل سليم وفعّال، وأخذ نسخ احتياطية للبيانات، وتحديث التطبيقات والأنظمة المستخدمة على أجهزة الشركة، بالإضافة لتوفير الدعم التقني وحل المشاكل، ويتطلب هذا تواصل مباشر مع الموظفين، أو مع الزبائن الذين يستخدمون تطبيقات الشركة، وقد يُطلب منه تدريبهم على نظام (تطبيق) الشركة.

وقد يُطلب من مهندس الأنظمة أن يؤدي دور خدمة العملاء (الدعم التقني)، يتواصل مع الزبائن مباشرة ويحل لهم مشاكلهم. الزبائن هنا يكونوا موظفين بشركات أخرى في الغالب، والذين يستخدمون برنامجًا ما من عمل الشركة التي تعمل بها. لذا يتطلب منك تعلم تطبيق شركتك والمشاكل الشهيرة التي تطرأ عليه، لكي تقول “ألو..كيف يمكنني مساعدتك” وتسمع أحدهم يشتمك على الطرف الآخر من المكالمة! وذلك بسبب تطبيقكم الفاشل!

يُطلب عادةً شهادة جامعية في المجال.

مهندس الدعم

وهو الذي يقدم الدعم التقني للزبائن، أي باختصار “خدمة عملاء” ولكن في الجانب التقني، ويشمل ذلك الرد على المكالمات ورسائل البريد الإلكتروني والرسائل على منصات لتنظيم طلبات الدعم (tickets) والتي تستخدمها الشركة. ويكون الزبائن إما موظفين في شركات أخرى، في حال كانت شركتك تقدم خدمات للشركات، أو أفراد عاديين.

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

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

يتطلب غالبًا شهادة جامعية في المجال.

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

مهندس اختبار

وهو المسؤول عن كتابة اختبارات مؤتمتة للبرمجيات وتنفيذها وتحليل نتائجها، واكتشاف أي مشكلة في التطبيقات التي يتم إجراء الاختبارات عليها وكتابة التقارير حول عمليات الاختبار ونتائجها.

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

علمًا أنه يمكن كذلك إجراء اختبارات يدوية، أي يوجد من يعمل على ذلك، ولكن معظم الشركات اليوم تتجه لأتمتة الاختبارات (التي يمكن أتمتتها).

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

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

وبالنسبة لمهندس ضمان الجودة أي Quality Assurance واختصارًا QA فمهمته التأكد من أن التطبيق يطابق معايير الجودة أو المزايا والاتفاقيات التي تم إبرامها مع العميل (الزبون). تكون المهام غالبًا مشتركة مع مهندس الاختبار. ولايوجد فرق واضح بينهم. لاحظ هنا أنه لا يمكن الاستغناء عن بعض الاختبارات اليدوية، فقد تعمل وظائف التطبيق كما المتوقع، ولكن تجربة المستخدم قد تكون سيئة، ربما الواجهة غير واضحة، ربما الألوان، أو غير ذلك. يجب في النهاية أن تضع نفسك مكان المستخدم وتختبر التطبيق من وجهة نظره. من المهم كذلك معرفة أن الوظيفة هذه حساسة جدًا ويجب إتقان العمل فيها على أكمل وجه، قد يعمل مهندس الاختبار في بنك، حيث التعاملات المالية وحيث لا مجال أبدًا للخطأ، وقد يوظف البنك مطورين من غير المهندسين لبرمجة تطبيقه! وبالتالي يقوموا بتطوير تطبيق يفتح العديد من الثغرات الأمنية، أو ربما الأخطاء الحسابية، أو أيًا يكن.. عندما يحصل خرق أمني أو مشاكل حسابية نتيجة البرمجة الرديئة، ويخسر البنك الملايين بسبب ذلك، فيتم إلقاء كل اللوم على مهندس الاختبار، وليس على المطور، فمهندس الاختبار هو الذي صادق على كود المطور ووافق على نشره دون أن يشير إلى تلك المشاكل أو يكتشفها.

يُطلب عادةً شهادة في مجال علم الحاسوب، وتختلف التقنيات والأدوات المستخدمة (لإجراء الاختبارات المؤتمتة) بحسب الشركة وقطاعها ونوعية تطبيقاتها ونوعية الاختبارات المطلوبة.

اختصاصي أمن سيبراني

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

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

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

لا يهم أي شهادة هنا إذا أردت الوصول للعلوم الحقيقية، لا يوجد أي شهادة تمثل علم حقيقي في هذا المجال، وإذا كنت متقنًا بالفعل لما تفعل، ويمكنك اكتشاف ثغرات وسدها، فستأتي الشركات لقدميك لكي تخدمها!

أما عن المدة المتوقعة، فتتطلب دهرًا..التصدي لهجمات والتعامل مع المخترقين هي لعبة القط مع الفأر، لعبة لا تنتهي، لا يوجد تطبيقات بدون ثغرات، ويجب دائمًا وجود أنظمة دفاعية ووضع سيناريوهات محتملة وإجراءات مسبقة للتعامل معها.

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

مطور الوب

استخدمنا سابقًا تطبيقات الحاسوب والتي تدعى اليوم تطبيقات سطح المكتب (desktop application) بكثرة، وكانت تُباع على أقراص ليزرية (CDs)، إلى أن ظهر الإنترنت وانتشر في كل مكان، ورخصت تكاليفه. ففي البداية كان من يريد الوصول لشبكة الإنترنت يذهب لمقهى الإنترنت ويدفع بالساعة، إلى أن وصل للبيوت وأصبح اليوم الإنترنت يصل لكل منزل تقريبًا في كثير من البلدان. وعند تلك النقطة، تم التحول تدريجيًا من تطوير تطبيقات سطح المكتب، إلى تطوير تطبيقات الوب، وذلك ﻷن المستخدم يفضل استخدام التطبيقات مباشرة من متصفحه، دون الحاجة لتنصيب أي شيء محليًا على جهازه، بالإضافة إلى أن تطبيق الوب يكون مستقلًا عن أي نظام تشغيل وبالتالي يعمل على أي جهاز يحوي متصفحًا للوب. وبالتالي يمكن القول عمومًا أنه تم استبدال تطوير تطبيقات سطح المكتب إلى تطوير تطبيقات الوب، وأنك اليوم لو أدرت عمل تطبيق ما، فلا فائدة غالبًا من جعله تطبيقًا لسطح المكتب، بل يفضل ويجب في كثير من الحالات تصميمه وتطويره على أنه تطبيق وب يعمل على متصفحات الوب.

المسميات الوظيفية الفرعية: تتضمن تطبيقات الوب بناء قاعدة بيانات والتواصل معها، بالإضافة لتصميم وتطوير واجهة المستخدم. العاملون على تصميم وتطوير واجهة المستخدم فقط يُدعون مطورو الواجهة (Frontend developers) والذين يعملون على بناء قاعدة البيانات وبرمجة التواصل مع قاعدة البيانات فقط يُدعون مطورو البنية التحتية (Backend developers) ومن يقومون بكلا الوظيفتين معًا يُدعون مطور شامل (fullstack developers). علمًا أن المسميات العربية غير متداولة.

من الممكن عمل مواقع وب بشكل واجهة فقط، ونسمي الموقع حينئذٍ بأنه موقع ستاتيكي (static website) حيث لا يمكن للمستخدم أن يتفاعل معه، مثل المواقع التعريفية بالشركات، والتي تتألف غالبًا من صفحة واحدة أو بضع صفحات.

لنبدأ الآن بالتعرف على التقنيات والعلوم المطلوبة لكل من مطور الواجهة ومطور الجانب الخلفي لتطبيقات الوب.

تطوير الواجهة

الواجهة هي تلك التي تراها على متصفحك، إذا ضغطت باليمين على أي صفحة (من الحاسوب المكتبي وليس الجوال) واخترت عرض المصدر (view page source) فستجد كود الواجهة. لذا نتحدث هنا عن:

HTML, CSS وهي لغات تنسيقية، أي ليست لغات برمجة، وإنما هدفها عرض المحتوى وتحديد أماكن العناصر وأبعادها وما شابه.

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

وهذه هي العلوم الأساسية المطلوبة من مطور واجهات الوب فقط لا غير. ولكن..

ظهرت الكثير من الأدوات وبيئات العمل (frameworks) لتسهيل الكتابة في تلك اللغات الثلاث. بالنسبة لـ CSS مثلًا، فيوجد بيئات عمل مثل Bootstrap و tailwind و bulma وغيرهم. ما يقومون به هو تزويد مطور الواجهة بعناصر معرفة ومكتوبة مسبقًا بلغة CSS لاستخدامها مباشرةً في HTML، بعبارة أوضح، لا يحتاج المطور الذي يستخدم بيئات العمل هذه من أن يكتب أي شيء في CSS، مما يوفر عليه الوقت وبالتالي يزيد الإنتاجية، وهذا هو الهدف من بيئات العمل.

ونفس الشيء بالنسبة لجافاسكريبت، يوجد الكثير من بيئات العمل، كل منها له طريقة كتابة (Syntax) خاصة به، وله نفس الهدف؛ توفير الوقت، فالميزة التي يتطلب برمجتها كتابة عشرة أسطر مثلًا في جافا سكريبت، تتطلب ربما ثلاثة أسطر في بيئات العمل. وتقوم بيئات العمل في النهاية بتحويل ما تكتبه ضمنها إلى لغة جافا سكريبت (فمتصفحات الوب لا تفهم سوى HTML و CSS وجافاسكريبت). من بيئات العمل تلك Angular و React و Svelte وغيرهم الكثير.

وهذا كل شيء بالنسبة لتطوير الواجهة.

  • ولكني لم أستفد شيئًا! مالذي يجب أن أتعلمه الآن ﻷصبح مطور واجهات؟ في البداية لا بد من تعلم أساسيات HTML و CSS، قد تقرأ كتابًا عنهم، أو تشاهد مقطعًا عنهم بحدود ثلاث إلى ست ساعات، وقد يكفي هذا غالبًا، مع ضرورة عمل شيء بيدك ولو كان بسيطًا. كذلك يفضل جدًا تعلم أساسيات جافاسكريبت نفسها، الأساسيات فقط تكفي.

ثم يأتي السؤال:

هل تريد أن تعمل في شركات؟ أم تعمل بشكل مستقل (مع الزبون مباشرة)؟

إذا أردت العمل بشركات، فيجب عليك البحث في السوق الموجود في بلدك، ابحث عن شركات تطوير الوب في بلدك وابحث عن بيئات العمل التي يستخدمونها والتي يطلبونها في إعلانات التوظيف لديهم. تُظهر كذلك بعض المواقع إحصائيات عن بيئات العمل واستخدامها بحسب الموقع الجغرافي.

أما إذا أردت العمل بشكل مستقل، فهذا يعني أنك ستخدم الزبون مباشرة، والزبون لا يفقه غالبًا بكل هذه الأمور، هذا يعني أن اختيار بيئة العمل عائد لك، وبالتالي يمكنك البحث عن الأسهل والأحدث والأفضل أداء، وباعتقادي هنا أن Svelte بيئة عمل ممتازة لجافاسكريبت. أما بالنسبة لبيئات عمل CSS فابحث بنفسك عن مقارنة بينهم، فللموضوع تفصيل، يوجد بيئات عمل تعطيك حرية كبيرة جدًا، والحرية دائمًا تعني ضرورة وجود علم أكبر، وغالبًا تعامل أصعب، وأتحدث غالبًا عن tailwind هنا، وفي المقابل، حرية أقل في تخصيص العناصر وشكلها وأبعادها، مع سهولة أكبر وحاجة أقل للتعلم، وأعتقد أني أتحدث هنا عن materializecss أو skeleton css. ويوجد الكثير غيرهم أيضًا، لا بد من البحث والمقارنة بنفسك.

الشهادات المطلوبة: لا يُطلب في الغالب شهادة جامعية هنا، فالمهم هو وجود معرض أعمال، أي أن تقوم بعمل بعض الواجهات بنفسك وبناء معرض أعمالك (المبهرة، أو لنقل الأنيقة)، عندها ستُفتح لك الأبواب للعمل بصفة مطور واجهات إن شاء الله.

المدة التخمينية للتعلم: 225 ساعة.

تطوير الخلفية أو البنية التحتية (Backend)

يجب هنا أولًا المعرفة بقواعد البيانات. والتي تنقسم لقسمين رئيسيين بحسب الهيكلية، قواعد البيانات المنظمة (structured) وغير المنظمة. اللغة المستخدمة في الأولى هي SQL، ولها أنظمة إدارة أشهرها ربما هم MySQL و PostgreSQL و Oracle SQL.

أما قواعد البيانات غير المنطمة، فيطلق عليها عمومًا NoSQL، وتستخدم لغة JSON في الغالب، ومن أشهر أنظمتها MongoDB و Redis، بالإضافة للكثير غيرهم. لكل منهم مزاياه وعيوبه واستخداماته، لذا يجب مراجعة تلك المعلومات في حال أردت بناء تطبيق جديد، وإعطاء القرار حول التقنيات الأفضل لذلك التطبيق بحسب متطلباته. وهي عملية ليست سهلة الحقيقة وتحتاج للإلمام بالعديد من الجوانب أهمها الأداء وسهولة التوسيع والنمو والدعم الموجود على الإنترنت في حال ظهور مشاكل (مجتمع الأسئلة والأجوبة والشروحات الرسمية) وغيرها.

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

  • PHP: رغم أنها لغة قديمة إلا أنها مازالت مستخدمة اليوم بكثرة، وقد ساعدت بيئات العمل التي ظهرت لها على إبقائها على قيد الحياة، أشهر بيئة عمل تستخدم لغة PHP هي Laravel.
  • Python: بيئة العمل الأشهر لها هي جانغو (Django).
  • Java: حيث بيئة العمل الأشهر هنا Spring.
  • Javascript: نعم! يمكن استخدام جافا سكريبت لبرمجة الخلفية! وقد حدث ذلك مؤخرًا عندما وضعت بيئات عمل لهذا الغرض، مثل Node js و Next js.

وتنقسم كذلك بيئات العمل بحسب تخصصها للتالي:

  • بيئات عمل لتطوير الواجهة فقط: وهي التي ذكرتها لك في قسم تطوير الواجهة، مثل Angular و React و svelte
  • بيئات عمل لتطوير الخلفية فقط: مثل Spring و Fast API (بايثون)
  • بيئات عمل لتطوير تطبيق وب كامل: مثل Laravel و Django و Svelte Kit، والذين يمكن استخدامهما لتطوير تطبيق وب كامل، ويمكن كذلك استخدام بعضها لتطوير الخلفية فقط (بالإضافة لإمكانية الاعتماد عليها بشكل كامل)، حيث يمكن إضافة الحزمة Django rest framework للأخيرة لجعلها للخلفية فقط.

  • لماذا أستخدم بيئة عمل للواجهة مختلفة عن بيئة عمل الخلفية، طالما يوجد بيئات عمل تتيح برمجة كلا الواجهة والخلفية؟

سؤال جميل. يمكن مثلًا لـ django كما ذكرنا أن تساعدك ببناء تطبيق وب كامل، ولكنها في الواقع مختصة أكثر بالخلفية وبرمجتها بلغة بايثون، أي أنها غير مختصة بالواجهة، ويتطلب عمل الواجهة عليها الكتابة بالجافا سكريبت. في حين أنك تعلم الآن أن البرمجة عبر بيئات عمل جافا سكريبت أفضل من الكتابة بلغة جافا سكريبت نفسها، حيث قلنا أن بيئات العمل توفر الوقت وتزيد الإنتاجية. وقد تقول هنا: إذًا لماذا لا أستخدم بيئة عمل تستخدم جافا سكريبت لكلا الواجهة والخلفية؟ يمكن ذلك طبعًا، ولكن هل تريد استخدام موديلات تعلم الآلة في تطبيقك (ما يُعرف بالذكاء الصنعي)؟ إذا كان الجواب نعم فستحتاج لاستخدام بايثون في الخلفية وليس جافا سكريبت. ويبقى في النهاية لكل لغة استخداماتها، لذا لا تفيدك دائمًا جافاسكريبت في الخلفية.

ويجب هنا تعلم API (وهي اختصار لـ Application programming interface أي واجهة التطبيق البرمجية) حيث يتم استخدامها فقط في حال استخدام بيئات عمل مختلفة للواجهة والخلفية. والـ API هي عبارة عن روابط url يتم استخدامها لتواصل الواجهة مع الخلفية.

ويجب كذلك تعلم عمل اختبارات للتأكد من عمل روابط الـ API بشكل صحيح، والتطبيق الأشهر لاختبار ذلك هو Postman.

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

إذًا من أين أبدأ؟

من قواعد البيانات، وأعتقد أن تعلم SQL سيفيدك في جميع الحالات، ثم تطلع أيضًا على NoSQL. ثم فهم معنى الـ API وعمله، وتطبيق Postman. ولكن أي لغة برمجة، وأي بيئة عمل، فهذا جوابه نفس المناقشة السابقة، في حال أردت العمل في شركات أو بشكل مستقل.

الشهادات المطلوبة: هنا تتطلب الشركات غالبًا شهادة في هندسة الحاسوب، أو معهد برمجة (سنتين). فالبنسبة للشخص الذي تعلم الجانب العملي فقط وليس لديه أساس نظري، فلا يمكن الاعتماد عليه في عمل تطبيقات في مجالات حساسة مثل القطاع الصحي والمالي (تطبيقات البنوك)، ﻷن ذلك يتطلب معرفة بالأساس النظري لطريقة عمل الحاسوب ولغات البرمجة، ولا يُقبل أي خطأ في تلك المجالات، ﻷن أي خطأ صغير سيكون مكلف كثيرًا وعواقبه سيئة.

المدة التخمينية للتعلم: بالنسبة للخريج الجامعي (يعرف الأساس النظري، والبرمجة، وقواعد البيانات ويريد الدخول لمجال برمجة الوب (Backend) فيتطلب تعلم بيئة عمل ما، وعمل تطبيق بسيط للتدريب، أو عدة تطبيقات صغيرة، وهذا يتطلب حوالي 100 ساعة) لا أنصح غير الخريج بالدخول في هذا المجال إذا أراد التوظيف، فإما أن فرصه ستكون قليلة (ابحث على كل عن متطلبات الشركات في بلدك) أو سيُعطى راتبًا أقل من غيره ممن يؤدي نفس المهام. أما إذا أردت العمل بشكل مستقل وتعرف السوق المناسب لذلك، فيتطلب تعلم بعض الأسس النظرية ثم البرمجة ثم قواعد البيانات، بالإضافة لبيئة عمل ما، وهذا يحتاج لحوالي 300 ساعة بحسب تخميني.

مطور تطبيقات الجوال

ذكرت لك في بداية فقرة مطور الوب أن تطبيقات الحاسوب (تطبيقات سطح المكتب) قد تم استبدالها بتطبيقات الوب. وهنا وبشكل مشابه، تم استبدال الحاسوب بالهواتف الذكية، وهذا بالنسبة للأفراد طبعًا. معظم الأفراد اليوم يستخدمون الهاتف الذكي بشكل أساسي للوصول للإنترنت، بل أن معظمهم لا يمتلكون حاسوب مكتبي أصلًا، ولهذا السبب ظهرت أهمية تطبيقات الجوال، رغم أن مواقع الوب اليوم (واجهات المستخدم فيها) يتم عملها بحيث تكون متوافقة مع جميع أحجام الشاشات (تُدعى هذه الميزة بـ Responsive)، أي أنه يمكنك الاكتفاء ببرمجة تطبيق وب وجعل الواجهة متوافقة لتظهر بشكل سليم على شاشة الهاتف الذكي، وذلك عند تصفح تطبيقك عبر متصفح الوب من الهاتف، ومع هذا، تعمد الكثير من الشركات وغيرها لإنشاء تطبيقات للجوال، (وهذا يحدث أحيانًا بالإضافة لوجود تطبيق وب) وذلك لعدة أسباب، منها إمكانية وسهولة عرض إشعارات للمستخدمين (Push Notifications)، وربما أيضًا لسهولة سرقة بيانات المستخدمين!

نظامي التشغيل المسيطرين على السوق حاليًا بالنسبة للهواتف الذكية هما أندرويد و iOS. تعمل هواتف أبل بنظام iOS، فيما تعمل كل الهواتف الأخرى تقريبًا بنظام أندرويد. يُستخدم اليوم تطبيق Android Studio بلغتي البرمجة جافا أو Kotlin لإنشاء تطبيقات لنظام أندرويد.

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

يتطلب نشر تطبيقات أندرويد على Google play دفع مبلغ 25$ لمرة واحدة، بينما يتطلب نشره على متجر أبل دفع 99$ سنويًا.(الأرقام هذه بحسب تاريخ المقال)

إذًا تقنيات تطوير تطبيقات الهاتف الذكي أصبحت معروفة وبحسب النظام المستهدف. يتطلب التطبيق بلا شك التواصل مع قواعد بيانات، والتي تكون إما محلية توضع على جهاز المستخدم (فقد لا يتطلب التطبيق اتصال بالإنترنت أو تفاعل مع مستخدمين آخرين)، وأحد الخيارات لذلك هي قاعدة بيانات sqlite. وقد يتطلب اتصالًا، ومن الخيارات المتاحة في تلك الحالة خدمة جوجل لقواعد البيانات والتي تدعى firebase وهي قاعدة بيانات NoSQL.

الشهادة المطلوبة: لا يتطلب في الغالب شهادة جامعية للعمل بصفة مطور تطبيقات وب، ويبقى الموضوع يختلف من بلد لآخر ومن شركة لأخرى.

المدة التخمينية للتعلم: تعلم لغة برمجة (مثل kotlin أو swift) + تعلم التعامل مع البرنامج المخصص لتطوير التطبيق + تعلم التصدير والنشر. كل ذلك قد يستغرق مدة تقريبية بحدود 150 ساعة.

مطور ألعاب

لنتحدث أولًا عن صناعة الألعاب عمومًا، ثم عن مطور الألعاب بشكل خاص.

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

نعم..يوجد ألعاب تتم من قبل فرد واحد، وتدعى تلك الألعاب (indie games) يمكنك البحث والاطلاع عليها، إنها ألعاب بسيطة جدًا.

لذا يجب أن تحدد هدفك وتعرف أين ستعمل والسوق المستهدف قبل الدخول في هذا المجال المتعب، بالإضافة للأخذ بالاعتبار أن معظم الألعاب لا تحمل أي رسالة أو قيمة، مجرد تسلية وتضييع وقت، هذا إذا افترضنا عدم وجود رسائل سلبية ضمنها. ولكن إن تم العمل على ألعاب هادفة (مثل تلك التي صُنعت من قبل شركة صخر سابقًا، مثل ألعاب المسابقات والألعاب التعليمية) فسيكون ذلك شيئاً رائعًا بلا شك.

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

من محركات الألعاب الشهيرة Unity ويوفر خدمات مجانية ومدفوعة، ومحرك الألعاب الذي عملت عليه بشكل شخصي، وهو Godot المجاني تمامًا ويعمل على جميع الأنظمة (ويندوز ولينكس وماك) وبإمكانه التصدير كذلك لكافة الأنظمة بما فيها أندرويد وتطبيق ستيم steam وغير ذلك..هذا بالإضافة طبعًا لمحركات ألعاب أخرى. ويتم تحديد محرك الألعاب المناسب لك بحسب متطلباتك وميزانيتك ولغة البرمجة التي تريد العمل عليها.

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

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

أما بخصوص متطلبات الشهادة فيُطلب غالبًا شهادة جامعية، ﻷن برمجة اللعبة بالنهاية هي برمجة تطبيق متكامل واختباره وتصديره والتأكد من عمله على المنصة/المنصات المستهدفة، وتشمل نفس مراحل هندسة البرمجيات (بناء أي تطبيق كامل).

الوقت المتوقع للإتقان: رغم عملك هنا على البرمجة فقط، إلا أنه يجب التعرف على مراحل صنع اللعبة لفهم طريقة العمل والبرمجة بشكل صحيح وسليم ووفق المطلوب. وقد يستغرق ذلك وقتًا بحدود 100 ساعة، أو أكثر من ذلك بكثير..

وأفيدك هنا في حال أردت عمل لعبة بسيطة بمفردك، أنه يوجد مواقع توفر لك مؤثرات صوتية وتصاميم مجانية، الموقع الأشهر ربما هو pixabay، ولكن بالنسبة للتصميم تحديدًا فسيتطلب منك المعرفة به للتعديل على الأقل على التصاميم الجاهزة. برنامج التصميم الذي أنصح به هنا هو Inkscape.

أكاديمي

هل نحتاج لذكر ذلك؟

يمكنك إكمال دراسة الماجستير ثم الدكتوراه. يعمل طالب الماجستير في التدريس في الجامعة بصفته مساعد للدكتور (مدرس الجزء العملي) وذلك أثناء دراسته لمرحلة الماجستير، وهذه فرصة جيدة وراتب جيد أثناء الدراسة.

يمكن للدكتور في الجامعة العمل على التدريس، أو على البحث العلمي، أو على كلاهما معًا، وهذا طبعًا إذا احتوت الجامعات لديك على شيء يدعى البحث العلمي (ليس في البلدان النامية للأسف).

لا تكمل دراستك من أجل الراتب العالي لدكتور الجامعة، أو العمل المريح، فسكان كوكبنا هذا أصبحوا كثر، ويحصل سنويًا مئات آلاف الأشخاص على شهادة الدكتوراة، ولا تتسع جامعات العالم لتلك الأعداد الكبيرة التي تتخرج سنويًا. ويمكن جدًا أن تحصل على شهادة دكتوراة ولا تجد أي فرصة عمل في أي جامعة. ومع هذا، تتطلب الكثير من الوظائف في الشركات شهادة الدكتوراة، خاصة في مجال البحث العلمي مجددًا، أو في مجال إدارة المهندسين (رئيس قسم). ولكن الأعداد الكبيرة تجعل المنافسة دائمًا قوية.

هذا المنشور تحت ترخيص CC BY 4.0 بواسطة المؤلف.