C’yi, Dennis Ritchie ile birlikte yazdığı The C Programming Language kitabıyla popülerleştirmeye yardımcı olan ve AWK ile AMPL’nin geliştirilmesine katkıda bulunan bir isim olan Brian Kernighan ile konuştuk.
C’nin doğuşunda bir rolünüz olmadığını söylüyorsunuz, peki sizce kitap olmasaydı dil bu kadar başarılı olur muydu?
Doğru kelime “iddia etmek” değil; “doğruyu söylemek”. C bütünüyle Dennis Ritchie’nin eseridir. Bir dil olarak verimlilik, ifade gücü ve güç arasında mükemmel bir denge sağladığı için C kendi başına da gayet iyi bir noktaya gelirdi. Kitap muhtemelen yardımcı oldu, ancak bence nihai kabullenilmesinden ziyade, dili erken dönemde yaymasında daha etkili oldu. Elbette, uzmanlığı ve yazarlığıyla Dennis’in ortak yazar olması son derece büyük bir avantajdı.
Rob Pike ile birlikte yazdığınız ayrı bir kitap olan The Practice of Programming’i yayımlamanızın üzerinden on yıl geçti. Programcıların çalışma biçimi, yayının herhangi bir bölümünü değiştirmeyi düşünecek kadar değişti mi?
Günümüzde programlama, küçük ayrıntıların ayrıntılı mantığından ziyade, giderek daha fazla büyük yapı taşlarını bir araya getirmeye dayanıyor; elbette bunların da hâlâ yeterince olduğu durumlar var. Bugünün tipik bir programcısı, büyük bir paketten hangi yöntemleri çağıracağını anlamaya çalışarak çok zaman harcıyor ve muhtemelen boşlukları doldurmak için Eclipse ya da Xcode gibi bir IDE’ye ihtiyaç duyuyor. Düzenli kullanımda olan daha fazla dil var ve programlar sıklıkla birden çok dilin birleşiminden oluşan dağıtık yapılar hâlinde.
Tüm bu gerçekler hayatı karmaşıklaştırıyor, ancak her şey yolunda gittiğinde oldukça etkileyici sistemleri hızlıca kurmak da mümkün. The Practice of Programming’de ayrıntılı konularla ilgili verilen tavsiyelerin sağlam olduğunu ve her zaman öyle kalacağını düşünüyorum – doğru algoritmaları ve veri yapılarını bulmak gerekir, test etmek ve hata ayıklamak gerekir, performansla ilgilenmek gerekir ve iyi gösterim gibi genel konular hayatı her zaman çok daha iyi hâle getirir. Ancak en azından şu an için, ne benim ne de Rob’un yeni bir kitap için yeterince yeni ve iyi fikre sahip olduğumuzdan emin değilim.
Programlamaya yeni başlayan gençler için ne tavsiye edersiniz? Örneğin sizin sahip olduğunuz gibi bir COBOL temeli önerir misiniz?
Her dil size bir şey öğretir; bu yüzden bir dil öğrenmek asla boşa gitmez, özellikle de yalnızca sözdizimsel ayrıntılardan daha fazlası bakımından farklıysa. Alan Perlis’in pek çok bilgece ve nükteli özdeyişinden biri şöyle der: “Programlama hakkında düşünme biçiminizi etkilemeyen bir dil, bilinmeye değmez.”
Öte yandan, bugün çoğu insan için COBOL’u birincil odak noktası olarak önermem – ben onu bir yaz işi kapsamında ve çok uzun zaman önce öğrendim; bana yeni bir şey öğrettiği için değil (gerçi bunu da yaptı). Ne olursa olsun, programlamayı öğrenmenin yolu kod yazmak, onu yeniden yazmak, kullanımda görmek ve tekrar yazmaktır. Başkalarının kodunu okumak da son derece değerlidir. Elbette tüm bunlar, kodun iyi olduğunu varsayar; ne kaçınılması gerektiğini öğrenmek dışında, çok sayıda kötü kod okumanın büyük bir faydasını görmüyorum ve tabii ki insanın kendisinin de kötü kod yazmaması gerekir. Bunu söylemesi yapmasından kolaydır; bu yüzden yeniden yazmayı özellikle vurguluyorum.
Programlama dünyasının ikonları olarak kimleri görüyorsunuz?
Tamamen kişisel nedenlerle, tanıdığım ya da çalışmalarını iyi bildiğim insanları düşünüyorum. Ken Thompson ve Dennis Ritchie benim ve sizin hayatınızı değiştirdi; onlar olmasaydı bu konuşmayı yapıyor olmazdık. Büyük dilleri geliştirmiş kişiler de bu gruba girer; örneğin hepimiz Bjarne Stroustrup, James Gosling, Larry Wall ve Guido van Rossum tarafından geliştirilen dilleri düzenli olarak kullanıyoruz. Ve elbette Don Knuth ve Fred Brooks gibi süper ikonlar da var. Ancak bu kişisel bir listedir; çalışmaları etkili olmuş daha pek çok kişi vardır ve sizin listeniz elbette farklı olacaktır.
Bell Labs, BT açısından dünyanın en etkili isimlerinden bazılarını yetiştirdi – sizce hâlâ önemini koruyor mu? Ünlü geçmişini aşmak için ne yapabilir?
Bell Labs, onlarca yıl boyunca olağanüstü bir yerdi; ancak bazı yıllar önceki telekom çöküşü sırasında, kurumsal sahibinin daralan pazarlarla başa çıkmak zorunda kalması nedeniyle zor zamanlar yaşadı. Bell Labs’te harika insanlar var, ancak operasyon eskisine göre çok daha küçük; bu da büyük bir etki çıkarma olasılığını azaltıyor, her ne kadar bunun hâlâ mümkün olduğu kesin olsa da – tek gereken, iyi bir fikre sahip bir ya da iki kişi.
Şu sıralar ne üzerinde çalışıyorsunuz? Yeni kitaplar ya da dillerle ilgili çalışmalar bekleyebilir miyiz?
Okul yılı boyunca kendimi tamamen öğretmeye ve öğrencilerle çalışmaya kaptırmış oluyorum. Yaz aylarında ise gerçek dünyada zaman geçirmeye, terapi amaçlı ve belki de yararlı bir hedef için kod yazmaya çalışıyorum. Bu eğlenceli, ancak şu ana kadar bir kitaba yol açmadı; yine de fikirler demleniyor. Alan-özgü dillerle ve daha genel olarak kod yazmayı kolaylaştıran araçlarla hâlâ çok ilgileniyorum. Ayrıca, eski Unix komut satırı dillerinden bazılarının, özel amaçlar için, web sayfalarında ikinci bir hayat bulabileceği bazen bana öyle geliyor. Bu yüzden zaman zaman bunlarla oynuyorum ya da yarı pişmiş bir fikri bir dönem boyunca keşfetmesi için bir öğrenciyi cezbetmeye çalışıyorum.
Unix gibi, İnternet üzerindeki bazı biçimlendirici etkilerin geliştirilmesi sürecine yakından tanıklık ettiniz. Günümüz bilişiminin ve dünyanın bağlantı kurma biçiminin itici güçleri olarak neleri görüyorsunuz?
İyi ya da kötü, bugün itici gücün, bir şeyi mümkün olduğunca hızlı biçimde İnternet üzerinden çalışır ve kullanılır hâle getirmek olduğu görülüyor. Geriye dönüp bakıldığında ne kadar basit olursa olsun, iyi bir fikir insana ün ve servet getirebilir (Google, Facebook, Twitter ve daha niceleri buna örnek). Ancak bu, ancak bir altyapı olduğu için işe yarıyor: Unix/Linux ve GNU araçları gibi açık kaynaklı yazılımlar ve web kütüphaneleri, son derece ucuz donanımlar ve neredeyse ücretsiz iletişim. Ayrıca, Amazon’un web servisleri gibi, ölçeklenebilir sistemlerde de bir artış görüyoruz; burada çok küçük başlayıp, ihtiyaç ortaya çıktıkça hızla ve gerçek anlamda bir sınır olmadan büyüyebiliyorsunuz. Bu durum, Multics’in bir bilgi hizmeti fikrine benzemeye başlıyor.
AWK ve AMPL, geliştirilmesine katkıda bulunduğunuz iki dil. Yardımcı olmak isteyeceğiniz başka diller var mıydı?
Elbette, başarılı bir projenin parçası olmak her zaman güzeldir; dolayısıyla doğal olarak, iyi olan her şeye katkıda bulunmak isterdim. Ancak dâhil olduğum birkaç proje konusunda oldukça şanslıydım. Bunun büyük kısmı, birinci sınıf çalışma arkadaşlarına sahip olmaktan geliyor (AWK için Al Aho ve Peter Weinberger, AMPL için Bob Fourer ve Dave Gay).
Günümüzde bilgisayar bilimleri aracılığıyla topluma büyük katkılar sağladığını düşündüğünüz şirketler ya da kişiler kimlerdir?
Microsoft’un büyük başarısı sayesinde mümkün olan vakıfları nedeniyle Bill ve Melinda Gates’i özellikle anabilirim. Hayırsever çalışmaları, zor ama potansiyel olarak çözülebilir sorunlara yöneliktir ve çok az kişinin ulaşabileceği bir ölçekte yürütülür. Bundan sonra, çok büyük miktarda bilgiyi bu kadar kolay erişilebilir hâle getiren Google’dan söz edilebilir; bu erişim dünyayı büyük ölçüde değiştirdi ve muhtemelen değiştirmeye devam edecek.
Perl, Java ve Ruby dilleri hakkında görüşleriniz nelerdir?
Java’yı bir miktar kullanıyorum; Princeton’da ve daha birçok yerde giriş düzeyi bilişim için standart dil. Bana göre hantal ve ayrıntıcı, ancak bir kez başladıktan sonra oldukça akıcı ilerliyor. Perl’i şu noktada pek kullanmıyorum – kişisel çalışma setimde yerini Python aldı – ancak bu kadar az karakterle bu denli yoğun hesaplamayı başka hiçbir dil sunmuyor. Ruby ile çok fazla yazmadım; açıkça büyük bir çekiciliği ve bazı ilgi çekici fikirleri var, ancak şu ana kadar hızlıca bir program yazmam gerektiğinde, işi bir an önce bitirmek için daha aşina olduğum başka bir dili kullanıyorum. Ama bu günlerden birinde Ruby’yi de listeye ekleyeceğim.