ملاحظات آدا لوفليس حول الآلة التحليلية وصفت خوارزمية قابلة للتكرار. اكتشف كيف تتطابق أفكارها المبكرة مع تصميم البرامج والتفكير الحاسوبي المعاصر.

ربما سمعت النسخة المختصرة: آدا لوفليس كتبت "الأول من نوعه"—مجموعة تعليمات موجهة لآلة تشارلز بابّاج التحليلية. لا يزال الناس يشيرون إليها لأنها مثال مبكّر وواضح مدهش لما نُسميه اليوم البرمجة—تفكيك هدف إلى خطوات دقيقة يمكن للآلة اتباعها.
المقالة هذه لا تحاول إعادة صنع تروس الآلة أو حسم كل ادعاء تاريخي. بدلاً من ذلك، تركز على أفكار البرمجة الموجودة في عمل لوفليس: كيف تحول مشكلة رياضية إلى شيء قابل للتنفيذ، كيف تمثل البيانات، وكيف تشرح إجراءً حتى يتمكن شخص آخر (أو شيء آخر) من تشغيله.
ملاحظات لوفليس الشهيرة تقرأ كجسر بين الرياضيات وتصميم البرمجيات. رغم أن الآلة كانت إلى حد كبير نظرية، فإن التفكير نفسه مألوف لأي شخص حاول جعل الحاسوب يقوم بشيء موثوق.
إليك ما سننتبه إليه أثناء القراءة:
في النهاية، الهدف بسيط: أن ترى "الخوارزمية الأولى" لوفليس أقل كقطعة متحفية وأكثر كقالب مبكّر للتفكير الحاسوبي لا يزال يعكس كيف نصمم البرامج اليوم.
أوغستا آدا كينغ، كونتيسة لوفليس—المعروفة ببساطة بآدا لوفليس—نشأت عند تقاطع الشعر والرياضيات. شجعتها والدتها على الدراسة الصارمة، وسرعان ما أصبحت جزءًا من دائرة صغيرة من العلماء والمفكرين البارزين. لم تكن عبقرية منعزلة تعمل بمفرد؛ بل كانت متعاونة بارعة تطرح أسئلة واضحة غير اعتيادية حول ما قد تعنيه الآلات، وليس فقط ما يمكنها أداءه.
كان تشارلز بابّاج مشهوراً بالفعل بخططه للحساب الميكانيكي عندما التقت به آدا. كان بإمكان بابّاج تصميم العتاد في رأسه: تروس، أعمدة، وعجلات أرقام مرتّبة في نظام. أما آدا فكانت تملك موهبة الشرح—أخذ أفكار تقنية معقّدة وترجمتها إلى مفاهيم منظمة وقابلة للنقل.
نجح تعاونهما لأن نقاط قوتهما اختلفت. دفع بابّاج الرؤية الهندسية إلى الأمام؛ بينما دفعت آدا الرؤية المفاهيمية إلى الأمام، خصوصاً فكرة أن الآلة يمكن أن تتبع تسلسلاً من العمليات يصممه شخص مسبقًا.
لم تكن الآلة التحليلية مجرد حاسبة أفضل. على الورق، وصفت آلة ذات غرض عام: تستطيع تخزين قيم، إجراء عمليات، وتشغيل إجراء مخطط خطوة بخطوة. فكّر بها كمسودة مبكّرة لما نُسميه الآن حاسوبًا قابلاً للبرمجة—حتى لو لم تُستكمل في حياتهم.
كانت تلك الفترة لحظة التقاء الرياضيات والصناعة والأتمتة. كان الناس يتوقون إلى طرق موثوقة—جداول، صيغ، وإجراءات قابلة للتكرار—لأن الأخطاء كانت مكلفة والعلم يتسارع. في هذا السياق، لم تكن رغبة آدا في "كيفية إخبار الآلة" فضولاً فحسب؛ بل كانت استجابة زمنية لحاجة متزايدة: تحويل التفكير البشري إلى عمليات قابلة للتكرار والتحقق.
قبل أن تصف آدا لوفليس خوارزمية، كان لا بد من وجود آلة تستحق "البرمجة". صُممت آلة بابّاج التحليلية كحاسبة ذات غرض عام: ليست جهازًا لصيغة واحدة، بل آلة يمكن إعدادها لتنفيذ تسلسلات مختلفة من العمليات.
الفكرة الأساسية بسيطة: إذا استطعت تقسيم المشكلة إلى خطوات حسابية صغيرة (جمع، طرح، ضرب، قسمة)، يجب أن تكون الآلة قادرة على أداء تلك الخطوات بموثوقية، بالترتيب الصحيح، وبالعدد المطلوب من المرات.
هذا هو الانتقال من حساب لمرة واحدة إلى طريقة قابلة لإعادة الاستخدام.
وصف بابّاج مكونين رئيسيين:
بالنسبة للمدخلات والمخرجات، صُممت الآلة لتأخذ التعليمات والبيانات باستخدام بطاقات مثقوبة (مستوحاة من أنوال النسيج)، ولتنتج النتائج بشكل قابل للاستخدام البشري—مطبوعة أو مسجلة بطرق أخرى.
إذا طبّقت هذه الأفكار على اليوم:
لهذا السبب تهم الآلة التحليلية: فهي ترسم نفس الفصل الذي نعتمد عليه حتى الآن—عتاد ينفّذ خطوات وبرامج تحدد أي خطوات تُنفَّذ.
عندما يتحدث الناس عن آدا لوفليس والخوارزمية الأولى، غالبًا ما يشيرون إلى مجموعة إلحاقيات محددة: "الملاحظات" التي أضافتها إلى ترجمتها الإنجليزية لمقال لويجي مينابريا عن الآلة التحليلية لتشارلز بابّاج.
وصف مينابريا فكرة الآلة. ذهبت لوفليس أبعد من ذلك: اعتبرت الآلة شيئًا يمكنك إعطاؤه تعليمات—لا مجرد الإعجاب به. هذا التحوّل هو ما يجعل هذه الملاحظات مهمة جدًا في تاريخ البرمجة. تقرأ كنوع من التفكير الحاسوبي المبكر: تفكيك هدف إلى خطوات دقيقة، اختيار تمثيلات، وتوقّع كيف سيتبع الآلة تلك الخطوات.
تشرح ملاحظات لوفليس ما كنا سنسميه اليوم تصميم البرنامج. تصف أجزاء الآلة (مثل مخزن الذاكرة و"المطحنة" المعالجة) من حيث كيفية تتابع العمليات والتحكم فيها. الفكرة المركزية بسيطة لكنها عميقة: إذا كانت الآلة التحليلية تستطيع تنفيذ عمليات بترتيب معين على رموز محددة، إذًا يجب كتابة طريقة الـ"كيف" بشكل قابل للتنفيذ بواسطة الآلة.
هنا تبدأ مقاربتها في التشابه مع البرمجة الحديثة. إنها ليست مجرد نظرية؛ إنها منهج.
الأهم أن الملاحظات تتضمن مثالاً عمليًا معروضًا كجدول خطوات. يوضّح، سطرًا بسطر، ما ينبغي أن تفعله الآلة—أي قيم في أي مواقع، ما العملية التالية، وأين تُخزّن النتائج.
إنّ تنسيق الجدول هذا هو سلف شبه الشيفرة، والمخططات الانسيابية، وجداول التعليمات: خطة صريحة وقابلة للتحقق يمكنك اتباعها دون تخمين. سواء بنيت آلة التحليلية أم لا، فإن العادة التي تعلّمها—تحويل فكرة إلى تسلسل قابل للتنفيذ—تبقى جوهر كتابة البرامج.
الخوارزمية، بلغة يومية، هي طريقة قابلة للتكرار: مجموعة خطوات واضحة تقودك من نقطة بداية إلى نتيجة موثوقة. تشبه وصفة لا تعتمد على الحدس—إن اتبعت الخطوات ستحصل على نفس النتيجة كل مرة.
المثال الشهير لوفليس هدفه حساب أعداد برنولي—تتابع قيم يظهر في مجالات رياضية عديدة. لا حاجة لمعرفتك العميقة عنها لتقدير سبب كونها حالة اختبار رائعة لآلة مبكرة.
هي صعبة بالقدر المناسب:
بمعنى آخر، هي معقدة بما يكفي لإثبات أن الآلة يمكنها اتباع طريقة منظمة، لكنها مرتبة بما يكفي لأن تُكتب كخطوات.
في جوهرها، تحتوي الخوارزمية على بنية مألوفة نستخدمها في البرامج اليوم:
من هذا المنظور، لم تكن لوفليس تشير إلى رقم يُحسب فقط—بل كانت تُظهر كيفية تنظيم حساب متعدد الخطوات حتى تنفذه الآلة دون تخمين.
عند الحديث عن خوارزمية أعداد برنولي لوفليس، يركز الناس غالبًا على النتيجة ("برنامج مبكر") أكثر من عمل التصميم الذي يجعل الخطوات موثوقة. الإنجاز الحقيقي ليس مجرد سرد عمليات—بل تشكيلها بحيث تتبعها الآلة دون ارتجال.
بدلاً من اعتبار "حساب أعداد برنولي" مهمة واحدة، تقسم الملاحظات ذلك إلى أجزاء أصغر يمكن تكرارها والتحقق منها: احسب القيم الوسيطة، اجمعها وفق صيغة محددة، سجّل النتائج، ثم انتقل إلى الحالة التالية.
يهم هذا التفكيك لأن كل مهمة فرعية يمكن التحقق منها بمعزل. إذا بدا الناتج خطأً، لا تصلح "الخوارزمية كلها"؛ بل تفحص جزءًا واحدًا.
الحاسوب الميكانيكي لا "يتذكر" بنفس الطريقة البشرية. كل قيمة ستحتاجها لاحقًا يجب أن تُخزّن في مكان ما، والملاحظات كانت حريصة على ذلك. بعض الأرقام قيم عمل مؤقتة؛ وبعضها نتائج نهائية يجب أن تبقى للاستخدام المستقبلي.
هذا شكل مبكّر من التفكير في حالة البرنامج:
ترتيب العمليات ميزة أمان. يجب أن تحدث حسابات معينة قبل أخرى لتجنّب استخدام قيمة غير مُحضَّرة أو الكتابة فوق شيء لازال مطلوبًا.
بمصطلحات حديثة، تصمم لوفليس تدفقًا تحكميًا بحيث يتبع البرنامج مسارًا واضحًا: افعل A، ثم B، ثم C—لأن فعل B أولاً قد يعطي نتيجة خاطئة بصمت.
أحد أكثر الأفكار "حداثة" المختبئة في جدول خطوات لوفليس هو التكرار: القدرة على تنفيذ نفس مجموعة التعليمات مرارًا وتكرارًا، ليس لأنك عالق، بل لأن التكرار هو أسرع طريق إلى النتيجة.
التكرار في البرنامج يعني: اتبع وصفة صغيرة من الخطوات، تحقق مما إذا كنت قد انتهيت، وإذا لم تنتهٍ فعد ونفّذ نفس الوصفة مرة أخرى. المفتاح أن شيئًا ما يتغير في كل مرة—غالبًا عدّاد أو موضع في جدول أو القيمة التي تبنيها—فيتقدم البرنامج نحو خط النهاية.
في تدوين لوفليس، ترى هذا على شكل العودة المنظمة إلى خطوات سابقة. بدلاً من إعادة كتابة تعليمات متطابقة مرارًا، تصف نمطًا وتحدد متى تكرر. هذه بذرة ما نُسمّيه اليوم الiteration.
إذا كتبت شفرة من قبل، فقد رأيت هذا النمط كحلقة for ("كرر N مرة") أو while ("كرر حتى يتحقق شرط"). يتضمن جدولها أيضًا مكوّنات مألوفة للحلقة:
تخيّل أنك تريد مجموع 1 إلى 5.
total = 0i = 1i إلى totali بواحدi لا يزال ≤ 5، كرر عمليتي الجمع والزيادةهذا التكرار في كلمات بسيطة: حلقة صغيرة تحدّث عدّادًا وتراكم نتيجة. مساهمة لوفليس لم تكن فقط ما حسبت—بل إظهار أن بنية التكرار يمكن كتابتها بوضوح يكفي للآلة (وللناس لاحقًا) لتنفيذها بثقة.
قد تكون الإجراءات منطقية تمامًا في ذهنك ومع ذلك مستحيلة على الآلة—أو على شخص آخر—لأنك بحاجة إلى طريقة للإشارة إلى كميات متغيرة. هنا تظهر أهمية المتغيرات والرموز.
فكّر في المتغير كصندوق معنّون على مكتب. يبقى العنوان ثابتًا، لكن ما بالداخل يمكن أن يتغير أثناء العمل.
إذا كنت تحسب تسلسلاً، قد يكون لديك:
بدون هذه الصناديق، تضطر إلى وصف كل شيء بجمل طويلة ("خذ الرقم الذي حسبته قبل خطوتين...")، مما يتحوّل سريعًا إلى تشابك.
في ملاحظات لوفليس، الرموز والتسميات ليست للتشكيل فقط—بل لجعل العملية قابلة للتنفيذ. توضح الرموز عمليًا:
عندما تطول الإجراءات، تمنع هذه التوضيحات الصغيرة الخطأ الأكثر شيوعًا: الخلط بين كميات متشابهة.
تسمية المتغيرات الجيدة ما تزال واحدة من أرخص الطرق لتقليل الأخطاء. قارن x1, x2, x3 مع current_sum, term_index, next_term: المجموعة الثانية تخبرك ما غاية الصناديق.
تضيف الأنواع طبقة أمان إضافية. تقرير ما إذا كانت قيمة عددًا صحيحًا أو عشريًا أو قائمة أو سجلًا يشبه اختيار نوع الحاوية الصحيح—بعض الأخطاء تصبح مستحيلة أو أسهل في الاكتشاف مبكرًا.
المتغيرات والرمز يحوّلان "فكرة ذكية" إلى خطوات يمكن تكرارها بشكل صحيح من قبل أي أحد (بما في ذلك آلة).
التجريد يعني التركيز على المهم وإخفاء التفاصيل غير الضرورية عن قصد. الفرق بين قول "فرز هذه القائمة" ووصف كل مبادلة ومقارنة يدويًا. تُظهر ملاحظات لوفليس هذا الميل مبكرًا: تهدف إلى نقل طريقة واضحة دون إجبار القارئ على الغرق في تفاصيل ميكانيكية.
من اللافت في الملاحظات كيف تبقي الجوهر مستقلًا عن أفعال الآلة الفيزيائية. لآلة التحليلية طريقتها (التروس، المخزن، المطحنة)، لكن الملاحظات تؤكد على الـ"ماذا": تسلسل العمليات اللازم للوصول إلى نتيجة.
هذا الانفصال هو بذور ما نُسمّيه اليوم تصميم البرمجيات:
عندما يمكنك وصف الطريقة دون إعادة شرح الآلة، فأنت تعامل الحوسبة كشيء قابل للنقل—قابل لإعادة التنفيذ على عتاد مختلف أو بواسطة أشخاص مختلفين.
تشبه جداول الخطوات في الملاحظات "الإجراءات" المبكرة: مجموعة محددة من الخطوات تُتَّبع مرارًا. الشيفرة الحديثة تُحدِّد ذلك كدوال، وحدات، ومكونات قابلة لإعادة الاستخدام.
تفعل الدالة الجيدة ما تفعله طريقة لوفليس:
التجريد ليس غموضًا—إنه قابلية للاستخدام. عندما يُعبّر عن طريقة بوضوح، يمكنك استدعاؤها في سياقات مختلفة، ودمجها مع طرق أخرى، وبناء أنظمة أكبر دون الغرق في التفاصيل.
لم تشرح آدا لوفليس ما يمكن للآلة فعله فقط—بل أظهرت كيف تجعل إجراءً لا لبس فيه لشخص آخر (أو لآلة) ليتبعه. هذه هي القوة الهادئة لملاحظاتها: تعامل الشرح كجزء من العمل، لا زخرفة.
أحد أسباب شعور عرضها بالحداثة هو استخدام الجداول المهيكلة خطوة بخطوة. يجبرك الجدول على اتخاذ قرارات قد تخفيها النثر الغامض:
هذا يقلل الغموض بنفس طريقة شبه الشيفرة اليوم. قد تقرأ فقرة وتظن أنك فهمت—حتى تحاول تنفيذها. يجعل جدول الخطوات "مسار التنفيذ" مرئيًا، وهذا بالضبط ما تهدف إليه توثيقات البرامج الجيدة.
خلطت ملاحظات لوفليس بين ثلاثة أشياء ما زلنا نحاول ربطها معًا:
لماذا البرنامج (النية)
كيف يعمل (الإجراء)
كيف تفسر التدوين (الواجهة—الأسماء، الرموز، الافتراضات)
هذا يوازي التعليقات، docstrings، وملفات README الحديثة. README يشرح الهدف والسياق. التعليقات الداخلية توضّح الخطوات الدقيقة. docstrings تعرف المدخلات/المخرجات والحالات الحدّية. عندما يغيب أي جزء، يُترك المستخدم يخمّن—والتخمين هو أرض خصبة للأخطاء.
عند توثيق عملية (شفرة أو غيرها)، دوّن كأن شخصًا سيعيد تنفيذها بدونك:
هذا ليس عملًا زائدًا—إنه الطريقة التي تصبح بها الطريقة قابلة لإعادة الاستخدام.
غالبًا ما تُعرَّف آدا لوفليس باللقب الجريء: "أول مبرمجة". هذا اختصار مفيد، لكنه قد يبسط حقيقة أكثر إثارة. النقاش ليس فقط حول أسبقية الفضل—بل حول ما نعنيه بـالبرنامج، الحاسوب، والتأليف.
إذا كان المعنى بشخص كتب تعليمات مخصصة لآلة ذات غرض عام، فلقب المبرمجة يعطيها حقًا فضلًا قويًا. في ملاحظاتها على الآلة التحليلية، وصفت طريقة خطوة بخطوة لتوليد أعداد برنولي—خطة غير بسيطة لكيفية أن تنفذ الآلة حسابًا ذو شأن.
لكن المؤرخين يجادلون لأن:
من المهم فصل اختراع فكرة حوسبية عن بناء حاسوب عامل. المساهمة الكبرى لبابّاج كانت معمارية: آلة مقترحة لها مخزن، مطحنة، وتحكم عبر بطاقات مثقوبة. مساهمة لوفليس كانت تفسيرية وتوضيحية: أوضحت ما يمكن أن تمثّله تلك الآلة وكيف يمكن كتابة إجراء حتى تتبعه.
البرنامج لا يتوقف عن كونه برنامج لمجرد أن العتاد لم يُسلَّم. بمصطلحات حديثة، يشبه ذلك كتابة برنامج لمنصة نظرية—أو تحديد خوارزمية قبل وجود الشريحة.
طريقة محترمة للحديث عن تلك الفترة هي اعتبارها تعاونًا بين أدوار:
الشيء الذي يمكن قوله بثقة: ملاحظات لوفليس ساعدت في تعريف ما هي البرمجة—ليست مجرد حساب، بل التعبير الدقيق عن إجراء يمكن للآلة اتباعه.
تهمنا ملاحظات لوفليس لأنها تُظهر كيفية التفكير عند تحويل فكرة إلى خطة قابلة للتنفيذ بواسطة آلة. حتى لو لم تلمس بطاقات مثقوبة أو تروسًا ميكانيكية، تظل الدروس الأساسية قابلة للتطبيق على تصميم البرامج الحديث: أعطِ العمل بنية واضحة، سمّ الأشياء بعناية، استخدم التكرار بوعي، وابنِ قطعًا قابلة لإعادة الاستخدام.
البنية تغلب الذكاء اللامع. يُصبح البرنامج أسهل في البناء والصيانة عندما يُقسَّم إلى خطوات لها غرض واضح. تشجع طريقة لوفليس على تصميم شكل الحل قبل الانشغال بالتفاصيل.
الوضوح ميزة. كانت جداولها وشروحها جزءًا من البرنامج، ليست زخرفة. عندما يستطيع أنت المستقبل (أو زميل) فهم المنطق بسرعة، يصبح البرنامج أكثر موثوقية.
التكرار أداة، لا خدعة. التكرار (الحلقات) هو كيف تُوسّع الطريقة. المفتاح تحديد ما يتكرر، ما الذي يتغير في كل مرة، ومتى يتوقف.
التجريد يمكّن إعادة الاستخدام. إذا نجحت سلسلة خطوات مرة، ينبغي أن تتمكن من إعادة استخدامها بمدخلات مختلفة. هذه بذرة الدوال، الوحدات، والمكتبات.
إذا استخدمت واجهة "ابنها بوصفه"—كتابة متطلبات، تكرار خطة، ثم توليد برنامج عمل—فإنك قد كررت روح ملاحظات لوفليس: اجعل الإجراء صريحًا، حافظ على وضوح الحالة، ووثق الافتراضات حتى يصبح التنفيذ قابلاً للتكرار. هذا أحد أسباب انسجام منصات الـvibe-coding مثل Koder.ai مع القصة. تسمح Koder.ai بإنشاء تطبيقات ويب وخلفية ومحمولة عبر واجهة دردشة، لكن الأسس نفسها تنطبق: تحصل على نتائج أفضل عندما تحدد المدخلات/المخرجات، تسمي الأمور بثبات، وتطلب بنية خطوة بخطوة (ويمكن أن يساعد وضع التخطيط في تثبيت "الملاحظات" قبل توليد أو تعديل الشيفرة).
استخدم هذه المراجعة السريعة قبل البدء بالترميز—أو عندما تصلح شيئًا يبدوالك فوضويًا:
إذا رغبت في تقوية أسلوب "الملاحظات أولاً" في تصميم البرامج، هذه الموارد مفيدة:
معًا، تحول هذه العادات البرمجة من "اجعلها تعمل" إلى "اجعلها مفهومة"—نفس التحول الذي كانت ملاحظات لوفليس تشير إليه بالفعل.
الخوارزمية الأولى لآدا لوفليس هي إجراء خطوة بخطوة (مقدم في ملاحظاتها) معدّ ليُنفَّذ على آلة تشارلز بابّاج التحليلية. تُعرف هذه الملاحظات لأنها تعامل الحوسبة كـ تسلسل مخطط من العمليات على قيم مخزنة، وهو ما يشبه إلى حد كبير البرمجة الحديثة حتى مع أن الآلة لم تُبنى آنذاك.
تُركّز المقالة على أفكار البرمجة الموجودة في عمل لوفليس—كيفية التعبير عن طريقة بحيث تكون قابلة للتنفيذ، للتحقق منها، وللفهم—بدلاً من محاولة إعادة بناء مكونات الآلة أو حل كلّ النزاعات التاريخية.
الآلة التحليلية كانت آلة مقترحة ذات غرض عام مصممة لـ:
تُهمّ هذه البنية لأنها تفصل بين العتاد الذي ينفّذ والبرامج التي تحدد الخطوات—وهو الانقسام نفسه الذي تعتمد عليه الحواسيب الحديثة.
أعداد برنولي تظهر في عدة صيغ رياضية، وهي مثال جيد لأن كل قيمة جديدة تعتمد على قيم سابقة، وتتضمن عمليات متعددة وتخزين وسيط وخطوات قابلة للإعادة—ما يجعلها اختبارًا مناسبًا لآلة قابلة للبرمجة.
جدول الخطوات يجبرك على الدقة. يجعلك توضح:
لهذا يشبه الجدول شبه الشيفرة الحديثة ويسمح للآخرين "بتشغيل" الإجراء دون تخمين.
التكرار هنا هو شكل مبكّر من التكرار البرمجي: تحدد مجموعة صغيرة من الخطوات، تغيّر شيئًا في كل مرة (مثل عدّاد أو مجموع جزئي)، وتتوقف عندما يتحقق شرط. في الشيفرة الحديثة يطابق ذلك for/while مع:
لأن الآلة لا يمكنها الاعتماد على سياق ذهني كما يفعل البشر، فإن التسميات المشابهة للصناديق (المتغيرات) تساعد على تتبع:
هذا يقلل الأخطاء الشائعة عند الإجراءات الطويلة: خلط كميات متشابهة الشكل.
التجريد يفصل الطريقة (الخوارزمية) عن الآلية (كيفية تنفيذ الآلة). هذا بذرة المكونات القابلة لإعادة الاستخدام:
بالمصطلحات الحديثة، هذا ما تفعله الدوال والوحدات لتجعل الأنظمة قابلة للتوسيع.
التسمية محل نقاش لأن:
خلاصة آمنة: ملاحظات لوفليس ساعدت على تعريف ما تعنيه البرمجة—كتابة إجراء غير غامض يمكن للآلة اتباعه.
مرّة سريعة لتطبيقها قبل البدء بالبرمجة:
للمزيد من الأدلة، انظر إلى /blog/how-to-write-better-requirements و/blog/pseudocode-examples.