Ada Lovelace'ın programının gerçekte ne yaptığı (2018)
(twobithistory.org)- 1843'te Ada Lovelace, henüz tamamlanmamış Analytical Engine için Bernoulli sayıları hesaplama prosedürünü yayımladı ve bu yüzden “ilk bilgisayar programı” tartışmasının merkezine yerleşti
- Yayımlanan tablo, Bernoulli dizisinin tamamını ele alma yöntemindeki bir adımı gösteriyor; Lovelace'ın B7 dediği değer, modern gösterimde sekizinci Bernoulli sayısına karşılık geliyor
- Note G'deki program, 25 işlem, iç içe döngüler ve değişken değerlerini izleme gösterimi içererek Menabrea'nın 11 işlemli, döngüsüz örneğinden çok daha gelişmişti
- C'ye çeviri sürecinde, özgün tablodaki dördüncü işlem olan
v5 / v4ifadesinin aslındav4 / v5olması gerektiği ortaya çıktı; bu muhtemelen bir dizgi hatasıydı, ancak hesaplama tarihinin en eski bug'ı olarak görülebilir - Lovelace'ın ayırt edici yönü, “ilk programcı” unvanından çok, kart hazırlamayı yalnızca cebirsel ifadelerin çevirisi değil, iyi ya da kötü yapılabilecek bir programlama işi olarak anlamış olmasıydı
1843'te yazılmış ama çalıştırılamamış program
- Microsoft'un kuruluş hikâyesinden farklı olarak, Ada Lovelace'ın programı gerçek bir makinede çalıştırılma şansı bulamadı
- Paul Allen ve Bill Gates, ortada Altair yokken Intel 8080 belirtimine dayalı bir emülatörde BASIC yorumlayıcısını test etmiş ve onu gerçek Altair'de de çalıştırmıştı
- Lovelace da yalnızca açıklaması bulunan bir bilgisayar için program yazdı, ancak Analytical Engine inşa edilmediği için onu çalıştıramadı
- Lovelace'ın programı sıkça dünyanın ilk bilgisayar programı olarak anılır, ancak bu konumu hâlâ tartışmalıdır
- Lovelace'ın katkısının kapsamı ve değeri etrafındaki tartışma, Walter Isaacson'ın bunu “minor academic specialty” diye adlandırmasına yetecek kadar sürdü
- Burada asıl önemli soru, kişi değerlendirmesinden çok, 1843'te yazılan programın çalışacak şekilde nasıl tasarlandığıdır
- Program, basit bir formül listesinin ötesine geçiyordu
- Tekrarlanabilir işlem grupları kurarak loop'a karşılık gelen bir yapı kullanıyordu
- Değişken durumlarındaki değişimi izlemek için bir gösterim sunuyordu
- Bugünkü yazılım geliştirme deneyimine benzeyen yönleri vardı
Bernoulli sayıları ve kuvvet toplamı problemi
- Lovelace'ın programı Bernoulli sayılarını hesaplamak üzere tasarlanmıştı
- Bernoulli sayılarının arka planında, kuvvet toplamlarını hesaplamaya dair eski bir matematik problemi vardır
- Pisagorcular,
1 + 2 + 3 + ... + ntoplamını doğrudan toplamak yerine hesaplama yöntemini aradı ve iki üçgeni bir dikdörtgen oluşturacak şekilde eşleştirerekn(n+1)/2formülünü elde etti - Arşimet,
1² + 2² + 3² + ... + n²biçimindeki toplamlarla ilgilendi ve geometrik olarak yorumlanabilen bir çözüm bıraktı - Aryabhata, 499 yılında küpler toplamı formülünü de içeren Aryabhatiya'yı yayımladı
- Pisagorcular,
- Daha genel problem,
1^k + 2^k + ... + n^kbiçimindeki toplamların nasıl bulunacağıydı- Johann Faulhaber, 1631'de 17. kuvvete kadar formülleri hesaplayıp yayımladı, ancak genel çözümü vermedi
- Blaise Pascal, 1665'te genel bir yöntem geliştirdi, fakat bunun için önce daha düşük tüm kuvvet toplamlarının nasıl hesaplandığını bilmek gerekiyordu
- Jakob Bernoulli daha kullanışlı bir genel çözüm bıraktı
- Pascal üçgenini kullanarak polinom katsayılarındaki deseni kavradı
- Katsayıların bir kısmı Pascal üçgeninden, kalanı ise katsayı toplamının her zaman 1 olması özelliğinden çıkarıldı
- Bu ikinci katsayı çarpanı, Bernoulli sayıları olarak bilinen diziye dönüştü
- Bernoulli'nin keşfi, keyfi bir kuvvet toplamını hesaplamayı bir anda kolay bir probleme dönüştürmedi
k'inci kuvvet toplamını hesaplamak içink'inciye kadarki Bernoulli sayılarını bilmek gerekiyordu- Her Bernoulli sayısı, önceki Bernoulli sayılarına dayanarak hesaplanıyordu
- Yine de her kuvvet toplamı formülünü tek tek türetmektense uzun bir Bernoulli dizisini hesaplamak çok daha kolaydı
Babbage'ın iki hesap makinesi
- Charles Babbage iki tür mekanik hesap makinesi tasarladı
- İlki Difference Engine idi
- İkincisi ise bugün mekanik bilgisayar olarak bilinen Analytical Engine idi
- Difference Engine bir bilgisayar değil, yalnızca toplama ve çıkarma yapan bir makineydi
- Babbage, o dönemde logaritma tablolarında çok hata olmasından rahatsızdı ve bu tabloları mekanik olarak üretmek istiyordu
- Gaspard de Prony'nin bölünmüş farklar yöntemi, logaritma tablosu oluşturma sürecini yalnızca toplama ve çıkarma gerektiren küçük adımlara ayırıyordu
- Polinomlar, logaritma ve trigonometrik fonksiyonların yaklaşımında kullanılabiliyordu
- Difference Engine, fark tablosunun her sütununu fiziksel bir dişli sütununa karşılık getiriyordu
- Her dişli, ondalık sistemde bir basamağa karşılık geliyordu ve bir sütunun tamamı tek bir ondalık sayıyı temsil ediyordu
- 8 sütuna sahipti ve bu sayede 7. dereceye kadar polinomların tablosunu oluşturabiliyordu
- İnsan, başlangıç değerlerini ayarladıktan sonra kolu çeviriyor ve sabit farkların bir sonraki sütuna aktarılmasını sağlıyordu
- Babbage, Difference Engine'in bir bölümünü yapıp gösterdi ama makinenin tamamını bitiremedi
- Gerekli sayıdaki dişliyi yeterli hassasiyetle üretebilecek bir imalatçı bulamadı
- Çalışan bir Difference Engine ancak hassas işlemenin mümkün hâle geldiği 1990'larda yapılabildi
- Analytical Engine ise çok daha güçlü ve esnek bir makine olarak tasarlandı
- Difference Engine'deki gibi dişli sütunları kullanacaktı, ancak yüzlerce hatta daha fazla sütuna sahip olması planlanıyordu
- Jacquard Loom gibi delikli kartlarla programlanabilecekti
- Yalnızca toplama-çıkarma değil, çarpma ve bölme de yapabilecekti
- “mill” denilen bölüm işleme uygun biçimde yeniden düzenlenecek, saklama sütunlarından işlenen sayıları okuyup sonucu başka sütunlara yazacaktı
Menabrea makalesi ve Lovelace'ın notları
- Babbage, Torino'da İtalyan mühendis ve daha sonra başbakan olacak Luigi Menabrea ile tanıştı; Menabrea 1842'de Analytical Engine'in potansiyelini açıklayan Fransızca bir makale yayımladı
- Lovelace, Menabrea'nın makalesini 1843'te İngilizceye çevirdi
- Lovelace, Babbage ile ilk kez 1833'te, 17 yaşındayken tanışmış ve onun Difference Engine'inden etkilenmişti
- Küçük yaşlardan itibaren yoğun matematik eğitimi aldı; evlenip üç çocuk sahibi olduktan sonra da Augustus de Morgan'dan matematik öğrenmeye devam etti
- Menabrea'nın makalesi, Difference Engine'in çalışma biçimini ve Analytical Engine'in üstünlüğünü kısaca ele alıyordu
- Analytical Engine, iki 20 basamaklı sayının çarpımını 3 dakika içinde bulabilen bir makine olarak tanıtılıyordu
- Doğrusal denklem sistemleri ile iki binomun çarpım açılımını örnek veriyor ve “diagrams of development” kullanıyordu
- Bu tablolar da Lovelace'ın programıyla aynı anlamda programdı, ancak dallanma ya da döngü içermeyen basit örneklerdi
- Lovelace'ın çevirisine, özgün metinden daha uzun notlar eklendi ve asıl katkı burada ortaya çıktı
- Note A, Analytical Engine'in herhangi bir matematiksel işlemi yapabilen bir makine olma ihtimalini uzun uzun ele alıyordu
- Yalnızca sayılar üzerinde değil, temel karşılıklı ilişkileri işlemlerin soyut bilimiyle ifade edilebilen şeyler üzerinde de çalışabileceğini öne sürüyordu
- Örneğin bir gün müzik besteleyebileceğini bile söylüyordu
- Note G iki nedenle ünlüdür
- Lovelace'ın, Analytical Engine için “düşünüyor” denemeyeceği yönündeki argümanı daha sonra Alan Turing tarafından “Lady Lovelace's Objection” olarak adlandırıldı
- Aynı zamanda makinenin çok karmaşık problemleri ele alabileceğini göstermek için Bernoulli sayılarını hesaplayan bir program da içeriyordu
Note G programının gerçek yapısı
- Lovelace'ın tam tablosu, genişletilmiş bir “diagram of development” biçimindedir; özgün görsel burada görülebilir
- Program, yaygın matematiksel sembollerle belirtilmiş bir işlem listesine daha yakındır
- Babbage ya da Lovelace'ın, Analytical Engine için bir opcode kümesi oluşturma aşamasına kadar ilerlemediği anlaşılıyor
- Lovelace, Bernoulli dizisinin tamamını belli bir sınıra kadar hesaplama yöntemini anlattı, ancak tabloda verilen program bunun yalnızca bir adımını örnekliyordu
- Hesaplanan değer, Lovelace'ın B7 dediği şeydi
- Modern matematik gösteriminde bu, sekizinci Bernoulli sayısıdır
- Denklem
B7 = -1(A0 + B1A1 + B3A3 + B5A5)biçimindedir
- Bu denklemdeki her terim, belirli bir kuvvet toplamı polinomunun katsayısını temsil eder
- Söz konusu kuvvet 8'dir ve sekizinci Bernoulli sayısı ilk kez pozitif tam sayıların 8. kuvvetleri toplamı formülünde ortaya çıkar
B1ileB7, Lovelace'ın indekslemesine göre farklı Bernoulli sayılarıdırA0ileA5, Bernoulli'nin Pascal üçgeniyle hesaplayabildiği katsayı çarpanlarıdır- Lovelace'ın programı
n = 4kullanır
- C çevirisi bir gist olarak sunulmuştur
- Önce
A0veB1A1hesaplanır - Ardından iki kez çalışan bir döngüye girilerek
B3A3veB5A5hesaplanır - Her çarpım hesaplandıktan sonra önceki çarpımlarla toplanır ve sonunda toplam elde edilir
- Önce
Döngüler, değişken durumu ve eski bir bug
- C çevirisi, Lovelace programının ne kadar ileri görüşlü olduğunu iyi gösterir
- Özgün programda tam anlamıyla bir
whiledöngüsü yoktu, ancak Lovelace işlem grupları oluşturup notlarla bunların ne zaman tekrarlanacağını belirtiyordu - C çevirisinde iki
whiledöngüsü vardır ve biri diğerinin içine gömülüdür - Hem özgün metindeki hem de C çevirisindeki
v10, her tekrar adımında azalan bir sayaç değişkeni gibi davranır
- Özgün programda tam anlamıyla bir
- Lovelace'ın tablosu, Menabrea'nın tablolarına kıyasla durum değişimlerini izlemeyi daha kolaylaştırır
- “Indication of change in the value on any Variable” adlı bir sütun vardır
- Her değişkene üst simge indeks eklenerek program çalışırken o değişkenin tuttuğu ardışık değerler gösterilir
- Üst simge 2, program başladıktan sonra o değişkene atanan ikinci değeri ifade eder
- C'ye aktarılıp çalıştırıldığında başta yanlış sonuç çıktı ve neden çeviri kodu değil, özgün tablonun kendisiydi
- Lovelace'ın “diagram of development” tablosunda dördüncü işlem
v5 / v4olarak yazılmıştır - Doğru sıra
v4 / v5olmalıdır - Bu, Lovelace'ın yazdığı programdaki bir hata değil, büyük olasılıkla bir dizgi hatasıydı
- Lovelace'ın “diagram of development” tablosunda dördüncü işlem
- Jim Randall da Lovelace programını Python'a çevirdi ve aynı bölme bug'ına ek olarak iki başka soruna daha dikkat çekti
- Özgün programdaki küçük bug, Lovelace'ın yalnızca bir gösterim değil, gerçek bir programa çok yakın bir şey yazmaya çalıştığı yorumuyla da örtüşür
“İlk programcı” unvanının sınırları
- Lovelace'ın “ilk program”ı yazdığını ya da yayımladığını söylemek bütünüyle doğru değildir
- Menabrea, Lovelace'ın çevirisinden bir yıl önce “diagrams of development” yayımlamıştı
- Babbage da yayımlanmamış 20'den fazla program yazmıştı
- Neye program deneceğine bağlı olarak burada tartışma payı vardır
- Lovelace'ın yayımladığı program, ondan önce yayımlananlardan çok daha ilerideydi
- Menabrea'nın verdiği en uzun program 11 işlemdi
- Menabrea'nın örneklerinde döngü ya da dallanma yoktu
- Lovelace'ın programı 25 işlem ve iç içe döngüler, dolayısıyla bir dallanma yapısı içeriyordu
- Menabrea, makine tamamlandığında zorluğun kart hazırlamaya indirgeneceğini ve kartların yalnızca cebirsel ifadelerin çevirisi olduğu için basit bir gösterimle bu işin uygulayıcılara kolayca bırakılabileceğini düşünüyordu
- Babbage ve Menabrea, Analytical Engine'i esas olarak ilgilendikleri matematiksel hesaplama problemlerine uygulamaya odaklandı
- Lovelace ise Analytical Engine'in, Babbage ya da Menabrea'nın hayal ettiğinden çok daha fazlasını yapabileceğini düşündü ve “kart hazırlama”nın basit bir yan iş değil, iyi ya da kötü yapılabilecek bir programlama görevi olduğunu kavradı
1 yorum
Hacker News yorumları
Önemsiz olmayan bir programın gerçek işareti, ilk denemede çalışmamasıdır
Babbage’ın basit bir makine yapmak için gereken hassas seri üretim teknolojisi henüz olmadığı için hayal kırıklığına uğradıktan sonra, bir basamak daha karmaşık yeni bir sistem tasarlayıp daha gelişmiş imalat kapasitesi aramak için İtalya’ya kadar gitmesi şaşırtıcı
Bir şey yapmaya çalışıp tıkanınca önce kendi aracını yapardı; bir keresinde de çok küçük punto boyutlarında yerleşik yazı tipini beğenmediği için kendi yazı tipini bizzat yapmıştı
Tanıdığım en iyi mühendisti, ama tavşan deliğine düşmemesi için sürekli göz kulak olmak gerekiyordu
Tim Robinson da “1920’lerin Meccano’su 100 yıl önce var olsaydı Babbage tamamen başarılı olurdu” demişti; bence o, gerçekçi olarak mümkün olanın ötesindeki fikirleri yüzünden donanımın ortasına atılmış bir yazılım insanına daha yakındı
İş ve proje planlama sezgisinin zayıf olup kapsamı küçültememesi ya da 10 basamaklı hassasiyetten vazgeçememesinin yanı sıra, sürekli daha iyi fikirler bulup onların peşinden giderek tavşan deliğine düşüyordu; genç yaşta yalnızca Difference Engine önerisiyle çeşitli ödüller aldığı için, onlarca yıl sonra bile vazgeçmesi zor olmuş olmalı
Ayrıca hükümetle iç içe geçmesi trajedinin büyük eksenlerinden biri. Aristokratlar hükümeti ve siyaseti küçümseyip güvenmezdi, alt sınıflar da hükümetten pek fayda görmedikleri için güvenmezdi; ama Babbage, vatansever bir hükümet anlayışına sahip olmaya tam uygun bir orta sınıf mensubu olduğundan, icadını “ülkeye” adadığını ve hükümetin bunu ödüllendirmesi gerektiğini düşünmüş gibi görünüyor
Difference Engine’i tamamlayamadı, ama daha iyi olan Analytical Engine’i ek finansmanla gerçekleştirebileceğini söyleyerek hükümete sordu; hükümet de 20 yıl boyunca kararsız kaldı. Hükümet icadı geri vereceğini söylediğinde bile reddetti
Birçok ödülün etkisiyle, kendisini “zeki insan” olarak tanımlayan kimliğine de takılıp kalmış gibi; Faraday ile birlikte ödül değerlendirmesi yapma teklifini, tek jüri üyesi kendisi olmalı diyerek reddettiğine dair bir anekdot var. Bu tavrın da onu pratik uygulamadan çok temelsiz dâhi tipi fikirlere sürüklemiş olma ihtimali yüksek
Sydney Padua’nın The Thrilling Adventures of Lovelace and Babbage kitabı çok iyi araştırılmış görünüyor; ana metnini çok okuyamadım ama ekleri ayrıntılı okudum ve tavsiye edebilirim
Gerçekten harika bir yazı. Girişte Lovelace’ın hesaplamaları tekrarlanabilir gruplar hâlinde nasıl düzenleyeceğini derinlemesine düşünerek döngüyü icat etmesi ve değişkenler değiştiğinde durumu izlemenin önemli olduğunu fark edip bu değişimi gösterecek bir notasyon oluşturması etkileyici
Bir programcı olarak Lovelace’ın yaptığı işin bugünkü yazılım yazma deneyimine ne kadar benzediği şaşırtıcı; Bernoulli sayılarını hesaplamak için tasarladığı açıklama da onun ne yaptığını anlamaya yetecek kadar ayrıntılı
Bugün yaşıyor olsaydı koridorun sonunda Rust ile bir sorunla boğuşuyor olurdu diye düşünüyorum; statik tipli dilleri de güçlü biçimde tercih ederdi gibi geliyor
Analytical Engine’in yalnızca sayılara değil, soyut işlem biliminin ilişkileriyle ifade edilebilen başka nesnelere de uygulanabileceğini; örneğin armoni ve beste yapmanın temel ilişkileri bu şekilde ifade edilirse, her karmaşıklıkta ve uzunlukta incelikli müzik üretebileceğini görmesi asıl nokta
Gerçek programlanabilir bilgisayarların ortaya çıkmasından bir yüzyıl önce, 1842’de, mekanik bir bilgisayar prototipinin açıklamasından yola çıkarak bunu düşünmüş olması olağanüstü bir hack
https://en.wikipedia.org/wiki/Static_single-assignment_form#Benefits
Bugün bile son teknolojiye yakın bir teknik; o ise bunu 180 yıl önce zaten kullanıyormuş
Paul Allen ve Bill Gates’in Altair için BASIC yorumlayıcısını, gerçek bir Altair olmadan, Harvard bilgisayarında yalnızca Intel 8080 spesifikasyonlarına bakarak yaptıkları bir emülatörle test etmeleri ve gerçek Altair’in başında ilk çalıştırdıklarında düzgün çalışması ilginç
O hâlde burada asıl gizli kahramanlar, yalnızca spesifikasyonlara bakılarak yapılmış bir emülatörde çalışan yazılımın gerçek donanımda da sorunsuz çalışacağı kadar doğru bir teknik şartname hazırlayan Intel mühendisleri değil mi diye düşünüyorum
Plotter için 8080 firmware’i yazan başka bir programcının kodu debug edebilmesini sağlamak içindi; o emülatörün kaynağının Intel’in INTERP/8 8008 adlı şeyinden geldiğini hatırlıyorum. İnternetteki yazılara bakılırsa Allen ve Gates de onu kullanmış gibi
En harika kısmın, çevirisine eklediği “notes” içindeki gerçek çalışma olduğunu düşünüyorum
Referans: https://upload.wikimedia.org/wikipedia/commons/c/cf/Diagram_for_the_computation_of_Bernoulli_numbers.jpg
Ve https://en.wikipedia.org/wiki/Note_G
Yazı, onun çalışmasını Python’a aktaran şu kaynağa da atıf yapıyor: https://enigmaticcode.wordpress.com/tag/bernoulli-numbers/
Lovelace’ın programının C’ye aktarılmış hâlinin, işe yaramaz isimli değişkenlerle dolu olması dışında o kadar da yabancı görünmediği kısmı okuyunca, yazarın belli ki iş arkadaşlarımla hiç tanışmadığını düşündüm
Özellikle tutucu biri değildim ama elbette “butts” değişkeninin ne için olduğunu her seferinde hatırlayamıyor, kendi kodu yüzünden neden sürekli kafasının karıştığını da bir türlü anlayamıyordu
Kimya mühendisi olan babam programlamayı FORTRAN ile öğrenmişti; o dönemde değişken adlarının 1 harf ve en fazla 2 rakam olması gerekiyordu. Daha sonra Basic öğrendi ama kodu zihinsel olarak hâlâ FORTRAN’dı, o yüzden bu alışkanlık devam ediyordu
Başta sadece babamın böyle olduğunu sanıyordum; çok daha sonra Wall St’de çalışırken Numerical Recipes kodunu kopyalayıp kullanan quant’larla çalışınca C’de de tam olarak aynı manzarayı gördüm
Menabrea’nın Analytical Engine’i esas olarak “uzun ve kuru hesaplamaları” otomatikleştirip seçkin bilim insanlarının zihinsel kapasitesini daha üst düzey düşünmeye ayırmasını sağlayan bir araç olarak görmesine bakınca, otomasyon söyleminin ne kadar uzun ömürlü olduğu ilginç
Bugün LLM’ler hakkında da aynen aynı şeyler söyleniyor
Babbage’ın komut kümesi için bir sanal makine yapıp Ada’nın programını çalıştıran biri var mı merak ediyorum
Ancak Ada’nın programı örnekler arasında yok gibi, bu yüzden elle girmek gerekebilir
İlginç bir bilgi olarak, derleyici dersi projem bu emülatörü hedefleyen bir C derleyicisi yapmaktı: https://github.com/Christopher-Chianelli/ccpa kodun berbat olduğuna dikkat
https://github.com/MarquisdeGeek/Ada-Origins
https://pairdebuggingwithlovelace.hashnode.dev/
Bu yazı yayımlandığı dönemde de tartışılmıştı
What Did Ada Lovelace’s Program Actually Do? - https://news.ycombinator.com/item?id=17797003 - Ağustos 2018, 52 yorum
O zamanki 35 yorumluk tartışma burada: https://news.ycombinator.com/item?id=10709730
Biraz konu dışı ama o dönemde insanların ona ne dediğini merak ettim
Adı Augusta Ada King’di ve Lovelace kontesiydi; o zamanlar unvanı kısaltıp soyadı gibi kullanmak yaygın mıydı, yoksa bu daha yakın zamanda mı böyle anılmaya başlandı merak ediyorum
William King-Noel Earl of Lovelace olduktan sonra “Lovelace” diye anılırdı; o ise sosyal çevrelerde muhtemelen “Lady Lovelace”, resmî bağlamlarda ise “Countess of Lovelace” diye anılıyordu
Güzel yazı. Ada’nın hangi anlamda yenilikçi olduğu ve neden takdiri hak ettiği konusunda şimdiye kadar okuduğum en net açıklamaydı