14 Nisan 2015 Salı

Farklı bir çok teknoloji, programlama dili bilmek, öğrenmek üzerine

Yazılıma gönül vermiş, programlamayı seven yazılımcılar yeni programlama dilleri, yeni çatılar ( frameworks ) öğrenme konusunda çok heveslidirler. Doğaları gereği yenilikçi, araştırmacı oldukları için zaten bu mesleği sevmişlerdir. Yeniliklerle karşılaştıklarında onlara yeni dünyaların kapıları açılır. "İşte tam da aradığım buydu" diye haykırdıklarını duyabilirsiniz. Çünkü zaten denedikleri, onlar gibi önceden bazı sorunlarla karşılaşmış girişimci, yaratıcı kişilerin bunlara buldukları çözüm üzerine geliştirdikleri yeniliklerdir. Örneğin 80'lı yılların sonlarına kadar, yani C++ dilinin yaygınlaşmasına kadar yazılımcılar, C, Pascal gibi prosedürel programlama dilleri ile çalışıyorlardı. Bu dillerin eksiklerini gidermek üzere nesneye dayalı programlama metodolojisi geniş bir kabul gördü. C++ programlama dili, 90 yılların sonlarına kadar en yaygın kullanılan dil olma özelliğine sahipti. Java programlama dili ise, C++ dilinin bazı eksik ve yanlışlarını düzelterek, bu dilin syntaxını alarak oluştu. Bu eksiklikler konumuz dışı, fakat örneğin bir örnek vermek gerekirse, Java otomatik garbage collection özelliği ile, nesnelerin bellekten silinmesi görevini programcıdan alıp kendi üstlenerek bir gelişim getirdi. Yine son zamanlarda, eski yıllarda pek fazla önem verilmeyen fonksiyon programlama metodolojisi yükselişe geçti. Java dilinde multi-threading kod yazmak ve bu nedenle oluşan hataları önlemek, çok zordur. Fonksiyon programlamanın, değeri değişmeyen nesneler ( immutable objects ) özelliği sayesinde, multi-thread programlama yapmak çok daha basit ve hatasızdır. Büyük verileri işlemek, fonksiyon programlamanın paralel işleme özelliği sayesinde daha basittir. Bu gibi nedenlerden dolayı fonksiyonel programlama ve buna bağlı Scala, Clojure, Python gibi dillerin kullanım oranları gün geçtikçe artmaktadır.

Java şu anda dünyanın en yaygın kullanılan programlama dilidir. Arkasında çok büyük bir topluluk ve destek bulunmaktadır. Yaklaşık 20 yıldır, büyük bir gelişim ve olgunlaşma göstermiştir. Java ile yazılmış ve yaygın kullanılan bir çok çatı bulunmaktadır. Canlı ortamda yer alan ve insanlara hizmet eden milyarlarca satır kod vardır. Eclipse, IntelliJ gibi çok güçlü ve programcıların işlerini çok kolaylaştıran IDE desteği vardır. Java konusunda yüzlerce kitap, makale, kod örnekleri her yerde bulunabilir. Karşılaşılan sorulara yanıtlar çok kolayca internette bulunabilir. Büyük ihtimalle, bunlar çoktan StackOverflow'da yantılanmıştır. Böylesine büyük bir yaygınlık, güç, ister istemez Java'yı bir numara yapmaktadır.

Yeni bir programlama diline yaklaşım yukarıda saydığım nedenlerden dolayı şirketler, yöneticiler tarafından çok hoş karşılanmayabilir. Tecrübe eksikliği, ne ile karşılaşılacağının bilinmemesi, döküman eksikliği, internetteki kaynak eksikliği, bu konuda bilgi ve tecrübesi olan yazılımcıların fazla bulunamaması gibi nedenlerden dolayı haklı olabilirler. Yenilikçi programcılar, yeni bir dil, yeni bir çatı konusunda proje başlarında genelde ısrarcı olabilirler. Fakat ne yazık ki, bu desteği fazla bulamazlar, hatta çok ısrarcı olurlarsa, kendilerine şu söylenebilir: "Burası okul değil, işlerin hızlı ve kaliteli çıkması için para alıyorsunuz." İşte bu acı, katı ve bir o kadar da haklı gerçek karşısında yapacak bir şey yoktur. İş veren, iş ekipleri sizin ne teknolojileri kullandığınız, neler öğrenebileceğiniz gibi konulardan daha çok, iş ne kadar zamanda, hangi kalitede çıkacak? İsteklerimi tam olarak ( Genelde daha fazla olması da istenir ) karşılayacak mı? buna bakar.

Fakat diğer bir tezat ise, işe alınacak yazılımcılardan gerekli olsun, olmasın bir çok konuyu, dili, çatıyı bilmesi beklenir. Öz geçmiş belgenize ne kadar çok farklı madde yazarsanız, o kadar saygı görürsünüz. Buradaki bakış açısı da şudur: Demek ki, bu yazılımcı çok farklı konuları merak etmiş, bunları öğrenmek için zaman ve çaba harcamış. Bu gayretiniz takdir görür. Bu da bence haklı bir sebeptir. İş yerinizde kullansanız da, kullanmasanız da farklı şeyler öğrenmek sizi her zaman geliştirecektir, size farklı bakış açıları, farklı yaklaşımlar kazandıracaktır. Kısacası işinizi yaparken, alet çantanızı zenginleştirecektir.

Bu gelişi güzel, bir anda aklıma gelen konuyu özetleyecek olursam: Öğrebildiğinizi öğrenin derim. Bu sizi güçlü kılacaktır, ufkunuzu açacaktır. Fakat öğrendiklerinizi iş yerinizde aktif olarak hemen kullanmaya başlayabilir misiniz? Bence çok zor. Belli bir zaman, olgunluk ve çevredekilerden daha fazla kabul gerektiriyor.

Sağlıçakla kalın.