Nasıl Kaliteli Yazılım Mühendisi Olunur?

Yeni işinize başladınız. Size hangi proje üzerinde çalışacağınız söylendi ve kısa bir eğitimden sonra başladınız projenin kaynak kodlarını incelemeye. Herşey güzel giderken, kaynak kodun bazı yerlerinde ne kadar da ileri seviye kodlar yazıldığını, daha önce adını bile duymadığınız API’ların kullanıldığını, etrafınızda ki insanların konuştuklarının size yabancı geldiğini, ve ne oluyor diye sorduğunuzu gördünüz. Kafanıza takılan soruları sormak ile sormamak arasında git geller yaşıyorsunuz şimdi. Okuldayken sizi en arka sıraya oturtan, profesör ders anlatırken soru sormanızı engelleyen o korkularınız yeniden gelmeye başladı aklınıza. Google ederim, öğrenirim dediniz. Ama ne kadar da çok şey var öğrenecek. Mutlu geçmesi gereken ilk gününüz, kendinizi sahte bir mühendis hissetmenizle son buldu. Hele bir de yıllarca bu mesleği yapmanıza rağmen, neden kendinizi sahtekar gibi hissetmeye başladınız? Kendinizi mutlu hissetmek ve bildiğinizi kendinize ispat etmek için, şu algoritma nasıl çalışıyor, şu olsa nasıl yapardım, şu veri yapısı neydi gibisinden kafanızdan sorular sormaya başladınız. Ama durun bir dakika, cevapları aklınıza gelmiyor…!

Bu ve buna benzer sorunları daha önce hissetmiş ve ya da hala hissediyorsanız, aramıza hoş geldiniz. Kendisinden daha bilgili bir mühendis ile karşılaştığında duygusal çöküntüler yaşattıran Yazılım Mühendisliği, her zaman o kadar da mutlu etmiyor insanı. Peki neden böyle düşündüğünüz üzerine hiç kafa yordunuz mu? Niceleri için bu soru hiç çalışmadıkları yerden çıkmış oluyor. Ama işin gerçeği ise, hiç bir meslek yoktur ki, insanın kişisel dünyasından ve düşüncelerinden etkilenmiyor olsun. Mesela, insanın kendisine güven sorunları varsa, kendi mesleğinde bu sorunun farklı şekillerde yansımalarına şahit olacaktır.

Basit cevap yoktur, eksik cevap vardır.

Ama durun…! Yoksa size kod nasıl yazılır, hangi pattern nerede kullanılır, clean code teknikleri neler gibi konular mı anlatacağım zannettiniz? Daha önceki yazılarımda anlattım belki ama bu yazımda değil. Çünkü çözüm sadece onlar değil. Genel geçer yöntemleri ezberlemek ile olunmuyor kaliteli yazılım mühendisi. Peki nasıl oluyor bu iş? Bu sorunun cevabı biraz kapsamlı. Çünkü insanın yetişme şeklinden içinde bulunduğu toplumun değer yargılarına kadar çok farklı açılardan değerlendirilebilinir. Ama ben daha basit bir şekilde yaklaşmak istiyorum. İlk adım ise sadece biraz geriden başlamak ve kafamıza kazınmış olan tabuları yıkmak. Ondan sonrası gelmeye başlıyor. Benim bu yazıda yapmak istediğim, düşüncelerimizi ve algılarımızı doğru bir şekilde programlamak. Ama çoğu insan için belkide bu anlatacaklarım kolay olmayacak. Çünkü insanın kendisini değiştirmesi gerçekten zordur. Neyse konuyu daha fazla uzatmadan dalalım esas konumuza:

1. Öğrenmenin asla bitmeyeceğinin farkında olun

Her ne öğrenirsek öğrenelim, ilk sahip olmamız gereken düşünce devamlı öğrenmeye hazır olmanın gerekliliği ve öğrenmenin bitmeyeceği gerçeği. Sanki bu yaşına kadar bir şeyler okumuşta, 40 yaşına geldiğinde benden geçti artık okumak öğrenmek diyen bir toplumdan geliyorsunuz. Ama Yazılım Mühendisliğine başlıyorsanız, öğrenmeyi seven bir insan olmak zorundasınız. Yoksa bu meslek size göre olmayabilir. Ama öğrenmeyi sevmiyorsanız, bırakın bu mesleği yapabilir misiniz diye sormayı, bence önce kendinizi bir sorgulayın. İnsanın hayatını devamlı yeni şeyler öğrenmek ile geliştirmesinin önemini bu kısa yazı ile anlatacak değilim. Zaten anlatamamda.

Çok insan ile hayatımda irili ufaklı işler yaptım. Ama çalışmakta en çok zorlandığım hatta başarısız olduğum insanların ortak noktalarının maalesef yeni şeyler öğrenmeye açık olmamak veya öğrenmek istedikleri zaman da sizin öğretmenizi beklemeleri olduğunu gördüm. Yanlış anlaşılmasın, insanların birbirlerine birşeyler öğretmesi bu mesleğin en sosyal yanlarından bir tanesi. Ama bunun da bir sınırı var, herşeyde olduğu gibi. Öğrenmek insanın içinden gelmesi gereken bir şey. Hatta okullarda bile eğitimin çocuklara bir şeyler ezberletmek şeklinden çıkıp, onların öğrenme aşk ve şevklerini geliştirmek ve iç dünyalarında öğrenme ateşini yakacak şekilde yeniden tasarlanması lazım. Ama Türkiye’nin eğitim sisteminden geliyorsanız, kendinize eğitim ve öğretim gibi kavramları en baştan daha doğru öğretmeniz gerekiyor.

Öğrenmek ile alakalı en büyük yanlış anlayış, lineer bir yükseliş sergilediği kanısı. Hayır! Öğrenmek eksponansiyel ilerler. Aşağıda ki resim ikisi arasında ki farkı gösteriyor. Kırmızı çizgi öğrenmeyi en doğru anlatan ilerleme:

Öğrendikçe bir sonra ki öğreneceklerinizi çok daha hızlı ve etkili biçimde öğrenmeye başlayacaksınız. İlk zamanlar yavaş bir ilerleme olacak algısına kapılırsanız, sakın pes etmeyin. Yakın zamanda ne kadar yol aldığınıza siz bile şaşıracaksınız.

2. Doğru şekilde öğrenin

Öğrenmeden bahsedipte nasıl doğru öğrenilir sorusuna cevap vermemek garip kaçardı. Açıkçası bu herkese göre değişir. Ama sabit kalan bir kaç tane kısım var. Onlarda: Okuduğunuz materyal ile mücadele etmek, pratik yapmak, ve öğrendiklerinizi kullanmak. Bu arada hızlı öğrenmek diye bir şey yok. Öğrenmek sabır gerektiren bir aktivite. Onu zevkli kılan ise, öğrendiklerinizi bir yerlerde kullanmak ve kullanırken aklınıza gelen soruların cevapları bulmak için daha çok öğrenmeye yönelmek.

Bir yazarın kitabını okuyorsanız, büyük bir ihtimal sizden o konu hakkında daha çok bilgiye sahip olduğundan şüpheniz yoktur. Ama bu şekilde kabullenici okuma tarzı, kitaptan alacağınız verimi ciddi oranda düşürür. Her denilene eyvallah demek ile okuma olmaz. Her aldığınız kitaba şüphe ile yaklaşın ve karşıda ki yazarın sizi tatmin etmesini bekleyin. Onunla kitabı vasıtasıyla mücadele edin ve ciddi sorular sorun. Not alın bu sorularınızı. Sonra okumaya devam ettikçe bu sorularınızın cevaplarını bulmaya çalışın. Toplumun bizlere empoze ettiği çok kitap okuma baskısından kurtulmak ve doğru kitap okuma anlayışına geçmek zorundayız. Rakamların çoğu zaman anlamsız çokluğundan, kalitenin değer anlayışına yönelmemiz lazım. Emin olun, eğer bu şekilde kitap okumaya alışırsanız, yakın bir zamanda hem okuduklarınızı daha iyi anlayacak, hem de düşüncelerinizi ve ifadelerinizi daha doğru temeller üzerine kuracaksınız. Aksi halde kitabi ve ezbere bilginin yükünü taşımaktan öteyece geçemeyeceksiniz.

Maalesef akademisyenlerimizin çoğunun dünyada hiçbir başarı sağlayamamış olmalarının sebepleri kitabi ve ezbere öğrenme ve öğretme anlayışları. Bir şeyleri bozup yeniden tamir etmek ile uğraşmamış bir akademisyen zihnen kısırdır. Sorgulamayan bir zihin, yük kamyonu gibidir. Yük taşımak ve istenildiği zamanda bu yükü boşaltmaktan başka bir vazife icra edemez. Maalesef toplum olarak en büyük sorunlarımızdan bir tanesi de işte bu şekilde yetişmiş akademisyenlerdir. Televizyonlar, ezberledikleri şeyleri bir ilim biliyormuş gibi anlatıp, bu bilgileri bugünü ve yarını kurmak ve mamur etmek için kullanmasını bilmeyen akademisyenlerin boş lakırtıları ile doludur. Dünya görüşü maalesef görüşü dünyadan öteye gidemeyenlerin kıt zihinleriyle sakat bırakılan bir nesil bu dünyanın en büyük kaybıdır.

Sorgulamak, eleştirmek, şüphe duymak? Korkmayın, bu şekilde davranmak sizleri şımarık ve kendisini beğenmiş sorunlu insanlar yapmaz. Ama başka insanlar ile konuşurken eleştirel olacağım diye kalp kırıcı olursanız, o zaman bu korkularınız gerçek olmuş demektir. Benim anlattıklarımın ise bu şekilde davranmak ile alakası yok.

Yukarıda anlattığım mindset, yani anlayış diyelim, çok ama çok önemli. İnsan zihni her şeyi ezberlemek için değil, sorgulamak, kurcalamak, bazen bozmak ve sonrasında yapmak gibi mükemmel araçlar ile donatılmış. Ona hak ettiğini vermek zorundayız. Eğer düz bir insansanız ve oturduğunuzda kafanızdan hiç bir düşünce geçmiyor ve birşeyleri sorgulamıyorsanız, bir kafanızın içine bakın, hala yaşıyor musunuz diye…

Aslında yukarıda ki anlattıklarımdan çıkarmış olmalısınız, ama bir kitap okuduğunuzda elinizde kesin bir kalem olsun. Kullanmazsanız bile olsun. Karnı aç bir insanın pasta görmesi ile canının pasta çekmesine benzer şekilde, kalem ile kitap okuyan bir insanda kalem, bir şeyler karalamak, not almak, önemli görülen yerlerin altını çizme gibi istekler uyandıracaktır.

Son olarak öğrendiklerinizi kullanmanız gerekiyor. Ancak kullandığınız zaman öğrendikleriniz kafanıza oturmaya ve daha farklı sorular sormaya başlayacaksınız. Bunun üzerinde daha fazla durmaya gerek yok herhalde.

Bu arada, doğru öğrenme şeklinizi bulmanız için kendinizi tanımanız gerekiyor dememe gerek var mı?

3. Başlamadan önce düşünün

Herşeyin hızlandığı bir zamanda reaksiyonlarımız da bundan nasibini aldı. Daha hızlı cevaplar vermeye ve herşeye hiç düşünmeden atlamaya daha bir hazırız artık. Örnek için çok uzaklara bakmayın: İş yerinde birisi gelip size soru sorduğunda, size düşünme şansı bile vermeden, devam ediyor anlatmaya. Toplantılarda hızlı kararlar almak daha bir marifet artık. Sonrasında 10 defa değişecek olan kararları hızlı alanlar daha bir değerli çoğu insanın gözünde. Kendi çalıştıkları şirketlerin durumunu anlamadan, orada burada gördükleri yeni akımları hemen uygulamak isteyenler ve bunu bir başarı görenlerin efendi olduğu günlerden geçiyoruz. Dolayısıyla hem iş yerinde hem de kişisel hayatımızda düşünmek için zaman verilmiyor. Hatta çoğu zaman bize soru soranlara, bazen biz bile daha sorularını bitirmeden cevap verme yarışına giriyoruz. Nedir bu acelemiz? Acelemizin ne olduğunu bilmem ama debug etmeden önce düşünmek yerine hemen koda dalan arkadaşa bu gittiğin yol yol değil demek isterim. Peki neyi düşünmesi lazım? Ne yaptığını, ne yapacağını, ve nasıl yapacağını, ve tabiki de ne konuşacağını.

4. Her zaman bir adım sonrasını merak edin

Bu aslında çok genel bir kavram ama şu şekilde anlatayım: Ne öğrenirseniz ya da ne kullanırsanız kullanın, hep bir adım ötesini merak edin. Eğer başkası tarafından yazılmış bir kütüphaneden gelen methodları kullanıyorsanız, o zaman acaba bu method nasıl implement edilmiş sorusunu sorun. Eğer bir program yazıyorsanız, acaba bunu nasıl daha iyi yapabilirim diye bir adım ötesine gözlerinizi dikin. Acaba bu… Eğer şu şekilde …. gibi sorularınız mesleğinizde sizleri ileri taşıyacak önemli sorular. Maalesef artık kalfalık/ustalık zamanlarında değiliz. Kimse sizi alıp yanında yetiştirmeyecek. Eğer ilerlemek istiyorsanız, o zaman yaptığınız işlerde ilerisini düşünmek zorundasınız. Bu aslında öğrenme isteğiyle tetiklenen bir durum. Hayatta uçurumdan kaçıyor gibi kaçmanız gereken şey, armut piş ağzıma düş anlayışı. Eğer bilmediğiniz bir konu var ve yardım bekliyorsanız, en azından bunu sen yap ben kullanayım şeklinde değil, beraber yapalım çünkü ben de öğrenmek istiyorum düşüncesi ile yapmanız lazım. Bu, bir adım sonrasını düşünmenin en basit formudur.

Bir adım sonrasını öğrenme istediğiniz aynı zamanda sizleri bilmediklerinizin korkularından kurtaracak. Çünkü o zaman sizden gizlenmiş şeylerde ki insan elini görecek ve endişelenecek ya da korkulacak bir şeyin olmadığını anlayacaksınız. İnsan bilmediğinden korkar ve bu korkusundan dolayı daha fazla sömürülmeye açık olur. O halde iken sizi ya başkası sömürür ya da kendi duygularınız.

5. Sabredebilin

Yukarıda anlattıklarımın belki de en temelinde yatan değer sabırlı olabilmek. Sabır hakkında ne kadar konuşulur emin değilim, çünkü kendisini gayet net bir şekilde açıklayan bir kavram. Bir şey öğrendiğiniz zaman, ona karşı göstermeniz gereken sabır daha azalacak. Çünkü sabrın yerini alışkanlıklarınız alacak. Ondan sonra bilinçli bir şekilde azim göstermek yerine, kendinizi o işi ya da o davranışını otomatik olarak yaparken bulacaksınız…

6. Yazma alışkanlığı edinin

Bazen insanın kafası çok dolu olabiliyor ve düşüncelerini toparlama ihtiyacı hissediyor. Ya da yeni bir şey öğreniyor ama kafasına tam olarak oturmuyor. Devamlı etrafınızda sizi dinleyecek ve düşüncelerinizi toplamanız yardımcı olacak insanlar var olmuyor. Hatta bu çoğu zaman olmuyor. Hatta bazen hiç olmuyor… Çözüm ise yazmak. İster kalem kağıt ile isterseniz de bilgisayarın başında. Mesela bir şeyi öğrenirken, onunla alakalı düşüncelerinizi başkasına anlatıyormuş gibi yazmaya başlayın. Anlattığınız şeylerin nedenlerinden bahsetmeye başlayınca aklınıza olayı çok daha anlamanıza yardımcı olacak soruların geldiğine şahit olacaksınız. Bir şeyi öğrenirken anlatılanları anlamadığınızda dolayı konuyu daha basit bir şekilde anlatan onlarca kaynak okumak ile zaman kaybedeceksiniz, ya da okuduğunuz materyal ile mücadele ederek zaman kaybedeceksiniz. Kısacası öğrenmek zaman gerektiriyor, bunu baştan kabul etmek lazım. Ama mücadele ederek öğrenmek zihninizin için pratik olacağından bir sonra ki zor anlaşılan materyaller size daha kolay gelmeye başlayacak. Amerikanların dediği gibi garbage in, garbage out. Aklınızı nasıl beslerseniz, o şekilde çalışmaya başlayacak. Zoru severse, zamanla zor olanlar kolaylaşmaya başlayacak.

Eski iş yerimde, kodlarımızı incelenmesi için diğer takım arkadaşlarına göndermeden önce önümüzde duran oyuncak adama anlatırdık. Neyi neden yaptım şeklinde sorulara muhatap olduğumuzu düşünür ve onların cevaplarını vermeye çalışırdık. Dışarıdan bakana göre delice duran bu hareket aslında insanın kendisinden bile bir şeyler öğrenebileceğinin kanıtıydı. Artan kod kalitesinden bahsetmiyorum bile.

7. Uzun soluklu odaklanabilin

Günümüz dünyasında belkide en değerli olupta hızla kaybedilen yetenek odaklanabilme. Oturup bir şey üzerine fazla kafa yoramıyor, derin bir şekilde çalışamıyoruz çoğu zaman. Elektronik cihazlarımıza gelen bildirilerin haddi hesabı kalmadı. Bir nefes almak istediğinizde bile onlarca bildirim ile kendimizi bir anda sosyal medyanın veya İnternetin çöplüğünde bulabiliyoruz. Peki çözüm nedir? Bunu size bırakıyorum…

8. Farkında olun

İnsanlar ile çalıştığınız farkında olun, neyi çözmeye çalıştığınızın farkında olun, neyi debug ettiğinizin farkında olun, kendinizin ve düşüncelerinizin farkında olun. Bir sorun üzerine çalışıyorsanız, çözmeye çalıştığınız esas sorunu unutmayın. Aksi halde kendi kafanızı karıştırır ve düşüncelerinizi dağıtırsınız. Bu sizde moral bozukluğuna neden olmasının yanında yapacağınız işin daha uzun sürmesine neden olur ve sonuçta kısır bir döngüye girmiş olursunuz.

Son verirken yazıma…

Bayağı bir şeyler demişim aslında. Aklımda bir kaç konu daha var ama o kadar önemli değil. Yukarıda ki dediklerimi yapsak, zaten anlatmak istediğim diğer kısımlar otomatik olarak beliriveriyor. Her ne ise. Bir daha ki yazımda görüşmek üzere, kalın sağlıcakla…