أكثر من لغة، و أكثر من بيئةٍ متكاملة.
في البداية دعوني أتحدث عن تجربةٍ خاصةٍ بي في مجال تخصصي العلمي، ففي إطار تعلمي لتصميم لغات البرمجة و المدارس المختلفة: قررت ألا أكتفي بالدراسة النظرية الباردة، من حيث معرفة تقسيمات لغات البرمجة و النظريات (أو النظرات) المختلفة لها في مجتمع مصممي و بناة لغات البرمجة. لذا فقد قررت أن أتعلم أكبر كمٍ ممكنٍ من لغات البرمجة التي تنتمي للغات الجيل الثالث (ربما أذكر أسباب تركيزي علي هذا الجيل بالذات فيما بعد بإذن الله تعالي)، و أن تكون هذه اللغات موزعةً قدر الاستطاعة بين المدارس و التوجهات المختلفة: ما بين لغاتٍ وظائفيةٍ، إلي لغاتٍ كائنية، إلي لغاتٍ تمزج بين الاثنين. و كذا أن يكون من بينها اللغات المتخصصة في مجالٍ معينٍ و اللغات عامة الأغراض، و اللغات التي تحوي خصائص عالية المستوي للغاية من حيث التجريد و البعد عن دقائق الأنظمة التي تعمل عليها، و لغاتٍ تحوي خصائص منخفضة المستوي للغاية.و تنقسم اللغات من حيث قوة تعلمي لها إلي عدة فئاتٍ هي:- اللغات التي أتقنتها بشكلٍ كبيرٍ جداً، مثل الـ++C و الـjava و الـ#C و VB.NET و إن كنت طبعاً لم أتقن جميع مكوناتها و قواعدها. مع إتقان جزءٍ جيدٍ من مكتباتها القياسية، و ربما مكتباتٍ أخري ذات أغراضٍ خاصة (مثل مكتبة الـOpenCV في حالة لغة الـ++C و مكتبة الـXNA مع لغة الـ#C).
- اللغات التي أتقنت قواعدها و لكني لم أتعلم مكتبتها القياسية بشكلٍ مماثلٍ نظراً لضيق الوقت و تأجيلي لهذه الخطوة إلي مرحلة تعلم المناهج المختلفة لتصميم المكتبات البرمجية و العلاقة بينها و بين تصميم اللغات ذاتها. و هذا حدث مع لغاتٍ مثل الـpython و الـobject pascal و matlab.
- اللغات التي تعلمت كثيراً من نحوها syntax و لكن ليس علي نفس مستوي لغات النوع الأول، و كذلك فلم أتعلم مكتبتها القياسية. و منها ruby و fortran90 و shell script (إن اعتبرنا الأخيرة لغة برمجة كاملة).
- اللغات التي أعلم بعض الأشياء عنها و بعض قراراتها التصميمية، و لكني لم أتعمق فيها مطلقاً، مثل الـeiffel و الـGo و الـobjective C و ربما غيرهن.
و كذلك كنت لكل لغةٍ من تلك اللغات أُنَصِّب بيئة برمجةٍ متكاملة لها علي حاسوبي لتجربتها قدر الاستطاعة؛ حتي يتسني الاحتكاك العملي لي بها فأدرك نقاط القوة و الضعف فيها عن تجربة واقعية. و كذلك لمعرفة الفروقات بين بيئات البرمجة المتكاملة و التي يعد بناؤها جزءاً هاماً للغاية من هندسة البرمجيات المُساعَدَة حاسوبياً CASE - computer aided software engineering، و لمعرفة تأثير القرارات التصميمية للغة البرمجة علي كيفية عمل و بناء بيئة البرمجة المتكاملة الخاصة بها.
و من ضمن هذه البيئات ما يلي:
- netbeans
- monodevelop
- eric
- lazarus
- octave
- code blocks
- Gambas
و أعترف أنني لم تتسن لي الفرصة لتجربة أيٍ منها تجربةً حقيقيةً قويةً، إلا بيئة الـNetbeans التي استقر قراري علي استخدامها أثناء البرمجة بالـjava. و الجميل أنني بحمد الله تعالي تعودت منذ صغري علي التلخيص الجيد لكل ما أتعلمه، بل و كنت أتسابق في تلخيص الكتب العلمية مع صديقي: ياسين أحمد سعيد، و أدي هذا إلي أنني لم أتعلم شيئاً في حياتي له قيمةٌ إلا و دونت ما تعلمته فيه. و لم يكن تعلمي لهذه اللغات شاذاً عن هذه القاعدة، فاستطعت تكوين تلخيصاتٍ جميلةٍ للغات النوع: الأول و الثاني و الثالث، و هي التي تتكون منها موسوعة الألسن التي تحدثت عنها مسبقاً.الآن: ما الغرض من حديثي عن هذه الأمور الشخصية ؟ بمنتهي البساطة أنا أريد أن أوضح عملياً بعض النقاط التي تخفي علي الكثيرين بكل أسف:- الوقوف علي مسافةٍ واحدةٍ من كل الأذواق و المشارب و التقنيات المختلفة التي توجد داخل نطاق تخصصنا، و من ثم دراستها جميعها (أو ما تيسر منها إن كان الكل أو الأغلبية أكبر من اللازم)، و بعد الدراسة المتفهمة الجيدة يمكننا أن ننحاز إلي تقنيةٍ ما علي أنها التي نعتقد فيها القرب أكثر ما يُمكن من الصواب.
و الحرص علي عدم التبعية و البعد التقليد الأعمي؛ فهناك أناسٌ تعودوا أن يسلموا قيادتهم إلي أحد الهيئات أو المؤسسات أو الشركات علي اعتبار أنها الأفضل تقنياً "دائما" و مهما كان قرارها في فرعٍ من الفروع !.
فالتقليد و إن كان يُتقبل من بعض الناس فإنه في الأصل مذمومٌ للمتخصصين كل الذم، و ما من متخصصٍ تعصب لمُنتجٍ (بفتح التاء و كسرها) دون الاستناد إلي دليلٍ و برهانٍ لانحيازه إلا كان هذا قدحاً في عقلانيته و قدرته علي اتباع المنهج العلمي من الأساس. - الشجاعة في النقد عند وجود مناط الانتقاد، فعلي الرغم من أن هناك من لن يتقبل نقدك للتقنية التي يحبها مهما كانت منطقية النقد أو دوافعه، إلا أنه لا يُمكنك أن تسمح لمثل هذا أن يكبلك و أن يمنعك من استبعاد ما يجب استبعاده أو قبول ما يجب قبوله؛ فعامةًَ أي رأيٍ تقتنع به سيكون هناك من يُعارضك فيه أشد المعارضة، و ربما يري أنك وقحٌ و جاهل !
- زيادة القاعدة المعرفية قدر الإمكان؛ فمثل هذا الازدياد قادرٌ علي توسيع آفاق تفكير صاحبه جداً، و يجعله قادراً علي الانتباه (نظراً للنظرة الشاملة التي يمتلكها) إلي ما قد يخفي علي الكثيرين و إن كانوا أكثر منه فضلاً و ذكاءاً.
- التجريب العلمي و المعايشة أمران مهمان للغاية؛ فبإمكانهما أن يهدما كل ما بناه الواحد منا من أفكارٍ نظريةٍ و تحويلها في نظره إلي غبارٍ تذروه الرياح.
و كلما كان مجال التجريب قريباً من الأصول التي نبني عليها آراءنا و فرعياتنا كلما كانت فائدة التجريب أوضح و أقوي (و ربما أكثر صدمة).
ختاماً: أوقن بأنني لست أفضل من يقدم النصائح للآخرين لصغر سني و قلة تجاربي، و لكني أتحدث من منطلق تلك التجارب القليلة التي عشتها و أرغب في توضيح الدروس التي استفدتها منها.