Yazılıma yeni başlayan veya bu alanda iş arayan herkesin kafasına takılan bir meseledir dil seçimi konusu. Tabii ki bu sorunun cevabı ne yapmak ve nasıl bir yoldan ilerlemek istediğinize göre değişiklik gösterecektir. Ayrıca hatırlatalım ki yazılım geliştiriciliği yalnızca programlama dili bilmekten ibaret değildir. Pek çok farklı araç, sistem ve protokolleri öğrenmeyi gerektirir. Bu yazımızda yalnızca programlama dilleri açısından değerlendirme yapacağız. İnternette farklı kariyer hedefleri için pek çok yol haritası (roadmap) mevcut. Yol haritalarına toplu ve interaktif bir şekilde ulaşabileceğiniz roadmap.sh sitesini sizlere tavsiye ediyoruz.
En Az Bir Düşük Seviye Dil Öğrenin
Kariyer hedeflerinizden bağımsız olarak en az bir C, C++, Rust, Zig gibi düşük ve seviye ve hafıza yönetimi konusunda kontrol sahibi olduğunuz bir dili iyi bir şekilde öğrenmenizi şiddetle tavsiye ediyoruz. Bu diller düşük seviye bir dil olmanın gereği olarak üzerinde çalıştığı donanım ve çalışma ortamına çok daha iyi hakim olmanızı sağlayacaktır. Yazdığınız kodun donanım tarafından nasıl çalıştırıldığını bilmek hem bir yeni bir farkındalık kazandıracak hem de daha optimize kod yazmanıza yardımcı olacaktır.
Günümüz kişisel bilgisayar ve gömülü sistemlerinin tamamına yakınının kod altyapısı C ile yazılmış olduğundan tüm programcıların C diline hakim olması gerektiğini söylersek hiç de abartmış olmayız. Bu sebeple C diline alternatif olarak geliştirilen diğer sistem programlama dilleri olan Rust ve Zig gibi dillerinin de C dili ile kuvvetli bağları vardır. Yani örneğin Rust dilinde yazılan kodların C dilinde, C dilinde yazılan kodların Rust dilinde çağırılabilmesi için mekanizmalar geliştirmiştir.
Yukarıda bahsettiğimiz sebeplerden ötürü öncelikli olarak C programlama dilini, sistem program dillerinde ilerlemek isteyen arkadaşların ise C ve C++ dilinin modern alternatifleri olan Rust ve Zig dillerinden ilerlemelerini tavsiye ediyoruz.
Web Geliştiricileri İçin
Web geliştiriciliği özellikler ülkemiz sektöründe en aktif iş alanlarlarından birisi olarak karşımıza çıkıyor. Uygulamarımız nihai kullanıcıya bir web tarayıcı ortamında sunulduğundan HTML, CSS ve JavaScript dillerinden bir kaçışımız bulunmuyor. Günümüz teknoloji ve araçları doğrudan bu dillerin hiçbirini dahi kullanmadan web sayfaları oluşturmamıza olanak sağlıyor olsa da bu araçlar sonuç olarak yine bu dillerde bir çıktı ürettiklerinden bu dillere hakim olmamız bu çıktılara gerektiğinde isteğimiz ve ihtiyaçlarımızda müdahale edebilmemize ve uygulamız veya web sitemiz üzerinde çok daha fazla kontrol sahibi olmamızı sağlıyor. O yüzden her şeyden önce HTML, CSS ve JavaScript dillerine ve web tarayıcısı ortamına hakim olmanızı şiddetle tavsiye ediyoruz.
Frontend mi Backend mi?
Web geliştiriciği frontend ve backend olarak iki alt dala ayrılmaktadır. Frontend ile kastedilen kullanıcılarımızın web sayfalarımızı ziyaret ettiklerinde tarayıcıları tarafından görüntülenen ve uygulamamız ile etkileşime geçtikleri alandır. HTML, CSS ve Javascript dosyaları kullancılara web sunucuları (web server) üzerinden servis edilir. Performans, güvenlik ve mimari sebeplerden ötürü veriler, etkileşimlerin bazıları ve iş mantığı (business logic) backend dediğimiz uzak ve ortak sunucularda ele alınır. Bu backend kodlarımızın çalıştığı sunuculara uygulama sunucusu (application server) denmektedir. Verilerin hızlı, güvenli ve güvenilir bir şekilde saklanması ve gerektiğinde tekrar ulaşılabilmesi içinse Microsoft SQL Server, MySQL, PostgreSQL gibi veritabanı yönetim sistemleri (DBMS – Database Management Systems) veritabanı sunucuları (database server) üzerinde çalıştırılır.
Peki Hangi Frontend Kütüphanesi?
Frontend iş ilanlarına baktığınızda neredeyse tamamının React.js, Next.js, Vue.js veya Nuxt.js gibi kütüphane ve çerçevelere (framework) hakimiyet beklendiğini görürsünüz. Tüm bu kütüphaneler son çıktı olarak HTML, CSS ve JavaScript dosyaları üretmektedir ve interaktif web arayüzleri geliştirmek için rahat, esnek. ve hızlı bir geliştirme deneyimi sunmaktadır. Bu kütüphanelerin oldukça kompleks ve büyük kod altyapılarına sahip olduklarını hatırlatalım. Bununla beraber kendilerine has API (application Programming interface), kod organizasyonu ve mimariler sunduğundan temel web bilgisinin üzerinde ekstra öğrenme gerektirmektedirler. Günlük hayatta karşımıza çıkan pek çok uygulama ve web sitesi bu kadar kompleks altyapılara ihtiyaç duymamaktadır. Ortaya çıkışları itibariyle örneğin React.js, Facebook’un günlük milyonlarca kullanıcıya hizmet verebilme sorununu çözmek için oluşturulmuş ve açık kaynak haline getirilmiş bir kütüphanedir. Pek çoğumuzun uygulamalarının bu kadar yoğun bir trafiğe maruz kalmayacağını düşündüğümüzde bu karmaşık ve kompleks kütüphaneler pek çok durumda tam aksine sunucu, ağ trafiği ve istemci kaynaklarının verimsiz kullanımına ve gereksiz kompleksiteye yol açmaktadır. Buna alternatif olarak Alpine.js, HTMX, JQuery gibi çok daha hafif kütüphaneler de bulunmaktadır.
Backend Dünyası
Backend yazılımları, iş mantığı (business logic), doğrulama (validation), veri kalıcılığı (data persistance) gibi işlemlerin yapıldığı, ortak sunucularda çalışan bir katmandır. Hem yaptığı operasyonlar hem de tüm kullancılar için ortak sunucularda çalışıyor olmaları gereğince kaynakların verimli kullanılması gerektiği bir alandır. En çok Go, Java, C#, PHP dilleri bu alanda kullanılmaktadır. Java ile birlikte Spring Boot framework’ü özellikle kurumsal alanda çok tercih edilmekte ve aktif olarak geliştiriciler aranmaktadır. Java ile birlikte özellikle ülkemizde pek çok kurumsal firma IT altyapılarını Microsoft ürünleri üzerine inşa etmiş durumdadır (Windows Server, Active Directory, MSSQL Server). Windows ürünleri ile doğal uyumlulukları dolayısıyla C# ve ASP.NET uygulamaları oldukça popülerdir. Ayrıca Google tarafından geliştirilmekte olan, başlangıçta bir sistem programlama olma iddiasıyla çıkmış olsa da mevcut durumunda bir web ve ağ uygulamaları konusunda oldukça kuvvetli olan ve tercih Go dilini vurgulamak isteriz. Henüz sektörde kendine yeni yeni yer buluyor olsa da popülerliği hızlıca artmakta ve yaygınlaşmaktadır.
PHP hala Yaşıyor
PHP her ne kadar özellikle sosyal medya tarafından bir dalga konusu haline getirilmiş olsa da internetin büyük bir kısmı hala PHP ile servis edilmektedir ve edilemeye de devam edecektir. Bununla birlikte PHP dili ve ekosistemi hala geliştirilmekte ve modernize hale getirilmektedir. Özellikle PHP 8 versiyonu ve Laravel framework’ü ile PHP dili pek çok web uygulaması için uygun modern bir tercih olarak karşımıza çıkmaktadır. Ayrıca ülkemizde PHP geliştiricisi alım yapan şirket sayısı büyük şirketler de dahil olmak üzere hiç de az değildir. Ayrıca PHP ile çok sayıda freelance web sitesi siparişlerini hızlı bir şekilde hazırlayabilirsiniz. Dolayısıyla PHP günümüzde hala öğrenilmeye değer güçlü bir dildir.
Her şey için JavaScript Sorunsalı
Kolay, dinamik ve esnek sentaks yapısı ve web alanında alternatifinin olamayışı sebebiyle JavaScript oldukça popüler bir dil olarak karşımıza çıkmakta. Günümüzde backend’den frontend’e, masaüstü uygulamarından mobil uygulamalara, komut satırı araçlarından (CLI – command line interface) makine öğrenmesine kadar her alanda JavaScript kullanılabilmesi için araçlar ve kütüphaneler geliştirilmiş durumda. Birkaç yıl öncesinde kadar her ay bir frontend kütüphanesi geliştirilirken son yıllarda her ay yeni bir JavaScript çalışma zamanı ve motoru (runtime and engine) geliştiriliyor desek pek de abartmış sayılmayız. Frontend alanında popüler kütüphaneleri React.js, Vue.js, Svelte, Next.js, Nuxt.js; çalışma zamalarını Node.js, Deno, Bun; JavaScript motorlarını V8, JavaScriptCore, QuickJS olarak sıralayabiliriz.
Tek bir dil ile tüm uygulama ihtiyaçlarını karşılamak kulağa ilk bakışta iyi bir fikir olarak gelse de bunun ne kadar optimum bir çözüm olduğu tartışmaya açıktır. Doğası ve geliştirilme amacı web dokümanlarını manipüle ederek interaktif web sayfaları oluşturmak olan bir dili her uygulamada kullanmak her zaman verimli sonuçlar vermeyecektir. Ayrıca JavaScript tip güvenliği, hata ele alma, ve bazı operasyonlardaki garip davranışları nedeniyle özellikle beklenmeyen davranışları kaldıramayacak sistemler için hiç de güvenilir bir dil değildir. Yorumlanan dinamik bir olması ve arkaplanda tuttuğu pek çok optimizasyon verisi sebebiyle native uygulamara hem çok daha yavaş çalışmakta hem de çok hafıza kullanmaktadır.
Sonuç olarak web frontend uygulamaları için kaçınılmaz olması dışında kişisel, performans ve güvenilirliğin pek de kritik olmadığı veya hızlı bir şekilde prototip geliştirme durumlarında JavaScript uygun bir tercih olabilir. Fakat araca uygun proje değil, projeye uygun araçlar tercih edilmesinin daha iyi mühendislik uygulaması olduğunu hatırlatmak isteriz.
Masaüstü Uygulamaları
Kurumsal uygulamalarda masaüstü uygulama geliştirmek için en çok kullanılan teknolojiler C# ile .NET, Java ile Java FX veya Swing kütüphaneleridir. Java ile tüm platformlar için ortak uygulama geliştirilebilirken Microsoft tarafında bazı projeler olsa da henüz tam olarak oturmuş resmi bir çoklu platform desteği bulunmamaktadır. Bununla birlikte C++ dilinde Qt kütüphanesi de büyük şirketler tarafından tercih edilmektedir. Python tarafında ise Tkinter, PyQt gibi kütüphaneler bulunmaktadır. PyQt kütüphanesi aslında arkaplanda daha önce bahsettiğimiz Qt kütüphanesini kullanmaktadır. Tkinter daha basit, taşınabilir, küçük projeler için uygunken PyQt kütüphanesi daha büyük kurumasal projeler için kullanıma daha uygundur. Ayrıca JavaScript için en çok tercih edilen masaüstü uygulama kütüphanesi Electron’dur. Electron ile ilgili yazımıza buradan ulaşabilirsiniz.
Mobil Uygulamalar
Mobil uygulamalar için en yaygın iki platform şüphesiz Android ve iOS platformlarıdır. Eğer bir platform konusunda özelleşmek istiyorsanız elbetteki native taraftan ilerlemeniz daha isabetli olacaktır. Native uygulama, tabanında başka bir katmana ihtiyaç duymadan doğrudan platform üzerinde çalışabilen uygulamalara denmektedir. iOS tarafında Swift, Android tarafında ise Kotlin, güncel olarak en çok tercih edilen ve sektörde aranan programlama dilleridir. Swift’ten önce Objective-C, Kotlin’den önce Java kullanılıyordu fakat zamanla yerlerini modern ve yeni alternatiflerine bıraktılar.
Mobil tarafta da tıpkı masaüstü uygulamalarında olduğu gibi pek çok çoklu platform çözümleri bulunmaktadır. Bunların en popülerleri React Native (JavaScript), Xamarin (C# .NET) ve Flutter’dır (Dart).