الثلاثاء، 26 أغسطس 2008

سدّ الفجوة التكنولوجية

سؤال

لماذا لم نصنع نظام تشغيل خاص بنا؟ أو لغة برمجة؟ أو برنامج مثل Office؟

فيكون الرد:
و لمَ نعيد اختراع العجلة؟ أليست أمامك لغات مثل ال#C و ال++C و برامج مثل Microsoft Office؟ كل ما ستفعله لو أعدت إنتاج مثل تلك البرامج أن تضيع الوقت و الجهد لتنتهي في نفس النقطة التي بدأت بها, بل أقل لأن برامجك لن تكون على مستوى البرامج الموجودة.

نعم, نعم. هذا هو التفكير السائد الآن. و أيضاً لمَ نصنع سيارة محليّة بينما يمكننا تجميع التويوتا و الهيونداي؟ و لمَ ننشيء إقتصادا قويا بأنفسنا و يمكننا بدلا من هذا جذب الأستثمارات الأجنبية؟ أليس كذلك؟
كلّا! حان وقت تغيير هذا الرأي و السعي لإحداث نهضة علمية حقيقية. دع أفكارك تكبر عن الأنشغالات التقليدية. نحن لا نتحدث عن كشف الأرباح و الخسائر لسنة مالية بل عن المائة سنة القادمة. هل تظن أنه بعد مائة سنة سيستخدم الناس نظام تشغيل يشبه الWindows أو ستكون لغة برمجتهم تشبه الC# أو يبحثون عن المعلومات بكتابة بضع كلمات في Google؟ و هل سنصنع نحن هذه الأدوات المستقبلية أم سننتظر مرةً أخرى حتى تُصنع لنا؟

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

و لم لا نأخذ نظاما مفتوح المصدر مثل Linux أو الJava Virtual Machine و ندرس الSource code و نطوّر عليها؟ هذه ستكون خطوة مهمة و رائعة و لكنها لن تكفي. نعم سنكون مشاركين في صنع التكنولوجيا و ليس مجرد مستهلكين و لكننا يجب ألا نتأخر عن هدفنا الحقيقي: أن نصبح صانعين و مبدعين. المشكلة في برنامج مثل Linux أن معظم المشاكل الصعبة قد حلّت و معظم القرارات الشيقة قد اتخذت فتعلم طريقة كتابة الLinux kernel سيكون اكتساب معرفة أكثر منها اكتساب خبرة.
نعم ستكون معرفة عملية على منتج حقيقي و لكنها مازالت معرفة أسرار برنامج جاهز و ليست كتابة برنامج من الصفر بنفسك بينما هذا هو ما نحتاجه الآن: لن تتعلم كيف تتفوق على التكنولوجيا الحالية إلا لو تعلمت كيف تبدأ من لا شيء, لأن التكنولوجيا الحالية هي لا شيء من التكنولوجيا القادمة.
و كيف تكون إعادة اختراع للعجلة و أنت لم تخترعها أصلا بعد؟

خطة
علينا في رأيي أن نعيد إنتاج الأدوات الأساسية كي يكون لنا فئة من الناس قد بدأت من البداية و تقدر أن تواصل للمستقبل. بشكل عام التطبيقات الآن طبقات مبني بعضها على بعض:
Applications
Compilers, Interpreters, Virtual Machines
Operating Systems
Hardware - CPU's, Boards, Communications...etc

هدفنا أن نقوم تدريجيا بغزو هذه الطبقات فنقدر إن شاء الله خلال عشر سنوات مثلا أن يكون لدينا القدرة على عمل "برج تكنولوجي" مستقل يشمل كلّ شيء من البرامج حتى الHardware. فكيف نفعل هذا؟

كن مشاركا تكنولوجيا: نحن الآن في عصر الوفرة التكنولوجية و الحمد لله. أنظر إلى أيّ مشروع يعجبك: Linux أو Python أو Java أو Abiword أو أي برنامج تحب و حمّل الsource code و تعلمها و شارك فيها. يمكنك أن تبدأ بتطوير صغير: صلّح bug أو زود menu item جديد. شيء يفتح شهيتك. مع الوقت ستجد نفسك تتمنى إمكانية معينة في البرنامج و لديك القدرة على إضافتها فافعل.

إبدأ بمنتج صغير و مختلف: ما لم تكن بمؤسسة كبيرة فلا أنصحك أن تحاول عمل منتج تكنولوجي ضخم لأسباب قومية بحتة. ستجد الحماس يفتر بعد بضعة أسابيع من العمل لتكتشف أنك تحاول أن تعمل Windows آخر وحدك بلا سبب واضح. إبدأ صغيرا و في نفس الوقت اصنع شيئا أفضل من الموجود. حين بدأت الشركات الجديدة في إعادة صنع Office لم تحاول عمل نسخة طبق الأصل من برنامج Microsoft بل صنعت برامج مثل Google Docs: بها عُشر إمكانات Excel و Word و مع ذلك تميّز نفسها بأنها تعمل من على الWeb و تدار مركزيا و لا تحتاج Installation. و هكذا فعلوا شيئا حكيما: لم يقوموا بالمهمة المستحيلة و هي الإنتاج الفوري لبديل لMS Office و في نفس الوقت ميزوا أنفسهم عنه بأمكانات قوية. و مع الوقت ستجدهم يضيفون الأمكانات شيئا فشيئا حتّى يلحقوا بالExcel و الWord و يتفوقوا عليهما. يساعدهم في ذلك أنهم يطورون أدواتهم و يخرجون لنا بcompilers تحول البرامج العادية إلى Ajax و يطورون نظم التشغيل لتحتمل عبء تشغيل البرامج من على الWeb لكلّ المستخدمين. أي أنهم يقومون بغزو طبقات النظام كلها إما بالأنتاج أو بتطوير الموجود (أنظر كيف أفادهم إعادة أختراع العجلة).

أنت أيضا يمكنك أن تفعل مثل ذلك: ربما يمكن أن تبني لغتك على ال JVM أو ال.net أو الParrot في البداية و مع الوقت اجعلها كيانا مستقلا بذاته و حتى يأتي وقت استقلالها ميزها بقدرات أكبر عن اللغات الشائعة أو بملائمتها لنوع معين من التطبيقات مثل تطبيقات الweb أو الimaging.أو يمكنك عمل برنامج مثل الOffice و لكنه يعمل على الmobile. في البداية سيكون برنامج الكتابة أقرب للNotepad منه للWord و برنامج الحسابات يشبه الcalculator و لكنه تدريجيا سيزداد فائدة مع تطور التكنولوجيا. أو ربما تميز منتجك عن الموجود بطريقة استخدامه المبدعة كما فعل الiPhone : كانت إمكاناته أقل بكثير من الWindows Mobile ولكنه قدم طريقة جديدة مذهله للتعامل مع الجهاز ثم بدأ يسدّ الثغرات في الأمكانيات.

كن صبوراً: لو توقعت نجاحا مبهرا سريعا فسيفتر حماسك و تجد نفسك تعود للمكونات الجاهزة كما عاد آخرون للخبرة الأجنبية. تذكر أننا نتحدث عن نهضة علمية للمدى الطويل. المشاريع الكبيرة دوما تأخذ سنوات. Google أخذت سنوات طويلة حتى نجحت. لغة الRuby موجودة منذ 1995 و حققت شهرتها الفائقة منذ حوالى 2004. أنظر إلى منتج مثل Linux بدأ عام 1991 و مازال يتطور إلى الآن: كان على صانعه أن يحقق توازنا بين عمل برنامج يسد احتاجاته الحالية و بين الصبر و التخطيط للمدى البعيد. لو حاول أن يصنع نظاما عظيما منذ الخطوة الأولى لفشل, و لو أخذ يخطط للمدى الطويل بدون أن يصنع منتجا حقيقيا يمكن استخدامه فورا لانصرف الناس و تركوه يطارد حلما ليس له وجود مادي. المشاريع لا تنجح بانفجار كانفجار البركان و لكن بسلسلة مستمرة من الخطوات الصغيرة. حسّن و طوّر و صلح الأخطاء و لا تتوقف تأتي لحظة على المدى الطويل يكون نجاحك فيها واضحا كبيرا.