Yazılım Kariyerinde Yükselmek için Basit Adımlar

Image for post
Image for post

Eminim şirkete göre değişen başka adımlarda vardır. Ama burada benim anlatmak istediğim bazı genel geçer faktörler. Önce kısa bir şekilde yazılımcıların çoğunda ortak olan bir sorundan bahsedeyim: Büyük resmi görememek. Bu ifade kendisini açıklıyor olsa bile, aynı sayfada olmak için bu ifadeden benim ne anladığımı biraz anlatayım:

Eğer orta ve büyük çaplı şirketlerde çalışıyorsanız, size gelen işlerin kim tarafından niçin istendiği hakkındaki bilgilerden çoğu zaman yoksun oluyorsunuz. Tek bildiğiniz şey, ürüne şöyle yeni bir özellik eklenmesi gerektiğini ve bu özelliğin ne olduğu. Size düşen ise bunu en iyi şekilde geliştirmek. “En iyi..” ifadesi, maintain edilebilir ve okunabilir şekilde güvenli kod yazmak diye kısaca özetlenebilir. Dolayısıyla kendi aramızda ki muhabbetler bile bir ürün ne işe yarardan daha ziyade nasıl daha doğru implement edilebilir düzleminde gerçekleşiyor. Bir ürünü ise asıl değerli kılan, nasıl implement edildiğinden daha ziyade niçin implement edildiği ve dolayısıyla hangi soruna çözüm olarak geliştirildiği. İşte bu noktada bir mühendisin kariyerinde daha ne kadar ilerleyebileceği sorusunun cevabı bulunuyor. Çoğu zaman ise bu kısımlarda alınan kararlar ve yapılan işler, kodun implementasyonu için alınan kararlardan daha riskli oluyor. Çünkü ürünün neye çözüm olduğunun cevaplandırılması ve dolayısıyla sorunun iyi anlaşılması gerektiği gibi en temel adımlar burada atılmış oluyor.

Şirketlerin yazılımcılarını yeni bir özellik neden isteniyor şeklinde ki soruların cevaplarından isteyerek yada istemeyerek soyutlamış olmasının artıları ve eksileri var. Artıları: her mühendis bu pozisyonda çalışabilecek yetenek ve tecrübeye sahip olmuyor. Dolayısıyla kafalarını karıştırmak ve zamanlarını tecrübesiz oldukları yerlerde israf etmeleri yerine en iyi bildikleri işi yapmaları, yani implementasyon tarafında kalmaları daha mantıklı. Şirket içinde bu konuda farklılık oluşturabilecek insanlar ise zamanla kendilerini göstermeye başlıyorlar. Dolayısıyla kariyer basamakları onları daha ilerisine götürebiliyor. Mesela bir Technical Leader, Project Manager, CTO, vs. şeklinde ki pozisyonlardan bunlardan bazıları. Diğer bir artısı ise herkesin uzman olduğu yerde çalışmasıyla yazılımın hızlı geliştirilmesi. Bu arada hızlı diyorum ama doğru demiyorum. Çünkü ikisi ayrı kavramlar. Çözülmek istenilen sorunu yanlış anlamak ve dolayısıyla yanlış çözüm üretmekten dolayı kaybedilen zamanı kollektif olarak düşündüğümüzde hızlı bir şekilde yazılım geliştirilmiyor olabilir. Burada ki arzulanan önerme: Doğru bir şekilde hızlıca geliştirilen yazılım.

Eksileri ise, yazılımcıların büyük resmi görmede zorluk yaşamaları. Bu zorluk, bazen daha kolay ve hızlıca çözülebilecek problemlerin farklı şekilde implement edilmesinden dolayı daha uzun zaman almasına neden olabiliyor. Mesela, sisteminizde muhasebe diye bir modül zaten var diyelim. Ve yazılım geliştirdiğiniz şirketin başka bir bölümü (mesela İnsan Kaynakları) kendi parasal işlemlerini tutmak istiyor. Burada ki neden sorusunun cevabı ve istenilen yeni özellik yeteri kadar anlaşılmayınca, var olan muhasebe modülünü belki de ufak bazı değişiklikler ile hızlı bir şekilde uyarlamak yerine, durum en baştan yeni bir eklenti yazmanızla sonuçlanabiliyor. Implementation detaylarını bilmeyen product takımı ise bunun ayrı bir modül olmasını beklebiliyorlar. Dolayısıyla bir kaç günlük iş bir kaç aylık iş olarak çıkıyor karşımıza. Tabi buna benzer sorunların azalması işe aldığınız insanların kalitesi ile doğru orantılı. Ne kaliteli adam işe alırsanız, o kadar daha az sorun ile karşılaşırsınız. Kaliteli bir çalışanın en belirgin özelliklerinden bir tanesi doğru zamanda doğru sorular sormaktır. Eğer product takımı, daha önce böyle bir özelliğin olduğunu bilir ve bunun istenilen yeni özellik için uyarlanabileceğini sorarsa, bu yazılım takımı için çok değerli bir hatırlatma olacaktır.

İş yerlerinin gerçeği, herkesin aynı yeterlikte ve kendini geliştirme hevesine sahip olmayan insanlar ile dolu olmasıdır. Bu ise kendisini geliştirmek isteyenlere sunulmuş ciddi bir şanstır. Doğru yönetilen bir şirket ise çalışanlarının arasında ki bu ayrımı doğru görür, onların önünü açar ve kariyer basamaklarında ilerlemelerini sağlar. Yazılım mühendisine ise düşen ilk görev, kendi alanında uzman olmanın yanı sıra, istenilen işin arkasında ki motivasyonu öğrenmesidir. Şirketinin kaynaklarına değer veren bir yönetici için, bir mühendisi tarafından söylenen “Biz bunu benzer bir modülü daha önce geliştirmiştik, bir bakalım, belki bu istenilen yeni özellik için hızlıca uyarlayabiliriz…” sözleri duymaktan daha fazla haz alacağı çok az şey vardır. Sıradan bir ifade gibi duran bu cevabı gelin beraber biraz inceleyelim:

  1. Var olan bir kodun yeni özelliği de desteleyecek şekilde hızlıca uyarlanabilmesi, kodun genel hatları ile doğru bir şekilde develop edildiğini gösterir. Demek ki kod maintain edilebilir ve dolayısıyla extend edilebilir şekilde yazılmış. Bu da kendisini geliştiren mühendislerin teknik olarak uzman olduklarının göstergesidir.
  2. İstenilen yeni özelliğin benzerinin zaten geliştirilmiş olduğunu bilmesi, kendi projesine hakimiyeti gösteriyor. Her ne kadar her kısımda kendisi çalışmıyor olsa da, projenin gelişimini takip ediyor. Sadece kendi yaptığı işler ile değil, aynı zamanda takım arkadaşlarının yaptığı işler ile de ilgileniyor ve onların ne develop ettiklerinin genel hatları ile farkında.
  3. Müşterinin ne istediğini ve neden istediğini doğru şekilde anlamış olmalı ki benzer motivasyonla istenilen ayrı bir modülün varlığının farkında. Bu aynı zamanda bu mühendisin domain bilgisine olan hakimiyetini de gösteriyor. Neden sorunun cevabını anlamak, aynı zamanda işlerin önceliklendirilmesini içinde önemli. Kısıtlı olan kaynaklar ile çalıştığınızda en önemli olan işin en yukarıda olması gerekiyor. Önem ise değişken bir kavram.
  4. Veri toplamadan konuşmuyor. “Bir bakalım…” demek ile öncelikle ufak bir araştırma yapacağını ve daha kesin bilgiler ile konuşacağını söylüyor.

Yukarıda ki bu basit 4 tane madde yukarı basamaklara tırmanmak ve mühendisliğin ötesini görmek ve oralarda da çalışmak isteyenlerin sahip olmaları gereken önemli özellikler. Ama bu özelliklerinizi geliştirmek için size şans verilmesini beklemeyin. Bunları elinizden geldiğince gerekirse biraz zorlanarak kendiniz geliştirmeniz gerekiyor.

Neyse, umarım anlatmak istediklerim anlaşılmıştır. Bir sonra ki yazımda görüşmek üzere…

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store