← A–Z Röportajları

Objective-C

Şu anda en gözde programlama dillerinden birine göz atıyoruz: Objective-C. 1995’te Steve Jobs’un şirketi NeXT tarafından satın alınan bu dil, bugün hem Apple’ın Mac OS X’inin hem de iOS platformunun temelini oluşturuyor. iPhone, iPad ve App Store’un popülaritesi sayesinde, dil mobil uygulamaların geniş kitleler için geliştirilmesi ve sunulmasının vazgeçilmez bir parçası hâline geldi.

Burada, dilin ortak geliştiricisi Brad Cox ile nesne yönelimli programlama, C++ ile farkları ve neden programlama dilinin nihayetinde önemli olmadığı üzerine konuşuyoruz.

Objective-C öncesi ve sonrası dahil olmak üzere, geçmişiniz ve programlama deneyiminiz hakkında bize kısa bir özet verebilir misiniz?

Lisansüstü eğitimden (matematiksel biyoloji) sonra akademiye uygun olmadığımı fark ettim ve altın kaplama haber merkezi otomasyon sistemleri geliştiren iki başlangıç işi aldım (Toronto Star ve Chicago Tribune). Bu işler beni C ve Unix ile tanıştırdı. Daha sonra Tom Love ile birlikte ITT ileri programlama laboratuvarlarına katıldım.

Objective-C’nin nasıl ve ne zaman ortaya çıktığına dair kısa bir zaman çizelgesi sunabilir misiniz?

Objective-C’nin atasını, Byte dergisinin Smalltalk-80 makalesi yayımlandıktan hemen sonra (Ağustos 1981) ITT Research Laboratory’deyken başlattım. Bunun adı OOPC: Object-Oriented Preprocessor idi; çünkü başlangıçta sed, awk, C derleyicileri gibi sıradan Unix araçlarının hızlıca bir araya getirilmiş bir düzenlemesiydi.

Kısa bir süre sonra Tom ve ben Schlumberger Research Labs’e katılmak üzere ayrıldık, ancak yaklaşık iki yıl sonra ayrılıp Stepstone’un atası olan Productivity Products International’ı kurduk. Hemen yacc/lex araçlarına dayanan düzgün bir ön-derleyici üzerinde çalışmaya başladım ve bunu yaklaşık altı ay sonra; hatırladığım kadarıyla 1982 civarında çalışır hâle getirdim.

O sıralarda Bjarne Stroustrup çalışmalarımızı duydu ve Bell Labs’te konuşma yapmam için beni davet etti; o zaman C++ üzerinde çalıştığını öğrendim. Nesne yönelimlinin ne anlama geldiğine dair tamamen farklı anlayışlarımız vardı. O, daha iyi bir C istiyordu (silikon üretim hattı gibi). Ben ise, başlangıçta C’de üretilmiş bileşenleri daha büyük ölçekli yapılar oluşturmak için birbirine lehimlemenin daha iyi bir yolunu istiyordum.

Objective-C, popüler Apple platformları ve gelişen üçüncü taraf geliştirici topluluğu sayesinde açıkça büyük bir dil hâline geldi. Bunun bu ölçüde tanınan bir dil olacağını hiç düşündünüz mü?

Pek sayılmaz. Objective-C’ye hiçbir zaman bir dil olarak özel bir odaklanmam olmadı; tıpkı devre mühendislerinin lehim havyalarıyla özel olarak ilgilenmemesi gibi. Benim ilgim her zaman yazılım bileşenlerindeydi, onları inşa etmeye yarayan araçlarda değil.

Sizi ve suç ortağınız Tom Love’ı dili ilk etapta geliştirmeye iten neydi? Bu, C++’a mı yoksa C’ye bir tepki miydi?

Biz başladığımızda C++ yoktu. Bu, C++’a değil C’ye ve C’nin yeniden kullanılabilir bileşenler inşa etmedeki sınırlamalarına bir tepkiydi.

C’nin sunduğu tek kapsülleme araçları, uygulamalar için yapı taşı olarak makrolar ve fonksiyonlardır. Objective-C başlangıçta nesneleri ekledi, daha sonra paketler geldi. Destek kütüphanesi olarak Taskmaster adlı hafif iş parçacıklarını (mini uygulamalar) ekledim.

Ağ o günlerde çok yeni olduğu için SOA nesnelerine benzer bir şey eklemek hiç aklımıza gelmedi. Ayrıca, C bağlayıcısından uzak durmaya (şimdi düşünüyorum da belki gereğinden fazla) çalıştığımız için OSGi’ye benzer bir şeyi de hiç düşünmedik.

Dili geliştirmenizden önce Smalltalk konusunda herhangi bir uzmanlığınız var mıydı?

Hayır. Bildiğim her şey Byte dergisindeki makaleden ve geliştiricileriyle etkileşimden geliyordu. Chicago Üniversitesi’nde Adele Goldberg’i tanıyordum.

O dönemde geliştiriciler arasında nesne yönelimli programlama hakkında genel düşünce nasıldı?

Nesne yönelimli programlama, araştırma laboratuvarları dışında büyük ölçüde bilinmiyordu. Objective-C’yi OOP’yi “fabrika zeminine” taşımak için geliştirdim.

Bunda başarılı olduğunuzu düşünüyor musunuz?

Kesinlikle.

Dili sürdürme konusunda herhangi bir pişmanlığınız var mı; yani dilde çözemediğiniz ve keşke çözseydim dediğiniz problemler oldu mu?

Hayır. Çöp toplamanın eksikliği en başından beri bilinen bir sorundu, ancak insanların başta C’yi seçme nedenlerinden ödün vermeden kaçınılması mümkün olmayan bir durumdu.

1995’te Objective-C’nin haklarını Steve Jobs’un NeXT şirketine satma konusunda herhangi bir endişeniz oldu mu?

Pek sayılmaz.

NeXT’in satın alması olmasaydı Objective-C’nin bugün hâlâ var olacağını düşünüyor musunuz?

Muhtemelen hayır.

Objective-C 2.0’ın özgün dilinize kattıkları hakkında ne düşünüyorsunuz? Hâlâ herhangi bir anlamda “sizin” diyebilir misiniz?

Onu hiçbir zaman herhangi bir anlamda “benim” olarak görmedim; özellikle de duygusal olarak. O bir lehim tabancasıdır. Ayrıca onu inşa etmeye sadece ben değil, pek çok başka insan da katkıda bulundu.

Satın alma sonrasında Objective-C’nin evriminde kayda değer bir rol oynadınız mı?

Pek sayılmaz. Daha büyük granülerlikteki bileşenlere yöneldim; özellikle SOA ve OSGi.

Birçok kişi Objective-C ile Java ve Flash’in ActionScript’i gibi daha sonraki diller arasında benzerlikler kurdu. Bu diller arasında doğrudan bir bağlantı görüyor musunuz, yoksa benzerlikleri başka bir şeye mi bağlıyorsunuz?

Anladığım kadarıyla Java’nın geçmişi ve arayüzleri Objective-C protokollerinden esinlendi. Ancak onları da ben geliştirmedim; bu Steve Naroff’un katkısıydı. Geri kalanını da ben geliştirmedim; Smalltalk’tan alabileceğim her şeyi aldım.

Yazılımı gerçek bir mühendislik disiplini hâline getirmeyi hedeflediğinizi söylüyorsunuz. Sektördeki bazıları bunun zaten böyle olduğunu söyler; sizce neden olmayabilir ve bunu ne düzeltebilir?

Yazılım, ilkel çamur kulübelerin mühendislik olduğu anlamda mühendisliktir. Her şeyin belirli bir şantiyede bulunan çamurdan üretildiği bir durumda, etrafında bir mühendislik bilimi inşa edilecek tekrarlanabilir bir şey yoktur; çünkü her şey benzersizdir ve hiçbir şeye güvenilemez.

Yazılımı bir mühendislik disiplini yapmak, gerçek tuğla inşaatını benimsemeyi, güvenilir bileşenleri birleştirerek inşa etmeyi gerektirir. Tam olarak bu nedenle farklı granülerliklerde bileşenlerin peşinden koştum; önce Objective-C ile nesneler, sonra SOA servisleri ve en son OSGi.

Teknik bilgi, kişinin programlama çalışmaları ve çevresindeki toplumu düşünme biçimi arasındaki ayrım, birçok programcının düzenli olarak geçtiği bir sınır değil. Bunu bir programlama dilini geliştirmenin granülerliğine mi, yoksa baştan beri bu kavramlara duyulan genel bir ilgiye mi bağlıyorsunuz?

Programlama, (yalnız yapılan kodlama dışında) sosyal ve örgütsel bir çalışmadır. Programcılar, başkalarının kullanması için (farklı granülerliklerde) bileşenler üretir. Benim ilgim hiçbir zaman bunu yapmaya yarayan araçlarda (dillerde) olmadı; atomlar yerine bitlerden oluşan yeni bir mal türü için bunu teşvik edecek teşvik yapılarındaydı.

Programlama dillerinin ve geliştirici topluluğunun geleceğini nasıl görüyorsunuz? Objective-C dâhil modern dillerde, nesne yönelimli programlama gibi doldurulması gereken büyük boşluklar var mı?

Programlama dillerini kullanmak çamur tuğla mimarisi gibidir. Çamur tuğla mimarisinin geleceği daha iyi çamur karıştırıcılar (programlama dilleri) değildir. Gelecek, gerçek tuğlalara geçiştir; yani test edilmiş, sertifikalandırılmış, güvenilir bileşenler. Bu, özellikle Apple’da gerçekleşmeye başlıyor; muhtemelen başta Objective-C’ye yönelmelerinin nedeni de buydu. Örneğin, iPhone geliştirme çok az yeni bileşen inşası içerir; daha çok Apple’ın hazır bileşenlerinin bir araya getirilmesinden ibarettir. Benzer eğilimler, SOA bileşenleriyle bağlantılı olarak DoD’de de görülmektedir.