İyi Programcıyı Tanıyabilmek

Programcı olarak iş hayatı boyunca ya çalışmak istediğimiz ya da bizimle çalışmak isteyen programcıları sınıflandırmak gibi bir hobimiz var. Hoş birşey değil gibi görünsede programcı olarak kendinizi geliştirmek zorundasınız ve bunun için olabildiğince iyi programcıyla tanışmalı ve mümkünse onlarla çalışmalısınız. İyi bir programcıyı tanımamı sağlayacak ve bu süreçte gözlemlediğim birkaç özellikten bahsedicem ve çok zamanınız almadan yazıyı sonlandırıcam.

Pragmatik yaklaşım ve mükemmeliyetçi yaklaşım arasındaki dengeyi kurabilenler.

Evet aslında bu süreçte anladığım ve gözlemlediğim en önemli özellik bu. Programcıların bir kısmı pragmatik kümesine yakınlar diğer kısmı ise mükemmeliyetçi kısma. Bu iki grubu kesişen iki küme düşünebilirsiniz bir tarafta pragmatik olanlar diğer tarafta ise mükemmeliyetçiler. Ve evet doğru tahmin ettiniz bu iki küme ayrık değil, iyi programcılar genelde aradaki dengeyi çok iyi yakalayabilen kişiler yani kesişim kümesinde olanlar. Burada bahsettiğim aslında üzerinde çalıştıkları her iş için aynı pragmatik/mükemmeliyetçilik oranına sahip olmak değil, hatta bu kötü olarak nitelenebilecek bir özellik. Asıl fark yaratan özellik burada programcının bu hangi tarafa daha yakın olacağını üzerinde çalıştığı probleme göre karar vermesi.

Uğraştığımız problemler gereği ortaya çıkardığımız çözümler bazen çabuk/zekice/ama iyi yapılandırılmamış(hack) hatta bazıları tarafından kötü olarak yorumlandırılırken, diğer yandan iyice analiz edilmiş/elegan/sağlam çözümler olabiliyor. Bunun arasındaki dengeyi kurmayı becerebilmek zor ve birçok bileşen gerektiriyor. Gerekli araçlarınız olması gerekiyor, evet bunun için farklı yapıda birçok programlama aracına/metodolojisine sahip olmanız gerekiyor. Aynı durumu sadece sınırlı sayıda programlama aracı/metodolojisine ile yapmaya çalıştığınızda ortaya çıkan ise kötü bir çözümden başka birşey değil. Ama gerçek manada kötü çözüm. Bu yüzden farklı programlama metodolojilerine maruz kalmış programcılar iyi olarak değerlendirilmeye aday.

Diyelim ki üzerinde çalışcağımız proje bir yapılacaklar listesi uygulaması (to-do application) ve bir an önce ürünü ortaya koymanız gerekiyor. Yapmanız gereken aslında bariz açık, olabildiğince pragmatik olmak ve ürünü ortaya koymak, yapacağınız ilk iş en hızlı silahınızı çekmek (ör: js/node.js — ruby/rails — python/django — x/y) Birde aynı durumu tek bildiğiniz dilin (ör. java) ve tecrübeniz olan tek framework’ün (ör. spring) olduğunu düşünerek yapın. Evet elinizde tek şey çekiç olunca herşey çivi gibi görünmeye başlıyor. Şimdi hangi kategoriye düştünüz? Ben cevap veriyim. -Hiçbirine. Çünkü bu ne bir pragmatik yaklaşım ne de mükemmeiyetçi. Sadece elde olanı değerlendirdiniz. Evet hızlı çözüm buldunuz ama bu kadar monolitik bir framework ile ne kadar elegan ve basit bir çözüm bulmuş olabilirsiniz ki. Diğer yandan mükemmeliyetçi zaten değiliz, ki zaten böyle bir beklentide yok.

Olabildiğince farklı metodolojilere maruz kalın, ne zaman hızlı çözümün ne zaman iyi analiz gerektiren çözümün gerektiğini deneyimleyerek öğrenin.

Hata ayıklamaktan, hata aramaktan çekinmeyen

Hata aramak ve gerekirse bulmak genellikle rutin olarak yaptığımız bir işlem, evet kimsenin buna itiraz edeceğiniz sanmıyorum. Ama genel gözlemim şu şekilde, iyi programcılar genellikle kendi programlarının tabiri yerindeyse canını okuyan kişiler oluyor. Yani kodlarında hata ararken gerçekten acımasız olabiliyorlar. Programda bir hata var ise bakacakları ilk yer kendi yazdıkları kısım oluyor. Programcıların sahip olması gereken yaklaşım “Sunduğum çözüm hatasız değil ve baştan işleri ne kadar sıkı tutarsam ve acımasız davranırsam ilerisi için o kadar az acı verici olur” yaklaşımıdır. Bu sıkı bir test süreci olabilir, ya da hata ayıklama süreci olabilir, kodunuzu hayatta kalamayacağı durumlara sokmak olabilir, sonunda hatalar bulunacaktır başkasının kodunda olsa bile.

Sizi arkadan bıçaklayacak en büyük aday kendi yazdığınız kod. En büyük düşmanınız gibi yaklaşın, arkadaş gibi yaklaşırsanız çok şey kaybedersiniz.

Şüpheci olan

Yukarıdaki hata ayıklama maddesiyle direk bağlantılı ancak, genel anlamda tek başınada yararlı bir özellik. Kaç defa çözmek istediğiniz problemin sonucunun görüp “tamam bu oldu, istediğim şeyi yapıyor” diyip problemi çözdüğünüzü düşündüğünüz oldu ancak aynı problem gelip sizi daha sonra buldu. İyi programcılar genellikle kafada birçok farklı açıdan sağlama yapabilen ve bunların aynı anda hesabını tutabilen kişiler oluyor. En iyi yapabileceğiniz iş kendi kodunuzu olabildiğince iyi analiz/test sürecinden geçirmektir, burada yardımcı olan ise bahsettiğim farklı açılardan sağlama yapabilmek. Bu sadece kendi kodunuz olmak zorunda değil ama ilk önce kendi kodunuz olması artı bir özellik. Başkalarının kodunun okurken tutarsızlıklar ya da benzer durumlar görmek mümkün diğer mümkün olan ise bunları es geçmek. Yapmamız gereken ise olabildiğince şüpheci olarak yaklaşmak ve bunun yol açabileceği daha büyük sorunları düşünmek.

Şüpheci olmak güzel bir özellik, programcı olmasanız bile, edinmeye çalışın.
Show your support

Clapping shows how much you appreciated Burak Dede’s story.