Neler Üstün Bir Geliştirici Yapar?
(steady-study.super.site)Bu yazı, Infcon 2023’te sunulan Genç Frontend Mühendislerinin Performans ve Yetkinliklerini Geliştirmek İçin Uygulamalı Rehber başlığının 1. bölümü sayılabilir. Daha önce GeekNews’e de eklediğim
Frontend Mühendisi Kariyer Yol Haritası: Gençler İçin 3 Uzmanlık Trakı yazısının manevi devamı olarak da görülebilir.
Üstün bir mühendis nasıl biri olur?
Li Paul Luo, 2015 tarihli <What Makes a Great Software Engineer?> makalesinde üstün bir mühendisi oluşturan 5 temel gereklilik önerdi. Araştırma yöntemi şöyleydi.
- Geliştiriciler için gerekli eğitim, yetkinlik ve davranışlara dair çok sayıda mevcut araştırmanın analizi
- Microsoft’ta seviye 2 ve üzerindeki, yani belli ölçüde yetkinliği kabul edilmiş 59 geliştiriciyle derinlemesine görüşmeler. Geliştiricilerin sahip olması gereken kişisel özelliklere (karakter, bilgi, davranış vb.) dair 54 aday özellik çıkarıldı
- Microsoft’taki 2.000’den fazla geliştiriciye anket uygulandı. (Özelliklerin ayrıntılı tanımından sonra) “Eğer yetkin bir geliştirici bu özelliğe sahip değilse, onu üstün bir geliştirici olarak değerlendirir misiniz?”
- Anket sonuçlarının analizi ve katılımcılarla takip görüşmeleri
- Anket analizi ve takip görüşmelerinin sonuçlarıyla, geliştiricilerin başlıca iş birliği yaptığı kişilerle (sanatçılar, içerik planlayıcılar, veri bilimciler, tasarımcılar, elektrik mühendisleri vb.) ek 40 görüşme
Yazarın önerdiği bu 5 temel gerekliliği, sıralamasını ve yorumunu biraz değiştirerek kendi düşüncelerimi de ekleyip toparladım.
1. İyi kod yazar (Be a competent coder)
“Yetkin kod yazarı”ndan ziyade “iyi kod” daha hedeflenebilir bir ifadedir.
Kodlama becerisi, genç geliştiriciler için en önemli yetkinliktir. Ancak belli bir seviyenin üstüne çıkınca başka yetkinlikleri geliştirmeye çaba harcamak daha verimli olur. Bu “belli seviye” kişiden kişiye, organizasyondan organizasyona değişir.
Ben, genç bir geliştiricinin kodlama becerisini ayırt etmek için şu ölçütlere bakıyorum: “1) kod kalitesine dair kendine ait tutarlı bir bakış açısına sahip olmak, 2) müşteri gereksinimlerini karşılayan kodu, 3) hızlı bir şekilde, 4) az hatayla, 5) okunabilir biçimde yazmak.”
2. Kanıta dayalı karar verme pratiği yapar (Practice informed decision-making)
Karar verme becerisini geliştirmek için, sonuca odaklanmaktan çok karar alma sürecini iyileştirmeye odaklanmak daha avantajlıdır. Çünkü sonuç, benim irademden bağımsız olarak da belirlenebilir.
Ayrıca kanıta dayalı olmak, veriye dayanırken veriyi önyargıyla yorumlamamak veya aceleyle sonuca varmamak demektir. Özellikle yeni bilgi edinildiğinde, içinden gelmese bile bunu rasyonalize etmeden mevcut yargıyı yeniden gözden geçirmek iyidir.
Özellikle debug yaparken, sorunun benden değil de kütüphaneden ya da tarayıcıdan kaynaklandığını düşünmek çoğu zaman yanlıştır. Diyelim ki sorun gerçekten tarayıcı kaynaklı çıktı; buna benzer tüm sorunları tarayıcı suçu diye geçiştirmek, aslında benim hatamdan doğan kritik bir problemi de görmezden gelmeme neden olabilir. Bu yüzden dikkatli olmak gerekir.
Önyargıdan veya acelecilikten kaçınmanın bir yolu, farklı dış bakış açılarını açık fikirle kabul etmektir. Kısa bir nefes alıp arkadaş, ekip arkadaşı, müşteri, rakip, yönetici gibi farklı insanların meseleyi nasıl yorumladığına bakarsam, kendi önyargımı korumam zorlaşır.
Elbette insan stres altındayken rasyonel davranmak zordur. Organizasyonlar için de durum aynıdır. Bu yüzden akıllı organizasyonlar bilinçli olarak takvim ve kaynaklarda pay bırakır; akıllı bireyler de meditasyon gibi yöntemlerle stresi yönetmeyi öğrenir.
Kanıta dayalı karar vermeyi günlük hayatta pratik etmek için elinizde çok sayıda iyi kanıt olması gerekir. Çevrenizden çeşitli ve kaliteli bilgilerin akıp geçmesini sağlayacak bir sistem kurmak faydalıdır. Örneğin bültenlere abone olmak, topluluklara katılmak, çalışma gruplarına dahil olmak gibi.
3. Ekip arkadaşlarının etkili karar vermesine yardımcı olur (Enable others to make decisions efficiently)
Üstün geliştiriciler bilgi ve deneyim paylaşarak ekip arkadaşlarını geliştirir, takımın üretkenliğini artırır ve sonuç olarak organizasyonun daha iyi kararlar almasına yardımcı olur.
Peki genç geliştiriciler ne yapmalı? Genç geliştiriciler için hemen sonuç üretmektense soru sorarak büyümek, ekip arkadaşlarına ve organizasyona yardımcı olmanın yoludur. Değersiz görülme, reddedilme ve başkalarına yük olma korkusunu aşın ve yüksek bağlamlı sorular sorun. Genelde insanlar, bu tür bir kırılganlığı göstermek için önce güven inşa etmek gerektiğini düşünür; ama araştırmalar tersini söylüyor. Taraflar zayıf yönlerini gösterip cesurca risk aldığında güvenin temeli daha hızlı oluşuyor.
Kırılganlığı iyi göstermenin de bir yolu vardır: bağlamı iyi vermek gerekir. Genç geliştiriciler genelde A diye bir problem yaşar, B’yi dener, sonra orada C iyi çalışmayınca sadece C’yi sorar. Böyle olunca çoğu zaman sadece çok dar kapsamlı cevaplar alınır ve o cevap alınsa bile sorun iyi çözülmez. Tersine, A doğru şekilde tanımlandığında B’nin kendiliğinden ortaya çıkıp C’yi gereksiz kıldığına sık sık tanık oldum.
Soru sormayı teşvik etmek için, kırılganlık ve şeffaflığa büyük değer veren bir organizasyon kültürü gerekir. Bu noktada organizasyon içindeki varsayılan ayarın ne olduğu çok önemlidir. Çünkü varsayılan ayarlar, insanların algısı ve davranışı üzerinde çok büyük etki yaratır.
Bu açıdan, gizlemek için aksiyon gerektiren Public by Default araçlar (Slack, Notion), paylaşmak için aksiyon gerektiren Private by Default araçlardan (Email, Google Docs) daha iyidir. “İstediğin zaman konuşabilirsin ama sadece şu an rahatsız etme (Do Not Disturb)” yaklaşımı, “Sadece şu saatlerde rahatça gelip konuşabilirsin (Open Hours)” yaklaşımından daha iyidir.
4. Yaptığı işin mevcut değerini maksimize eder (Maximize current value of your work)
Üstün geliştiricilerden hem sistematik düşünme (ileride sorun çıkarabilecek kısımları veya gereksinimlerin nasıl değişebileceğini öngörüp uzun vadeli bakışla uygulamak) hem de hemen harekete geçme (analiz ederek donup kalmamak, belirsizlik korkutsa da önce işe koyulup uygulayarak geri bildirim almak) beklenir.
Özellikle startup’larda ikincisi daha avantajlıdır; ancak uç noktaya kaçarsa zararlı hale gelir. Hızlı uygulamaya odaklanırken, çok az çabayla büyük fayda sağlayan davranışları alışkanlık haline getirmek iyi olur. Mikro düzeyde örnek olarak, tek bir değer olsa bile hardcode etmemek ve değişkene çıkarmak; şu an sadece iki değer olsa bile bu seçenek tek bir component’i aşan türdeyse Boolean yerine Mode kullanmak verilebilir. Makro düzeyde örnek olarak ise, hangi hipotezi doğrulamak için harekete geçtiğimi düşünmek, bunu hangi veriyle doğrulayacağımı tasarlamak ve sonra uygulamaya geçmek sayılabilir.
Sonuçta, kendi irademle sistematik düşünme ile hemen harekete geçme arasında esnek biçimde gidip gelebildiğimde işin değeri maksimize olur.
5. Etkili ve sürekli öğrenir (Continuously learn)
Etkili öğrenmeyi öğrenmek, bütün gelişimin başlangıcıdır. Ne kadar erken yapılırsa o kadar iyi olan, bileşik getiri sağlayan bir eylemdir.
Öğrenmenin amacı sonuçta bilgimizi genişletip hayatımızı değiştirmektir. Ancak eski bilginin hâlâ geçerli olacağının garantisi yoktur; bu yüzden yeni bilgilerle sürekli güncelleme çabası gerekir.
Ama bilgi çok diye bu otomatik olarak iyi değildir. Tıpkı arıtılmamış big data gibi, bazı bilgiler sadece gürültü yaratır. Bu nedenle, yanlış ya da benim problemimle ilgisiz “gürültü” yerine “sinyal” oranını artırmak gerekir. Benim uzmanlık alanım olmayan yerlerde mevcut bilgimle bağlantı kurmamı sağlayan içgörüler veya belli koşullarda yanılıyor olabileceğime dair kanıtlar, iyi sinyal örnekleridir.
Etkili öğrenme şu soruda özetlenebilir: “Her gün biraz daha etkili şekilde nasıl büyüyebilirim?” Bunun cevabı da şudur: 1) şu anda gerçek hayatta bana neyin gerektiğini bulmak, 2) ilgili teorik temeli tam gerektiği kadar öğrenmek, 3) öğrenir öğrenmez hemen uygulayıp öz geri bildirim almak ve bunu tekrar etmek.
Peki şu anda gerçek hayatta neye ihtiyacım olduğunu nasıl anlayabilirim? Günlük yazarak günlük yaşamda yaşadığım problemleri keşfedebilirim ya da son bir haftada çok zaman harcadığım işleri daha iyi yapmaya çalışabilirim. Örneğin iş arayan biriyseniz sık sık çalışma grubu yaparsınız; bu yüzden çalışma gruplarını etkili yürütmenin yollarını araştırmak işe yarar. Bir şeyi ne kadar sık yaparsanız hem öğrenme fırsatı o kadar artar hem de geliştirdiğinizde yaşam kalitesine etkisi daha büyük olur.
Nasıl uygulanır? - Genç ve kıdemli geliştirici bakışı
Genç geliştiriciler, bu hedeflerin her birinde, özellikle de “iyi kod yazmak” ve “etkili ve sürekli öğrenmek” başlıklarında anlatılan bilgi ve davranışlara ne kadar uyduklarını kontrol edebilir. Sonra da eksik yetkinliklerini odaklı biçimde geliştirebilirler.
Kıdemli geliştiriciler ise bunları işe alım değerlendirmesi ve performans değerlendirmesinde kullanabilir. Adayın bu yetkinliklere yeterince sahip olup olmadığını hangi sinyallerle anlayabileceklerini düşünebilirler. Genç geliştiricilerin yetkinliğini yükseltmek için liderlik ederken de benzer şekilde kullanılabilir.
Ayrıca bu yetkinliklerde yalnızca “iyi kod yazma” kısmını ilgili alanın uzmanlığıyla değiştirirseniz, hangi rolü değerlendirirseniz değerlendirin iyi bir ölçüt sunar. Nitekim XL8’de PM, tasarımcı ya da geliştirici fark etmeksizin insanları işe alırken, onboard ederken ve geri bildirim verirken bu ölçütleri mümkün olduğunca yetkinlik değerlendirme temeli olarak kullanıyoruz ve oldukça büyük faydasını görüyoruz.
Uygularken dikkat edilmesi gerekenler
Bu 5 yetkinliğin tamamı birbirini tamamlar. Hepsi birbirine bağlı olduğu için, sadece bir tanesini çok iyi geliştirmeyi hedeflemek çok etkili olmayabilir. Tersinden bakarsak, sadece birinde iyi olmak diğerlerini geliştirmeyi kolaylaştırabilir.
Ayrıca bu araştırma da diğer pek çok araştırma gibi mutlak gerçek değildir. Doğal olarak sınırlamaları vardır ve hem makale yazarının yorumu hem de benim yorumumdan geçtiği de hesaba katılmalıdır.
Ayrıca makalenin başlığı “What Makes a Great Software Engineer?” olduğu için, bu beş yetkinliğe sahip olmanın üstün bir geliştirici olmak için yeterli olduğu düşünülebilir. Yani bunların yeter koşul olduğu varsayılabilir. Oysa araştırmanın fiilen gösterdiği şey, “bunlar yoksa üstün geliştirici denemez”, yani bunların gerekli koşul olduğudur. Dolayısıyla bunları iyi hedefler, yönelim noktaları ya da ara duraklar olarak almak sorun değildir; ama nihai varış noktası olarak görmek gerekmez.
Nasıl uygulanır? - Frontend geliştirici bakışı
Bu 5 yetkinliği frontend geliştirme bağlamında kullanmak için şu sorular sorulabilir.
- Frontend alanında iyi kod nedir? Daha iyi kod nasıl yazılır?
- Frontend alanında daha iyi kararlar vermek için hangi kanıtlar nasıl toplanmalı?
- Frontend alanında ekip arkadaşlarının etkili karar vermesine yardımcı olmak ne anlama gelir?
- Frontend alanında yaptığım işin mevcut değerini nasıl ölçerim? Nasıl maksimize ederim?
- Frontend alanındaki bilgiyi sürekli ve etkili biçimde öğrenmek için ne yapmalıyım?
Bu sorulara nasıl cevap verileceğini düşünürken ortaya çıkan şey, Frontend Mühendisi Kariyer Yol Haritası oldu. Bu çalışma, organizasyonların frontend geliştiricilerden beklediği rolleri web/ürün/operasyon odaklı traks olarak ayırıp her bir trakın temel özelliklerini, avantajlarını ve dezavantajlarını açıklar. (Infcon sunumunda bu içerik tamamen çıkarılmıştı; ayrı bir yazıda bunu biraz daha geliştirip açıklamayı planlıyorum.)
Bu yol haritası da genç ve kıdemli geliştirici bağlamında kullanılabilir.
Örneğin frontend alanındaki genç geliştiriciler, ön araştırma ya da mülakat sorularıyla şirketin durumunu anlayıp, “Gitmek istediğim bu organizasyon şu tür uzmanlık istiyor demek. Bu uzmanlığı iyi geliştirip iyi gösterirsem işe alınma ihtimalim artar.” şeklinde iş ararken bundan yararlanabilir.
Kıdemli geliştiriciler ise, “Bizim organizasyonda bu tür uzmanlığa sahip insan eksiği var. O halde bu kişinin bu uzmanlığı geliştirmesine yardımcı olalım. Ve bu uzmanlığa sahip kişileri iyi ayırt edip işe alalım.” diyerek ekip üyelerini büyütme ve işe alımda kullanabilir.
Elbette, yukarıdaki makalede olduğu gibi bu 3 trakın da birbirini tamamladığını, mutlak gerçek olmadığını ve nihai hedef sayılmaması gerektiğini akılda tutmak gerekir.
Üstün kıdemli geliştirici olmak
Frontend Mühendisi Kariyer Yol Haritası içinde, üstün bir kıdemli geliştirici olma yoluna dair kendi düşüncelerime de kısaca değindim.
- Temellere sadık kalarak 5 temel yetkinliği sürekli geliştiren kişi iyi bir kıdemli geliştirici olur.
- Bazen bir ekip arkadaşının örnek davranışı, resmî liderin sayısız sözünden daha büyük etki yaratır. Lider rolünde olmasa bile liderlik gösteren kişiye eninde sonunda lider rolü verilir.
- Hangi durumda olursa olsun, ne kadar küçük bir işi üstlenirse üstlensin büyük etki yaratan insanlar daha sonra daha büyük işleri üstlenir.
1 yorum
Notion'dan doğrudan taşıyınca sondaki 'Frontend Engineer Career Roadmap' bağlantısı Notion bağlantısı olarak eklenmiş. Ah, https://steady-study.super.site/frontend-engineer-career-roadmap bu bağlantı.