Yazılımcı

Bir süre önce Yazılım başlıklı bir yazı yazmıştım ve devamının geleceğini belirtmiştim. Bilgisayar mühendisliği ve yazılım alanında teknolojik gelişmelere ve küreselleşmeye paralel olarak zuhur eden dönüşümün pek de faydalı bir noktaya doğru gitmediğini söyleyebilirim. Bu sıkıntıyı anlatabilmek adına yazılım nedir sorusunu irdelemiştim. Sıra geldi yazılımı gerçekleyen kişiyi, yani yazılımcı ismi ile tabir edilen kavramı konuşmaya. Şu sıralar 10 yılı bulan yazılımcılık deneyimim ile kendi ülkemde konuyu az yada çok kavradığımı düşünüyorum. Bu yazıda yazılım geliştirmek, junior veya senior yazılımcı olmak gibi meselelere kafa yoracağız.

Hangi işi yapıyor olursanız olun, belli bir birikim ve yetenek gerektiren her konuda çıraklık, kalfalık ve ustalık silsilesi olacaktır. Bu aşamaların hepsinin farklı isterleri, sorumlulukları ve kabiliyet alanları da olur haliyle. Şimdi bunları aşağıdaki resimdeki gibi iç içe geçmiş 3 daire gibi düşünün. Bu bilgi birikimi ve yeteneklerden bir ürün çıkarılmak istendiğinde ise bu dairelerin birisine denk getirirsiniz idealde. Bu durumda zaten hem ürün hem de dairelerin görev ve yetkinlik alanları zaten tanımlı olacağı için sıkıntı çıkmaz. Asıl sorun bu sınırlara uyulmaması veya sınırların tanımlanmamış olmasında. Bunun sebebi de tabi ki bilgi ve tecrübeye kıymet verilmemesinde. Ne ürün birşeye benziyor ne de dairelerin etkinliği kalıyor bu durumda.

İşin felsefesini sona saklayayım ve yazılım sektöründe gördüğüm, yaşadığım, bildiğim örneklere ve yaklaşımlara geçeyim. Günümüzde Junior seviyesindeki bir yazılımcı genelde hevesle veya bilgisizlikle veya mecburiyetten dolayı teknolojiden teknolojiye atlamış, herşeyden azar azar bilip çok yanlış yapan gariban geliştirici konumunda. Şirketlerin sürekli belli isterleri piyasaya pompalaması (çalışma şartlarının da bir yandan kötüye gitmesi) ile iş bulmanın bu yollardan geçtiğini düşünen yeni mezun arkadaşlar bu ihtiyacı karşılama düşüncesindeler doğal olarak. Kendilerinden hata yapmamaları beklenmiyor fakat buna rağmen üzerilerine diğer dairelerin sorumlulukları yükleniyor. Bu da hataların telafisi ile geçen zamanların öğrenme eğrisi olduğunu düşündürtüyor. Bana sorarsanız öğrenme eğrisi günlük hata yapma oranı değildir.

Bu dairenin gereği öncelikle bilgi edinmek sonra da dersler çıkarmaktır. Büyümek dediğimiz kavram da tam olarak budur mesela. Daireyi genişletip senior seviyesine gelmek için çok hata yapmış olmak değil konunun derinlerine dalmaya hazırlanmak gerekiyor. İşi öğrenmek demek kervan yolda düzülür mantığı ile herşeye el atmak değildir. Yazılım anlayışı bu kadar ayağa düşmüş olmasa zaten bu konuda kalifiye olunmadan üst dairelere atlama merakı da oluşmazdı. Ayrıca günümüzde zaten yazılım teknolojileri hızla gelişiyor ve yenileniyor. Zamanında bir yazılım dilini iyi bilmek bile bir üst daireye geçmeye yetiyordu. Şimdi kullanılan araçlar ve kavramlar çeşitlendiği için başta dediğim gibi bilgi edinmenin önemi aslında artmış oldu. Fakat günümüzdeki "iş yürüsün" anlayışı gelişimi desteklemiyor. Hazırlık aşamasını geleceğe yatırım olarak görmüyor. Senior yani kıdemlilerin kaliteli yetişmesi için junior aşamasının öğrenme odaklı geçmesi şart.

Bir üst seviye olan Senior yazılımcı seviyesinde konu biraz karmaşıklaşıyor. Çünkü bilgi birikimi ve tecrübe artınca bu bilgiyi ve tecrübeyi nerede ve nasıl kullanacağınızı daha esnek bir şekilde belirleyebiliyorsunuz. Aklıma gelen ilk örnek hantal bir yazılımın bakımını senior developer yapabiliyor. Veya küçük bir projede birçok sorumluluğu alacak şekilde senior developer olabiliyorsunuz, 3-4 adet junior developer 'a maaş vermek yerine şirketlerin böyle bir yaklaşımı olabiliyor. Hatta projedeki en yetkili ve yaşça en büyük kişi iseniz ekip lideri bile olabiliyorsunuz. Veya junior 'da bahsettiğim mantığı yıllarca uygulamış ve güncel teknolojileri takip etme adı altında konunun derinliklerine vâkıf olamadan bilgi birikimi oluşturmuş kişiler de olabiliyor.

Fakat benim en çok gördüğüm tanım senior yazılımcıların çoğunlukla eski ve hatalı sistemleri kaldırabilecek brute force olarak çalışıyor olması. Yani "kodu junior da yazar, angarya işi junior da yapabilir fakat senior bunları daha az hata ile daha hızlı yapar" şeklinde bir fark sadece :) Senior aşamasında bilgi birikimi ile katma değer üretmek yerine yaptığımız işin kıdemlisi gibi oluyoruz. Business 'a daha hızlı adapte olabilecek ve junior 'dan uzun süre kod yazmış kişi yazılım mühendisliğinin kıdemlisi olur mu?

Bu noktada yazılımcılar da kendi senior tanımlarını yapabiliyor fakat günün sonunda piyasa ortalaması yine şirketlerin bu konudaki yaklaşımlarının yansıması oluyor. Yani mesleki bilgi birikimi ve prensipleri, bir ürün üretme yolunda çeşitli şekillere evriliyor. Tam tersi olmalıydı sanki. Yazılımcı rolü altında işe alım yapan şirket yaklaşımlarından ve mülakat örneklerinden de tecrübem ölçüsünde bahsedeyim.

Şirket

Eğer bilişim dünyasında iseniz (hatta mühendislik alanlarından birinde iseniz) şimdi yazacaklarım size fazla yabancı gelmeyecektir. Yazılımcı olarak bilgi ve tecrübemizi çoğunlukla bir kurum veya şirket için kullanıyoruz ve bu da bizi mülakat ve eleme veya seçilme yoluna itiyor. Yukarıdaki tanımlar zaten günümüzde tam olarak oturmuş değil. Bir de bunun üstüne kendimizi ispat etmek adına yaptığınız mülakatlarda enteresan yaklaşımlar görüyoruz, bazıları cehaletten bazıları stratejik sebeplerden.

Örneğin herhangi bir konuda bilgi birikiminiz olduğunda, junior veya senior fark etmeksizin bu bilginizin katma değer yaratacağını ve bunun size geri dönüşü olacağını düşünürsünüz. Fakat bu durumda bazıları bu konunun dışında bilmediğiniz noktalara odaklanarak özgüven baltalamaya çalışacaktır. Bazıları direkt olarak bilgi ve tecrübenizin değersiz olduğuna sizi inandırmaya çalışır. Bazıları hazırlıklı gelir ve örneğin Java konusunda bilgim var dediğinizde sorulabilecek en uç soruları not almıştır önceden. Bu aslında kendi istedikleri profile ikna yöntemidir. Bir junior yazılımcı bazı teknolojileri bilmeyebilir fakat bu durumda bildiklerinin bir geçerliliği olmadığını düşünecek ve kendini yetersiz hissedecektir. Yani kendi çizdikleri dairelere adayların uyum göstermelerini beklemektedirler.

Senior yazılımcılar sistemlerin nasıl işlemesi gerektiği konusunda az çok tecrübe kazandıkları için karşılarına genelde daha farklı örnekler çıkar. Yapılan veya yapılacak olan yazılım ile ilgili hataları veya eksikleri belirttiğinizde bu düşüncelerinizin absürd olduğuna inandırmaya çalışırlar. Örneğin eski bir projeyi bakım yaparak yürütmeye çalışmaktansa yenisini yazmanın gerekliliğinden bahsettiğinizde (bunu yazabilecek bilgi birikimi olduğu halde) "sürekli dönüşüm projesi yazarsak proje yapmanın anlamı kalmaz" diyen yetkili kişilerle karşılaşabiliyorsunuz. Senior mühendislere "senden belli bir title olmadan herşeyi isteyeceğiz" diyemeyip "şu konularda da kendini geliştirmelisin" diyenler çıkabiliyor. Bu iş ilanları da "senior developer" gibi başlıklar olabiliyor. Geliştirici ya, herşeyi geliştirir düşüncesi bu :) Bu kişilere zamanında farklı yazılım dilleri ile çalıştım dediğinizde "ben de çalıştım ama şimdi bambaşka şeyler yapıyorum" diye garip bir ikna yoluna girebiliyorlar.

Son zamanlardaki ilanlarda junior veya senior belirtmeden java developer veya .net developer gibi backend üzerine geliştirici rolü belirterek detaylarda frontend teknolojileri bilgisi de (react angular gibi) isteyenler var. Aslında fullstack developer adı verilen bir ütopyadan bahsediyorlar fakat bunun bile farkında değiller belki yada fullstack yazmak istemiyorlardır. Bu arada fullstack developer kavramının yazılım sektöründeki bozulmaya nasıl katkıda bulunduğunu ayrıca masaya yatırabilirim. Hatta programlamanın geleceği ile ilgili Bob Martin 'in bu sunumunu izleyerek yanlış yaklaşımların nereye doğru gittiğini de görebilirsiniz. Son 20 dakikalık kısmı özelikle ilginç ve aydınlatıcı.

Fazla uzatmayayım. Ne iş olursa yaparım diyecek bir alan değildir yazılım. Altı üstü kod yazmak da değildir. Bu kafadaki insanlara bir beyin cerrahi ameliyatını gidip bir psikiyatriste yaptırmalarını söyleyebilirim. İkisi de beyin ile ilgileniyor yani. Bu hatalı anlayışlar hatalı işler ortaya koyuyor. Hatalı işlere de "junior on steroid" diyebileceğimiz tarzda senior 'lar yetişmeye çalışıyor. Bu kısır döngüyü körükleyen sektörün içerisinde benim gibi kavramların karıştırıldığını ve içlerinin boşaltıldığını düşünenlerin sesleri daha yüksek çıkmalı :)

Kavramları kavramalıyız önce

Yazılım sürekli öğrenmektir derler ve doğrudur ama hangi yoldan öğrenmektir? Neyi öğrenmektir? Bir alanda uzmanlaşmak ne demektir? Hangi yollardan geçerek tecrübe kazanılır, hangi yollardan geçerek sadece zaman israf edilir. Yazılım mühendisliği dediğimizde işin içine geliştirme ve test süreçleri de giriyor ve daha bundan bahsetmiyorum bile. Öğrenilecek ve tecrübe edilecek çok geniş bir alanımız var. Bu sektörde sınırları ve anlamları belli olmayan ünvanlarla verimli ve üretken bir şekilde ilerleyemeyeceğimizi düşünüyorum. En üstteki Master 'ı tanımlamak için ayrıca bir devam yazısı yazacağım. O seviyeye geçmeye çalıştığım için bölüm sonu canavarı ile meşgulüm bugünlerde. Bir sonraki yazıda görüşmek üzere :)


Bir yorum yazabilirsiniz