การทำงานจริงของโปรแกรมของ Ada Lovelace (2018)
(twobithistory.org)- ในปี 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 คนละตัวตามการทำดัชนีของ LovelaceA0ถึงA5คือปัจจัยสัมประสิทธิ์ที่ Bernoulli สามารถคำนวณได้จากสามเหลี่ยมของ Pascal- โปรแกรมของ Lovelace ใช้
n = 4
- ฉบับแปลเป็น C มีให้ดูใน gist
- เริ่มจากคำนวณ
A0และB1A1 - จากนั้นเข้าสู่ลูปที่ทำซ้ำสองครั้งเพื่อคำนวณ
B3A3และB5A5 - หลังคำนวณผลคูณแต่ละตัวแล้วก็นำไปบวกกับผลคูณก่อนหน้า และสุดท้ายได้ผลรวมทั้งหมด
- เริ่มจากคำนวณ
ลูป สถานะตัวแปร และบั๊กเก่าแก่
- ฉบับแปลเป็น C แสดงให้เห็นชัดถึงความมองการณ์ไกลของโปรแกรมของ Lovelace
- แม้โปรแกรมต้นฉบับจะไม่ได้มี
whileloop แบบตรงตัว แต่ Lovelace ก็สร้างกลุ่มการดำเนินการและระบุด้วยคำอธิบายประกอบว่าควรทำซ้ำเมื่อใด - ในฉบับ C มี
whileloop สองตัว โดยตัวหนึ่งซ้อนอยู่ในอีกตัวหนึ่ง v10ทั้งในต้นฉบับและฉบับ C ทำงานคล้าย ตัวแปรนับรอบ ที่ลดค่าลงในแต่ละรอบ
- แม้โปรแกรมต้นฉบับจะไม่ได้มี
- ตารางของ Lovelace ทำให้ติดตามการเปลี่ยนแปลงของสถานะได้ง่ายกว่าตารางของ Menabrea
- มันมีคอลัมน์ชื่อ “Indication of change in the value on any Variable”
- เธอใส่ดัชนียกกำลังให้แต่ละตัวแปรเพื่อแทนค่าที่ตัวแปรนั้นถืออยู่ต่อเนื่องกันระหว่างการรันโปรแกรม
- ดัชนียกกำลัง 2 หมายถึงค่าที่ถูกกำหนดให้ตัวแปรนั้นเป็นครั้งที่สองนับจากเริ่มโปรแกรม
- เมื่อนำไปเขียนเป็น C แล้วรัน ตอนแรกได้ผลลัพธ์ผิด และสาเหตุไม่ได้อยู่ที่โค้ดแปล แต่อยู่ที่ตารางต้นฉบับ
- “diagram of development” ของ Lovelace เขียนการดำเนินการที่สี่เป็น
v5 / v4 - ลำดับที่ถูกต้องควรเป็น
v4 / v5 - นี่อาจไม่ใช่ข้อผิดพลาดในโปรแกรมที่ Lovelace สร้างเอง แต่เป็น ความผิดพลาดจากการเรียงพิมพ์
- “diagram of development” ของ 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 ความคิดเห็น
ความคิดเห็นบน Hacker News
เครื่องหมายที่แท้จริงของโปรแกรมที่ไม่ใช่เรื่องเล็กน้อยคือ มันไม่ทำงานในการลองครั้งแรก
น่าทึ่งที่หลังจาก 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 อย่างแรง
ประเด็นสำคัญคือเธอมองว่า 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 ที่เขียนสเปกได้แม่นยำพอให้ซอฟต์แวร์ที่รันบนอีมูเลเตอร์ซึ่งทำจากสเปกอย่างเดียว ไปรันบนฮาร์ดแวร์จริงได้อย่างไร้ปัญหา
งานนี้ทำเพื่อให้โปรแกรมเมอร์อีกคนที่เขียนเฟิร์มแวร์ 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/
เมื่อเห็นตอนที่บอกว่าโปรแกรมของ Lovelace ที่แปลงเป็น C นั้นดูไม่ได้แปลกตาเท่าไรนัก ยกเว้นแค่มีตัวแปรชื่อไม่ช่วยอะไรเต็มไปหมด ผู้เขียนคงไม่เคยเจอเพื่อนร่วมงานของผมแน่ ๆ
ผมก็ไม่ได้หัวอนุรักษ์อะไรนักหรอก แต่แน่นอนว่าเขาจำไม่ได้ทุกครั้งว่า “butts” เป็นตัวแปรไว้ทำอะไร และสุดท้ายก็ไม่เข้าใจด้วยว่าทำไมถึงสับสนอยู่เรื่อยเพราะโค้ดของตัวเอง
พ่อของผมเป็นวิศวกรเคมี เรียนเขียนโปรแกรมด้วย FORTRAN ซึ่งสมัยนั้นชื่อตัวแปรต้องเป็นตัวอักษร 1 ตัวและตัวเลขได้มากสุด 2 หลัก ภายหลังเขาเรียน Basic แต่โค้ดก็ยังเป็น FORTRAN ในหัวอยู่ดี เลยยังติดนิสัยนั้น
ตอนแรกผมนึกว่ามีพ่อคนเดียวที่เป็นแบบนั้น แต่หลังจากนั้นนานมาก ตอนทำงานที่ Wall St และได้ร่วมงานกับพวก quant ที่คัดลอกโค้ด Numerical Recipes มาใช้ ก็เห็นภาพแบบเดียวกันเป๊ะใน C
เมื่อดูจากที่ Menabrea มอง Analytical Engine เป็นหลักว่าเป็นเครื่องมือสำหรับทำให้ “การคำนวณที่ยาวและแห้งแล้ง” เป็นอัตโนมัติ เพื่อให้นักวิทยาศาสตร์ชั้นยอดเอาพลังทางปัญญาไปใช้กับการคิดระดับสูงกว่าได้ ก็น่าสนใจว่า วาทกรรมเรื่องระบบอัตโนมัติ นั้นยืนยาวแค่ไหน
ทุกวันนี้เราก็พูดแบบเดียวกันเกี่ยวกับ LLM
สงสัยว่ามีใครสร้าง virtual machine สำหรับ ชุดคำสั่ง ของ Babbage แล้วลองรันโปรแกรมของ Ada หรือยัง
แต่ดูเหมือนจะไม่มีโปรแกรมของ Ada ใส่มาเป็นตัวอย่าง คงต้องป้อนเอง
เรื่องน่าสนุกคือ โปรเจกต์วิชาคอมไพเลอร์ของผมคือทำคอมไพเลอร์ C ที่ target อีมูเลเตอร์ตัวนี้: https://github.com/Christopher-Chianelli/ccpa ระวังไว้ว่าโค้ดแย่มาก
https://github.com/MarquisdeGeek/Ada-Origins
https://pairdebuggingwithlovelace.hashnode.dev/
เคยมีการถกกันแล้วในตอนที่บทความนี้ถูกโพสต์ครั้งนั้น
What Did Ada Lovelace’s Program Actually Do? - https://news.ycombinator.com/item?id=17797003 - ส.ค. 2018, 52 ความคิดเห็น
การถกเถียงตอนนั้นที่มี 35 ความคิดเห็นอยู่ที่นี่: https://news.ycombinator.com/item?id=10709730
ออกนอกเรื่องนิดหน่อย แต่สงสัยว่าคนสมัยนั้นเรียกเธอว่าอะไรกัน
ชื่อของเธอคือ Augusta Ada King และเป็นเคาน์เตสแห่ง Lovelace เลยสงสัยว่าสมัยนั้นก็มีการย่อบรรดาศักดิ์มาเรียกเหมือนเป็นนามสกุลกันทั่วไปหรือเปล่า หรือเพิ่งมาเรียกแบบนั้นในยุคหลัง
หลังจาก William King-Noel ได้เป็น Earl of Lovelace เขาก็ถูกเรียกว่า “Lovelace” ส่วนเธอในวงสังคมน่าจะถูกเรียกว่า “Lady Lovelace” และในบริบททางการเรียกว่า “Countess of Lovelace”
เป็นบทความที่ดีมาก เป็นคำอธิบายที่ชัดเจนที่สุดเท่าที่เคยอ่านมาว่า Ada ล้ำสมัย ในความหมายใด และทำไมเธอจึงสมควรได้รับการยอมรับ