Yazılımcıların beceremedikleri bir şeyleri öldürme tutumuna bir tepki.
Bir süredir medium’da hadi bakalım bu framework öldü, helelöy şu programlama dili öldü, amaney şunun sonu geldi tarzı başlıklardan sıkıldım.
Ya özellikle bakıyorum tamam mı. Adam yazmış “C için yolun sonu”, açıyorum okuyorum hani neyi anlatmış yazısında diye, iddiaları şunlar:
- C compilerları oldukça eski
- C hala 1989’dan kalan C89 standartı ile yazılıyor bu yüzden çok kısır bir dil (kısır dedim bak canım çekti, böyle bol marullu ve biber salçalı)
- C’de modern uygulamalar yazılmıyor, C sadece gömülü programlama için kullanılabilir.
- C programlama dili günün ihtiyaçlarına karşılık veremiyor. OOP (nesne yönelimli programlama) bile yok
Tepkim ektedir.
Peki çözümü nedir,
— “Rust” diye bir dil var.
— Eee
— C’den iyi
Amacım Rust topluluğuna çatmak değil (başka zamana çatacam bak aklımda, ama şimdi değil) ancak yani bir insan en azından 2 sayfa açar dökümantasyon okur. C17 standartasyonunu, C2X’i görür utanır utanır. GCC ve CLANG gibi iki compilera bakar bunlar neymiş yeniliyor mu der alır cevabını oturur. Hadi hepsini geçtim, Rust diyelim ki daha iyi özellik bakımından, hemen öldürmek hangi akla yatıyor. Yani 3–5 okunma kazanmak için maymun olduğuna değiyor mu merak ediyorum.
Deprecation Olgusu ve Pascal
Teknolojide hiçbir zaman tamamen geçerliliğini yitirme gibi bir olay çok çok zordur. Veya kullanılan yaygın bir kütüphanenin, veya bir dilin bir anda ortadan yokolması gibi bir durum çok sık yaşanmamaktadır. Genellikle bir ihtiyaç için üretilen çözüm, o ihtiyacı karşılamaya yeterli gelmezse zaman içinde ya aynı çözümün üzerine gidilerek sonuca yönelik eklemeler yapılır veya baştan yeni bir çözüm üretilir. Örneğin bugün hala Java 8’in kullanımı azalsa bile Android başta olmak üzere pek çok sistem için genelgeçer bir Java sürümü konumunda.
Açık kaynak projelerde şunu net bir şekilde görmekteyiz, uzun süreler devam eden projelerde, projeler bir maintainer üzerinden değil topyekün bir topluluk üzerinden gider ve topluluk mevcut hatalara karşı çözümler üretme konusunda ne kadar başarılı olursa proje de o nispette o kadar uzun ömüre sahip olur. Zaman içerisinde kullanıma dair değişimler elbet olur veya API üzerinde çok sayıda değişim elbet yaşanacaktır ancak bu konuda da devreye “deprecation” olgusu giriyor.
Pek çoğumuz hatırlar, Python 3’ün ilk çıkışında biz şunu yaşamıştık, gerçek manada bir programlama dili değişimi yaşandı, play her ne kadar biğr dildeki standartların değişmesi gibi görünse de topyekün bir dil ve bu dile ait gerek yönergeler gerekse veri tiplerinde çok önemli değişimler oldu. Burada devamlılığı sağlamak amacıyla bazı özellikler “deprecated” bayrağı altında projelerde yer buldu. Bazı projeler kendi parçalarını Python3 tarafına geçirirken çok büyük sorunlar da yaşamadı değil, benim de yakinen yaşadığım “urlgrabber” kütüphanesinin maintainerlerinin projeyi bırakması yüzünden bu kütüphaneyi kullanan pek çok proje büyük sorunlarla uğraştı, halihazırda yazılmış indirme yönetimi implementasyonlarını sıfırdan yazmak zorunda kaldı. Ancak maintainership dediğimiz olay topluluk tarafından devam ettirilen projeler günün sonunda kendi kodlarını Python3 içerisine eninde sonunda dahil etmiş oldu ve Python dilinin 2. versiyonu hayatımızdan çıkarılmış oldu. Burada zorlama ile ölmesi gibi bir durum söz konusu değil, zamana yenik düşmesi ile kullanımının bitmesi durumu söz konusu ancak şuan bile bazı işler için hala Python2 kullanılmakta. Bu denli planlı bir göç bile tam manası ile Python2’nin yok olması için yeterli olmadı..
Bu olayın bir diğer örneği ise Java (tabi ki Javasız olmaz). Seneler önce yaşanan Java LTS desteği dalgası bugün hala devam edenJava’nın farklı sürümleri ve bu sürümler arasındaki geçişin yapılamaması sorunlarını doğurdu. Ancak bu karmaşaya rağmen Java hala şirketler tarafında Java’nın kullanılırlığını tamamen bitirmedi. Topluluğun aktif rol alması ile Java özellikle Apache tarafının çözümlerinde kendine yer bularak farklı bir tarafa yönelmesine sebep verdi. Şu an Apache Kafka başta olmak üzere Java’nın pek çok farklı alanda kullanımı var ve her ne kadar davul zurna ile “Java öldü” diye bir şeyler yazıldı ise de java sadece form değiştirdi.
Bir diğer farklı olay ise 90’ların favori dili Pascal tarafında oldu. Eski Pascal geçmişte bugünün Java’sı gibi endüstride gelir geçer dil halinde senelerce kullanıldı. Covid19’un en çok ölüme sebep verdiği grup da yaşlı nufüsumuz bildiğiniz gibi. Ve bu nufüs arasında tabi ki bilgisayar mühendisleri var. 90’larda bir kere Pascal öldü. Ancak bu ölüm daha çok Objective Pascal ve VisualBasic olarak adlandırılan iki Pascal türevi dile yönelişe döndü. Ancak Covid19’un ardından Pascal geliştiricilerine olan ihtiyaçta bir patlama yaşandı. Ancak günümüz senaryosunda Pascal’ın kısa süreli bir büyümesi ve talebi söz konusu olduğunda, Eski Pascal’ın neredeyse hiç kullanılmadığını ve geliştiriciler arasında dilin yeni işler için pek tavsiye edilmediğini ve hatta Object Pascal’ın bile piyasadan kaybolmanın eşiğinde olduğunu bilmelisiniz. Ancak bunlara rağmen Pascal dili hala ölmedi, hatta bazı bankacılık altyapılarında hala Pascal kullanılıyor, her ne kadar bugünlerde altyapıyı farklı dillere kaydırmaya çalışsalar bile.
Sözkonusu pascal gibi eski ve modern olmayan bir dil olduğunda bile 30 sene içerisinde sektörde vazgeçilmesi zor bir konumu oluyor.
Bu durumu ise bir tek kuralla anlatmamız mümkün: “Çalışıyorsa dokunma”. Her ne kadar biz faniler Rust’un gelişi ile her şeyi “oksidize” etmeye çalışsak da bir işi iyi yapan bir yöntem mutlaka vardır. Eğer ki bu yöntem o anki işimizi görmekte yeterli ise yeniden bir kütüphane oluşturmak ekstra bir özellik katmayacaksa bizlere, angarya iş çıkaracaktır manasına gelir. Case specisific (yazılarımı İngilizce düşünüp Türkçe yazdığım için nasıl çevireceğimi bilemedim) problemler için geliştirilen bir çözüm bütün sorunlarımızı sihirli değnek değmiş gibi çözmeyecektir.
Bir diğer odaklandığım perspektif ise birkaç aptal bir işi yapan iki farklı kütüphaneden birisi başka bir dilde daha hızlı diye öteki dili ölü ilan etmesi. Şimdi aynı durum Javascriptin başına gelmekte. Webassembly olarak adlandırılan farklı bir yöntemin ortaya çıkması, Javascript’in sonunun geldiğine delalet olarak adledildi ve bazı “medium” olan geliştiriciler Javascript için ömür analizi, kalan yaşamına dair hesaplamalara giriştiler. 3 vakte kadar da öldürdüler.
Bilgisayar Dünyasında Popülizm
Popülizm kelime manası olarak halk çıkarcılığı ve halk yağcılığı olarak adlandırılabilir. Bilgisayar dünyasında “bence” şu an bir popülizm durumu sözkonusu. Bu popülizm örneğin kendini OOP karşıtları, veya microservice hayranları gibi başlıklar altında kendine yer buluyor. Şirketler trend adı ile adlandırılan çözümlere yöneliyor ve hiç kimse bir bilgisi bile olmasa biz de şunu kullandık demek için pek çok gereksiz şeyi projesine dahil ediyor.
Son günlerde yaşadığım bir konuyla buna örnek vermek istiyorum. Bir proje için yapay zeka ve deep learning kullanalım gibi bir öneri çıktı gruptan. Çünkü yapacağımız şey bir veri seti ile gelen veriyi karşılaştırıp sonuç çıkartmak ve araştırmalarımızın tamamında kaynaklara sadece “yapay zeka” kullanın deniliyor ancak herhangi bir yol göstermekten ziyade herkes evire çevire veri seti oluşturun, yok efendim o veri setini şunla eğitin, yok RTX daha iyi eğitiyor, şu kadar cuda çekirdeği lazım. İyi hoş da babam, bu işi nasıl yapacağız sorusuna cevap yok.
Yapay zeka konusunda ciddi manada çalışmış iki insana kaynak olarak başvurduk. İlki Vasib Vagiboğlu Nabiyev. Vasib hocanın kitabını ve makalelerini okuyup yapay zekayı ne için kullanacağımızı araştırdık. Belli bir bilgi birkimi elde ettik ve sonuçta şuna ulaştık: “Yapay zekayla alakalı herkes bir şeyler söylüyor, herkes bir bilgi bildiğini iddia ediyor, ancak kimse hiçbir şey bilmiyor.”
Sonrasında okulumuzda bu konuda doktora yapmış nadide hocalarımızdan Mustafa Coşkun’a danıştık. Sonuçta ise yapay zekadan daha kullanışlı bir yöntem bulduk. Evet daha kullanışlı. Lineer hesaplama yöntemleri ile anomali tespitinin bizim için daha avantajlı olduğunu hesapladık. Sonuçta şunu söylemek istiyorum. Bazen çok konuşulan “Yapay zeka” gibi çözümler bizim sorunumuza tek, biricik ve yegane çözüm değildir olamaz da.
Buradan şuraya geleceğim, bilgisayar teknolojilerinde de benzeri bir popülizm etkisi görünmekte. Ya abi sen alışveriş sitesisin, veya sen dizayn yapan bir studyosun veya siber güvenlik şirketisin, sen niye yapay zeka, makine öğrenmesi ile alakalı çalışma yapıyoruz diyip yapay zeka ile alakalı makaleler paylaşıyorsun. Eğer mevcut bir sorununa çözüm oluşturmuyorsa sen neden bunlar hakkında neden bir şeyler yazıyorsun (ki zaten çözüm oluştursa bu kadar jenerik yazılar paylaşmazsın, işine nasıl yaradığını anlatıp bir bakış oluşturmak başka, ancak çok bilindik sitelerden yapay zeka ile alakalı 3–5 yazıyı Türkçeye çevirip bu kadar genel yazılar paylaşmanın mantığı ne)
Veya bir programlama dili spesifik olarak senin için bir çözüm oluşturabilir. Google, Github’da depolarında 20’den fazla farklı dil kullanılarak oluşturulmuş bin kadar depo var, Google her bir dil için ayrı holiganlık yapıyor mu? Veya frontend’de Golang işe yaradı diye tüm Chromium’u Golang’e geçirmiyor. Veya Android içinde Java kullanmanın pek çok faydası var diye ChromiumOS’un kendisinde Java’ya tapmıyor. Ancak gördüğüm bazı örneklerde, bir dil bir olay için işe yarıyorsa her şeyi o dile geçirelim şeklinde popülist bir kafa ile hareket eden tonla şirket ve geliştirici var. Bu iş böyle bir iş mi? Sürekli aynı projeleri farklı dillerle yazıp durmak, elinde çubuk ile dışkı karıştırmaktan farklı mı? Bu sebeple bir dil bir iş için kötü başka dil iyi diye, bir dili hadi ölü diye yazayım. Popülizm hiçbir soruna çözüm üretmez ama işte, insanların da bu kolayına gidiyor demek ki…
Sonuç olarak bu tip şu öldü bu bitti şunun başına şu geldi gibi medium postlarını engelliyorum. Size de tavsiye ederim.