كنت لسه بذاكر functional programming فكان ال instructor بيستخدم scheme فالشرح .. فعجبني ان فيها three main instructions وكل حاجة فاللغه بتتاعمل ك list ودة خلاني لما جيت اعمل بيها شويه problem solving قللت وقتي فالتفكير اكتر وكنت بجيب حلول كويسه في وقت قليل وطبعا زي ما حضرتك عارف هي كلها recursion .. ففكرت هو ليه كل ما الحاجه قللت التولز الي بتقدمها وخليتها more abstructed كان النتيجه efficient اكتر لانها بتخلي الشخص الي بيستعمل الادوات دي يحاول يفكر في design يبني كل دة مع بعض باسلوب حلو للمشكله ودة بيخلي الحل مناسب لمشكلته اكتر .. انت اي راي حضرتك فالكلام دة ؟
Anonymous ·
هو آه، في جزء كبير من ملاحظتك صحيح، بس مش كقاعدة مطلقة.
أحياناً لما ال language أو ال paradigm يقلل عدد ال tools الجاهزة ويفرض عليك كام فكرة أساسية بس، ده بيخليك تفكر في الmodel بتاع المشكلة نفسها بدل ما تفضل تلف بين features كتير. في ال functional programming مثلاً، فكرة إنك بتبني من functions صغيرة، وبتتعامل مع data transformations بشكل واضح، بتقلل ال noise وبتخلي ال design أنضف في أنواع معينة من المشاكل. وعلشان كده لو المشكلة فيها معالجة بيانات وعمليات متتابعة عليها، غالباً حتلاقي ال functional style مريح وفعال، وده جزء من ليه SQL ناجحة جداً لأنها في الأصل مبنية على مبادئ قريبة من ده.
لكن برضه مهم نفرق بين نوعين من efficiency: efficiency في التفكير و efficiency في التنفيذ أو الإنتاجية العملية. ممكن حاجة تبقى elegant جداً ذهنياً، لكن تبقى مرهقة في debugging أو مش أوضح اختيار لفريق كامل أو لمشكلة فيها state معقدة و side effects كتير. فالabstraction مش دايماً بيحسن الأمور، أحياناً بيخبي تفاصيل مهمة وبيصعب الفهم لو زاد عن اللزوم.
فأنا رأيي: انت التقطت ميزة حقيقية، وهي إن ال constraints أحياناً بتحسن جودة التفكير. بس الأفضل ما نستنتجش من ده إن “كل ما tools قلت يبقى الحل أحسن”. الأدق هو: لما ال constraints تكون مناسبة لطبيعة المشكلة، بتطلع design أحسن. جرب تبص لكل paradigm كأنه lens: لو المشكلة data-heavy أو transformation-heavy، ال functional حيلمع. لو غير كده، مش لازم يكون هو الأفضل.