Programcılık gibi bilgi güdümlü mesleklerin bir dejavantajı bulunmakta. Bu tür meslekler sadece bilgiyi taşıyanı yanlarında geleceğe taşırlar. Bilgi de öyle bir kitap karıştırma ile edinilecek bir şey değildir. Çoğu bilgi daha önce edinilmiş bilgiyi temel alır. Yani bilgilenme süreci yıllarca süren ve sağlam bilgisel temellere ihtiyaç duyan bir yapıdır.
Bilginin değeri ona duyulan ihtiyaç ile tartılır. Bu ihtiyaç ise kullanıcısının güncel ihtiyaçları ile doğru ortantılıdır. Örneğin bugün Java dilinin revaçta olmasının tek sebebi, birçok proje sahibinin bu dili tercih etmesidir. Proje sahipleri sahip oldukları gereksinimlerin yani ihtiyaçların en hızlı ve doğru şekilde Java ile tatmin edilebileceğini düşünmektedirler. Bu Java ve sahip olduğu bilgi ekosistemine bugünkü tanıdığımız değeri sağlamaktadır. Java’nın sahip olduğu konum kalıcı mıdır? Değildir! Neden değildir? Çünkü proje sahiplerinin gereksinimleri de piyasa güdümlüdür. Proje sahipleri her zaman piyasa rekabetleri güçlenecek şekilde hareket ederler. Bu onların dogma olmadan teknoloji ve bilgi seçimi yaptıkları anlamına gelmektedir. Yani bugün Java ise, yarın bu başka bir şey olabilmektedir.
Bunun yanı sıra zaman ekseninde bazen teknolojik kırılmalar oluşur. Teknolojik fay hatları olarak isimlendirdigim bu yapılar yeni teknolojilerin ortaya çıkmasını ve eski teknolojilerin tarihe karışmasını sebep olurlar. Bunun en güzel örneğini motorlu araçların icadı teşkil etmektedir. At gücü ile çekilen araçlar ve bu araçların oluşmasını sağlayan bilgi çok kısa bir zamanda hükmünü yitirmiştir.
Özellikle günümüzde teknolojik fay hatlarının en büyük destekçisi piyasa rekabetidir. İnsanlık tarihinin en büyük buluşları hayatı daha kolaylaştırmak ve mevcut ihtiyaçları tatmin etmek için vücut bulmuşlardır. Piyasa aktörleri bu doğrultuda rekabette öne geçmek amacıyla teknoloji fay hatlarının en büyük tetikçileri haline gelmişlerdir.
Teknolojilerin çok hızlı şekilde geliştiği bir çağda yaşıyoruz. Bu bilginin yarı ömrünün çok daha kısaldığı yani çok daha hızlı eskidiği anlamına gelmektedir. Proje sahiplerinin piyasa güdümlü olup, işlerine geldiği şekilde mevcut teknolojileri seçmelerini, teknolojik fay hatlarının çok çabuk yeni teknolojiler doğurmalarını ve bilginin yarı ömrünün düşmesini göz önünde bulunduracak olursak, programcı olarak çalışan kesimi önümüzdeki zamanda ne beklemektedir? Bu sorunun cevabını somut bir örmek üzerinde bulmaya çalışalım.
Şimdi kırklarına gelmiş bir programci hayal edelim. Böyle birisi büyük bir ihtimalle çoluk, çocuğa karışmış ve sorumluluk sahibi birisi olmuştur. Ev yaptırmış ya da satın almıştır. Araba almıştır, onu almıştır, bunu almıştır yani tam anlamıyla tüketim çılgınlığı kültürünün bir parçası haline gelmiştir. Bu şahsın kişisel gelişim haricinde her şey ile kafası dolup, taşmıştır. Bilginin yegane anahtarının kişisel gelişim çabaları olduğunu düşünecek olursak, bu şahsin kendi mesleki geleceği açısından ne kadar zor bir pozisyonda olduğunu görmekteyiz, değil mi? Bu kısmı somut bir örnekle detaylandırmak istiyorum.
Bahsettiğimiz şahsın iyi bir programcı olduğunu düşünecek olursak, mevcut yetileri ve bilgisi güncel gereksinimleri tatmin etmek için yeterli seviyede olacaktır. Kişisel gelişimine yatırım yapacak zamanı bulamayan bu şahıs mevcut bilgisi ile bir sonraki teknolojik depreme kadar mesleğini yapabilecektir. Böyle depremlerden bir tanesi son zamanlarda sessizce oldu ve çoğu programcı bu depremin farkına bile varamadı. Neydi gerçekleşen bu deprem? Tek çekirdekli sistemlerin programlanmasından çok çekirdekli sistemlerin programlanmasına geçiş. Bu deprem ile her şey yerle bir oldu. Proje sahiplerinin gereksinimleri değişti. Birkaç çekirdekli sistemleri programlamakta zorluk çeken biz programcılar, binlerce çekirdeği olan bir sistemi nasıl programlayabiliriz? Kişisel gelişimimize katıksız ve tavizsiz devam ederek.
Kendimden bir örnek vereyim. Yirmi sene önce tekno dinlerken, ebeveynlerimin bu müzik türüne hoş bakmamalarına anlam veremezken, aynı saşkınlığı günümüzün çocuk ve gençlerinin dinlediği müzik türlerine olan yabancılığımda yaşıyorum. Benim anlam veremediğim, kulağıma hoş gelmeyen, beynimin dinlerken hoşnut olmadığı, oluşumunu takip edemediğim ve oluşumunun farkında bile olmadığım yeni bir müzik kültürü oluşmuş. Yani birileri kültürel bir fayı tetiklemiş, bir kültürel deprem olmuş, ben altında kalmışım ve sudan çıkmış balığa dönmüşüm. Bu konudaki hislerimi kısaca bu şekilde ifade edebilirim.
Böyle bir gelişim benim mesleki geleceğim için bir önem taşımıyor. Lakin teknolojik bir fayın tetiklenmesi benim mesleki sonumu getirebilir. Bu tür teknolojik depremler beraberlerinde çok yeni piyasa gereksinimleri ve gereksinimleri tatmin edecek teknolojiler getirirler. Bunu bir fayton tamircisi iken motorun icadı ile motor teknisyeni olmak zorunda kalan birisi ile kıyasladığımızda, durumun ne kadar ciddi olduğunu kavrayabiliriz. Fayton tamircisinin motor teknisyeni olma şansı var. Lakin bu zaman, bilgi ve azim isteyen bir iş. Tek çekirdekli bir sistemi programlayan bir programcının bin çekirdekli bir sistemi programlayabilmek için kat etmesi gereken mesafe çok fazla. Bu sıçrama sadece yıllarca kişisel gelişim sayesinde edinilen bilgi birikimi ile sağlanabilir. Yeni teknolojik depremler olmadan önce bilgi binasının sağlam temeller üzerine inşa edilmesi gerekiyor. Binanın duvarları taş üzerine taş, yani bilgi üzerine bilgi konularak, sağlam örülmeli ve depreme hazır hale getirilmelidir. Teknolojik deprem olduğunda yani yeni nesil programcılara ihtiyaç duyulduğunda, sadece bilgi binası ayakta kalan programcılar ihtiyaç duyulan gereksinimlere cevap verebilecek durumda olacaklardır, çünkü her şeyleri ile hazır durumdadırlar ve istenilen yolda devam edecek yeti ve bilgiye sahiptirler. Peki bahsi geçek örnek programcının durumu ne olacaktır? Kendisi ne yazık ki hayat meselelerinin kurbanı olup, kişisel gelişimine yatırım yapamadığı için teknolojik depremin altında kalacak ve can verecektir. Hiçbir dikili taşı kalmadığı için devam etmesi mümkün değildir. Onun haberi olmadan teknolojik devrim olmuş, sistem değişmiştir.
Bu noktada deprem sonrasında tekrar ayağa kalkarak, meslek hayatıma yeni koşullarda devam edebilirim diyenler olacaktır. Bunun neden bu kadar kolay olmadığını bir örnekle açıklamak istiyorum.
Bir assembly programcısına bir C++ ya da Java hotspot derleyicisinin oluşturduğu assembly kodunu gösterelim. Birilerinin neden bu kadar verimsiz ve kötü assembly kodu yazdığına kesinlikle anlam veremeyecektir, çünkü kendisi bu kodu assembly dilinde çok daha kısa ve verimli olarak yazabilecektir. Bu sebepten dolayı yüksek dillerin kullanımını reddedecektir. Bizim de neden C++ ya da Java dilinde kod yazmanın daha verimli sonuçlar doğurduğunu kendisine anlatabilmemiz mümkün değildir, çünkü meydane gelmiş olan teknolojik deprem assembly programcısının yüksek dillere olan ihtiyacı görmesini engellemektedir.
İki teknolojik deprem arasındaki zaman dilimi kendi ideoloojisi ile o zamanda yaşayanları zihinsel olarak yoğurur. Buna dogmatik bir terbiye diyebiliriz. Bu belli bir şeyleri görmek için yapılmış gözlükler ile dünyaya bakmak gibi bir şeydir. Zihin zaman içinde başka şeyleri göremez hale gelir ya da onların varlığını reddeder. Assembly programcısı örneğinde bu yüksek dillere olan ihtiyacın göz ardı edilmesidir. Doğrudan assembly kodu yazmanın çok daha verimli olduğunu bilen bir zihne yüksek bir dilde nesneye yönelik programlamanın daha verimli sonuçlar doğuracağını anlatamazsınız. Aynı şey cobol programcıları için de geçerli. Assembly ve cobol programcıları ile yüksek dil ihtiyacı ile oluşan teknolojik deprem sonrasında yetişen programcı arasında çok büyük bir kafa yapısı (mindset) farklılığı bulunmaktadır, çünkü her teknolojik deprem zamanla kendi kafa yapısını, düşünüş tarzını ve bakış açısını oluşturmaktadır. İşte eski şartlarda, eski bilgi ve eski kafa yapısı ile programcı olarak devam etmeninin önündeki en büyük engeli bu oluşturmaktadır.
Şimdi bizim tertip programcılara bir göz atalım. Günümüzün programcıları son 20 yılın en kabul gören nesneye yönelik programlama tekniği ile yetişti. İmperatif programlama tarzı ile çok çekirdekli sistemlere hükmedemeyeceğimizi artık sağır sultan bile duymuş durumda. Bu işin yolu fonksiyonel programlamadan geçiyor. Ama nesneye yönelik programlama teknikleri ile büyümüş bir programcı için fonksiyonel programlama çok başka bir dünya. Eline bir kitap alıp, o dünyaya giriş yapmak isteyen bir programcı bunu çok iyi bilir. Fonksiyonel programlama tekniklerini öğrenmek için çektiğimiz çile az değil. Neden? Çünkü kafamız almıyor. Meslek hayatımızın çok büyük bir kısmını imperatif programlar yazarak geçirdik. Artık kafamızda belli kalıplar oluştu. Kınadığımız assembly ya da cobol programcısından hiç farkımız yok. Onların durumuna düştük.
Bu durumu aşabiliriz. Lakin hemen şimdi bu yeni teknikleri öğrenmeye ve uygulamaya başlamamız gerekiyor, çünkü bunun talebi piyasada oluşmaya başladı yani bahsettiğim deprem ve artçılar olmaya başladı. Eğer şimdi öğrenmeye başlamaz isek, deprem sonrasında çok başka bir dünyaya uyanacağız ve gidişata ayak uydurmak için hiç zamanımız olmayacak. Bilgi edinme işi bugünden yarına olan bir sey degil. Uzun vadeli planlanlası ve uygulanması gerekiyor.
Yarı yolda kalmak istemiyorsak, sürekli ve tavizsiz kişisel gelişim uygulamamız gerekiyor. Bunu beceremeyenler iyi programcılar da olsalar, sadece geride kalmış bir dönemin iyi programcıları olarak kalırlar.
EOF (End Of Fun)
Özcan Acar
Özcan Bey merhaba,
Öğrenmek için bir fonksiyonel programlama dilini seçerken metriklerimiz ne olmalı? Sizin önereceğiniz, üzerinde çalıştığınız dil ne olur?
> Bilgi edinme işi bugünden yarına olan bir sey degil. Uzun vadeli planlanlası ve uygulanması gerekiyor.
Bu cümlenizde ifade ettiğiniz plan konusunda sorunlar yaşıyorum. Çok fazla konu olduğu için hangisine yönelerek devam edeceğimi ve nasıl ilerlemem planlamam gerektiğini kestiremiyorum. Siz yol haritanızı nasıl çıkarıyorsunuz?
Teşekkürler
Ben diller arasinda bir ayrim yapmiyorum. Önemli olan dilin temsil ettigi konseptleri kavrayabilmek. Bunlari ayni katerogideki dillere aktarmak kolay. Secme zorunlulugum ya da lüksüm olsaydi Closure ile baslardim.
Ben piyasa trendlerini takip ediyorum. Agirlik verdigim konular soyut anlamda teknik ve yöntemler (fp, oop, design patterns vb.) olsa da, piyasa teknik ve yöntemlerin implementasyonlarina (spring catisi, jee vb) yön veriyor.
Ellerinize sağlık. Teşekkürler bilgilendirme için