نتائج سنتين من دراسة "هيكل وتفسير برامج الحاسب الآلي"





تم نشر النص الأصلي على مدونتي بتاريخ 07/11/2020. إذا فهمت بشكل صحيح ، فهذه ليست مشكلة.



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



يوجد في العالم مقرر بعنوان "هيكل وتفسير برامج الكمبيوتر" (يشار إليه فيما بعد بـ SICP) ، والذي تم وضعه كمقدمة لعلوم الكمبيوتر وكان يستخدم سابقًا في معهد ماساتشوستس للتكنولوجيا لتعليم الطلاب الجدد. قبل عامين ، أكملت بكل سرور دورة من المحاضرات حول هذا الموضوع. وتناول الكتاب. أولاً ، سأخبرك عن الخير.



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



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



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



لكن هذا جانب واحد من العملة. آخر هو أن نهج هذه الدورة في التعلم يمكن التعبير عنه في الوحدة اللغوية الإنجليزية "الغرق أو السباحة". هناك عارضة أمامك ، بجانبها مهمة: سحب 10 مرات. من حيث المبدأ ، هذا كافٍ لإكمال المهمة ، ولكن لا يمكن القول إن هذا النهج ممتع. أود أن أقول إنه مرهق للغاية! يتم إلقاؤك في المعركة نصف جاهز ، وتتعلم جزءًا من المادة ليس من التفسيرات ، ولكن من أخطائك. ربما تكون هذه طريقة مقبولة لتعليم الأشخاص ذوي الدوافع العالية ، لكنه ضغط علي كشخص كسول. بالكاد استطعت تحمله لمدة 3 فصول من أصل 5 (أحيانًا أتوقف مؤقتًا لعدة أشهر!) ، هل التدريبات فيها من البداية إلى النهاية ، ولكن يبدو أن صبري قد استنفد.



على سبيل المثال ، لا يقول الكتاب كلمة واحدة حول كيفية تنظيم سير عملك. لا يوجد حتى اعتبار تقريبي لمفاهيم مثل "تصحيح الأخطاء" (فهي محددة هنا) ، "IDE" (وهي محددة هنا) ، "اختبارات الوحدة" ، "تقسيم الملفات لإعادة استخدامها". هناك أجزاء حيث يتم تطوير نظام معقد معين ، والذي سيكون جاهزًا تمامًا فقط بنهاية الفصل ، وتظهر المهام بعد كل فقرة من النص. أولئك. بالمعنى الدقيق للكلمة ، بعد قراءة ما يصل إلى الصفحة N ، في بعض الحالات لا يمكنك حل المشكلة من هذه الصفحة دون سحب الكود من الصفحات التالية. يجب سحب الكود بعناية ، لأن الملاحظات قد تناقش التفاصيل الدقيقة غير الواضحة ، وفي بعض الأحيان يتم الاستشهاد ببعض الرموز كمثال على فكرة معطلة. هذا مزعج! نعم ، الأمر مشابه تمامًا للحياة الواقعية - تحتاج إلى تحديد المهمة بنفسك ، والبحث عن شيء ما على الإنترنت ،لكن اللعنة ... هذا برنامج تعليمي! لقد سئمت المهام الصعبة في العمل ، وربما كان على المؤلفين أن يكونوا أكثر تحذقًا بشأن النص؟ حسنًا ، أنا متخصص في المذبحة ولدي إمكانية الوصول السريع إلى الإنترنت ، ولكن ماذا عن طالب جديد في معهد ماساتشوستس للتكنولوجيا في الثمانينيات؟ أنا متأكد من أنها ليست حلوة ...



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



ميزة أخرى مزعجة للنص: المهام (مرة أخرى ، كما هو الحال في الحياة الواقعية) في بعض الأحيان ليست محددة بشكل جيد. كنت أقوم بتمرين في ذلك اليوم ، في نصف ساعة رسمت حلاً ، وبدأت في إعادة قراءة بيان المشكلة. اتضح أنه إذا كنت تفكر متحذلقًا ، فقد أنجزتها بنسبة 95 ٪ ، وأنفقت حوالي 40 ٪ من الجهد. معظم الرجال الذين راجعت معهم فعلوا الشيء نفسه. قام أحدهم بذلك بشكل كامل ، لكنه استخدم اختراقًا من مترجم Lisp. شعرت بالضيق والبصاق ، بعد أن فقدت الدافع للاستمرار في المستقبل القريب. مرة أخرى سأخبرك بجوهر المشكلة: هناك مهام يتم فيها حل كل شيء ببساطة ومنطقيًا ، ولكن فقط إذا لم تكن صارمًا مع نفسك. لذلك في الحياة الواقعية ، أفهم ذلك ، لكن كان لدي توقعات مختلفة عن الكتاب المدرسي. عندما تقوم بتمرين في وقت فراغك وتحقق من نفسك ، فأنت تريد حل المشكلة بنسبة 100٪ ،ليست "جيدة بما يكفي للتكرار الحالي".



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



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



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



PS Peter Norvig كتب تعليقًا رائعًا عن SIKP .



All Articles