Monty Python ve The Hitchhiker’s Guide to the Galaxy hayranı Guido van Rossum ile sohbet ediyoruz. Van Rossum, Python’un yazarı olarak en iyi bilinen kişidir ve şu anda Google, CA’da çalışmakta; burada zamanının en az yarısını dili geliştirmeye ayırabilmektedir.
Bu kadar üretken bir programlama dilinin geliştirilmesinin ardındaki motivasyon neydi?
Uzun zaman önce, yaklaşık 1989’da, Amsterdam’daki CWI’da yeni bir işletim sistemi geliştiren bir grubun parçasıydım. Kullanıcıları desteklemek için çok sayıda uygulama yazmamız gerektiğini fark ettik ve bunları C ile yazarken üretkenliğimizin berbat olduğunu gördük. Bu durum beni, on yılın başlarında (yine CWI’da) uygulanmasına katkıda bulunduğum ABC gibi bir şeyi kullanmak istemeye yöneltti.
ABC, C’ye kıyasla çok daha yüksek bir üretkenliğe sahipti; bunun bedeli ise, yazmak istediğimiz destek uygulamaları türü için çoğu zaman kabul edilebilir olan bir çalışma zamanı cezasıydı: yalnızca ara sıra, kısa süreler boyunca çalışan ama muhtemelen karmaşık mantık kullanan şeyler. Ancak ABC, çeşitli nedenlerle popülerlik kazanamamıştı ve artık bakımı yapılmıyordu (gerçi hâlâ http://homepages.cwi.nl/~steven/abc adresinden indirilebilir). Ayrıca amacımız için doğrudan kullanılabilir değildi—ABC daha çok bir öğretim ve veri işleme dili olarak tasarlanmıştı ve işletim sistemiyle etkileşim kurma yetenekleri (bizim ihtiyaç duyduğumuz şey) tasarım gereği sınırlı ya da hiç yoktu.
O sıralar genç olmanın da etkisiyle, ABC’ye “neredeyse ama tam olarak değil, tamamen farklı” bir dil tasarlayıp uygulayabileceğimi, ABC’nin eksiklerini iyileştirerek destek uygulamaları problemimizi çözebileceğimi düşündüm. Böylece 1989 Noel’i civarında kod yazmaya başladım. Çeşitli nedenlerle, Python kullanılabilecek kadar olgunlaştıktan kısa süre sonra o özel proje artık eskisi kadar ilgili değildi, ancak Python CWI’daki diğer projeler için faydalı olduğunu kanıtladı ve 1991’in başlarında (yani başlamamdan biraz daha uzun bir yıl sonra) ilk açık kaynak sürümünü yayımladık (hatta açık kaynak terimi henüz ortaya atılmamışken).
Çözmeye çalıştığınız belirli bir problem var mıydı?
Programcı üretkenliği. O dönemdeki gözlemim, bilgisayarların inanılmaz bir hızla daha hızlı ve daha ucuz hale geldiğiydi. Bugün bu etki elbette Moore yasası olarak biliniyor. Aynı zamanda, aynı programlama dilleri kullanılmaya devam edildiği sürece, onları programlayan programcıların maliyeti düşmüyordu. Bu yüzden programcıları daha üretken kılan bir dil geliştirmeyi hedefledim; eğer bu, programların biraz daha yavaş çalışması anlamına geliyorsa, bu kabul edilebilir bir ödünleşmeydi. ABC’yi uygulama konusundaki çalışmalarımdan, bunun nasıl yapılacağına dair pek çok iyi fikrim vardı.
Monty Python’s Flying Circus’tan türeyen ad ve diğer unsurlar göz önüne alındığında, Monty Python hayranı mısınız?
Evet, dilin adını buradan aldım. Aynı adlı yılanla olan ilişkilendirme ise, kitap kapaklarında Monty Python görsellerini lisanslamak istemeyen yayınevleri tarafından bana dayatıldı. The Hitchhiker’s Guide to the Galaxy ile de ilgileniyorum, ancak geek kültürünün diğer temel unsurlarının pek çoğuna meraklı değilim (örneğin bilim kurgu ya da fantastik edebiyat, rol yapma oyunları ve kesinlikle bilgisayar oyunları yok).
Dil 1980’lerde geliştirilmişken, onu 1991’de yayımlamanızın nedeni neydi?
Aslında 1989’un sonuna kadar başlamamıştım. Yayımlanabilir bir aşamaya gelmesi biraz daha fazla olmak üzere bir yıl sürdü.
Dilin geliştirilmesi sırasında aşmanız gereken özellikle zor ya da sinir bozucu problemler oldu mu?
Özellikle sinir bozucu ya da zor bir şey hatırlamıyorum; en azından ilk birkaç yıl boyunca kesinlikle yoktu. Hatta yönetim (genellikle alan dışı ama gerçekten ilginç projelerin katili olur) o dönemde çoğunlukla bir hobi projesi olarak görülen şeye orantısız derecede fazla zaman ayırmamı hoş gördü.
Fırsatınız olsaydı herhangi bir şeyi farklı yapar mıydınız?
Belki de standart kütüphane modüllerinin kalitesine daha fazla dikkat ederdim. Python son derece zengin ve güçlü bir standart kütüphaneye sahip; Web sayfalarını indirmekten düşük seviyeli İnternet protokollerini kullanmaya, veritabanlarına erişmekten grafiksel kullanıcı arayüzleri yazmaya kadar çok çeşitli görevleri ele alan modüller ya da paketler içeriyor. Ancak aynı zamanda, pek iyi düşünülmemiş, yalnızca çok küçük ve özel bir kitleye hizmet eden ya da diğer modüllerle iyi çalışmayan pek çok modül de var.
Python 3.0’da en kötü aşırılıkları temizliyoruz, ancak pek çok nedenden dolayı modül kaldırmak, yeni modül eklemekten çok daha zor—her zaman onu özleyecek birileri oluyor. Muhtemelen standart kütüphane modülleri için koyduğum çıtayı, özellikle erken dönemlerde (katkı sunmak isteyen hemen herkesi kabul ettiğim zamanlarda), daha yüksek tutmalıydım.
Güncel yazılımların büyük bir kısmı Web için yazılıyor ve Django ile Zope gibi pek çok çerçeve var. Python tabanlı mevcut Web çerçeveleri hakkında ne düşünüyorsunuz?
Birkaç yıl boyunca kesinlikle gereğinden fazla Web çerçevesi vardı. Hâlâ ara sıra yeni Web çerçeveleri ortaya çıksa da, artık çıta çok daha yüksek ve daha az bilinen çerçevelerin birçoğu ortadan kayboluyor. TurboGears ile Pylons arasındaki birleşme de buna dahil.
İnsanlar ne derse desin, Django hâlâ favorim—yalnızca geliştirme tarzıma uyan oldukça iyi bir Web çerçevesi olmakla kalmıyor, aynı zamanda topluluk katılımını gerçekten anlayan insanlar tarafından yürütülen iyi bir açık kaynak projesinin örnek bir modeli.
Ruby on Rails hakkında ne düşünüyorsunuz?
Hiç kullanmadım. Açıkça çok başarılı bir Web çerçevesi, ancak (kullanıcıların bana anlattıklarına dayanarak) Django’nun bana çok yakın bir eşleşme sunduğuna inanıyorum.
Python’un şu anda Google tarafından yoğun biçimde kullanıldığını hepimiz duyduk. Bu konuda ne hissediyorsunuz? Bu, dil için beklentilerinizi aştı mı?
Python için hiçbir zaman belirli beklentilerim olmadı; kullanıcı topluluğunun yavaş ama istikrarlı biçimde büyümesini görmekten her zaman memnun oldum. Harika bir yolculuk oldu.
Dil neden resmî olarak tanımlanmadı?
Çok az açık kaynak dili resmî olarak tanımlanmıştır. Resmî dil spesifikasyonları, genellikle bir dil üzerinde kontrol uygulamak isteyen bir şirket olduğunda (Java ve JavaScript’te olduğu gibi) ya da uyumsuz uygulamalardan endişe eden rakip şirketler bulunduğunda (C++ veya SQL’de olduğu gibi) özellikle cazip görünür.
Python ile yazılmış gördüğünüz en ilginç program hangisiydi?
Dilin yeni bir ortamda yenilikçi kullanımı açısından bakarsak, Jurgen Scheible tarafından Nokia telefonları için yazılmış bir sanat projesi olan MobilLenin olduğunu düşünüyorum.
Dilin, başlangıçta amaçlanmayan bir şekilde kullanıldığını hiç gördünüz mü?
Başlangıçta Python’un nişi konusunda oldukça dar bir bakış açım vardı ve insanların onunla yaptıklarının çoğu tamamen beklenmedikti. Örneğin uzman sistemler yazmak için kullanılacağını hiç beklemiyordum, ama erken dönem büyük örneklerden biri bir uzman sistemdi. Bittorrent gibi yüksek hacimli ağ uygulamaları yazmak için kullanılmasını da planlamamıştım; hatta birkaç yıl önce birisi Python ile bir VOIP istemcisi yazdı.
Ayrıca, eklenti modüllerinin dinamik olarak yüklenmesi gibi özellikleri ya da Python’un gömülü bir programlama dili olarak kullanılmasını da öngörmemiştim. ABC kısmen bir öğretim dili olarak tasarlanmıştı, ancak bu Python’un tasarım hedeflerinden biri değildi ve Python’un bu alandaki başarısına başlangıçta şaşırmıştım—geriye dönüp bakınca aslında bunu beklemem gerekirdi.
Python topluluğu tarafından size verilen Benevolent Dictator for Life (BDFL) unvanı hakkında ne düşünüyorsunuz?
Python’a karşı sürdürmeye çalıştığım eğlenceli bakış açısıyla tamamen örtüşüyor. Bu arada, yakın zamanda çok eski e-postaları karıştırırken yeniden keşfettiğim üzere, 1995’te uydurulan orijinal unvan First Interim Benevolent Dictator For Life idi. Virginia, Reston’daki bir Python geliştiricileri ve hayranları toplantısında, orada bulunan herkese şakacı bir unvan verilmişti, ama benimki tutunan tek unvan oldu.
Wikipedia’dan alınan aşağıdaki ifadeye katılıyor musunuz:
‘Python, programlanabilir bir arayüze ihtiyaç duyan mevcut modüller ve uygulamalar için bir genişletme dili olarak da kullanılabilir. Küçük bir çekirdek dil, büyük bir standart kütüphane ve kolayca genişletilebilir bir yorumlayıcıdan oluşan bu tasarım, ABC ile yaşadığı hayal kırıklıkları nedeniyle Van Rossum tarafından en başından itibaren amaçlanmıştı; zira ABC bunun tam tersini savunan bir zihniyete sahipti’?
Evet, tam isabet. ABC bir elmas gibi tasarlanmıştı—başlangıçta kusursuzdu ama değiştirilmesi imkânsızdı. Bunun, işletim sistemiyle doğrudan etkileşim kurmak gibi pek çok olası kullanım alanını kazara kapattığını fark ettim: ABC’nin yazarları işletim sistemleri hakkında çok düşük bir görüşe sahipti ve kullanıcılarını, yanlış zamanda disketi çıkardığınızda veri kaybı gibi pek çok tuhaf özellikten tamamen yalıtmak istiyorlardı.
Ben aynı korkuya sahip değildim: sonuçta Python bir işletim sistemleri araştırma grubunda ortaya çıktı! Bu yüzden en başından itibaren dili genişletilebilir olacak şekilde geliştirdim.
Büyük standart kütüphanenin Python’un en büyük güçlü yanlarından biri olduğuna inanıyor musunuz?
Yukarıda dile getirdiğim standart kütüphanenin (bazı bölümlerinin) kalitesine dair tereddütlere rağmen, evet, kesinlikle. Belirli bir projede Python kullanmaya karar verirken, gerekli önemli görevleri yerine getirecek standart kütüphane modülleri ya da paketlerinin zaten mevcut olması, çoğu zaman ikna edici bir argüman olmuştur.
Elbette çok sayıdaki üçüncü taraf eklenti de bu argümana katkıda bulunuyor, ancak çoğu zaman tek bir kurulumun (ya da modern Unix sistemlerinde, Python önceden kurulu geldiği için hiç kurulum yapmamanın) başlamak için yeterli olduğunu fark etmek yardımcı oluyor.
Ulusal Araştırma Girişimleri Kurumu’nda (CNRI) çalışırken Computer Programming for Everybody (CP4E) girişimini başlattığınız ve Python’un temiz sözdizimi göz önüne alındığında, bilgisayar programlamanın genel halk için daha erişilebilir olması gereken bir alan olduğunu düşünüyor musunuz?
Eğitimcilerin, PowerPoint sunumları ve HTML yazmanın ötesinde bilgisayar kullanımı hakkında daha fazla şey öğretmelerinin akıllıca olacağına kesinlikle inanıyorum (bunlar faydalı olsa da). Bazı kişiler Python’u, çok farklı seviyelerde ve her türlü eğitim amacı için oldukça başarılı bir şekilde kullandı.
Ancak eğitim inanılmaz derecede siyasallaşmış bir konu ve bu alanda kendimi yeterince yaktım; bu yüzden bu konu hakkında daha fazla yorum yapmaktan kaçınacağım.
Python Enhancement Proposals (PEP’ler) Python’un geliştirilmesine nasıl yardımcı oldu? Hangisi favoriniz?
PEP’ler muazzam bir fark oluşturdu. PEP’leri kullanmaya başlamadan önce, dil veya standart kütüphane hakkında bir şeyi değiştirmek için belirli bir süreç yoktu: e-posta listesinde hararetli tartışmalar yapıyorduk ama karar vermek için net bir yol yoktu ve hangi tür değişikliklerin ne tür bir uzlaşı gerektirdiğine dair bir politika bulunmuyordu.
Bazen insanlar bana bir yama göndererek ‘şanslı’ oluyordu ve eğer tesadüfen hoşuma giderse, belki her zaman iyi düşünülmüş bir tasarım olmasa bile, içeri alınıyordu. Diğer zamanlarda ise iyi fikirler, ufacık ayrıntılar üzerine bitmek bilmeyen ‘bikeshedding’ tartışmalarında (artık bu adla biliniyor) takılıp kalıyordu.
PEP süreci bu tartışmaları çerçevelemeye yardımcı oldu: bir tartışmanın amacı bir PEP’e ulaşmaktı ve bir PEP’in bir motivasyonu, bir teknik tanımı, değerlendirilen ve reddedilen alternatiflerin tartışmasını vb. içermesi gerekiyordu. PEP süreci (küçük varyasyonlarla) başka açık kaynak projeleri tarafından da benimsendi.
Bunun, açık kaynak geliştiricilerinin nesiller boyunca tasarım tartışmalarında daha üretken olmalarına yardımcı olduğundan eminim ve tüm PEP sürecinin (PEP numara 1’de) yazılı hale getirilmiş olması, yeni geliştiriciler için de bir eğitim işlevi gördü.
Benim favorim, açıkça reddedilme amacıyla yazılmış olan PEP 666’dır: girintileme konusunda son derece katı bir yaklaşım önerir ve anında reddedilmesi, sürekli gündeme gelen bir tartışmayı (sekme sevenler ile sekmeden nefret edenler arasında) kesin olarak sonuçlandırmıştır. Olumsuz sonuçların da faydalı olduğuna dair kuralın harika bir örneğidir.
Dilin tarihi boyunca kaç PEP gönderildiğine dair bir fikriniz var mı?
Evet, 239. Ardışık olarak numaralandırılmamış olsalar da, hepsi sürüm kontrolü altında tutuluyor (Python kaynak ağacı için kullandığımız aynı Subversion sunucusunda), bu yüzden saymaları kolay. En yüksek numaralı olanı 3141.
Buna, daha baştan engellenmiş bazı öneriler dahil değil – ara sıra biri bir PEP taslağı hazırlar ama inceleme için göndermeden önce çevrimiçi tartışma tarafından zaten öldürülür.
3.01b bu yılın Haziran ayındaki yayınından bu yana nasıl karşılandı? 3.01a sürümünden çok mu farklı?
İyi karşılandı – insanlar art arda gelen betaları (şu ana kadar iki tane, üçüncüsü planlanıyor) kesinlikle indiriyor ve deniyor. Son alfa sürümünden en görünür fark muhtemelen standart kütüphanenin yeniden düzenlenmesi; bu proje ilk beta gelene kadar gerçekten başlamamıştı.
Bunun dışında farklar çoğunlukla küçük iyileştirmeler ve hata düzeltmeleri, gösterişli bir şey yok.
Şu anda CPython kullanıyor musunuz?
Düzenli olarak kullandığım tek Python sürümü bu. Ayrıca Google App Engine’e gömülü durumda ve onu da tabii ki çok kullanıyorum.
3.0 sürüm serisinin geriye dönük uyumluluğu bozması hakkında ne düşünüyorsunuz?
Doğru olan buydu. Dilde, uyumluluğu bozmadan çözülemeyecek bazı tasarım sorunları vardı. Ancak bunların ve birkaç temizlik çalışmasının ötesinde, aslında uyumluluğu çok fazla bozmamaya çalışıyoruz – uyumsuzluk getirecek yeni özellikler eklemeye yönelik birçok öneri, uyumsuzluğu önleyen bir alternatif mevcut olduğu sürece tam da bu nedenle reddedildi.
Kendinizi bir Pythonista olarak görüyor musunuz?
Bu, benim kendi kullanacağım bir terim değil, ancak biri bir e-postaya ‘Sevgili Python’ diye başlıyorsa, bu kitlenin içinde olduğumu kesinlikle varsayarım.
Monty Python ekibine bazen Pythons denir; bu, bizim hiç kullanmadığımız bir terimdir. Benzer şekilde, Pythonesque genellikle ‘Monty Python tarzında’ anlamına gelirken, biz Pythonic terimini kabaca ‘Python’un felsefesiyle uyumlu’ anlamında kullanırız. Açıkçası bu oldukça muğlak ve kolayca kötüye kullanılabilen bir terimdir.
Python’un gömülü sistemler alanında nereye gittiğini görüyorsunuz?
Sanırım cep telefonları ve özel donanımlar gibi platformları kastediyorsunuz. Bence bu platformlar Python için hazır; Python gibi yorumlanan bir dili rahatça çalıştıracak kadar bellek ve hıza sahipler. (Hey, Python çalışma zamanı JVM’den çok daha küçük!)
Gerçek benimseme farklılık gösteriyor – Python’u resmi betik dili olarak benimsemiş Nokia S60 platformu var ve bir tür Linux çalıştıran gömülü platformlar teoride Python’u kolayca çalıştırabilir.
Sizce Python bilgisayar geliştirme alanına hangi kalıcı mirası bıraktı?
Dinamik dillere bir moral desteği sağladı. Süslü parantezlere göre daha okunabilir alternatifler olduğunu gösterdi. Ve birçok kişi için programlamaya yeniden eğlence kattı!
Python’un geleceğinin nerede yattığını düşünüyorsunuz?
Üzgünüm, kristal kürem tamirde ve zaman makinemi sadece ancak şimdi talep edilen özellikleri geçmişe gidip eklemek için kullanıyorum. (Bir zaman makinemin olması ve onu bu amaçla kullanmam Python topluluğunda süregelen bir şakadır.)
Dilin evrimi ve popülerliği sizi herhangi bir şekilde şaşırttı mı?
Başladığımda böyle bir şey beklemiyordum. Ne beklediğimi de bilmiyorum aslında – beklentiler üzerinde çok durmam ve daha çok bugünün sorunlarını çözmeyi severim.
Ayrıca her şey çok kademeli olarak geldi, bu yüzden belirli bir kilometre taşı hiçbir zaman büyük bir sürpriz olmadı. Ama neredeyse 19 yıl sonra, geldiğimiz noktadan kesinlikle çok mutluyum!
Dilin ilk geliştirilmesi ve süregelen kullanımı açısından en çok neyle gurur duyuyorsunuz?
Python’un, tartışmasız bir şekilde Google’daki bir numaralı betik dili olması ve her zaman öyle kalması. Ayrıca, neredeyse sıfır PR bütçesiyle dinamik diller arasında ilk 5’e girmiş olması. Bu, tabandan gelen bir topluluk için muazzam bir başarıdır.
Yakın gelecekte bilgisayar programlama dillerinin nereye gittiğini görüyorsunuz?
Umarım bir noktada bilgisayarlar, ayrı ayrı işlevsel, dinamik ve statik tipli dillere ihtiyaç duymayacak kadar güçlü olur ve bunun yerine bu üç paradigmanın faydalarını birleştiren tek bir dili kullanabiliriz.
Yeni yetişen programcılar için herhangi bir tavsiyeniz var mı?
Birden fazla dil öğrenin. İki dili karşılaştırıp zıtlıklarını görmek ne kadar ufuk açıcı olabiliyor, inanamazsınız.
Ve son olarak, Python üzerine yapılan hiçbir röportaj aşağıdaki sorular olmadan tamamlanmış sayılmaz:
a. Python’daki girintileme hakkında şu anda ne düşünüyorsunuz?
Kodun okunabilirliği açısından ve dolayısıyla bakım açısından doğru olan bu. Ve kodun bakım yapılabilirliği en önemli şeydir: hiçbir program başlangıçta mükemmel değildir ve başarılı olursa genişletilecektir. Dolayısıyla bakım, gerekli bir kötülük değil, hayatın bir gerçeğidir.
b. Sekme mi yoksa boşluk mu tercih ediyorsunuz?
Kesinlikle boşluk. Tam olarak dört tane (Google stil rehberi iki kullanıyor olsa bile).
Eklemek istediğiniz başka bir şey var mı?
Pek sayılmaz; oldukça kapsamlıydınız. Çok sayıdaki Avustralyalı hayranıma selam söylemek isterim ve bu yıllardan birinde ülkenizi ziyaret edip birkaç konuşma yapacağıma ve biraz da şnorkelle dalacağıma söz veriyorum. :-)