İyi Programcı, Kötü Programcı
Ben kendimi nihayetinde programcı olarak görme eğilimindeyim. İşin matematiksel, mühendislik, sanatsal vb. taraflarının hepsinden çok zevk alıyorum. Gerek algoritmik çözümlemeler, gerek üzerine tekrar tekrar düşünerek, daha da etkin hale getirdiğim kod yapısı, çalışma zamanı performansı, bu sırada hissettiğim estetik kaygılar vs. hepsi bana çok zevk veriyor.
Eskiden bu yana, değişik fırsatlarla, kendimi teyzeler, amcalar arasında buluyorum. (Açıkçası, artık çocuklarımın arkadaşları da bana amca diyorlar ama, o tarafa girmeyelim şimdilik 🙂 ) Memleketim Ayvalık’ta olsun, Anadolu’nun farklı yerlerinde olsun, İstanbul’da olsun, aile, eş-dost, akraba vs. ortamları kastediyorum. Eskiden böyle ortamlarda doktor ve avukat olmak problemliymiş, herkes derdini anlatırmış. Uzun zamandır bu mesleklere bizler de eklendik, herkesin bilgisayar vs. ile ilgili bir derdi var. 500-600 km araba sürüp, gittiğim misafirlikte modem-wireless tamiri yaptığımı biliyorum.
Neyse, bu amcalar ya da teyzeler benim yazılımcı ya da amiyane tabirle “programcı” olduğumu öğrendiklerinde, etraflarındaki, örneğin torunları, “programcı”lardan söz açıp, konuyu “o da seninle aynı işi yapıyor”a getirirler. “Eyvallah, çok güzel” diye cevap veririm ben de. Eskiden merak edip, “aaa öyle mi?” diye de saf saf sorardım. Sonra, 5-10 dakika sonra, o torun gelirdi: 17-18 yaşlarında, meraklı, radyoyu parçalayıp ondan bir çamaşır makinesi çıkarma ruhuna sahip, cevval ama eğitimsiz, örneğin orta okuldan terk ya da meslek lisesinde okuyan bir genç örneğin. Tanışırız, konuşuruz, o doğmadan önce benim Fortran ya da C ile uğraşmışlığımın olduğu ortaya çıkar örneğin. Bu işleri yurt dışında öğrenmiş olmam, ne bileyim Netscape tarayıcısının ya da Java’nın yayınlandığı günleri hatırlamam, büyük projelerde, GE gibi yerlerde çalışmış olmam, tecrübelerim, C# ile ilgili soru sorduğunda rahatça “bilmiyorum” demem, vs. vs. sonuçta, tüm bunlar o gençte bana karşı son derece yüksek bir saygı, imrenme vb. duygular oluşmasına sebep olur. Bunu rahatlıkla farkedersiniz.
Size bir sır vereyim mi? Yukarıda saydığım ve o gencin bende görüp de içini çektiği, imrendiği bu şeylerin hiç birisi beni ondan daha iyi bir programcı yapmaz. Yukarıdakilerin hiç birisine kanıp da siz de birisinin iyi programcı olduğuna karar vermeyin. Peki, nedir iyi programcıyla, kötü programcıyı birbirinden ayıran şey? EJBleri çok iyi bilmek mi? Ya da yüzlerce kişiden oluşan bir yazılım projesinin parçası olmak mı? Ya da C, C++, ya da Java’yı sular seller gibi bilmek mi? Örneğin yukarıda bahsettiğim genç ile bana bir algoritmik ödev verin, mesela pi’ye en hızlı şekilde ve en az bellek harcayarak yakınsamak ya da başka bir graf sorusu örneğin, muhtemelen ben daha hızlı ve güzel bir şekilde yaparım o ödevi. Ya da bir proje verin ikimize de, son derece basit, Fahrenheit-Celcius çevirisi yapacak bir web yapısı kurmamızı isteyin örneğin. Muhtemelen ben, o gencinkine göre çok daha sağlıklı bir mimari ve çok daha performanslı ve scalable olacak şekilde bu projeyi tamamlarım. Yani programlama faaliyetinin ister matematiksel ister mühendislik taraflarında muhtemelen ben çok daha iyi performans gösteririm. Ama yine de bunların hiç birisi beni ondan daha iyi programcı yapmaz. Bunların hiç birisi, birisinin diğerinden daha iyi programcı olduğunu göstermez.
Nedir peki iyi programcıyı, kötü programcıdan ayıran en temel şey? Çok basit bir cevabı var bu sorunun. İyi programcılar, yazdığı kodu her yönüyle anlarlar ve başkasının anlayacağı şekilde kod yazarlar. Kötü programcılar ise ne yazdığını her yönüyle anlamazlar, bırakın bir başkası, kendisi bile bir müddet sonra ne yazdığını zor çözer.
Yani kötü programcı şöyle kod yazar:
... cardInfo.setIdNo(cardInfo.getTcCitizen() ? (formUtils.isNullOrEmptyString(verifyOtpWSResponse.getTckn()) ? registrationForm.getTckn() : verifyOtpWSResponse.getTckn()): (formUtils.isNullOrEmptyString(verifyOtpWSResponse.getCustno())) ? registrationForm.getTckn(): verifyOtpWSResponse.getCustno()); ...
İyi programcı ise böyle kod yazar:
// Burada CardInfo’nun Idsi atanır. Id olarak eğer musteri TC vatandasi ise // ve ya WS’den ya da fromdan gelen tckn atanır. Eğer müşteri TC vatandaşı // değilse Id olarak customerNo alınır. // Burada da yine ya WS’den ya da formdan gelen customer no atanır. String idNo = null; Boolean isTcCitizen = cardInfo.getTcCitizen(); String tcknFromForm = registrationForm.getTckn(); String tcknFromWS = verifyOtpWSResponse.getTckn(); boolean nullOrEmptyTcknFromWS = formUtils.isNullOrEmptyString(tcknFromWS); String custNoFromWS = verifyOtpWSResponse.getCustNo(); boolean nullOrEmptyCustNoFromWS = formUtils.isNullOrEmptyString(custNoFromWS); if(isTcCitizen){ if(nullOrEmptyTcknFromWS) idNo = tcknFromForm; else idNo = tcknFromWS; } else{ if(nullOrEmptyCustNoFromWS) idNo = tcknFromForm; else idNo = custNoFromWS } cardInfo.setId(idNo);
Max Kanat-Alexander’ın Code Simplicity isimli kitabında dediği gibi:
İyi programcıyla kötü programcı arasındaki fark anlamadır. Yani kötü programcılar ne yaptıklarını anlamazlar, iyi programcılar ise anlarlar. İster inanın, ister inanmayın ama bu gerçekten bu kadar basittir.
(The difference between a bad programmer and a good programmer is understanding . That is, bad programmers don’t understand what they are doing, and good programmers do. Believe it or not, it really is that simple.)
Ya da Martin Fowler’ın, Refactoring isimli kitabında yazdığı gibi:
Herhangi bir insan bilgisayarın anlayabileceği kod yazabilir. İyi programcılar ise insanların anlayabileceği kod yazarlar.
(Any fool can write code that a computer can understand. Good programmers write code that humans can understand.)
Evet bu fark, hakikatten bu kadar basittir. Yukarıda bahsettiğim genç ile beni sınarken yaptığımız ödevleri bir başka programcıya verin ve ciddi bir değişiklik yapmasını isteyin. yYaptığımzı şey bir algoritma ise, bir kaç adım sıkıştırın araya, ya da bir proje yapmışsak bir süreçte ya da iş kuralında değişiklik yapılmasını isteyin. Hangimizin kodu ya da projesi en kısa sürede bu üçüncü programcı tarafından başarıyla değiştirilebilirse, bilin ki en iyi programcı odur.
Linus Torvalds’ın dediği gibi, “Konuşmak ucuzdur. Bana kodu göster.” (Talk is cheap. Show me the code.)
Toplam görüntülenme sayısı: 2257
bedir
15 Ocak 2015 @ 21:41
Real programmers don’t comment their code. If it was hard to write, it should be hard to understand.
Böyle bakış açıları da var.
Akin
15 Ocak 2015 @ 22:27
Aynen 🙂
Teşekkürler.
Mehmet Aydogan
16 Ocak 2015 @ 04:09
Yazdıklarınıza katılmıyorum, iyi programcı zaten koda bakınca ne yaptığını anlar, koda bakınca ne yaptığını anlamamak ya da sonradan değişiklik yapamamak kötü programcının sorunudur.
Akin
16 Ocak 2015 @ 10:44
Teşekkür ederim yorumunuz için.
hakan
16 Ocak 2015 @ 14:57
İyi programcı olabilmek için ilk şartın mesleği sevmek olduğu kanaatindeyim. Mesleği sevmeyenlerin, çalışsın da nasıl yazılırsa yazılsın felsefesini takip ettiklerini çokça gözlemledim 🙂
Akin
16 Ocak 2015 @ 18:17
Kesinlikle, sevmek hatta otesinde tutkulu olmak aslen her meslekte basarılı, farklı olmak için sart.
tesekkür ederim.
ahmet
23 Ocak 2015 @ 00:06
Bu iyi programcı – kötü programcı ayrımını yapan kitabı yarım yamalak ingilizcemle okurken bi yarım saat gülmüştüm. Neden mi? Biraz anlatayım da sizde gülün 🙂 2008 kasım ayında bir kursa başlamıştım. Eğitim kurumundaki satış temsilcisi bayan arkadaşa sordum, dedim ki : ” Teknik lise elektrik mezunuyum, kamu yönetimini de dışardan bitirdim. Ancak programlamayla alakam sadece 40kb ‘lık hafızaya sahip Casio PB-1000 türü minik bi bilgisayarla oldu. Bu işi yapabilir miyim ki?”
Bu bayan arkadaş illa kayıt yapacak ya , dedi ki : ” Bilgisayarı açıp kapatabiliyor musunuz?” Evet, dedim kendisine. Ardından ekledi : ” O zaman bu işi yapabilirsiniz.” 🙂 Sonra da elimize yüzümüze bulaştı tabi , o da ayrı mesele.
Bilgisayarın üzerindeki düğmeye basıp basamama yeteneğiyle yazılımcı olunur mu bilinmez ama, en azından dizayn ve analiz tekniklerini bilmeden, nesne yönelimli programlama gerçekte nedir , nesneler nasıl tasarlanır gibi konularda uzmanlaşmadan kaliteli bir programcı olmak çok zor. Ama 2 yıllık mezunu boş kafalı tanıdıklarım da var. Hatta onlara bu tekniklerden bahsettiğim de bön bön yüzüme bakıyorlar ve söyledikleri tek şey şu : ” Abi , neden bu kadar kasıyorsun… Piyasa da senin kafada adam yok, boşuna uğraşıyorsun.” Cem yılmaz’ın dediği gibi, aynı oksijeni soluyoruz ama o içerde artık ona ne yapıyorsa? :9
Akin
23 Ocak 2015 @ 00:40
Size cok cektirmişler Ahmet bey 🙂
ahmet
23 Ocak 2015 @ 01:27
Malesef 🙂 Çektikçe uzuyoruz bakalım hayırlısı, ne diyelim 😀