2 คะแนน โดย GN⁺ 2024-12-17 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ในปี 1843 Ada Lovelace ได้เผยแพร่ขั้นตอนการคำนวณจำนวน Bernoulli สำหรับ Analytical Engine ที่ยังสร้างไม่เสร็จ และด้วยเหตุนี้จึงกลายเป็นศูนย์กลางของข้อถกเถียงเรื่อง “โปรแกรมคอมพิวเตอร์ตัวแรก”
  • ตารางที่เผยแพร่แสดงหนึ่งขั้นตอนของวิธีจัดการลำดับ Bernoulli ทั้งชุด และค่าที่ Lovelace เรียกว่า B7 นั้น ในส kýลการเขียนสมัยใหม่ตรงกับจำนวน Bernoulli ตัวที่แปด
  • โปรแกรมใน Note G มี 25 การดำเนินการ รวมถึง ลูปซ้อนกัน และสัญกรณ์ติดตามค่าตัวแปร ทำให้ซับซ้อนกว่าตัวอย่าง 11 การดำเนินการแบบไม่มีการวนซ้ำของ Menabrea อย่างมาก
  • ระหว่างการแปลเป็น C พบว่าการดำเนินการที่สี่ในตารางต้นฉบับ v5 / v4 ควรเป็น v4 / v5 ซึ่งอาจเป็นความผิดพลาดจากการเรียงพิมพ์ แต่ก็อาจมองได้ว่าเป็นบั๊กที่เก่าแก่ที่สุดในประวัติศาสตร์คอมพิวติ้ง
  • จุดที่ทำให้ Lovelace แตกต่าง ไม่ใช่แค่ฉายา “โปรแกรมเมอร์คนแรก” แต่คือการเข้าใจว่าการทำบัตรคำสั่งเป็น งานเขียนโปรแกรม ที่ทำได้ดีหรือแย่ ไม่ใช่แค่การแปลสมการพีชคณิตอย่างตรงไปตรงมา

โปรแกรมปี 1843 ที่ไม่เคยได้รัน

  • ต่างจากเกร็ดก่อตั้ง Microsoft โปรแกรมของ Ada Lovelace ไม่เคยมีโอกาสรันบนเครื่องจริง
    • Paul Allen และ Bill Gates ทดสอบ BASIC interpreter บนอีมูเลเตอร์ที่สร้างจากสเปก Intel 8080 ทั้งที่ยังไม่มี Altair และต่อมาก็ทำให้มันทำงานบน Altair จริงได้
    • Lovelace ก็เขียนโปรแกรมสำหรับคอมพิวเตอร์ที่มีเพียงคำอธิบายเช่นกัน แต่เพราะ Analytical Engine ไม่เคยถูกสร้าง จึงไม่อาจรันได้
  • โปรแกรมของ Lovelace มักถูกเรียกว่าโปรแกรมคอมพิวเตอร์ตัวแรกของโลก แต่สถานะนี้ยังมีข้อถกเถียงอยู่
    • ข้อถกเถียงเรื่องขอบเขตและคุณค่าของผลงาน Lovelace ดำเนินต่อเนื่องยาวนานจน Walter Isaacson เรียกมันว่า “minor academic specialty”
    • คำถามสำคัญที่นี่ไม่ใช่การประเมินตัวบุคคล แต่คือโปรแกรมที่เขียนในปี 1843 นี้ ถูกออกแบบให้ทำงานอย่างไร
  • โปรแกรมนี้ไปไกลกว่าการเรียงสมการธรรมดา
    • มันจัดกลุ่มการดำเนินการที่ทำซ้ำได้ และใช้โครงสร้างที่เทียบได้กับ ลูป
    • มันแนะนำสัญกรณ์สำหรับติดตามการเปลี่ยนแปลงของสถานะตัวแปร
    • มีหลายส่วนที่คล้ายกับประสบการณ์การเขียนซอฟต์แวร์ในปัจจุบัน

จำนวน Bernoulli และปัญหาผลบวกของกำลัง

  • โปรแกรมของ Lovelace ถูกออกแบบมาเพื่อคำนวณ จำนวน Bernoulli
  • เบื้องหลังจำนวน Bernoulli คือปัญหาคณิตศาสตร์เก่าแก่เรื่องการหาผลบวกของกำลัง
    • สำนักพีทาโกรัสพยายามหาวิธีคำนวณ 1 + 2 + 3 + ... + n โดยไม่ต้องบวกทีละตัว และได้สูตร n(n+1)/2 จากแนวคิดจับคู่สามเหลี่ยมสองรูปให้เป็นสี่เหลี่ยมผืนผ้า
    • Archimedes สนใจผลบวกในรูป 1² + 2² + 3² + ... + n² และทิ้งวิธีแก้ที่ตีความเชิงเรขาคณิตได้ไว้
    • Aryabhata ตีพิมพ์ Aryabhatiya ในปี 499 ซึ่งมีสูตรผลบวกกำลังสามรวมอยู่ด้วย
  • ปัญหาที่ทั่วไปกว่าคือจะหาผลบวกในรูป 1^k + 2^k + ... + n^k ได้อย่างไร
    • Johann Faulhaber คำนวณและเผยแพร่สูตรได้ถึงกำลัง 17 ในปี 1631 แต่ไม่ได้ให้คำตอบทั่วไป
    • Blaise Pascal สร้างวิธีทั่วไปขึ้นในปี 1665 แต่ยังต้องรู้วิธีคำนวณผลบวกของกำลังที่ต่ำกว่าทั้งหมดก่อน
  • Jakob Bernoulli ทิ้งคำตอบทั่วไปที่ใช้งานได้จริงกว่าไว้
    • เขาใช้สามเหลี่ยมของ Pascal เพื่อมองหารูปแบบของสัมประสิทธิ์พหุนาม
    • สัมประสิทธิ์บางส่วนได้จากสามเหลี่ยมของ Pascal ส่วนที่เหลือได้จากสมบัติที่ว่าผลรวมของสัมประสิทธิ์มีค่าเป็น 1 เสมอ
    • ปัจจัยสัมประสิทธิ์ชุดที่สองนี้เองที่กลายมาเป็นลำดับที่รู้จักกันในชื่อ จำนวน Bernoulli
  • การค้นพบของ Bernoulli ไม่ได้ทำให้การคำนวณผลบวกของกำลังใด ๆ กลายเป็นเรื่องง่ายในทันที
    • หากจะคำนวณผลบวกกำลังที่ k ต้องรู้จำนวน Bernoulli จนถึงลำดับที่ k
    • จำนวน Bernoulli แต่ละตัวคำนวณจากจำนวน Bernoulli ก่อนหน้า
    • ถึงอย่างนั้น การคำนวณลำดับ Bernoulli ยาว ๆ ก็ยังง่ายกว่าการไล่อนุมานสูตรผลบวกของแต่ละกำลังทีละตัวมาก

เครื่องคำนวณสองแบบของ Babbage

  • Charles Babbage ออกแบบเครื่องคำนวณเชิงกลไว้สองประเภท
    • แบบแรกคือ Difference Engine
    • แบบที่สองคือ Analytical Engine ซึ่งปัจจุบันรู้จักกันว่าเป็นคอมพิวเตอร์เชิงกล
  • Difference Engine ไม่ใช่คอมพิวเตอร์ แต่เป็นเครื่องที่ทำได้แค่การบวกและลบ
    • Babbage ไม่พอใจกับข้อผิดพลาดจำนวนมากในตารางลอการิทึมยุคนั้น จึงต้องการสร้างตารางดังกล่าวด้วยวิธีกล
    • วิธีผลต่างแบ่งย่อย ของ Gaspard de Prony แบ่งกระบวนการสร้างตารางลอการิทึมออกเป็นขั้นเล็ก ๆ ที่ต้องใช้เพียงการบวกและลบ
    • พหุนามสามารถใช้ประมาณค่าฟังก์ชันลอการิทึมและฟังก์ชันตรีโกณมิติได้
  • Difference Engine จับคู่แต่ละคอลัมน์ของตารางผลต่างเข้ากับคอลัมน์ของเฟืองจริง
    • เฟืองแต่ละตัวแทนเลขฐานสิบหนึ่งหลัก และทั้งคอลัมน์แทนเลขฐานสิบหนึ่งจำนวน
    • มันมี 8 คอลัมน์ จึงสร้างตารางของพหุนามได้ถึงดีกรี 7
    • มนุษย์ตั้งค่าเริ่มต้นแล้วหมุนข้อเหวี่ยง เพื่อให้ผลต่างคงที่ถูกส่งต่อไปยังคอลัมน์ถัดไป
  • Babbage สร้างและสาธิตส่วนหนึ่งของ Difference Engine ได้ แต่ทำเครื่องทั้งเครื่องไม่สำเร็จ
    • เขาหาช่างผู้ผลิตที่สามารถทำเฟืองจำนวนมากด้วยความแม่นยำพอไม่ได้
    • Difference Engine ที่ใช้งานได้จริงเพิ่งถูกสร้างขึ้นในทศวรรษ 1990 หลังเทคโนโลยีการผลิตความเที่ยงตรงสูงพร้อมแล้ว
  • Analytical Engine ถูกวางแนวคิดให้เป็นเครื่องที่ทรงพลังกว่าและยืดหยุ่นกว่ามาก
    • มันใช้คอลัมน์เฟืองแบบเดียวกับ Difference Engine แต่ตั้งใจจะมีหลายร้อยคอลัมน์ขึ้นไป
    • มันสามารถตั้งโปรแกรมได้ด้วย บัตรเจาะรู แบบเดียวกับ Jacquard Loom
    • มันทำได้ไม่ใช่แค่บวกและลบ แต่รวมถึงคูณและหารด้วย
    • ส่วนที่เรียกว่า “mill” จะถูกจัดวางใหม่ตามการคำนวณ อ่านโอเปอแรนด์จากคอลัมน์เก็บข้อมูล และเขียนผลลัพธ์ลงอีกคอลัมน์หนึ่ง

บทความของ Menabrea และเชิงอรรถของ Lovelace

  • Babbage พบ Luigi Menabrea วิศวกรชาวอิตาลีซึ่งต่อมาจะเป็นนายกรัฐมนตรี ที่เมือง Turin และ Menabrea ได้ตีพิมพ์บทความภาษาฝรั่งเศสในปี 1842 อธิบายศักยภาพของ Analytical Engine
  • Lovelace แปลบทความของ Menabrea เป็นภาษาอังกฤษในปี 1843
    • Lovelace พบ Babbage ครั้งแรกในปี 1833 ตอนอายุ 17 และหลงใหลใน Difference Engine ของเขา
    • เธอได้รับการศึกษาด้านคณิตศาสตร์อย่างมากตั้งแต่วัยเด็ก และแม้หลังแต่งงานกับมีลูกสามคนแล้วก็ยังเรียนคณิตศาสตร์กับ Augustus de Morgan
  • บทความของ Menabrea กล่าวถึงวิธีทำงานของ Difference Engine และความเหนือกว่าของ Analytical Engine แบบย่อ ๆ
    • Analytical Engine ถูกแนะนำว่าเป็นเครื่องที่สามารถหาผลคูณของจำนวน 20 หลักสองจำนวนได้ภายใน 3 นาที
    • เขายกตัวอย่างระบบสมการเชิงเส้นอย่างง่ายและการกระจายผลคูณของทวินามสองตัว โดยใช้ “diagrams of development”
    • ตารางเหล่านี้ก็เป็นโปรแกรมในความหมายเดียวกับโปรแกรมของ Lovelace เช่นกัน แต่เป็นเพียงตัวอย่างง่าย ๆ ที่ไม่มีการแตกแขนงหรือการวนซ้ำ
  • งานแปลของ Lovelace มีเชิงอรรถที่ยาวกว่าต้นฉบับมาก และนี่คือจุดที่ผลงานสำคัญของเธอปรากฏชัด
    • Note A กล่าวยาวถึงความเป็นไปได้ที่ Analytical Engine จะเป็นเครื่องที่ทำการคำนวณทางคณิตศาสตร์ใด ๆ ก็ได้
    • เธอมองว่ามันอาจทำงานได้ไม่ใช่แค่กับตัวเลข แต่กับสิ่งใดก็ตามที่ความสัมพันธ์พื้นฐานของมันสามารถแสดงเป็นศาสตร์นามธรรมของการปฏิบัติการได้
    • ตัวอย่างเช่น เธอกล่าวว่าในสักวันหนึ่งมันอาจแต่งเพลงได้
  • Note G มีชื่อเสียงด้วยสองเหตุผล
    • ประเด็นของ Lovelace ที่ว่าเราไม่อาจพูดได้ว่า Analytical Engine “คิด” นั้น ต่อมาถูก Alan Turing เรียกว่า “Lady Lovelace’s Objection”
    • ขณะเดียวกัน มันยังมีโปรแกรมคำนวณจำนวน Bernoulli รวมอยู่ด้วย เพื่อแสดงว่าเครื่องจักรสามารถจัดการปัญหาที่ซับซ้อนมากได้

โครงสร้างจริงของโปรแกรมใน Note G

  • ตารางทั้งหมดของ Lovelace อยู่ในรูปแบบ “diagram of development” แบบขยาย และสามารถดูภาพต้นฉบับได้ที่ นี่
  • โปรแกรมนี้ใกล้เคียงกับ รายการของการดำเนินการ ที่ระบุด้วยสัญลักษณ์คณิตศาสตร์ทั่วไปมากกว่า
    • ดูเหมือนว่า Babbage หรือ Lovelace จะยังไปไม่ถึงขั้นสร้างชุด opcode สำหรับ Analytical Engine
  • Lovelace อธิบายวิธีคำนวณลำดับ Bernoulli ทั้งชุดจนถึงขีดจำกัดหนึ่ง แต่โปรแกรมที่นำเสนอในตารางเป็นเพียงตัวอย่างของหนึ่งขั้นตอนจากวิธีนั้น
    • สิ่งที่ถูกคำนวณคือค่าที่ Lovelace เรียกว่า B7
    • ในสัญกรณ์คณิตศาสตร์สมัยใหม่ มันคือจำนวน Bernoulli ตัวที่แปด
    • สมการอยู่ในรูป B7 = -1(A0 + B1A1 + B3A3 + B5A5)
  • แต่ละพจน์ของสมการนี้แทนสัมประสิทธิ์ของพหุนามผลบวกกำลังเฉพาะตัวหนึ่ง
    • กำลังนั้นคือ 8 และจำนวน Bernoulli ตัวที่แปดปรากฏครั้งแรกในสูตรผลบวกของกำลังแปดของจำนวนเต็มบวก
    • B1 ถึง B7 คือจำนวน Bernoulli คนละตัวตามการทำดัชนีของ Lovelace
    • A0 ถึง A5 คือปัจจัยสัมประสิทธิ์ที่ Bernoulli สามารถคำนวณได้จากสามเหลี่ยมของ Pascal
    • โปรแกรมของ Lovelace ใช้ n = 4
  • ฉบับแปลเป็น C มีให้ดูใน gist
    • เริ่มจากคำนวณ A0 และ B1A1
    • จากนั้นเข้าสู่ลูปที่ทำซ้ำสองครั้งเพื่อคำนวณ B3A3 และ B5A5
    • หลังคำนวณผลคูณแต่ละตัวแล้วก็นำไปบวกกับผลคูณก่อนหน้า และสุดท้ายได้ผลรวมทั้งหมด

ลูป สถานะตัวแปร และบั๊กเก่าแก่

  • ฉบับแปลเป็น C แสดงให้เห็นชัดถึงความมองการณ์ไกลของโปรแกรมของ Lovelace
    • แม้โปรแกรมต้นฉบับจะไม่ได้มี while loop แบบตรงตัว แต่ Lovelace ก็สร้างกลุ่มการดำเนินการและระบุด้วยคำอธิบายประกอบว่าควรทำซ้ำเมื่อใด
    • ในฉบับ C มี while loop สองตัว โดยตัวหนึ่งซ้อนอยู่ในอีกตัวหนึ่ง
    • v10 ทั้งในต้นฉบับและฉบับ C ทำงานคล้าย ตัวแปรนับรอบ ที่ลดค่าลงในแต่ละรอบ
  • ตารางของ Lovelace ทำให้ติดตามการเปลี่ยนแปลงของสถานะได้ง่ายกว่าตารางของ Menabrea
    • มันมีคอลัมน์ชื่อ “Indication of change in the value on any Variable”
    • เธอใส่ดัชนียกกำลังให้แต่ละตัวแปรเพื่อแทนค่าที่ตัวแปรนั้นถืออยู่ต่อเนื่องกันระหว่างการรันโปรแกรม
    • ดัชนียกกำลัง 2 หมายถึงค่าที่ถูกกำหนดให้ตัวแปรนั้นเป็นครั้งที่สองนับจากเริ่มโปรแกรม
  • เมื่อนำไปเขียนเป็น C แล้วรัน ตอนแรกได้ผลลัพธ์ผิด และสาเหตุไม่ได้อยู่ที่โค้ดแปล แต่อยู่ที่ตารางต้นฉบับ
    • “diagram of development” ของ Lovelace เขียนการดำเนินการที่สี่เป็น v5 / v4
    • ลำดับที่ถูกต้องควรเป็น v4 / v5
    • นี่อาจไม่ใช่ข้อผิดพลาดในโปรแกรมที่ Lovelace สร้างเอง แต่เป็น ความผิดพลาดจากการเรียงพิมพ์
  • Jim Randall ก็ได้ แปลโปรแกรมของ Lovelace เป็น Python เช่นกัน และชี้ให้เห็นบั๊กการหารเดียวกันพร้อมปัญหาอีกสองจุด
  • บั๊กเล็กน้อยในโปรแกรมต้นฉบับสอดคล้องกับการตีความที่ว่า Lovelace พยายามเขียนสิ่งที่ใกล้เคียงกับโปรแกรมจริง ไม่ใช่แค่ของสาธิตธรรมดา

ขอบเขตของฉายาโปรแกรมเมอร์คนแรก

  • การบอกว่า Lovelace เป็นผู้เขียนหรือเผยแพร่ “โปรแกรมแรก” นั้นไม่ถูกต้องเสียทีเดียว
    • Menabrea เผยแพร่ “diagrams of development” ก่อนงานแปลของ Lovelace หนึ่งปี
    • Babbage เองก็เขียนโปรแกรมที่ไม่เคยเผยแพร่ไว้อีกมากกว่า 20 โปรแกรม
    • ทั้งหมดนี้ยังเปิดช่องให้ถกเถียงได้ ขึ้นอยู่กับว่าเรานับอะไรว่าเป็นโปรแกรม
  • โปรแกรมที่ Lovelace เผยแพร่มีความก้าวหน้ากว่าสิ่งที่เคยเผยแพร่มาก่อนอย่างชัดเจน
    • โปรแกรมที่ยาวที่สุดของ Menabrea มี 11 การดำเนินการ
    • ตัวอย่างของ Menabrea ไม่มีลูปหรือการแตกแขนง
    • โปรแกรมของ Lovelace มี 25 การดำเนินการ และมีลูปซ้อนกัน ดังนั้นจึงมีโครงสร้างการแตกแขนงด้วย
  • Menabrea มองว่าเมื่อเครื่องสร้างเสร็จ ความยากจะลดลงเหลือเพียงการทำบัตรคำสั่ง และบัตรเหล่านั้นก็เป็นเพียงการแปลจากสมการพีชคณิต จึงน่าจะใช้สัญกรณ์ง่าย ๆ แล้วให้คนงานดำเนินการได้ไม่ยาก
  • Babbage และ Menabrea มุ่งสนใจการนำ Analytical Engine ไปใช้กับปัญหาคำนวณทางคณิตศาสตร์ที่พวกเขาสนใจเป็นหลัก
  • Lovelace มองว่า Analytical Engine สามารถทำอะไรได้มากกว่าที่ Babbage หรือ Menabrea จินตนาการไว้ และเข้าใจว่า “การทำบัตรคำสั่ง” ไม่ใช่งานประกอบเล็กน้อย แต่เป็น งานเขียนโปรแกรม ที่อาจทำได้ดีหรือแย่

1 ความคิดเห็น

 
GN⁺ 2024-12-17
ความคิดเห็นบน Hacker News
  • เครื่องหมายที่แท้จริงของโปรแกรมที่ไม่ใช่เรื่องเล็กน้อยคือ มันไม่ทำงานในการลองครั้งแรก
    น่าทึ่งที่หลังจาก Babbage ท้อแท้เพราะเทคโนโลยีการผลิตจำนวนมากที่มีความแม่นยำสำหรับสร้างเครื่องจักรง่าย ๆ ยังไม่มี เขากลับออกแบบระบบใหม่ที่ซับซ้อนขึ้นอีกหนึ่งหลัก และถึงกับไปอิตาลีเพื่อหา能力การผลิตที่ก้าวหน้ากว่า

    • ผมเคยมีพนักงานแบบนั้นคนหนึ่ง
      พอพยายามทำอะไรแล้วติดขัด เขาจะเริ่มจากสร้างเครื่องมือของตัวเองก่อน ครั้งหนึ่งถึงขั้นทำ ฟอนต์ของตัวเอง เพราะไม่ชอบฟอนต์ในตัวที่ขนาดพอยต์เล็กมาก ๆ
      เขาเป็นวิศวกรที่เก่งที่สุดเท่าที่ผมรู้จัก แต่ต้องคอยจับตาไม่ให้ไถลลงโพรงกระต่ายไปเรื่อย ๆ
    • ให้ +1 กับประวัติของ Babbage/Lovelace แต่ถึงข้อเท็จจริงทั้งสองอย่างจะจริงแยกกัน ก็ยากที่จะมองว่า Babbage เลือก “เส้นทางที่ดีที่สุด” คือระบบที่ซับซ้อนขึ้นและการไปอิตาลี เพราะขาดงานกลึง/การผลิตความแม่นยำสูง
      Tim Robinson ก็เคยบอกว่า “ถ้า Meccano ในทศวรรษ 1920 มีอยู่เมื่อ 100 ปีก่อน Babbage คงประสบความสำเร็จอย่างสมบูรณ์” และผมมองว่าเขาใกล้เคียงกับคนสายซอฟต์แวร์ที่ถูกโยนไปอยู่กับฮาร์ดแวร์ เพราะไอเดียของเขาล้ำหน้ากว่าสิ่งที่ทำได้จริงในเวลานั้น
      นอกจากจะขาดเซนส์ด้านธุรกิจและการวางแผนโครงการจนลดขอบเขตหรือยอมทิ้งความแม่นยำ 10 หลักไม่ได้แล้ว เขายังคิดไอเดียที่ดีกว่าออกมาเรื่อย ๆ แล้วไล่ตามมันจนตกลงโพรงกระต่าย และการได้รับรางวัลหลายรางวัลตั้งแต่อายุยังน้อยเพียงจากข้อเสนอ Difference Engine ก็คงทำให้ยากจะยอมแพ้แม้ผ่านไปหลายสิบปี
      อีกแกนใหญ่ของโศกนาฏกรรมคือการไปพัวพันกับรัฐบาล ชนชั้นสูงดูแคลนและไม่ไว้ใจรัฐบาล/การเมือง ส่วนชนชั้นล่างก็ไม่ไว้ใจเพราะรัฐบาลแทบไม่เคยช่วยอะไร แต่ Babbage เป็นชนชั้นกลางแบบที่เหมาะจะมีทัศนะรักชาติแบบเชื่อในรัฐบาล จึงดูเหมือนคิดว่าควรมอบสิ่งประดิษฐ์ของตนให้ “ชาติ” และรัฐบาลควรตอบแทนเขา
      เขาทำ Difference Engine ไม่สำเร็จ แต่ไปถามรัฐบาลว่าสามารถใช้ทุนเพิ่มเติมสร้าง Analytical Engine ที่ดีกว่าได้หรือไม่ และรัฐบาลก็ลังเลไม่ตัดสินใจอยู่นาน 20 ปี ต่อให้รัฐบาลเสนอจะคืนสิ่งประดิษฐ์ให้ เขาก็ปฏิเสธ
      อาจเพราะอิทธิพลจากรางวัลหลายรายการ เขาดูเหมือนยึดติดกับอัตลักษณ์ว่าตนเป็น “คนฉลาด” ด้วย มีเกร็ดว่าเขาปฏิเสธข้อเสนอให้ตัดสินรางวัลร่วมกับ Faraday เพราะเห็นว่าตนควรเป็นกรรมการตัดสินเพียงคนเดียว ท่าทีแบบนี้ก็น่าจะทำให้เขาไหลไปสู่ไอเดียอัจฉริยะที่เพ้อฝันมากกว่าการลงมือทำอย่างใช้ได้จริง
      The Thrilling Adventures of Lovelace and Babbage ของ Sydney Padua ดูเป็นหนังสือที่ค้นคว้ามาดีมาก ผมยังอ่านเนื้อหาหลักได้ไม่มาก แต่ได้อ่านภาคผนวกอย่างละเอียด และขอแนะนำ
    • คำกล่าวว่า “โปรแกรมที่ไม่ใช่เรื่องเล็กน้อยจะไม่ทำงานในการลองครั้งแรก” ไม่จริง
  • เป็นบทความที่ยอดเยี่ยมจริง ๆ ช่วงต้นที่อธิบายว่า Lovelace คิดอย่างลึกซึ้งถึงวิธีจัดการการคำนวณให้เป็นกลุ่มที่ทำซ้ำได้ จนประดิษฐ์ ลูป ขึ้นมา และตระหนักว่าการติดตามสถานะเมื่อค่าตัวแปรเปลี่ยนเป็นเรื่องสำคัญ จึงสร้างสัญกรณ์เพื่อแสดงการเปลี่ยนแปลงนั้น เป็นส่วนที่น่าประทับใจ
    ในฐานะโปรแกรมเมอร์ น่าทึ่งมากว่าสิ่งที่ Lovelace ทำคล้ายกับประสบการณ์การเขียนซอฟต์แวร์ในปัจจุบันแค่ไหน และคำอธิบายว่าเธอออกแบบมันเพื่อคำนวณจำนวน Bernoulli ก็ละเอียดพอให้เข้าใจว่าเธอทำอะไร
    ถ้าเธอยังมีชีวิตอยู่ตอนนี้ ผมนึกภาพว่าเธอน่าจะกำลังง่วนแก้ปัญหาอะไรสักอย่างด้วย Rust อยู่ปลายโถงทางเดิน และน่าจะชอบภาษาที่มี static type อย่างแรง

    • ไม่ว่า Ada ควรได้รับการยอมรับในฐานะผู้บุกเบิกเทคนิคการเขียนโปรแกรมมากแค่ไหน สิ่งที่เด่นที่สุดเสมอคือความสามารถในการมองเห็น ภาพใหญ่ของการคำนวณ
      ประเด็นสำคัญคือเธอมองว่า Analytical Engine ไม่ได้ทำงานได้แค่กับตัวเลข แต่ยังทำงานกับสิ่งอื่นที่แสดงความสัมพันธ์ได้ในรูปวิทยาศาสตร์ของการดำเนินการเชิงนามธรรม เช่น ถ้าความสัมพันธ์พื้นฐานของเสียงประสานและการแต่งเพลงถูกแสดงในลักษณะนั้น ก็จะสามารถสร้างดนตรีที่ซับซ้อนและยาวเพียงใดก็ได้อย่างประณีต
      การที่ในปี 1842 ซึ่งก่อนคอมพิวเตอร์ที่ตั้งโปรแกรมได้จริงจะเกิดขึ้นถึงหนึ่งศตวรรษ เธอคิดเรื่องนี้ได้จากแค่คำอธิบายต้นแบบคอมพิวเตอร์เชิงกล ถือเป็นการแฮ็กที่ยอดเยี่ยมมาก
    • สัญกรณ์สำหรับติดตามสถานะเมื่อค่าตัวแปรเปลี่ยนดูคล้ายกับ รูปแบบการกำหนดค่าแบบสถิตครั้งเดียว มาก จึงสะดุดตาเป็นพิเศษ
      https://en.wikipedia.org/wiki/Static_single-assignment_form#Benefits
      แม้ในปัจจุบันก็ยังใกล้เคียงกับเทคนิคล่าสุด แต่เธอมีมันอยู่แล้วเมื่อ 180 ปีก่อน
  • ส่วนที่น่าสนใจคือ Paul Allen และ Bill Gates สร้าง อินเทอร์พรีเตอร์ BASIC สำหรับ Altair และทดสอบบนคอมพิวเตอร์ Harvard ด้วยอีมูเลเตอร์ที่ทำขึ้นจากสเปก Intel 8080 เท่านั้น โดยไม่มี Altair จริง และเมื่อรันครั้งแรกต่อหน้า Altair จริง มันก็ทำงานได้ถูกต้อง
    ถ้าอย่างนั้น ผมว่าฮีโร่ที่ซ่อนอยู่จริง ๆ ตรงนี้น่าจะเป็น วิศวกรของ Intel ที่เขียนสเปกได้แม่นยำพอให้ซอฟต์แวร์ที่รันบนอีมูเลเตอร์ซึ่งทำจากสเปกอย่างเดียว ไปรันบนฮาร์ดแวร์จริงได้อย่างไร้ปัญหา

    • ในปี 1976 งานเขียนโปรแกรมเชิงพาณิชย์งานแรกของผมคือการดัดแปลง อีมูเลเตอร์ 8008 ที่เขียนด้วย Fortran ให้ทำงานเป็นอีมูเลเตอร์ 8080 บนมินิคอมพิวเตอร์ Data General
      งานนี้ทำเพื่อให้โปรแกรมเมอร์อีกคนที่เขียนเฟิร์มแวร์ 8080 สำหรับพล็อตเตอร์สามารถดีบักโค้ดได้ และผมจำได้ว่าซอร์สของอีมูเลเตอร์นั้นมาจากสิ่งที่ชื่อ INTERP/8 8008 ของ Intel จากบทความออนไลน์ ดูเหมือน Allen และ Gates ก็ใช้มันเหมือนกัน
  • ผมคิดว่าส่วนที่เจ๋งที่สุดคืองานจริงที่อยู่ใน “notes” ซึ่งเธอแนบไว้กับงานแปล
    อ้างอิง: https://upload.wikimedia.org/wikipedia/commons/c/cf/Diagram_for_the_computation_of_Bernoulli_numbers.jpg
    และ https://en.wikipedia.org/wiki/Note_G
    บทความยังอ้างถึงแหล่งนี้ที่แปลงงานของเธอเป็น Python ด้วย: https://enigmaticcode.wordpress.com/tag/bernoulli-numbers/

    • ครึ่งหนึ่งของบทความพูดถึง Note A และ Note G
  • เมื่อเห็นตอนที่บอกว่าโปรแกรมของ Lovelace ที่แปลงเป็น C นั้นดูไม่ได้แปลกตาเท่าไรนัก ยกเว้นแค่มีตัวแปรชื่อไม่ช่วยอะไรเต็มไปหมด ผู้เขียนคงไม่เคยเจอเพื่อนร่วมงานของผมแน่ ๆ

    • ทำให้นึกถึงตอนเรียนวิชาโปรแกรมมิงสมัยมัธยม พาร์ตเนอร์โปรเจกต์ของผมตั้งชื่อตัวแปรด้วยคำหยาบและลามกที่สุดเท่าที่นึกออก
      ผมก็ไม่ได้หัวอนุรักษ์อะไรนักหรอก แต่แน่นอนว่าเขาจำไม่ได้ทุกครั้งว่า “butts” เป็นตัวแปรไว้ทำอะไร และสุดท้ายก็ไม่เข้าใจด้วยว่าทำไมถึงสับสนอยู่เรื่อยเพราะโค้ดของตัวเอง
    • หรือไม่ผู้เขียนก็คงไม่เคยทำงานกับนักคณิตศาสตร์ นักฟิสิกส์ หรือวิศวกรที่เขียนโปรแกรม พอเห็นประโยคนั้นปุ๊บ ผมคิดเลยว่า “นี่มัน quant แบบคลาสสิก”
      พ่อของผมเป็นวิศวกรเคมี เรียนเขียนโปรแกรมด้วย FORTRAN ซึ่งสมัยนั้นชื่อตัวแปรต้องเป็นตัวอักษร 1 ตัวและตัวเลขได้มากสุด 2 หลัก ภายหลังเขาเรียน Basic แต่โค้ดก็ยังเป็น FORTRAN ในหัวอยู่ดี เลยยังติดนิสัยนั้น
      ตอนแรกผมนึกว่ามีพ่อคนเดียวที่เป็นแบบนั้น แต่หลังจากนั้นนานมาก ตอนทำงานที่ Wall St และได้ร่วมงานกับพวก quant ที่คัดลอกโค้ด Numerical Recipes มาใช้ ก็เห็นภาพแบบเดียวกันเป๊ะใน C
  • เมื่อดูจากที่ Menabrea มอง Analytical Engine เป็นหลักว่าเป็นเครื่องมือสำหรับทำให้ “การคำนวณที่ยาวและแห้งแล้ง” เป็นอัตโนมัติ เพื่อให้นักวิทยาศาสตร์ชั้นยอดเอาพลังทางปัญญาไปใช้กับการคิดระดับสูงกว่าได้ ก็น่าสนใจว่า วาทกรรมเรื่องระบบอัตโนมัติ นั้นยืนยาวแค่ไหน
    ทุกวันนี้เราก็พูดแบบเดียวกันเกี่ยวกับ LLM

    • ผมคิดว่าแก่นสำคัญที่ทำให้คอมพิวเตอร์ในฐานะเครื่องมือต่างจากอุปกรณ์บริโภค ก็คือการทำให้ “การคำนวณที่ยาวและแห้งแล้ง” เป็น อัตโนมัติ นี่แหละ
  • สงสัยว่ามีใครสร้าง virtual machine สำหรับ ชุดคำสั่ง ของ Babbage แล้วลองรันโปรแกรมของ Ada หรือยัง

    • John Walker สร้าง virtual machine สำหรับชุดคำสั่งของ Babbage ไว้ และมีเว็บอีมูเลเตอร์ด้วย: https://fourmilab.ch/babbage/emulator.html
      แต่ดูเหมือนจะไม่มีโปรแกรมของ Ada ใส่มาเป็นตัวอย่าง คงต้องป้อนเอง
      เรื่องน่าสนุกคือ โปรเจกต์วิชาคอมไพเลอร์ของผมคือทำคอมไพเลอร์ C ที่ target อีมูเลเตอร์ตัวนี้: https://github.com/Christopher-Chianelli/ccpa ระวังไว้ว่าโค้ดแย่มาก
    • ไม่ใช่ virtual machine ซะทีเดียว แต่เป็นการอีมูเลตโปรแกรมของเธอ
      https://github.com/MarquisdeGeek/Ada-Origins
    • มีบล็อกซีรีส์ที่แปลโปรแกรมของเธอเป็น C แบบตรง ๆ แล้วรันบนคอมพิวเตอร์สมัยใหม่
      https://pairdebuggingwithlovelace.hashnode.dev/
  • เคยมีการถกกันแล้วในตอนที่บทความนี้ถูกโพสต์ครั้งนั้น
    What Did Ada Lovelace’s Program Actually Do? - https://news.ycombinator.com/item?id=17797003 - ส.ค. 2018, 52 ความคิดเห็น

  • ออกนอกเรื่องนิดหน่อย แต่สงสัยว่าคนสมัยนั้นเรียกเธอว่าอะไรกัน
    ชื่อของเธอคือ Augusta Ada King และเป็นเคาน์เตสแห่ง Lovelace เลยสงสัยว่าสมัยนั้นก็มีการย่อบรรดาศักดิ์มาเรียกเหมือนเป็นนามสกุลกันทั่วไปหรือเปล่า หรือเพิ่งมาเรียกแบบนั้นในยุคหลัง

    • ในกรณีของเอิร์ลแห่ง Lovelace ผู้ถือบรรดาศักดิ์ มักมีธรรมเนียมเรียกด้วยชื่อพื้นที่เพียงอย่างเดียว
      หลังจาก William King-Noel ได้เป็น Earl of Lovelace เขาก็ถูกเรียกว่า “Lovelace” ส่วนเธอในวงสังคมน่าจะถูกเรียกว่า “Lady Lovelace” และในบริบททางการเรียกว่า “Countess of Lovelace”
  • เป็นบทความที่ดีมาก เป็นคำอธิบายที่ชัดเจนที่สุดเท่าที่เคยอ่านมาว่า Ada ล้ำสมัย ในความหมายใด และทำไมเธอจึงสมควรได้รับการยอมรับ