البرمجة بالكامل في الدوائر الموجودة
كان أول المبرمجين يكتبون في الدوائر الموجودة: كل تعليمة وكل عنوان في أعداد ثنائية مكتوبة مباشرة. قد يبدو تعليمة واحدة مثل 01100101 00001010 — كود التعليمة وعنوان الذاكرة في ثنائي.
مشكلة الكود المتنازع عليه
عند ظهور خطأ تطلبت إضافة تعليمة جديدة، تواجه المبرمجين مشكلة. إضافة في المكان bedeutet كل تعليمة عنوان بعد ذلك يتحرك بمقدار واحد — مما يتطلب من المبرمج تحديث كل مرجعية عنوان في البرنامج بأكمله. كارثي.
الحل: استبدل التعليمة قبل نقطة الإدخال مع قفزة إلى الذاكرة الفارغة. في ذلك الموقع الفارغ: اكتب التعليمة المشوهة، أضف التعليمات الجديدة، ثم قم بالقفزة обратا. عندما تظهر أخطاء في التصحيحات، تطبيق نفس الطريقة مرة أخرى باستخدام الذاكرة الفارغة الأخرى.
النتيجة: مسار تنفيذ البرنامج يتجه إلى مواقع تظهر عشوائيًا. أسمى هامينغ هذا 'كان من الصلصة'. مسار التحكم المنسق، مسوحة على الورق، يبدو تمامًا مثل الصلصة المتangled.
الطرق الهروب
اثنين من التحسينات الفورية: النotation octal (تجميع ثنائي الأعداد في مجموعات من 3) و hexdecimal (المجموعات من 4، باستخدام A-F للقيم فوق 9). هذه قللت من أخطاء الكتابة ولكن لم تแก المشكلة الأساسية عن عنوان.
التجميع symbollc (على سبيل المثال IBM's SAP — برنامج التجميع symbollc — و SOAP — برنامج التجميع symbollc البالغ التكيف على IBM 650) سمح للمبرمجين بتأليف أسماء التعليمات (ADD, MOVE) ورموز العناوين symbollc بدلا من ثنائي. قام المتصغر بترجمة إلى ثنائي في وقت الإدخال، تتحكم في إدارة تخصيص العناوين تلقائيًا.
SOAP قام بتحسين إضافي: قام بإعداد التعليمات على قرص الدوران حتى يصل التعليمات التالية إلى رأس القراءة في الوقت المناسب — الكود بأقل تأخير. حتى قام SOAP بتصفيف نفسه: برنامج A معالج كبيانات لإنتاج B، B يعمل على A لقياس كيف تتحسن من خلال تجميع الذات.
المكتبات & الكود المتجول
أشار همينغ إلى أن فكرة البرمجيات المتكررة (مكتبات الرياضيات) جاءت في وقت مبكر - فكر بابل في ذلك. المشكلة: مكتبة العنوان абсолют مطلوبة لكل برنامج لاحتلاى نفس الأماكن في الذاكرة في كل مرة يتم استخدامها. عندما تصبح المكتبة كبيرة جدا، تنافس البرامج على نفس العناوين.
الحل: الكود المتجول. يولد المترجم تعليمات يشار إلى الذاكرة بطرق متعلقة - قياسات من عنوان أساس - بدلا من العناوين абсолют. يقرر ربط الكود العناوين النهائية في وقت التحميل.
توصفت التقنيات البرمجية اللازمة في تقارير نيومان غير المنشورة (تداولت على نطاق واسع). كان الكتاب البرمجي الأول (ويلكس، ويلر & جيل، إديساك، 1951) يشرح هذه التقنيات.
انقسام تصميم اللغة
FORTRAN (1957، آي بي إم) و ALGOL (1958، لجنة دولية) يمثلان فلسفتين تصميميتين تنتجان نتائجا جذريا مختلفة.
FORTRAN
قاد جون باكوس مشروع FORTRAN (FORmula TRANslation) في آي بي إم. الهدف التصميم: جعل اللغة سهلة الاستخدام للمهندسين والكيميائيين. قَبِل FORTRAN العلامات الرياضية التي تشعر بالطبيعية ل مستخدميه: A = B + C * D بدلا من ADD B, C; STORE T; MULTIPLY T, D; STORE A.
FORTRAN البقاء على قيد الحياة 60+ سنوات. لا يزال مستخدمًا نشطًا في الحوسبة العلمية، وديناميات السوائل، وتحليل المناخ، وفيزياء الحاسوبية. لاحظ هامينغ هذه الصمود كدليل على تصميم ناجح.
ALGOL
ALGOL (ALGOrithmic Language) صممها لجنة من المنطقيين والحاسوبيين بذاتها تهدف إلى التميز الرياضي: لغة نظيفة منطقياً ومحددة بشكل رسمي. تم اختراع وصف النمط (BNF) للتواصل ALGOL.
فشل ALGOL في الممارسة. على الرغم من أن فخامة المنطق والتنفيذ الهائل على تصميم لغات متبقية (Pascal، C، وجميع اللغات الحديثة تقريبًا تنبع من مفاهيم قواعد ALGOL)، إلا أن ALGOL نفسه لم يتم نشره على نطاق واسع. حكم هامينغ: منطقيًا مصممًا، غير قابل للاستخدام من قبل البشر.
هرمية اللغات
وصف هامينغ هرمية طبيعية من كود الآلة حتى الأسمولية واللغات العليا، وultimately 'problem-oriented language' قريب من كيفية تفكير الممارسين في مجال المشكلة. يضيف كل مستوى قابلية القراءة البشرية على حساب كفاءة الآلة.
معيار هامينغ لتصميم اللغات البرمجية
استخلص هامينغ درس FORTRAN vs ALGOL في أربعة معايير لغة برمجة ناجحة:
1. سهل التعلم - يمكن للفتى أن يصبح منتجًا بسرعة
2. سهل الاستخدام - يتطلب الحفاظ على الوظائف اليومية
3. سهل التصحيح - تنتج أخطاء ذات رسائل معنوية ويمكن تحديدها
4. سهل استخدام الدوال الفرعية - لا تتطلب الاستعادة والاستحواذ جهد بطولي
أضاف ملاحظة بنيوية: اللغة البشرية تحمل حوالي 60% التكرار؛ اللغة المكتوبة حوالي 40%. اللغات ذات التكرار المنخفض (مثل APL) تنتج مقاطع جميلة واحدة تتمتع بالجمال من قبل الخبراء والمتخصصين ويجد البداينها مظلمة - وتحتوي على أخطاء غير مرئية عندما تغير حرف واحد المعنى.
be implied: a language designed for logical elegance optimizes for the wrong reader. The programmer is human; humans need redundancy to catch errors & communicate intent.
التصميم النفسي مقابل التصميم المنطقي للغة
عاد هامينغ إلى مقارنة FORTRAN/ALGOL كدرس في ديناميات المؤسسات والإنسانية وليس فقط تصميم اللغة.
صمم FORTRAN بناءً على النظرة النفسيّة - للبَشر الذين سيستخدمونها، وخاصة العلماء الذين يفكرون بالرموز الرياضية. صمم ALGOL بناءً على المنطق - للحصول على الصحة الرسمية والجمال النظري.
الضحك المعاكس الذي أجراه هامينغ: لغة منطقية تصدقها البشر تفشل؛ لغة مصممة من حيث الفائدة التي تقبلها البشر تنجح، حتى لو كانت أكثر فوضى منطقيا.
ذكر هامينغ APL كالواقعة الأقصى: منطقية جدًا، يمكن التعبير عنها في سطر واحد، مع مجموعة خاصة من الأحرف. أحبها الخبراء. وجد معظم المبرمجينها غير قابلَة للقراءة. يمكن أن يتحول معنى البرنامج ببساطة بتغيير حرف واحد. APL لديه مجتمع صغير متدين وثمة استخدمه محدود للغاية.
حجة التكرار البشري: اللغة المكتوبة حوالي 40% تكرار (التنسيق المتوقع، كلمات التفسير، معلومات تكرارية). اللغة المُتحدثة 60% تكرار. هذا التكرار يخدم الكشف عن الأخطاء - البشر غير موثوقون، لذا تطورت اللغة لتحمل معلومات تكرارية كافية لاكتشاف وإصلاح الأخطاء. اللغة ذات التكرار المنخفض تزيل هذا شبكة السلامة.
التسلسل للكومبيلر
وصف هامينغ للترتيب بين كومبيلر/مترجم: برنامج يمكنه قراءة لغة عليا وترجمتها إلى لغة أدنى. قم بترتيب هذه الطبقات - كل منها يترجم إلى المستوى التالي. في الأعلى: لغة محددة بالدомен التي يكتبها الخبراء في المجال (البيولوجيا، المالية، الفيزياء). في الأسفل: كود الماكينة. كل انتقال هو كومبيلر أو مترجم.
تنبؤ بقوة اللغة
حتى عام 1993، شاهد هامينغ العديد من اللغات الناجحة والفشل. FORTRAN (1957) البقاء. ALGOL (1958) فشل. COBOL (1959) البقاء لسنوات في الحوسبة التجارية. LISP (1958) البقاء في بحث الذكاء الاصطناعي. PL/I (1964) حاولت توحيد كل شيء وفشلت.
نمط تكرار
تحتوي فصول هامينغ عن تاريخ البرمجيات على نمط تكراري:
1. توجد قيود مؤلمة (العناوين абсолют، الكود غير قابل للصيانة، الكود غير قابل للتعديل)
2. يبتكر شخص طبقة التباعد التي تُخفي القيود
3. يتيح التباعد الجديد النطاق، مما يخلق قيودًا مؤلمة جديدة
4. تُكرر
ال двоية → الثماني / السداسي → assembly الرمزي → FORTRAN → البرمجة الهيكلية → لغات البرمجة الموجهة نحو الأهداف → لغات محددة المجال. كل طبقة ت解决 ألم السلف الأكثر حدة بينما يتم تقديم فئة جديدة من المشاكل.
مشكلة الكود المتناسق (العناوين абсолют) أدت إلى assembly الرمزي. البرامج الكبيرة من assembly أدت إلى FORTRAN. البرامج الكبيرة من FORTRAN أدت إلى البرمجة الهيكلية ثم التوجيه نحو الأهداف. محاضر حامنج انتهى قبل هذه التحولات المتأخرة ولكن النمط يستمر.
درس حامنج للمهندسين: أنت دائمًا ت解决 الألم الذي كشفه الطبقة السابقة. فهم الطبقة التي تتواجد عليها يتطلب معرفة لماذا توجد الطبقة التي تحته.