Yeni Teknolojileri Öğrenme Konusunda Nasıl Bir Yol Haritası Oluşturmalıyım?

Birçok okurumdan bu ve buna benzer sorular aldığım için bu konuyu aydınlatmak adına bu yazıyı kaleme almak istedim.

Bilindiği üzere yazılım sektörü çok hızlı teknolojik gelişmelere sahne olmakta. Kullanıma sunulan yeni programlama dilleri, çatı ve yöntemlerin sayısı çok yüksek. Doğal olarak yazılımcılar işin neresinden tutmalıyım ya da başlamalıyım, hangi konulara ağırlık vermeliyim, neleri öğrenmeliyim gibi sorularla karşılaşmaktalar. Bu yazımda bu tür sorulara kendim için nasıl cevap bulduğumu aktarmak istiyorum. Vermek istediğim örnek bir nevi öğrenim ve kişisel gelişim konusundaki benim yol haritam.

Ben öncelikle öğrenmem gereken şeyleri somut olanlar ve soyut olanlar olarak ikiye ayırıyorum. Soyut olan tarafta genel yazılım prensip ve yöntemleri yer alıyor. Soyut olan bu yapılar genel olarak yazılımın temel prensiplerini oluşturmakta. Bu temelleri oluşturmadan sağlam bir bilgi hazinesinin inşa edilmesi hemen hemen olanaksız. Örneğin nesneye yönelik programlama teknikleri, ayrık matematik, soyutlama yeteneği, tasarım prensipleri, tasarım şablonları gibi konular benim icin geçerliliğini hiçbir zaman yitirmeyen ve yazılıma genel ve soyut bir çerceveden bakmamı sağlayan konulardır. Yazılım alanındaki bilgi ve teknoloji genişliğine baktığımızda, bahsetmiş olduğum soyut konular bu büyüklüğün çok küçük bir kısmını oluşturmaktadırlar. Geriye kalan da zaten yeni diller, yeni çatılar, bu çatıların yeni sürümleri vb. gibi konulardan oluşmaktadır.

Soyut olarak tanımladığım ve yazılımın temellerini oluşturan konuların ihtisası büyük önem taşımaktadır. Örneğin yazılım prensiplerine hakim olmak, onları herhangi bir dilde uygulanabilir hale getirmektedir. Bu konuya hakim olan bir yazılımcı “acaba yazılım prensiplerinin bir sonraki sürümü nasıl olacak” kaygısı taşımayacaktır. Evrensel geçerliliği olan bu konu büyük çapta bir değişikliğe uğramadan, varlığını sürdürecek ve yazılımcının yazılıma genel bir çerceveden bakmasını kolaylaştıracaktır. Soyut konular ve onların ihtisası ile bahsetmek istediğim asıl nokta budur, onların evrensel geçerliliğe sahip ve her ortamda ve programlama dili ile uygulanabilir olmaları.

Soyutluğu işin felsefesi olarak algılayabiliriz. Bu gibi yapıları bir interface sınıf olarak düşünebiliriz. Java gibi dillerde sıkça kullanılan ve soyut sınıflar olan interface sınıflar bir işin nasıl yapıldığından ziyade ne yapılması gerektiğini tanımlayan sınıflardır. Bu sınıflar bünyesinde soyut işlemler yer alır. Bunların nasıl implemente edilecekleri implementasyon sınıflarına bırakılmıştır. Bu analogiden yola çıkarsak, piyasada bulunan bu kadar bilgi kirliliği (çatılar, onların yeni sürümleri ve diğer teknolojik araç ve gereçler) soyut konuları taban alan somut implementasyonlardan ibarettirler.

Somut teknolojileri doğuran ve ileriye götüren yazılım sahasındaki soyut felsefelerdir. Bu felsefeleri anlamadan somut teknolojilere yönelmek verimli sonuçlar doğurmayacaktır. Bu sebepten dolayı yazılımcının öğrenmesi gerektiği konularda soyutluğa ve işin felsefesini ihtiva eden konulara öncelik vermesinde fayda bulunmaktadır. Bu konuyu kaleme aldığım yazıma bu link üzerinden ulaşabilirsiniz.

Doğal olarak işin sadece felsefesine hakim olmak, karın doyurucu nitelikte olmayabilir. Sonuç itibari ile programcı günlük iş hayatında bir takım somut araç, gereç, dil ve diğer yapılar ile irtibat halindedir. Somut yapılarda meydana gelen değişiklikleri programcı nasıl takip etmelidir?

Bu sorunun cevabını piyasa belirlemektedir. Piyasa ne isterse, onu alır. Bu yüzden somut konuların öğreniminde programcı piyasa ihtiyaçlarına paralel bir öğrenim haritası oluşturmalıdır. Örneğin tasarım prensip ve şablonlarının somut bir implementasyonu olan spring çatısı piyasada çok rağbet gören bir çatı haline gelmiştir. Bunun gibi nesneye yönelik programlama tekniklerinin uygulanabildiği java dili aynı konumdadır. Bir ara hype olan ve artık adından fazla bahsedilmeyen scala popülerliğini yitirmek üzeredir. Piyasa kendi ihtiyaçları doğrultusunda somut yapıların gelişim ve kullanımına yön vermektedir. Programcının yapması gereken tek şey, piyasa ihtiyaçlarini takip etmek ve kişisel gelişim yol haritasını buna göre adapte etmektir. Piyasanın sahip olduğu ihtiyaçları takip etmek için güncel iş ilanlarına bakmak yeterli olacaktır.

Bunun yanı sıra programcının yazılım sahasında oluşan trendleri iyi analiz ederek, gitmek istediği yönü adapte etmesi, ileride yazılımcı olarak bulunduğu mevkiyi koruması açısından faydalı olacaktır. Bu tür trendler yine piyasa ihtiyaçları doğrultusunda oluşma eğilimi göstermektedirler. Örneğin günümüzde javascript bazlı frontend projelerinde, kodun bakım ve geliştirilebilirliğini artırmak adına backend yöntemlerini kullanma eğilimi oluşmaya başlamıştır. Bunun en güzel örneğini Angular çatısı oluşturmaktadır. Bunun yanı sıra fullstack developer isminde yeni bir yazılımcı türü aranmaktadır. Proje sahipleri giderleri azaltmak adına hem frontend hem backend yazılım yapabilecek nitelikte yazılımcılar aramaktadırlar. Bu trendleri takip etmeyen bir yazılımcı, kısa zaman sonra sadece bir konuda uzman oldugu için işsiz kalma sorunu ile karşı karşıya kalabilecektir

Kanımca yazilim sektöründe oluşan teknolojik balonun büyüklüğü yazılımcıları tedirgin edecek boyutta değildir. Bu balon çok büyük gibi görünsede, büyük bir bölümünü somut yapılar oluşturmaktadır. Yazılımcılar işin temelinde yatan prensiplere ağırlık verdikleri ve piyasada olup, bitenleri takip ettikleri sürece, yeni gelişmelere her zaman ayak uydurabilme konumunda olacaklardır.


EOF (End Of Fun)
Özcan Acar

Yeni Teknolojileri Öğrenme Konusunda Nasıl Bir Yol Haritası Oluşturmalıyım?” hakkında bir yorum

Yorumlar kapalı.