Skip to content

Instantly share code, notes, and snippets.

@Alaboudi1
Last active October 20, 2018 23:36
Show Gist options
  • Save Alaboudi1/4922a09abf52035a456112fbdab19780 to your computer and use it in GitHub Desktop.
Save Alaboudi1/4922a09abf52035a456112fbdab19780 to your computer and use it in GitHub Desktop.

تطوير تطبيقات الشبكة العنكبوتية في عام 2017

  • المقدمة:

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

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

  • لماذا أستثمر وقتي في تعلم تطوير تطبيقات الشبكة العنكبوتية؟ أغلب المطورين الآن يتعلمون تطوير تطبيقات الهواتف، لماذا لا أنضم معهم ؟

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

    1. متجر التطبيقات يضر المطورين بحيث يأخذ نسبة من أرباح بيع التطبيقات.

    2. هناك محاباة كبيرة لصالح المطورين المشهورين على حساب المطورين الصغار، والدليل أن 60% من التطبيقات الموجودة في متجر تطبيقات قوقل لم يقم أحد بتحميلها قط.

    3. 94% من أرباح التطبيقات هي فقط ل 1% من المطورين!

    4. دراسة في الولايات المتحدة الأمريكية أثبتت أن متوسط تحميل التطبيقات لنصف مستخدمي الهواتف الذكية لديها، يساوي صفر.

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

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

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

    • تطبيقات الشبكة العنكبوتية التقدمية PWA:

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

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

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

    ما رأيك الآن؟ هل تطوير تطبيقات الشبكة العنكبوتية أصبح من اهتماماتك؟

  • من أين أبدأ؟ وماهي المعلومات والمهارات الأساسية التي علي أن أكتسبها خلال طريقي إلى احتراف تطوير تطبيقات الشبكة العنكبوتية؟

    سأحاول سرد أغلب الأساسيات التي يجب على مهندس البرمجيات اتقانها في طريقه لتعلم برمجة تطبيقات الشبكة العنكبوتية:

    1. ترسيخ وتعميق فهمك ل HTML و CSS.

    2. محاولة تعميق فهمك بشكل جدي للغة JavaScript. لا يستطيع أحداً أن يتجاهل الإقبال الشديد على بناء تطبيقات متعددة باستخدام تلك اللغة، فتعلمك JavaScript يأهلك للقيام ببناء خوادم باستخدام node.js ، تطبيقات للهواتف باستخدام cordova أو NativeScript، برمجة أجهزة انترنت الأشياء باستخدام cylon.js ،تطبيقات للحواسب باستخدام Electron ،برمجة Microsoft HoloLens باستخدام HoloJS أو عمل بعض العمليات الإحصائية على بيانات معينة . حتى إذا أردت أن تقوم ببناء نظام تشغيل كامل فبإمكانك فعل هذا.

    3. قد يكون توقعك للنقطة التي سوف تلحق النقطتين السابقتين هي نقطة تعلم لغة خوادم (server-side scripting). رأيي الشخصي أنه يوم بعد يوم أرى أن أهمية وجود خادم تقوم ببرمجته وإدارته بشكل كامل يقل شيئاً فشيئاً. هناك تقنيات جديدة خرجت كخدمات قواعد بيانات ( database as a service aka DBaaS ) و المعمارية خالية من الخوادم ( serverless architecture) كفيلة بإعطائك الفرصة لبناء تطبيق متكامل ومتميز من دون اللجوء إلى العمل على بناء خادم خاص بك، لكن هذا لا يعني عدم تعلمك للغة برمجية للتحكم بخادم تطبيقك، ولكن لا يلزمك التعمق في فهم كيفية إدارة الخادم وبرمجته بشكل كامل مما يعطيك الفرصة لتركز بشكل أفضل على بناء تطبيقك، وبما أن تعلم JavaScript في قائمة مهامك، وسع دائرة تعلمك لهذه اللغة بتعلم nodejs لبرمجة الخادمات أيضاً.
      الخلاصة هنا، من رأيي الشخصي أن تتعلم بناء Single Page Application ومن ثم تتعلم كيفية ربطها بقاعدة بيانات DBaaS باستخدام REST API أو GraphQL لأنه هو التوجه الحالي لبناء تطبيقات للإنترنت. إذا كان تطبيقك بحاجة إلى أن يشغل بعض الأوامر البرمجية في خادم بعيد عن متصفح المستخدم، فمن الممكن هنا أن تتعلم كيفية بناء معمارية خالية من الخوادم. للإستزادة, اقرأ عن Fat client و التحرك نحو بناء تتطبيقات من دون backend.

    4. تعلم Git و GitHub . أداتان غنيتان عن التعريف لابد من تعلمهما بشكل جيد لكل مبرمج في وقتنا هذا.

    5. يجب أن تتعلم كيف تختبر و تتفحص تطبيقك (Software Testing و Debugging). لاختبار برمجيات الشبكة العنكبوتية هناك بيئات تساعدك على بناء اختبارات لتطبيقك وهي كثيرة، من أشهرها Karma، وبيئات لكتابة اختبارات برمجياتك ومن أشهرها Jasmine . بالنسبة لتفحص برمجياتك فليس هناك منافس ل Chrome Devtools.

    6. إذا تعلمت جميع ما سبق، فلا بأس أن تبدأ بتعلم بعض بيئات العمل التي ستساعدك في عمل مشاريع أكثر احترافية. فمثلا CSS لديها بيئتان مشهورتان وهما: PostCSS و SASS. و لبناء (Single Page Application) باستخدام JavaScript هناك العديد منها مثل: Angular2 ، React، (المفضلة لدي -Aurelia) و Vue.js . تذكر أنه يكفيك أن تتعلم بيئة عمل واحد لكل لغة لتسهيل عملك.

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

  • كيف أبني سيرة شخصية متميزة في مجال تطوير تطبيقات الشبكة العنكبوتية ؟

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

  • أي نصائح أخرى ؟

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

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

كتبها: عبدالعزيز سعد العبودي

عضو هيئة التدريس في جامعة الملك سعود، قسم هندسة البرمجيات.

13 ربيع الأول

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment