الاثنين، 23 مايو، 2016

أعد اختراع العجلة

weary

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

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

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

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

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

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

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

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

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

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

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

6 تعليقات:

عبدالله يقول...

مقال جميل كالعادة بالطبع.
هناك شيء أود أن أنوه له وهو ذاك النقاش في حسوب لقد علقت فيه بهذا التعليق :
https://io.hsoub.com/go/40348/198222
لأتأكد مما قلته عن :
"إن أراد شخص أن يطور نظام تشغيل فلم يتوقع أحدنا أن على صاحب المشروع أن ينافس أنظمة التشغيل الكبيرة؟ واقعياً نعرف أنه لا مجال لشخص واحد أن ينافس لينكس وماك وويندوز"
هو لم يرد صنعه للمتعة أو كهواية بل ليضرب بالواقع عرض الحائط ويطور نظامًا ينافس الثلاث أنظمة.

بالمناسبة الأنظمة المطروحة في آخر المقالة جميلة جدًا يمكنك أيضًا أن تضيف لها نظام اقرأ.
بعض هذه الأنظمة مثل MenuetOS أعجبني جدًا صحيح أنه لم يتعرف على الفأرة ولكنه جيد فدائمًا ما أكون حزينًا لكثرة الطبقات (وبكل صراحة في الفترة الأخيرة بدأت أشك أن الاستهلاك العالي للموارد ليس له سبب إلا خدمة صناع الحواسيب فبلاي ستيشن 3 الرام الخاص به 256 ميقا بايت ومع ذلك يشغل برامج لو أنها على الحاسوب لكان أقل شيء للرام 2 جيجا) ربما أكتب مقالًا في وقت لاحق عن عدد الطبقات في لينكس والتي تجعله لا يعمل بواجهة رسومية على حاسوب 16 رام
هناك أيضًا ToaruOS والذي يبدو مثيرًا جدًا والممتع في الأمر أن صاحبه يستمتع كتابة أنظمة التشغيل وقد استنتجت ذلك من حسابه على github .

عبدالله يقول...

هذا هو رابط حساب صانع نظام ToaruOS :
https://github.com/klange

عبدالله المهيري يقول...

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

ألن كاي عالم الحاسوب يقول بأن أنظمة اليوم معقدة حقاً من ناحية الجحم، ٣٠٠ مليون سطر لنظام ويندوز، ٣٠٠ مليون لحزمة أوفيس، ويرى أنه بالإمكان تطوير نظام حديث بخصائص حديثة بعدد أسطر لا يزيد عن ٢٠٠ ألف، وقد شارك في كتابة ورقة عن الموضوع:
http://www.vpri.org/pdf/tr2012001_steps.pdf

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

NEERO نورة الحقباني يقول...

السلام عليكم ورحمة الله وبركاته
أ.عبدالله ممكن ايميلك ؟ مع الشكر مقدمًا

عبدالله المهيري يقول...

@نورة: بريدي هو serdal على gmail، بإمكانك كتابة تعليق هنا إن كان ما تريدينه موضوعاً تقنياً

Amer Hariri يقول...

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

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.