هذا موضوع بطلب من احد الاصدقاء للحديث عن لغات و تقنيات البرمجة و أيها افضل و سأجيب من وجهة نظر فلسفية قد تصيب و قد تخيب. لغات البرمجة هي لغات بشرية ( انجليزية بالإغلبية الساحقة ) بُنيت من الأساس لخدمة الانسان و ليس الآلة. فالآلة لها في الاخير لغة واحدة لم تتغير من 80 سنة.
(سلسلة)
(سلسلة)
لو سألنا انفسنا : لماذا نحتاج إلى وجود توثيق لبرامجنا سواء بكتابة comments أو documents تشرح الكود ؟ هل يعني هذا اننا لم نصل للغاية النهائية منها و هي تحقيق التواصل البشري بحيث يفهم مبرمج اخر ما نحاول توصيله للكمبيوتر؟.
الجواب برأيي نعم. لأن الكمبيوتر فهم بدرجة 100% من البداية بدليل أن البرنامج يعمل. و بقيت مشكلة ان يفهم الآنسان. لنتفق اذا مبدئياً أن اغلب المشاكل اثناء كتابة الكود هي مشاكل بشرية لدينا و ليست مشكلة في الآلة.
قد يكون ذلك بسبب قلة تمكننا من اللغة نفسها او من اساليب و طرق البرمجة المجربة Design Patterns في حل مشاكلة مماثلة. او لقلة خبرتنا في تصميم الحل و نمذجته. لأننا في الأخير لأي سبب كان لم نستطع ايصال فكرتنا للآلة عما نريده بشكل صحيح.
حاول مصمموا اللغات على مر التاريخ التقارب مع طرق تفكير الانسان بطرق Paradigms مختلفة. مرة Structured و مرة Procedural و مرة OOP و مرة Functional. و لسان حال لغة الآلة يقول لمئات و آلاف الـ Compilers كما قال هارون الرشيد للسحابة "امطري حيث شئت فسوف يأتيني خراجك"
لو اتطرف قليلاً في الفكرة يمكنني القول ان لغات البرمجة و اساليبها و طرقها و حتى ما يخص منهجية بناء البرمجيات من ناحية مراحل بناء البرامج و تقسيم الفريق و الAgile و الDevops يُفترض ان تدرس من ضمن علوم الاجتماعيات و ليس الكمبيوتر.
قال Fred Brooks ابو الSoftware Engineering انه لا توجد رصاصة فضية تقضي على هذه المشاكل. بعد سنوات رد Brad Cox بـ "ماذا لو كان هناك رصاصة فضية" و كان يعني بها الOOP و لغته Objective-C فهل هي حقاً رصاصة فضية ؟ اذا لماذا ظهرت سويفت و لماذا عاد ظهور الFunctional Programming مجدداً ؟
السؤال هل يمكن نصل يوماً إلى اللغة او الاسلوب او التقنية النهائية؟ لا أظن طبعاً. لأن البشر لم يتفقوا على لغة محكيّة واحدة, مع أن جميع اللغات تحقق التواصل بين الشعوب التي تتكلم بها بنسبة 100% و مازالت تلك اللغات تتطور. فالمشكلة انسانية بحته.
ربما نراهن على حصول تحوّر تقني في المستقبل اشبه بالتحوّرات الجينية. قفزة تقنيّة تغير قواعد اللعبة كما يُقال ربما بمساعدة الذكاء الاصطناعي سواء كان Software او Hardware. بحيث يصبح فيه الكمبيوتر فرد من افراد مجتمعنا الانساني و ليس كما هو الآن "كائن غريب".
لغة COBOL تقول مصممتها Grace Hopper أن الهدف من وراء تصميمها للغة هو تسببها بأخطاء مالية فادحة عند تطويرها لنظام بنكي و ارادت من خلال اللغة تقليل اخطاء المبرمج ( مشكلة انسانية). لغة Fortran كان الهدف منها تسريع استقطاب اكبر عدد من المبرمجين لأنظمة IBM و بالتالي زيادة البيع.
لغة LISP ايضاً كانت للمبتدئين. لغة ADA صممت خصيصاً لتقليل الآخطاء كونها تستخدم في معدات حساسة. لغة سي احدثت ضجة , و مالبثت ان اتت لغة ++C التي قال مصممها انها صممت لإيجاد قواعد و احكام Disciplines لترشد المبرمجين كيف عليهم ان يكتبوا اكوادهم.
جافا رأت انه لا فائدة فمازال التعامل مع الPointers مريع. بايثون ابعدت كل الادوات الخطرة و الحادة عن متناول . . . المبرمجين. ايضاً تداخلت مصالح كررت افكار دون أن تقدم الكثير نحو حل المشكلة الأساسية.
في حياتنا الطبيعية طريقة شرحنا للامور تعتمد على الشخص المُخاطب او المتلقي سواء كان طفل او مراهق , كبير ,عالم ,جاهل مع ان كلانا في الاخير انسان. هذا ما يحصل مع اكواد اللغات حين تخاطب الCompiler و كل مافهمنا نفسية المُخاطب كلما كان التواصل معه افضل.
كمبرمج انت المسيطر و الحل في رأسك و ليس في الآلة. التركيز على السرعة و الانتاجية هي شيء اقتصادي لا اكثر. لكن حل المشاكل هو شيء منك و لك و هو ما يحتاجه العالم حقاً.
علينا أن لا نتعصب لتقنية معينة على حساب اخرى و لا يمنع هذا ايضاً بالطبع من أن نحب تقنياتنا و نتعمق فيها لأقصى حد يمكننا به ان نفهم "نفسية التقنية". و نرسل لها افكارنا بطريقة صحيحة. و السؤال لصديقي : هل مازلت تريد ان تعرف اي اللغات او التقنيات افضل؟.
شكراً لوقتكم فالهدف من هذه السلسلة ليس بث روح الإحباط لكن للمساهمة في توسيع مداركنا حول ما نراه اليوم من تقنيات كشيء خارق أو عظيم لأنه سيكون يوماً مجرد رصاصة صدئة.
جاري تحميل الاقتراحات...