← A–Z Röportajları

Smalltalk-80

Bugün, Objective-C’nin öncülü ve modern programlamanın büyük bir bölümünün temeli olan Smalltalk-80’e bakıyoruz. Dilin arkasındaki kişilerden biri olan Alan Kay, yalnızca dilin geliştirilmesine katkı sağlamakla değil, aynı zamanda bir kavram olarak nesne yönelimli programlamanın ortaya konmasıyla ve hatta iPad’e ürkütücü derecede benzeyen bir kişisel bilgisayar kavramının tasarlanmasıyla da anılıyor.

Smalltalk-80, Kay’in Xerox’un Palo Alto Research Centre’ında (günümüzde kısaca PARC olarak biliniyor) çalışırken şekillenmesine yardımcı olduğu birkaç Smalltalk dilinden biriydi. Diller kişisel bilişime odaklanmıştı — Kay’in hâlâ güçlü hisler beslediği bir konu — ve burada, çalışmanın nasıl ortaya çıktığını, modern çağdaki yenilik durumunu ve eğitim sevgisinin neden hâlâ sürdüğünü anlatıyor.

Alan, “nesne yönelimli programlama (OOP)” ifadesini ortaya koymakla anılıyorsunuz. Kavram o dönemde hiç var mıydı?

Bu terimi gerçekten ben uydurdum (ve daha önemli olan mesaj gönderme fikrini yeterince vurgulamadığı için kötü bir seçimdi). Fikrin bir kısmı (birkaç sistemde) mevcuttu. Daha kapsamlı bir temelin, yalnızca mesajlar aracılığıyla iletişim kuran verimli bütün sanal makineleri düşünmeye kadar gidilerek oluşturulabileceğini görebiliyordum. Bu, ölçeklenebilirlik sağlayacak, araştırma topluluğum ARPA-IPTO’nun (ABD Savunma Bakanlığı araştırma tesisindeki Information Processing Techniques Office) büyük ölçekli ağlarla yapmaya başladığı şeyin sanal bir sürümü olacaktı ve ayrıca bazı güçlü “cebirsel” özelliklere (polimorfizm gibi) sahip olacaktı.

Neden Smalltalk-80’de mesajlaşmanın, nesne yönelimli programlamadan daha önemli olduğunu düşünüyorsunuz?

[Marshall] McLuhan, çoğu insanın bugünü yalnızca geçmiş üzerinden deneyimleyebildiğini söylemişti. Bu yüzden “yeni”, “haber”e dönüştürülür. Eğer bu yapılamazsa, çoğu insan için “yeni” reddedilir; başka bir yol yoksa hariç. Aksi halde yeni olan, süzülerek habere indirgenir.

OOP’deki “haber” parçalarından biri, veriyi ("soyut veri türleri" denen şeyler içinde) simüle edebilmenizdir ve bu bazen işe yarar, ancak nesne yönelimli tasarımın özü bu değildir.

C++ çok popülerdi çünkü tanıdık (kötü) bir sözdizimine sahipti ve au courant hissetmek için OOP öğrenmeniz gerekmiyordu.

Gerçek OOP tasarımı, önceki “veri-yapısı-ve-prosedür” tarzından çok farklıdır. Ve Smalltalk’ların hiçbirinin bunun için gerçekten harika olmadığı da doğrudur, her ne kadar bunu düşünmek ve yapmak en azından mümkün olsa da.

“Gerçek OOP tasarımı” sizce hiç başarılabildi mi? Artık tamamen gerekli mi?

Korunan ve değiştirilebilir modüller açısından, yüksek derecede ölçeklenebilir sistemler yapmaya yönelik “gerçek tasarım”ın henüz başarılmadığını ve buna acilen ihtiyaç duyulduğunu düşünüyorum. Ancak Smalltalk, en iyi hâlinde bile yalnızca kısmi bir çözümdü.

Örneğin, 70’lerin sonuna gelindiğinde, neden “itmek” yerine “çekiyor” olmamız gerektiği hakkında makaleler yazıyordum; bu, 60’larda Carl Hewitt’ten sevdiğim bazı örüntü yönelimli şeylere bir dönüş oldu. Fark, “çekme”yi evrensel bir geri çağırma mekanizması ya da “ihtiyaca göre çağırma” türü olarak düşünmemdi.

Bu; ileriye dönük çıkarımdan (Planner ve OPS5’te), yakın zamanda geliştirilen elektronik tablolardan (ki onları gerçekten çok severdim) ve biraz daha sonra Gelernter’in LINDA’yı geliştirmesinden etkilendi. Bunların hepsi, bir modülün işini yapabilmesi için hangi dış kaynaklara ihtiyaç duyduğunu ortama sormanın/söylemenin yollarını sağlıyordu. Bunlar hakkında Eylül 1984 tarihli Scientific American sayısında ve o dönemdeki diğer makalelerde yazdım.

Smalltalk-80 dilinin, sizin katılımınız sırasında tam olarak geliştirilmediğini ya da tamamlanmadığını düşündüğünüz yönleri var mı?

Kontrol alanının önemli bir kısmı, özgün planlara kıyasla bile hayata geçirilemedi. Ayrıca programlama yaparken aslında ne yaptığınıza dair daha genel kavramlar, başlangıçta planlandığı gibi ayrıntılandırılamadı. Smalltalk’a ilişkin özgün tasavvurum, son derece güçlü olacağını düşündüğüm bir dizi dil fikrinin uyumlu bir birleşimi olmayı hedefliyordu.

hem çocuklar hem de yetişkinler için.

Nesne fikirlerinin yanı sıra, Logo’nun sadeliğini, Carl Hewitt’in Planner’ından gelen daha yüksek ifade düzeylerini, Dave Fisher’ın cdl’sinin ve benim önceki flex dilimin genişletilebilirliğini istiyordum. Bunlar olurken, meşhur “bahis”, her şey için birkaç haftada ortaya konan ve Dan Ingalls’ın bir ayda uyguladığı, çok daha basit ve Lisp benzeri bir yaklaşıma yol açtı. Bu, Alto’nun çalışmaya başladığı tam zamanda son derece faydalı bir çalışan sistem sağladı. Bu sistemi kullanarak pek çok kişisel bilişim fikrini hayata geçirmeye koyulduk ve erken Smalltalk için düşündüğümüz bazı (gerçekten iyi) fikirlere bir daha geri dönmedik.

Bu, birçok açıdan iyiydi, ancak o dönemde (ya da bugün) programlamanın gitmesi gerektiğini düşündüğüm yere ulaşmadı. Doug Lenat, 70’lerin ortalarından sonlarına doğru Stanford’da, “geleceğin programlaması” karakterine çok daha fazla sahip olan bir dizi gerçekten ilginç sistem geliştirdi.

Objective-C ve C++ gibi ardıl programlama dillerine ne tür bir katkı yaptığınızı düşünüyorsunuz?

İlk Smalltalk’tan sonraki Smalltalk’lara doğru ilerleme, daha iyi ifade gücüne değil, hem verimliliğe hem de geliştirilmiş programlama araçlarına yönelikti. Objective-C’yi ve özellikle C++’ı, Smalltalk’ların herhangi birine kıyasla daha az nesne yönelimli ve önemli ölçüde daha az ifade gücüne sahip, daha az güvenli ve küçük, derli toplu sistemler oluşturmaya daha az elverişli olarak nitelendiririm.

C++ açıkça Smalltalk gibi olmak için değil, Simula gibi olmak için tasarlanmıştı. Objective-C ise birkaç önemli açıdan Smalltalk’a daha çok benzemeye çalıştı.

Bununla birlikte, Smalltalk’un da büyük bir hayranı sayılmam; her ne kadar günümüzdeki çoğu programlama sistemiyle karşılaştırıldığında oldukça iyi dursa da (hiçbirini sevmiyorum ve sistemler ya da son kullanıcılar için olsun, bugünün gerçek programlama sorunlarına hiçbirinin uygun olduğunu düşünmüyorum).

Bir disiplin olarak bilgisayar programlaması hakkında ne düşünüyorsunuz?

Bana göre, gerçek nesnelerin anlambiliminin güzel yanlarından biri, “aşağıya doğru tamamen gerçek bilgisayarlar (RCATWD)” olmalarıdır — bu, her şeyi temsil etme yeteneğini her zaman korur. Eski yaklaşım hızla bilgisayar olmayan iki şeye — veri ve prosedürler — ulaşır ve bir anda, davranışlar lehine iyileştirmeleri ve belirli kararları erteleme yeteneği kaybolur.

Başka bir deyişle, her zaman gerçek nesnelere sahip olmak, istediğiniz her şeyi simüle etme ve onu gezegenin bir ucundan diğerine gönderme yeteneğini korur. Veriyi 1000 mil gönderirseniz, ondan yararlanmak için bir kılavuz ve/veya bir programcı da göndermeniz gerekir. Veriyi işleyebilecek gerekli programları gönderirseniz, bir nesne göndermiş olursunuz (tasarım kötü olsa bile).

Ve RCATWD her iki yönde de kusursuz bir koruma sağlar. Bunu İnternet’in donanım modelinde görebiliriz (muhtemelen çalışır durumdaki tek gerçek nesne yönelimli sistem). Mesaj biçimleri için uzlaşımlar üzerinde anlaşarak, dilin genişletilebilirliğini neredeyse bedavaya elde edersiniz.

70’lerdeki düşüncem, kişisel bilişimle birlikte üzerinde çalıştığımız İnternet’in gerçekten iyi, ölçeklenebilir bir tasarım olduğu ve donanım makineleri tarafından önbelleğe alınabilen sanal makinelerden oluşan sanal bir internet yapmamız gerektiğiydi. Bunun gerçekleşmemiş olması gerçekten çok yazık.

Son 30 yılda pek çok şey olmuş olsa da, bilgisayar programlaması ve mühendisliğinin bir disiplin olarak nasıl değiştiğini düşünüyorsunuz? Programlama dillerinde, 1970’lerde olduğu gibi yenilik yapacak alan ve kapasite hâlâ var mı?

Kesinlikle önemli ölçüde iyileştirme alanı var! Ancak buna yönelik iştah ve bu iyileştirmeleri geliştirmeye yönelik istek, 60’lardaki kadar güçlü görünmüyor (ya da en azından o kadar güçlü değil). Özellikle akademi, çok artımsal ve moda odaklı hâle gelmiş gibi görünüyor ve çeşitli faktörler (vizyoner olmayan fonlama dâhil) bir profesörün ve birkaç öğrencinin büyük fikirlere sahip olmasını ve bunları hayata geçirebilmesini çok zorlaştırıyor. Bu çok büyük bir sorun.

Xerox Palo Alto Research Centre (PARC), 1970’ler ve 80’lerde biraz bir gelişim ve yenilik arı kovanı gibi görünüyor ve bugün bildiğimiz modern bilgisayarların temelini oluşturdu. Yenilik ve geliştirme kültürü açısından BİT endüstrisinin önemli ölçüde değiştiğini gözlemlediniz mi?

1980’den bu yana olanların büyük bir bölümünü, “PARC’ta geliştirilen bazı şeylerin oldukça muhafazakâr bir şekilde ticarileştirilmesi” olarak nitelendirmek adil olur. Yeni buluşlardaki yavaşlamanın bir kısmı, özellikle 60’larda yüksek riskli, yüksek getirili araştırmaları finanse edebilen devlet fonlamasındaki büyük olumsuz değişimlere bağlanabilir.

Bugün herhangi bir ülkede, şirkette ya da üniversitede PARC’a benzer bir şey görmüyorum. Gençten yaşlıya iyi insanlar var, ancak hem fonlama hem de akademik örgütlenmeler bugün çok daha artımsal ve muhafazakâr.

60’lardaki bu yenilikçi kurumların yeniden canlanma ihtimali var mı? Yenilik konusunda fazla mı rehavet içindeyiz?

Bir “canlanma”nın bir kısmı, ARPA-IPTO’nun 60’larda (ve Deniz Kuvvetleri Araştırma Ofisi gibi diğer büyük fon sağlayıcıların) kullandığı bir fonlama ve süreç kategorisini basitçe yeniden ekleyerek yapılabilir. Temelde, “projeleri değil insanları fonlayın”, “son teslim tarihleri yerine kilometre taşları”, “hedefler yerine vizyonlar.” “Projeler değil insanlar” kısmı, “en üst düzey insanlar” anlamına geliyordu ve bu da fonlanabilecek kişi sayısını sınırlıyordu (dolayısıyla fon bütçesini de görece düşük tutuyordu).

Xerox PARC’a giden yaklaşık iki düzine bilim insanının doktoraları 60’larda ARPA tarafından finanse edilmişti; dolayısıyla biz, “kişisel bilişim ve yaygın ağlar” vizyonunun ikinci nesliydik. Bugünün parasıyla, bu iki düzine kişi (artı personel desteği ve o zamanlar daha pahalı olan ekipman) yılda 15 milyon dolardan daha azına mal olurdu. Yani herhangi bir büyük şirketin ya da devlet fon sağlayıcısının bunu karşılaması kolay olurdu.

Bunu yapmamalarının birkaç nedeni var. Bence bunun önemli bir kısmı, bugünün fon sağlayıcılarının, çok yüksek riskli ve baştan hiçbir garanti ya da vaat içermeyen ("en iyi çaba" dışında) süreçler karşısında kontrolsüz kalmaktansa, sonuç üretecek (ne kadar vasat olursa olsun) vasat süreçler üzerinde kontrol sahibi olmayı tercih etmeleri.

Bu tür bir canlanmanın diğer kısmı, boylamsal boyutlarla ilgilidir. Temelde avcılık-toplayıcılık ile tarım arasındaki fark gibi. “Büyük mühendislik” ile çözülemeyen gerçekten zor projeler, yeni fikirlerin ve yeni insanların biraz “yetiştirilmesini” gerektirir.

Xerox PARC, ARPA’nın bizi, erken yaşta “Kool-Aid’i içmiş” ve kişisel bilişimi ve yaygın ağları gerçeğe dönüştürmek için bir sonraki adımı (her ne olursa olsun) atmaya derin bir iç kararlılıkla sahip lisansüstü öğrenciler olarak yetiştirmiş olmasından gerçekten çok fayda gördü.

Büyüme dinamiklerinin büyük bir kısmı, hedeflerle oldukça zayıf bağlantıları olan süreçler ve ürünlerle ilgilidir. Örneğin, ABD uzay programı büyük bir mühendislik projesi olarak yürütüldü ve başarılı oldu, ancak uzay yolculuğunu geliştiremedi (ve muhtemelen uzay yolculuğunu 30–50 yıl geriye itti). Bununla birlikte, Kongre ve kamuoyu, gezegenler arası yolculuğu çok daha mümkün kılabilecek atom enerjili motorlar gibi şeyleri geliştirmeye çalışmak için on yıl ya da daha fazla harcanmasına muhtemelen tahammül etmezdi.

1960’larda etkileşimli hesaplama kimsenin pek umurunda değildi ve ARPA’nın bu alana ayırdığı fonlar, Savunma Bakanlığı’nın Ruslara karşı yürüttüğü çabaların diğer bölümleriyle karşılaştırıldığında görece küçüktü. Bu nedenle birçok yönde epeyce iş yapıldı; buna, sonunda büyük vizyonu başarıyla sürdürecek doktora sonrası araştırmacıların yetişmesi de dahildi.

Objective-C’nin ortak geliştiricilerinden Brad Cox, bilgisayar programlamanın geleceğini her yeni proje için tamamen sıfırdan kod yazmak yerine mevcut kütüphaneleri ve bileşenleri yeniden bir araya getirmekte gördüğünü söyledi. Buna katılıyor musunuz?

Bence bu yaklaşım fiziksel dünyada daha iyi çalışıyor ve yazılımda iyi bir şekilde yapılabilmesi için, bilgisayar uzmanlarının şu anda gösterebildiğinden daha fazla disiplin gerektiriyor. Ancak bunun daha iyi bir sürümünün kesinlikle geleceğin bir parçası olduğuna inanıyorum.

Çoğu şey için, çok yüksek seviyede dinamik bir dil kullanılmasını ve yeni bir sistemin tasarımını netleştirmeye ve hatalarını ayıklamaya yardımcı olmak amacıyla sıfırdan bir prototip yapılmasını savunuyorum – buna, denenen şeye uygun son derece ifade gücü yüksek biçimler sağlamak için dilin genişletilmesi de dahildir.

Bunu sistemin ‘anlamı’ olarak düşünebiliriz. Geliştirme araçları, anlamın gerekli tüm optimizasyonlarının ayrı ayrı eklenmesine izin vermelidir; böylece anlam, optimizasyonları (bunların bir kısmı kuşkusuz kütüphanelerden uyarlanacaktır) test etmek için kullanılabilir.

Başka bir deyişle, tasarımın doğru yapılması – özellikle de yapılan şeyin gerçek yaşam döngüsünün gelecekteki ihtiyaçlara uyarlanabilmesi açısından – kritik önemdedir ve mevcut bir kütüphaneden bir şeyleri yapıştırıp kullanmak tehlikeli olabilir.

Modül sisteminin kalitesi ve modüllerin nasıl çağrıldığı da aynı derecede kritiktir. Örneğin, adına bakmadan ihtiyaç duyduğumuz modülü bulabiliyor muyuz? İhtiyacımız olan şeyi bulabilmemizi sağlayacak ‘anlamsal tipleme’ gibi bir şeye sahip miyiz – yani sinüs fonksiyonunun adı ‘sine’ değilse bile sistem onu bizim için bulabiliyor mu, vb.?

Yüksek seviyeli dinamik bir dil, topluluğun sorunları için herkese uyan tek bir çözüm mü, yoksa dillerin daha da parçalanacağını mı düşünüyorsunuz?

Hesaplamada doldurulamayan en büyük boşluklardan biri ‘meta’ fikri ve bununla neler yapılabileceğidir. ARPA/PARC topluluğu bu konuyla çok ilgiliydi ve bu topluluğun başarısının büyük bir kısmı, metaya ve onun hem donanımda hem de yazılımda nasıl kullanıldığına dair hassasiyetinden kaynaklanıyordu.

‘İyi meta’, büyük miras kodu ve miras fikirlerin ağır yükünü hissetmeden yeni yollar deneyebilmeniz anlamına gelir.

PARC’ta her iki yılda bir yeni bir Smalltalk yaptık ve sekiz yıl içinde birbirinden oldukça farklı üç tasarım ortaya koyduk – önceki sistemlerdeki meta, bir sonrakini inşa etmek için kullanıldı. Ancak Smalltalk-80 düzenli programlama dünyasına girdiğinde, bir meta-dil (gerçekte öyleydi) olarak değil, bir programlama dili (ki o da öyleydi) olarak ele alındı ve sonrasında çok az değişiklik gerçekleşti.

Benzer şekilde, PARC’ta geliştirdiğimiz donanım son derece metaydı, ancak Intel ve Motorola gibi firmaların ticari makinelere koydukları şeyler bundan daha az meta olamazdı. Bu durum, bazı önemli yeni şeyleri verimli biçimde yapmayı çok zorlaştırdı (ve bu hâlâ geçerli).

Smalltalk-80’in yanı sıra, iPad’in bir öncülü olan Dynabook’u geliştirmekle de sıkça ilişkilendiriliyorsunuz. Kişisel bilgisayarın, 1972’de sahip olduğunuz vizyona ulaştığını düşünüyor musunuz ve gelecekte nereye gittiğini görüyorsunuz?

Dynabook, çeşitli donanım fikirleriyle somutlaşmış ve özellikle çocuklar olmak üzere kullanıcılarına sunması gereken hizmet türleri için pek çok ölçüt içeren bir hizmet fikriydi/dir. Hizmet kavramlarının şimdiye kadar defalarca aşılmamış olması beni sürekli şaşırtıyor; aksine bunun tam tersi oldu. Bunun bir nedeni, çoğu insanın ‘yeni’ ile yaşadığı zorluklar ile tüketici toplumunda pazarlamacıların yapmaya çalıştıkları şeyler arasındaki kutsal olmayan kucaklaşmadır.

Kişisel bilişim teknolojisi ve kavramlarındaki bu sıçramaların önündeki engeller nelerdir? Şirketler mevcut kavramları yeniden tanımlamaya mı çalışıyor, yoksa sadece çok mu yavaş yenilik yapıyorlar?

Bu büyük ölçüde, insan zihni için ‘haber’ ile ‘yeni’ arasındaki muazzam farkla ilgilidir. Pazarlama insanları gerçekten ‘haber’ ister (= dikkati canlandırmak için küçük bir fark, ama tamamen anlaşılabilir ve artımlı bir şey üzerinde). Bu, haberlerin bir iki dakika içinde anlatılmasına izin verir ve yine de insanlar için ilgi çekicidir. ‘Yeni’ ise ‘görünmez’, ‘hemen anlaşılır olmayan’ vb. anlamına gelir.

Bu yüzden ‘yeni’ çoğu zaman doğrudan reddedilir ya da ancak onu ‘haber’e dönüştürerek kabul edilir. Örneğin, bilgisayarların asıl büyük olayı programlanabilir olmalarıdır ve bunun da asıl büyük olayı ‘meta’dır.

Halk için, birincisinden üretilen haber, zaten aşina oldukları eski medyayı basitçe simüle etmek ve bazı boyutlarda biraz daha kullanışlı hâle getirmektir; çoğu zaman da önemsemedikleri alanlarda (örneğin ekranda metnin daha kötü okunabilir olması, özellikle iyi okurlar için) daha az kullanışlı yapmaktır.

Bilgisayar insanlarının çoğu için ise, yeniden üretilen haber, tasarım ve programlama biçimlerinden metanın büyük kısmını ortadan kaldırır.

Buna bakmanın bir yolu, genetik olarak öğrenmekten ziyade başa çıkmak için çok daha iyi donanımlı olduğumuzdur. Bu yüzden tanıdık artı acı, çoğu insan için kabul edilebilirdir.

Çocuklar ve özellikle eğitim için geliştirmeye yönelik temel bir ilgiye sahip olduğunuzu belirttiniz; bunu One Laptop Per Child (OLPC) projesindeki ve Viewpoints Research Institute’taki çalışmalarınızla hayata geçirdiniz. Bilişimin eğitimde kullanımına dair görüşünüz nedir?

‘Eğitim’i, insanların düşünmeyi insanlığın geliştirdiği en iyi ve en güçlü yollarla öğrenmelerine yardımcı olmak anlamında geniş bir çerçevede ele alıyorum. Bu ‘en iyi ve en güçlü’ yolların büyük bir kısmı, bilimin süreçlerinin geliştirilmesinden çıkmıştır ve bunların, okuma ve yazmaya verdiğimiz önceliklerle aynı önceliklerle öğrenilmesi hayati önemdedir.

Bir şey, sadece ilgilenenlerin öğrenmesi gereken bir şey (beyzbol gibi) olmaktan çıkıp herkes tarafından öğrenilmesi gereken bir şey (okuma gibi) olarak kabul edildiğinde, çözülmesi gereken ciddi motivasyon sorunları ortaya çıkar. Bunun bir yolu, genel fikirlere büyük ilgi gösteren çok daha fazla akran ve yetişkinin olmasıdır (bu biraz tavuk-yumurta problemidir). Toplumumuz genellikle merdivende birkaç basamak aşağıdaki şeylerle yetinir (örneğin, ebeveynlerin kanepede TV izlerken sık sık ‘okumayı öğrenmen gerek’ demesi gibi lafta kalan destekler).

Araştırma topluluğum kişisel bilişimi ve İnternet’i geliştirmek için çalışırken, tüm bu konular üzerinde düşündük ve en azından yüzlerce farklı giriş noktası olan müfredatlar yapabileceğimiz (San Francisco Exploratorium veya Whole Earth Catalog benzetmesiyle) ve bir ip çekildiğinde bunun, başlamaya yardımcı olacak yeterli kişisel motivasyonu sağlayabileceği sonucuna vardık.

Bu noktada hâlâ, çoğu insanın neyle ilgilenmesi gerektiği konusunda başkalarının görüşlerine o kadar bağımlı olduğunu düşünüyorum ki, popüler kültürle ölümcül bir kucaklaşma içindeyiz; bu da öğrenmek isteyenlerin bile gerçekten iyi şeylerin var olduğunu fark etmesini çok zorlaştırıyor. Bu, bir tür ‘İçerik için Gresham Yasası’dır.