لماذا تصر قوقل على استخدام لغة جافا في نظام أندرويد

السلام عليكم ورحمة اللهjava_logo

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

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

Golang

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

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

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

ماهو رأي القُرّاء الكرام، هل الموضوع أعقد مما يبدو عليه أم هُناك تفاصيل غير واضحة للعيان تمنع قوقل من استخدام الحل الفني وتصر على الحل القانوني.

رحلة إلى مدينة بورتسودان

السلام عليكم ورحمة الله

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

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

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

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

http://wikimapia.org/#lang=en&lat=19.656814&lon=37.174988&z=10&m=b

Portsudan

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

korneash

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

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

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

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

portsudan-road

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

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

shells

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

ملحوظة:

وضعت بعضاً من الصور لهذه الرحلة في موقع فليكر في هذا الرابط

راسبري باي 2

raspi2السلام عليكم

بفضل الله تحصلت على جهاز راسبري باي 2، فقد كان معروضاً في الفيسبوك، فأرسل لي أحد الزملاء صورة من هذا العرض -حيث أصبحت  مشهوراً بإعجابي بهذا الجهاز العجيب- فاتصلت على صاحبه وذهبت إليه اليوم التالي في جامعة السودان واشتريته منه. وقد كان سعره 550 جنيه سوداني، أي ما يعادل 50 دولاراً.

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

أهم مواصفات راسبري باي 2 هو أنه يمتلك معالج رباعي النواة من النوع ARM، أما الراسبري باي السابق فهو يحتوي على معالج أحادي النواة، كذلك فهو يحتوي على ذاكرة 1 قيقا بايت، مقارنة بـ 255 أو 512 ميغابايت رام للراسبري باي 1.

المعالج الرباعي النواة جعل الراسبري باي مناسب أكثر ليعمل كجهاز سطح مكتب بواجهة رسومية، حيث أن النوع الأول لم يكن يصلح لهذا اﻷمر، كان بطيئاً جداً في فتح التطبيقات، كان يصلح فقط ليعمل كمخدم أو كجهاز للتحكم في الكهرباء. قمت بتشغيل عدد من البرامج وتثبيت أخرى، وكان أشهرها متصفح iceweasle المشتق من Firefox و Icedove المشتق من Thunderbird وحزمة Libreoffice وكلها عملت كأنه جهاز كمبيوتر عادي. أيضاً كانت هُناك لعبة Minecraft مخصصة للراسبري باي، اللعبة ليست فيها إمكانات كبيرة لكنها كانت خفيفة ولا تستهلك كثيراً من المعالج.

قُمت بتثيت مقسم Asterisk وعملت عليه اختبار أداء، فتحمل حوالي 70 إتصال في نفس الوقت مع استخدام للمعالج بنسبة 60% تقريباً. في راسبري باي 1 كان يصل فقط إلى حوالي 10 إتصالات في آن واحد. هذا يعني أن الراسبري باي 2 يصلح ليعمل كمقسم اتصالات داخلية لشركة بها من مأتي إلى ثلاثمائة موظف أو ربما أكثر إذا كانت إتصالاتهم ليست كثيرة.

برامج جافا ويب و منصة tomcat عملت بأداء ممتاز مقارنة بالراسبري باي 1 الذي لم يكن يصلح لتشغيل برامج جافا بصورة مقبولة. بالنسبة للغات البرمجة فتأتي معه لغة بايثون ومحرر idle، وجافا 8، لكني فشلت في تشغيل NetBeans 8 مع أن تثبيتها نجح بعد أن أخذ وقتاً، لكن لم تعمل، فقط تتوقف عند شاشة اﻹقلاع لمدة ثلاث دقائق، بعدها اضطررت لإغلاقها. قمت بتثبيت لازاراس ايضاً وقمت بإعادة ترجمة برنامج TurboBird لإدارة قاعدة البيانات FireBird وقد علمت لازاراس وتوربوبيرد بسرعة مقبولة كأنها في جهاز كمبيوتر عادي. ثم قمت بتثبيت CodeBlocks وكتابة برنامج C++ بسيط، ايضاً لم تكن هُناك مشكلة وكانت السرعة مقبولة.

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

منافذ الراسبري باي 2 تم تنسيقها بطريقة أفضل، حيث لا تبرز للخارج كثيراً كما كان الحال مع راسبري باي 1، كذلك فقد تم التحويل إلى استخدام MicroSD بدلاً من الذاكرة الكبيرة، وبها أربع منافذ USB بدلاً من إثنين: الجهاز على اليمين هو راسبري باي 2

raspi-comparison

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

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

اترككم مع بعض الصور من سطح مكتب راسبري باي 2:

إلى اﻵن لم احدد ما هو التطبيق الذي سوف استخدمه فيه سوى استخدامه للتجارب فقط.

 تحديث:

نسيت أن أذكر أني أخذت يوم الخميس إجازة حتى أقوم بعمل كافة التجارب المتعلقة بالراسبري باي 2 ومقارنته مع راسبري باي 1. لكن يوم واحد لم يكفي، استمر إلى اﻵن – يوم الجمعة – . دراسة تقنية جديدة أحياناً تكون أهم من اﻹنكباب في العمل بنفس التقنيات، من فترة لفترة يحتاج الشخص أن يتوقف قليلاً ويتنفس بعض الهواء الجديد المحتوي على ما وصل إليه العالم خارج عالم الشخص الضيق والذي يكون فيه سمة التكرار.

عامان على استخدام راسبري باي RaspberryPi

السلام عليكم ورحمة اللهrasp-gpio

قبل عامان تكلمت عن حصولي على كمبيوتر راسبري باي وتشغليه كمخدم ملفات باستخدم samba بعد توصيل قرص خارجي له. اﻵن أود التكلم عن تلك التجربة وعن التجارب التي تلتها في استخدام الراسبري باي.

في الحقيقة لم يدم طويلاً استخدام القرص الخارجي، حيث كان دائم التوقف ويصدر صوت، كانت المشكلة بسبب أن مصدر الطاقة لم يستطع تشغيل جهاز الراسبري باي والقرص الخارجي، حيث كانت قدرته حوالي 700 أو 500 ملي أمبير. فاشتريت مصدر طاقة آخر (شاحن سامسونق) ذو قدرة 2 أمبير وقمت بتوصيله مع القرص الخارجي، فأصبح الجهاز يعمل بمصدري طاقة، حيث أنه يمكن فصل مصدر الطاقة اﻷول (700 ملي أمبير) فيعمل الجهاز بمصدر طاقة القرص الخارجي، فهو موصل مع منفذ USB.

عمل القرص الخارجي ومخدم الملفات لفترة بدون مشاكل إلى أن احترق مصدر الطاقة الجديد ذو الـ 2 أمبير. فقمت بفصل القرص الخارجي وجعلت الراسبري باي يعمل فقط مع ذاكرة الـ SD card  والتي سعتها 8 قيقابايت، فعمل بدون مشاكل إلى اﻵن.

استخدمته كمخدم apache, apache tomcat لبعض برامج جافا، وكنت أقوم بالوصول إليه من أي مكان باستخدام اﻹنترنت، حيث أن الـ ADSL به رقم IP عالمي لكنه غير ثابت ، يتغير في كل إتصال. قمت بكتابة script لتحديث هذا الرقم في موقعي حتى يتسني لي معرفة هذا الرقم والوصول للجهاز حينما احتاج إليه.

استخدمته أيضاً طوال هذه الفترة للنسخ اﻹحتياطي للملفات المهمة، مثل قاعدة بيانات الحسابات للمنزل وللشركة، كذلك استخدمته كمخدم source control باستخدام subversion. ايضاً قمت بتثبيت مقسم asterisk عليه وتشغيل إتصالات داخل البيت باستخدام الهواتف والتابلت عن طريق بروتوكول SIP.

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

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

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

عملت عليه تجارب الـ cross-compilation لبعض لغات البرمجة مثل فري باسكال، ولغة Go، فكانت النتيجة أن لغة Go كانت افضل، حيث نجحت في ترجمة برامج من نظام لينكس لاستهداف منصة ARM التي يعمل عليها جهاز الراسبري باي، أما هذه العملية لم تنجح وكانت معقدة في بيئة فري باسكال/لازارس، فكان البديل هو تثبيت فري باسكال ولازارس في الراسبري باي نفسها لترجمة مصدر أي برامج، وهي طريقة أسهل من طريقة cross-compilation. ومن هنا استفدت أن هُناك أربعة أنواع لاستهداف أكثر من منصة:

  1. أن تكون اللغة script مثل PHP و بايثون، في هذه الحال يعمل البرنامج مباشرة في أي نظام تشغيل لكن يجب التأكد من أن مترجم اللغة مطابق لمصدر البرنامج
  2. استخدام آلة افتراضية، مثل جافا، وفي هذه الحال يعمل البرنامج الثُنائي مباشرة دون الحاجة لإعادة ترجمة
  3. الـ cross-compilation وهي الطريقة المستخدمة في لغة Go حيث يمكن إصدار ملفات ثُنائية لعدة منصات من منصة واحدة، مثلاً يمكن إصدار ملفا ثنائية لوندوز وماكنتوش من داخل لينكس أو العكس. هذه الطريقة ايضاً مستهدفة في لغة فري باسكال، لكن بها بعض الصعوبات، فقط ينجح اﻷمر بسهولة بالنسبة لإستخراج ملفات وندوز 32 بت و 64 بت من نظام تشغيل واحد.
  4. نقل مصدر البرنامج إلى المنصة المستهدفة وتثبيت مترجم اللغة إلى تلك المنصة لإعادة ترجمته لإصدار ملفات ثنائية خاصة بتلك المنصة فقط، وهي الطريقة المستخدمة مع برامج فري باسكال وبرامج سي.

المشكلة الكبيرة هي احتاجي لمعالج أقوى لتشغيل بعض البرامج بأداء أعلى مثل mysql , asterisk و برامج ويب جافا في مخدم tomcat

أما أهم ميزاته التي استفدت منها فهي:

  1. أنه يعمل في أي بيئة ولا يحتاج لتبريد
  2. لا يستهلك كهرباء بصورة كبيرة
  3. يعلم في صمت وليس به قرص صلب قابل للتلف
  4. ليه به أجزاء ذات عمر افتراضي قصير
  5. سعرة منخفض، يمكن شراء عدد منه  واﻹستفادة منه في عدد من التطبيقات
  6. أن به نظام تشغيل كامل Raspbian مبني على ديبيان، ويمكن تقريباً تشغيل أي برنامج لينكس عليه

النوع الثاني الذي احاول الحصول عليه يحتوي على معالج رباعي النواة وذاكرة 1 قيقا.

تصويت لرفع الحظر اﻷمريكي عن السودان

السلام عليكم ورحمة الله

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

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

في مجال البرمجة وتقنية المعلومات كان اﻷثر واضح لهذا الحظر، بالنسبة لي فقد تركت لغة البرمجة دلفي بسبب أننا لم نستطع تفعيل نُسخ دلفي من السودان حتى بعد شراء نسخة أصلية من خارج السودان. كذلك مواقع مهمة مغلقة مثل موقع google code . كذلك الـ plugins للغة البرمجة جافا لا نستطيع تثبيتها في NetBeans

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

نرجو من زوار المدونة الكرام التكرم بالتصويت حتى نصل لهذا الرقم المنشود قبل نهاية التصويت والذي سوف ينتهي بعد خمسة أيام، أي يوم 15 فبراير 2016.

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

https://petitions.whitehouse.gov/petition/lift-sudan-sanctions-they-are-oppressing-poor-and-killing-innocent-people

طريقة البرمجة الصحيحة

السلام عليكم ورحمة اللهlazarus-ide

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

تهدف البرمجة والتصميم بطريقة صحيحة تحقيق أهداف مهمة في عالم تطوير البرامج منها:

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

وغيرها من اﻷهداف اﻷخرى والتي تختلف حسب كل مجال برمجي مستهدف.

وجدت أمس نقاط مهمة تصف مباديء و طريقة البرمجة والتصميم الصحيحتين في هذا الرابط، ففكرت بترجمة بعضاً منها، لكن ترجمتها بتصرّف:

  • عدم إعادة الكود: في حال أن هُناك أجزاء من الكود تمت إعادتها أو ظهرت الحاجة لها في أكثر من مرة، نقوم بتطبيق مبدأ التجريد فنستخرج ذلك الجزء من الكود من اﻹجراء الأم إلى إجراء جديد بطريقة تسمح باستخدامه مرة أخرى. بهذه الطريقة نكون قد حققنا مبدأين: مبدأ إعادة الاستخدام ومبدأ التجريد.
  • البساطة: ويهدف هذا المبدأ لكتابة كود بسيط مقروء سهل التعديل، وسهل الصيانة في حالة وجود أخطاء.
  • استخدام الطريقة اﻷبسط: هذا مبدأ مهم جداً، فبدلاً من استخدام مكتبة معقدة أو منصة أو framework معقد وتحتوي على كثير من اﻷشياء غير المستخدمة يمكننا استخدام إجراءات ومكونات قياسية توفرها اللغة نفسها او كتابة مكون جديد يقوم بكتابته المبرمج نفسه إذا لم تأخذ منه وقت طويل. في حال اﻹعتماد على مكونات ومكتبات خارجية معقدة يصبح لدينا بعد فترة برنامج صعب الصيانة و كبير الحجم ويمكن أن تمنعنا هذه المكتبات أن نقوم بالترقية مثلاً إلى نسخة جديدة من لغة البرمجة لأن الشركة أو الفرد الذي قام بكتابة تلك المكتبة لم يتكرم علينا يإصدار نسخة جديدة من تلك المكتبة لتواكب النسخة الجديدة من لغة البرمجة.
  • مبدأ الفتح واﻹغلاق: وهو يعني منع المكتبة أو المكون أو خدمة الويب التي طورناها من التعديل بواسطة اﻵخرين، لكن مع جعله مفتوح للإضافة. أي أن نمنع تغيير السلوك المفترض به أن تسلكه تلك المكتبة في النسخ الجديدة منها، لكن نسمح بإضافة إجراءات وصفات جديدة تجعل هذه المكتبة ذات إمكانات أكبر. ويمكن استخدام الوراثة والتجريد وتعدد الأشكال لتحقيق هذا الهدف: inheritance, abstraction and polymorphism
  • مبدأ الوظيفة الواحدة: كل إجراء لابد أن تكون له وظيفة واحدة، وهذه أيضاً من سمات التجريد. فاﻹجراءات التي تكون لها أكثر من هدف وأكثر من ناتج تكون أكثر تعقيداً وأصعب في الصيانة وتكون أقل استخداماً في نفس البرنامج و أقل استخداماً بين البرامج المختلفة.
  • تقليل اﻹرتباط: لابد لتحقيق الـ portability لأي كائن أو حتى إجراء أن لا يرتبط بمكونات أو أجزاء كثيرة في البرنامج. فيمكن استخراج الجزء المتصل بالبرنامج المعين في مكتبة أو مكون أو إجراء آخر أي تقسيمه إلى طبقتين ليتم اﻹستفادة من الطبقة العليا في برامج أخرى. يمكن تطبيق نفس المبدأ على مستوى البرامج، مثلاً برنامج حسابات مرتبط مع برامج إدارة موارد بشرية أو العكس، فبدلاً من اﻹرتباط المباشرة مع نوع معين من البرامج، يمكن عمل برنامج أو خدمة ويب أو مكتبة وسيطة تسمح بتجريد النظام اﻵخر وجعل البرنامج الأساسي يمكن أن يرتبط مع أي برنامج مختلف مع تغيير الطبقة الوسيطة فقط.
  • اخفاء التفاصيل: إخفاء التفاصيل الكود للإجراءات المختلفة مع إظهار الـ header فقط لتلك الدالة تسمح للمبرمج تعديل تلك التفاصيل والكود الداخلي implementation دون تغيير أجزاء الكود التي تستخدم ذلك اﻹجراء.

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

اﻷدوات المخفية تظل غير موجودة

السلام عليكم ورحمة الله

اليوم كُنت ابحث عن مسمار بين اﻷدوات، فوجد مفك داخل علبة المسامير، وهو مفك مميز لم أعرف أنه موجود، لم استخدمه كثيراً. ففكرت أن اﻷداة المخفية تكون كأنها غير موجودة، أي مادام لا نستفيد منها فوجودها مثل عدمها.

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

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

وجدنا افكار كثيرة فُرضت علينا لا أدري ماهو اصلها، مثل فكرة التخصص، وأن الشخص لابد أن يكون له تخصص واحد ومسار واحد ووظيفة واحدة في الشركة أو المؤسسة التي يعمل بها.

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

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

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