المفاهيم التي فاجأتك عندما تقرأ SICP؟

StackOverflow https://stackoverflow.com/questions/355406

  •  21-08-2019
  •  | 
  •  

سؤال

SICP - "هيكل وتفسير برامج الكمبيوتر"

التفسير لنفسه سيكون لطيفا

يمكن لشخص ما أن يشرح عنه التجريد اللغوي

هل كانت مفيدة؟

المحلول

قاد SICP حقًا إلى المنزل إلى أنه من الممكن أن ننظر إلى التعليمات البرمجية وبيانات نفس الشيء.

لقد فهمت هذا من قبل عند التفكير في آلات تورينج الشاملة (إن الإدخال إلى UTM هو مجرد تمثيل لبرنامج) أو بنية Von Neumann (حيث يحمل بنية تخزين واحدة على حد سواء الكود والبيانات) ، لكن SICP جعل الفكرة أكثر وضوحًا بكثير . ساعد المخطط (LISP) هنا ، لأن بناء الجملة للبرنامج هو بالضبط نفس بناء الجملة للقوائم بشكل عام ، وهي التعبير S.

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

بالمناسبة ، شيء واحد أتمنى أن يكون SICP قد ذكر المزيد: الأنواع. اكتب التحقق في التحويل البرمجي الوقت شيء مذهل. لم يكن لتنفيذ SICP للبرمجة الموجهة للكائنات هذه الفائدة.

نصائح أخرى

لم أقرأ هذا الكتاب بعد ، لقد نظرت فقط إلى دورات الفيديو ، لكنها علمتني كثيرًا. وظائف كمواطنين من الدرجة الأولى كانت العقل تهب بالنسبة لي. كان تنفيذ "متغير" شيئًا جديدًا جدًا بالنسبة لي. بعد مشاهدة مقاطع الفيديو هذه بالطريقة التي أرى بها الآن ، تغيرت JavaScript والبرمجة بشكل عام.

أوه ، أعتقد أنني كذبت ، الشيء الذي أدهشني حقًا هو أن + كان وظيفة.

أعتقد أن الشيء الأكثر إثارة للدهشة في SICP هو معرفة مدى عدد قليل من البدائل المطلوبة فعليًا لجعل لغة كاملة-يمكن بناء أي شيء من لا شيء تقريبًا.

نظرًا لأننا نناقش SICP ، سأضع في قابستي القياسية لمحاضرات الفيديو على http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-wectures/, ، وهي أفضل مقدمة لعلوم الكمبيوتر التي يمكن أن تأمل في الحصول عليها في 20 ساعة.

الشخص الذي اعتقدت أنه رائع حقًا تيارات مع تأخير التقييم. كان الشخص المتعلق بتوليد الأعداد الأولية شيئًا اعتقدت أنه كان أنيقًا حقًا. مثل موزع "PEZ" الذي يوزع بطريقة سحرية البرايم التالي في التسلسل.

أحد الأمثلة على "البيانات والرمز هما نفس الشيء" من إجابة A. Rex جعلني بطريقة عميقة للغاية.

عندما تعلمت Lisp مرة أخرى في روسيا ، أخبرنا معلمونا أن اللغة كانت حول القوائم: Car ، CDR ، Cons. ما أدهشني حقًا هو حقيقة أنك لا تحتاج إلى هذه الوظائف على الإطلاق - يمكنك كتابة عمليات الإغلاق الخاصة بك. لذلك ، Lisp ليس عن القوائم بعد كل شيء! كانت هذه مفاجأة كبيرة.

مفهوم لم أكن على دراية به تمامًا هو فكرة coroutines, ، أي وجود وظيفتين تقومان بعمل تكميلي وتجعل التحكم في تدفق البرنامج بديلًا بينهما.

كنت لا أزال في المدرسة الثانوية عندما قرأت SICP ، وقد ركزت على الفصلين الأول والثاني. بالنسبة لي في ذلك الوقت ، أحببت أنه يمكنك التعبير عن كل تلك الأفكار الرياضية في الكود ، وجعل الكمبيوتر يقوم بمعظم الأعمال القذرة.

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

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

لقد فوجئت للغاية بمدى سهولة تنفيذ اللغات. يمكن للمرء أن يكتب مترجمًا للمخطط على السبورة.

شعرت بالرياح بمعنى مختلف بعد قراءة بعض فصول SICP

أنا الآن في القسم "تسلسل كواجهات تقليدية" ووجدت مفهوم الإجراءات كمواطنين من الدرجة الأولى رائعة للغاية. أيضا ، تطبيق العودية شيء لم أره من قبل في أي لغة.

الإغلاق.

قادمة من خلفية ضرورية في المقام الأول (Java ، C#، وما إلى ذلك-قرأت SICP فقط منذ عام أو نحو ذلك لأول مرة ، وأعيد قراءةها الآن) ، كان التفكير من الناحية الوظيفية بمثابة الوحي الكبير بالنسبة لي ؛ لقد غيرت تمامًا الطريقة التي أفكر بها في عملي اليوم.

قرأت معظم الكتاب (بدون تمرين). ما تعلمته هو كيفية تجريد العالم الحقيقي على مستوى محدد ، وكيفية تنفيذ لغة.

كل فصل له أفكار تفاجئني:

يظهر لي الفصلين الأولين طريقتان لاستخلاص العالم الحقيقي: التجريد مع الإجراء ، والتجريد مع البيانات.

الفصل 3 يقدم الوقت في العالم الحقيقي. وهذا يؤدي إلى الدول. نحاول المهمة ، مما يثير المشاكل. ثم نحاول التدفقات.

الفصل 4 يدور حول التجريد اللغوي ، وبعبارة أخرى ، ننفذ لغة جديدة عن طريق بناء تقييم ، والذي يحدد معنى التعبيرات.

نظرًا لأن المقيِّم في الفصل 4 هو في حد ذاته برنامج LISP ، فإنه يرث بنية التحكم في نظام LISP الأساسي. لذلك في الفصل 5 ، نتعرض للتشغيل خطوة بخطوة لجهاز كمبيوتر حقيقي بمساعدة نموذج مجردة ، سجل.

شكرًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top