Etiket arşivi: programcı

Neden Her Programcının Bir Blog Sayfası Olmalı?

Blog kelimesi Web Log kelimelerinin kısaltılmış halidir. Bir blogu dijital ortamda tutulan bir günlük olarak düşünebiliriz. Aşağıda sıraladığım sebeplerden dolayı her programcının bir blog sayfası olmalı:

  • Blog bir programcının özgürce kendini ifade etmesini sağlar. Söyleyecek bir şeyi olan bir programcı blogu aracılığı ile okurları ile buluşur. Programcı okurlarından geribildirim niteliğinde yorumlar alır. Bu kendi düşüncelerini yapıcı yönde sorgulamasını sağlar.
  • Bir blog tutmanın en olumlu yanı bilgi paylaşımını teşvik etmesidir. Blog programcıyı daha paylaşımcı olmaya iter, yıldız programcı olma tehlikesine önler.
  • Sahip olduğu bilgi ve tecrübeyi blogu aracılığı ile paylaşan programcı diğer programcılara bilgi eksilerini gidermelerinde yardımcı olur. Ne kadar çok programcı bilgi paylaşımında bulunursa, o kadar çok okur bundan faydalanır.
  • Verimli olmanın önündeki en büyük engellerden birisi dahil olmak zorunda olunan e-posta trafiğidir. Birçok kişiye aynı konularda tekrar tekrar aynı cevaplar verilir. Sayfalar dolusu e-posta iletisi yazmak yerine, programcı bunu bir defaya mahsus kendi blog sayfasında ya da çalıştığı firmanın wiki sayfasında yaparak, ondan bilgi isteyenlere bu blog ya da wiki sayfasının linkini gönderebilir. Bu şekilde hem aynı cevapları yazarak zaman kaybetmez, hem de sahip olduğu bilgilerin merkezi bir yerde toplanmasını sağlar.
  • Blog yazılar zaman içinde programcı için kaynak referans haline gelir ve kendi çözümlerini tekrar gözden geçirme firsatı verir.
  • Blog yazmak günlük tutmak gibidir. Zamanla blog kişisel gelişimin aynası haline gelir.
  • İşverenler mülakat öncesi programcının internetteki izlerini araştırırlar. Güncel içeriğe sahip bir blog sahibi bir programcı mülakata 1-0 önde girer. Bloğu aracılığı ile bir programcı piyasa değerini artırmış olur.
  • Blog yazan programcının ana dilini kullanma kabiliyeti genişler. Bu günlük işlerine olumlu olarak yansır. Blog yazan programcı daha iyi kod ve doküman yazar ve ana dilini daha iyi kullanır.
  • Blog yazıları ile belli bir kesime hitap eden programcı bir zaman sonra güvenilir ve sektörde tanınan bir referans haline gelir.
  • Blog yazan programcı kendisi ile aynı fikirdeki diğer programcılarla tanışma ve bir araya gelme firsatı yakalar. Böylece programcının çevresi genişler, sosyal aktiviteleri artar, kendisi ile aynı fikirdeki diğer programcılarla fikir alışverisinde bulunur.

Bir blog sayfanız yoksa, hemen bir blog sayfası oluşturun. Blog yazı yazmayı zaman kaybı olarak görmeyin ya da yazdıklarımı kim okur demeyin. Bunu ilk etapta kendi kişisel gelişiminiz için yapıyorsunuz. Eğer kaliteli içerik oluşturabilirseniz ki zaman içinde bu şüphesiz gerçekleşecektir, o zaman okuyucu kitlenizin çok hızlı büyüdüğüne şahit olacaksınız.

Blog yazmanın size kattığı artı değeri çok kısa bir zamanda hissetmeye başlayacaksınız. Blog yazmadan bulu bilemessiniz :)

EOF (End Of Fun)
Özcan Acar

Benlik Güden Programcılar

Geçenlerde bir okuyucumdan bir e-posta aldım. İletisinin bir bölümünde şöyle yazmış:

“Mağrur programcı ustalar sizin gibi mi? Burnundan kıl aldırmaz. Onlara da şöyle diyorum: Mağrur olma padişahım senden büyük Google var“. Bunu okuyunca aklıma bu yazıyı yazmak geldi.

Ninem bize ufakken “benlik gütmeyin yavrularım, güzel bir şey değil” derdi. Yıllar sonra ne demek istediğini anladım. Allah rahmet eylesin, çok dayağını yedim ufakken :) Bir keresinde… neyse bunları başka bir yazımda anlatırım.

Benlik gütmek demek, her şeyi ben merkezli görmek demektir. Benlik güden bir şahıs yakaladığı her fırsatta “ben yaptım, ben başardım, en iyisini ben bilirim, bu konuda benden daha iyisi olamaz“ şeklinde kendini ifade eder ya da düşünür. Kendisini mükemmel ve kusursuz görerek, benlik güder ve kibirlenir.

Programcılık mesleği de ne yazık ki benlik gütmek için ideal bir ortam sunar. Programcılığın temelinde bilgi sahibi olmak yatar. Bu bilgiye sahip olan haklı bir gururla işini yapmaya çalışır. Bazı şahıslarda ne yazık ki bu gurur kibire dönüşür. Bilgi bu tür şahısları ne oldum delisi yapar. Bilgiye sıkı sıkı sarılırlar. Kimseyle paylaşmazlar. Gizli gizli yeni bilgi edinip, bilgilerine bilgi, kibirlerine kibir katarlar.

Bu tip programcılarla mutlaka siz de karşılaşmışsınızdır. Her projede bir örneğini bulmak mümkündür. Ben bu tür programcılara yıldız programcı (star developer) diyorum. Yıldız programcının hemen göze batan birkaç özelliği vardır. Toplantılarda en sesli onlar konuşurlar. Söyleyecek mutlaka bir şeyleri vardır. Genelde ortaya atılan görüşe ters pozisyon alarak, kendilerini dolu dolu ifade etme fırsatı yaratırlar. Siz bir şey söylemek istediğinizde “evet, ama…” şeklinde bölüp, kendi düşüncelerinin ne kadar daha doğru olduğunun altını çizerler. Karmaşık çözümleri yeğlerler. Bu onlara iki türlü avantaj sağlar: kimsenin kodu anlamaması yıldız programcının uzun vadede çalışma yerini korumasını sağlar (job protection); kodu anlamayan diğer programcılar devamlı yıldıza danışmak zorunda kalırlar. Bu da ona vazgeçilmez olduğu hissini verir. Yıldızlar blog ya da kitap yazmazlar. Kitap yazdılarsa bile referans olsun, namım yürüsün düşüncesiyle yazmışlardır. Bilgiyi güç olarak görürler ve bilgi paylaşmayı güç paylaşma olarak algılarlar. Böyle bir tip ile çocukluğuna geri dönüp, nelerin yanlış gittiğini gerçekten görmek isterdim. Mutlaka bir yerlerde bir şey olmuş olmalı. Ya annesinden yeterinde ilgi görmedi ya da okulda çok dayak yeyip, ezik büyüdü. Bu çünkü normal bir davranış biçimi değil!

Sektörümüzde benlik güden, kendini beğenmiş, sözde programcılara ihtiyacımız yok. İhtiyacımız olan, bilgisini karşılık beklemeden paylaşan, her konuda mütevazi, gençlerimize örnek olabilen programcılardır. Alın size birkaç örnek: Cem Ikta, Murat Yener, Gökalp Kuşcu, Mehmet Çeliksoy ve daha niceleri. Hepsinin blog sayfası var, devamlı bilgiyi paylaşma derdindeler. Neden? Bilginin paylaşarak çogaldığının bilincindeler. Yeni yetişen gençlere yardım etmeyi seviyorlar. Kendilerinin de bir zamanlar o konumda olduğunu unutmamışlar. Saygı ve hürmeti hak ediyorlar.

Okuyucumun dediği gibi “Mağrur olma padişahım senden büyük Google var“.

EOF (End Of Fun)
Özcan Acar

Melek Programcılar ve Şeytan Yatırımcılar

Melek yatırımcıları (business angels) bilirsiniz; hani şu yeni kurulmuş firmalara (startup) yatırım yapan şahıslar. Melek programcıları bilir misiniz? Bunlara gelmeden önce şeytan yatırımcıları açıklamam gerekiyor. Melek yatırımcıların yanında bir de şeytan yatırımcılar (business devils) vardır. Bunlar da melek yatırımcılar gibi yatırım yaparlar, ama niyetleri iyi değildir. Maksatları bellidir; kısa zamanda firmayı satıp (exit), para yapmak. Bu uğurda yapmayacakları yoktur. Genelde dünyadan ve ticaretten haberi olmayan, belki üniversiteyi yeni bitirmiş, İnternet üzerinden uygulanabilecek iyi bir ticari fikre sahip bir veya birden fazla programcının kurduğu firmalardır kendilerine seçtikleri kurbanlar. Ben bu programcılara melek programcılar diyorum. Okumaya devam et →

Meğer Neymişiz!

Bu sabah yanımda kocaman, Coca Cola pet sişeleri taşıyan TIR vari bir araç durup, yol soruyor. Sürücünün neden navigasyon aleti yok diye düşünürken, bu yazıyı yazma fikri oluşuyor kafamda.

Şimdi birkaç saniyeliğine bir dünya hayal edelim; İçinde IPhone ve Android akıllı telefonların olduğu, ama app denen birşeyin bilinmediği, bilgisayarların olduğu, ama işletim sistemi diye birşeyin icat edilmediği, internetin olduğu, ama iletişim kurmak için e-posta ve web sunucularının olmadığı bir dünya… Bu dünyada eksik olan nedir? Evet, yazılım yapılmıyor bu dünyada. Yazılım sistemlerini kim yapıyor? Evet, biz programcılar. Yani? Bu dünyayı daha yaşanır hale getiren, oluşturdukları yazılım sistemleri ile devrim yaratan, insanlığa yön veren, insanlık tarihinde dünyanın ilk kez kocaman bir köy olmasını sağlayan ve insanlığa hizmet eden biz programcılarız. Ameliyat eden robotlardan tutun, uzaya gönderilen uydulardan, havada uçan uçakların kontrol sistemlerine hadar her yerde, içinde program çalışan birşeyler görmek mümkündür. Yazılım sistemleri modern insanın sürdürdüğü yaşam tarzının vazgeçilmez bir parçası haline gelmiştir.

Hacker’ları bunun dışında tutmak şartıyla oluşturduğumuz birçok yazılım sistemi doğrudan insanlığa hizmet etmektedir. Bunun en güzel örneğini açık kaynaklı yazılım sistemleri oluşturmaktadır. Onların başında da Linux işletim sistemi gelmektedir. Toplum yazılım sistemlerinin insanlık için önemini anlamış olmalı ki, yazılımcılara nişanlar verilmektedir. Bunun bir örneğini geçtigimiz ay Linux işletim sisteminin mucidi Linus Torwald’e verilen Millennium Technology Prize 2012 nişanı teskil etmektedir.

Ödülü veren akademi tarafından yapılan açıklamada Linus’un açık kaynaklı bir yazılım sistemi geliştirmesinin dağıtık yazılım sistemleri oluşturmaya ve internetin özgür olmasına katkıda bulunduğu belirtilmektedir. Linux işletim sistemi milyonlarca, belki de milyarlarca insan tarafından kullanılma potansiyeline sahiptir. Linus yaptığı açıklamada, yazılım sistemlerinin modern dünyada çok önemli olduklarını ve insanlığa hizmet edebillmeleri için mutlaka açık kaynaklı olmaları gerektiğinin altını çizmiştir.

Durum böyle iken biz programcıların üstlendiği toplumsal sorumluluk artmaktadır. Hatasız yazılım sistemleri oluşturmamız gerekmektedir. Birçok insan günlük hayatında kullandıkları yazılım sistemlerinin hatasız çalışmasına güvenmek zorundadır. Yazılım hatalarının meydana gelmesi onların hata yapmasına sebep verebilmektedir. Baştan savma yazılım sistemleri oluşturarak onların güvenini yitirmeyelim.

Bu arada TIR sürücüsüne “navigasyon aygıtınız yok mu” sorusunu sormadan edemedim. “Var, ama çalışmıyor” dedi. Bir yazılım hatasıymış sanırım ;-) Yazılımda daha iyi olmamız lazım. İnsanlar bize güveniyor.

EOF (End Of Fun)
Özcan Acar

Programcıyım, Yönetici Değil!

Türkiye’de genç programcı adaylarının kariyer planlaması şu şekilde:
Üniversite »» Birkaç yıl programcılık »» Proje yöneticiliği »» Bölüm yöneticiliği »» Bölüm müdürlüğü

Benim kariyer planlamam şöyle:
Üniversite »» Ömür boyu programcılık

Ben programcıyım, yönetici değilim!
Üniversitede eğitimini almadığım birşey nasıl olabilirim? Neden programcıların çoğu bir yerlere yönetici ya da müdür olmak istiyor? Bunun açıklaması kolay: daha fazla maaş alacaklarını düşündükleri ya da pozisyon itibariyle daha fazla dikkate alınmak istedikleri için.

Herşeyin statü sembolleri ile ölçüldüğü bir toplumda programcıların daha fazla para kazanmak için yönetici olma sevdalarını ayıplamıyorum. Bu sadece programcılar için geçerli bir durum değil. Benim ayıpladığım programcının bu uğurda ruhunu satmasıdır. Eğer bir insan programcı oldu ise, bu işe gönül verdiği için olmuştur. Mecburiyetten olan programcı zaten programcı sayılmaz. Eğer yaptığı işi sevmiyorsa, bırakıp başka bir iş yapması mübahtır. Aldığı para kendisini tatmin etmiyorsa, benim kişisel olarak yapabileceğim birşey yok (ama daha fazla nasıl kazanabileceğine daha sonra değineceğim). Ama bu işin birde manevi tarafı yok mu? Haz alarak yaptığı bir iş insanı mutlu etmez mi? Neden daha fazla maaş, insanı mutlu eden bir işe tercih edilir ki? Bunu anlamam çok zor.

Yöneticilik ya da müdürlük öyle her babayiğidin harcı değildir. Yönetici olmak isteyen programcılar bunu bilmiyor galiba. Bu işin bir defa eğitimini almak gerekir. Yönetim kademesindeki insanların liderlik, çalışanlara örnek olma, onları motive etme, güçlü iletişim gibi vasıflara ihtiyacı vardır. Çok ağır şartlarda çalışıp, neticesi geniş kapsamlı kararlar vermek zorunda kalırlar. Üstlerinde büyük sorumluluk taşırlar. Daha fazla maaşı hak ederler, ama bedelini de öderler.

Saydığım bu sebeplerden dolayı yöneticiliğe talip değilim. Ben bu işten anlamam. Ben bildiğim işi yapmayı yeğlerim. Programcıyken, yöneticiliğe soyunanlara da kazaları mübarek olsun derim.

Programcılar Yönetici Olmaya Zorlanıyor

Ömür boyu programcı olarak çalışmak isteyenler de yok değil. Nedendir bilmiyorum ama Türkiye’de „insan kırk yaşından sonra programcı olarak çalışmaz“ kanısı oluşmuş. Yaşlı programcılara kötü gözle bakıldığı bir toplum içinde yaşıyoruz. Hala bir baltaya sap olamamış ve programcılık yapıyor denilebiliyor. Aman allahım, inanılacak gibi değil!

Bu şartlar altında programcıların üzerinde yönetici olma doğrultusunda baskı oluşmuyor değil. Lakin bu baskıya karşı koyup, programcının programcı olarak yoluna devam etmesi şarttır. Programcının gönlünde yatan aslan bellidir. Programcılar kendi kariyer planlamalarını kendileri yapmalı, başkalarının buna müdahele etmesine karşı koymalıdırlar. Müdahele olduğunda buna baş kaldırıp, dik durmalı ve statükolarını korumalıdırlar. Yoksa sonuç bellidir: yaptığı işten memnun olmayan bir sürü eski programcı yönetici.

Bunun yanısıra birde firmalardaki kariyer yapma imkanlarına göz attığımızda, çoğu programcıya yönetici olmaktan başka seçenek kalmadığını görmekteyiz. Avrupa ve Amerika’da durum çok farklıdır. Büyük yazılım firmalarına baktığımızda, ömür boyu mühendis kalınabildiği, bu konuda uzmanlaşma imkanı veren kariyer patikalarının olduğunu görmekteyiz. Bunun bir örneğini IBM’in çalışanlarına sunduğu Distinguished Engineer olma imkanı teşkil etmektedir.

Programcılar Mutlu Değil

Programcılar ne yazık ki yaptıkları işten memnun ve mutlu değiller. Devamlı günü kurtarmaya çalışmak, verilen emeğe ilgi ve saygının olmaması, fazla mesai yapmaya zorlamalar programcının içindeki şevki kırabilir. Ama bir programcı yöneticiliğe upgrade yaptığında durum farklı mı olacaktır? Pek zannetmiyorum. Öyleyse gönül verdiğimiz işi yapacak şekilde ortam hazırlamaya bakalım.

Programcılar İşsiz Kalmaz

Programcılar şarap gibidir. Kendilerini geliştirmeleri, ustalaşmaları şartıyla yaşlandıkça kıymetlenirler. Yetkin bir programcının piyasada işsiz kalması imkansızdır. Herhangi bir işi yapan bir yöneticinin işsiz kalma ya da işten çıkarılma rizikosu yetkin bir programcıdan çok daha yüksektir. Yetkin bir programcıyı kolay kolay kimse işten çıkartamaz. Geliştirdiği uygulama hakkında o kadar çok bilgiye sahiptir ki yeri kolay kolay doldurulamaz. Yetkin programcılar piyasada freelancer olarak çalışıp, maaşlarının birkaç katı fazlasını kazanabilirler.

Bu kadar uzman progragramcının arandığı bir piyasada kim ne yapsın yöneticiliği. Programcılık güzel ve geleceği olan bir meslektir. Kıymetini bilelim.

EOF (End Of Fun)
Özcan Acar

Programcılık Sanat mı, Zanaat mı?

Çoğu zaman aklımda olan bir soru var: „Programcılık bir sanat mıdır yoksa bir zanaat mıdır? Biz programcılar sanatkar mıyız yoksa zanaatkar mıyız?

Vikipedi’ye baktığımızda sanat ve zanaat için aşağıdaki tanımlamayı yapmakta:

Sanat en genel anlamıyla, yaratıcılığın ve hayalgücünün ifadesi olarak anlaşılır. Tarih boyunca neyin sanat olarak adlandırılacağına dair fikirler sürekli değişmiş, bu geniş anlama zaman içinde değişik kısıtlamalar getirilip yeni tanımlar yaratılmıştır. Bugün sanat terimi birçok kişi tarafından çok basit ve net gözüken bir kavram gibi kullanılabildiği gibi akademik çevrelerde sanatın ne şekilde tanımlanabileceği, hatta tanımlanabilir olup olmadığı bile hararetli bir tartışma konusudur. Açık olan nokta ise sanatın insanlığın evrensel bir değeri olduğu, kısıtlı veya değişik şekillerde bile olsa her kültürde görüldüğüdür. Sanat sözcüğü genelde görsel sanatlar anlamında kullanılır.

Zanaat , sermayeden çok nitelikli emeğe dayalı; öğrenimin yanısıra el becerisi ve ustalık gerektiren meslek. Zanaatkâr, zanaatle uğraşan kişi anlamına gelir. Marangozluk, ayakkabıcılık, kuyumculuk (takı üreten), kumaş boyama, çömlekçilik, berberlik, bakırcılık gibi mesleklerin hepsi birer zanaattir. Bir kimsenin zanaatkâr olması için el becerisi gerektiren bir malı veya hizmeti sadece satması değil, bilfiil üretmesi gerekir.

Yaptığımız işte he ikisinden de birşeyler var değil mi? Okunması kolay estetik kod yazarak bir sanatkar, müşteri gereksinimlerini tatmin eden uygulamalar geliştirerek bir zanaatkar olabiliyoruz. Ama gerçek hayatta durum ne yazık ki çok farklı. Sanatkar değiliz, çünkü müşterimiz güzel kod yazıyoruz diye bize iş vermiyor. Zanaatkar değiliz, çünkü yazılımcı olarak usta-çırak geleneğinden yetişerek işimizin başına gelmiyoruz. Neden böyle düşündüğümü bu yazımda sizinle paylaşmaya çalışacağım.

Birgün yolunuz Gaziantep’e düşerse Bakırcılar Çarşısı’na mutlaka uğrayın. Orada çalışan bakır ustaları kelimenin tam anlamıyla hem sanatkardırlar hem de zanaatkar. Sanatkardırlar, çünkü estetik değerler oluştururlar. Zanaatkardırlar, çünkü usta-çırak kültürüyle yetişip, el emekleri ile bu değerleri oluştururlar.

Bir bakır ustasının elinde vücut bulan ve yirmi ile yüz Türk Lirası arasında bir fiyata sahip bir bakır kupanın sadece su içmek için edinildiğini görmedim. Ufak bir sanat eseri olan bu bakır kupayı evimizdeki vitrinleri süslemek için ediniriz. Bizim için önemli olan kupanın fonksiyonel işlevi (kupadan su içmek) değildir. Daha ziyade kupanın estetik yönü ilgimizi çeker. Bu yüzden bakır kupa bir sanat eseridir, bakır ustası da bir sanatkar.

Peki camdan üretilen su bardakları sanat eserleri midir? Bu su bardaklarını üretenler sanatkar mıdır? Şüphesiz tanesi yüzlerce Türk Lirası’nı bulan su bardakları bulmak zor değildir. Ama pahalı olmaları sanat eserleri oldukları anlamına gelmez. Camdan yapılmış bir su bardağını su içmek için alırız. Bizim için su bardağının tatmin etmesi gereken fonksiyonel bir işlevi vardır. Su bardağının bu fonksiyonel işlevi yerine getirirken bir sanat eseri olup, olmadığı bizi ilgilendirmez. Herhangi bir marketten tanesi bir Türk Lirası olan onlarca su bardağı alıp, mutfaktaki dolaba koyarız. Su içmek istediğimizde bir bardak alıp, kullanırız. Bizim için camdan üretilmiş bir su bardağının fonksiyonel işlevi ön planda oldugu için, bu su bardağı bir sanat eseri değildir. Aynı şekilde bu bardakları üretenler de bizim gözümüde sanatkar değildirler.

Buradan çıkardığım sonuç şudur: Sanat eserlerinde fonksiyonel işlev önemli değildir. Dikkat bulan, icra edilen sanattır. İcra edilen bu sanat, sanat eserleri meydana getirir. Fonksiyonel işlevin önemli olduğu yerlerde ise sanat eserleri tercih edilmez. Sanat eseri ve sanatkar olmayı belirleyen faktör budur.

Programcılık Sanat, Programcı da sanatkar değildir.

Bazı programcılar program yazma aktivitesini sanat olarak, bu işi yaptıklarından dolayı kendilerini de sanatkar olarak görmektedirler. Bu ne yazık ki doğru değildir. Program yazmak fonksiyonel bir işlevi meydana getirmek için yapılan bir aktivitedir. Camdan su bardağı örneğinde olduğu gibi, müşterimiz bizim yazdığımız programın estetik kısmıyla ilgilenmez. Onun için oluşturulan uygulamanın tatmin etmesi gereken sadece fonksiyonel bir işlevi vardır. Uygulamanın ne kadar güzel kodlandığı ile ilgilenmez. Hiç, bir müşterinin kodu açıp, okumaya çalışıp, ne kadar güzel yazılmış, ya da yazılmamış diye yorum yaptığını görmedim. Durum böyle iken, müşteriye sattığımız uygulama bir sanat eseri değildir. Bir sanat eseri oluşturup, satmadığımıza göre, programcı olarak sanatkar olmamızda mümkün değildir.

Bir programcı olarak müşterinin gereksinimlerini tatmin eden, sadece fonksiyonel işlevi olan ürünler ortaya koyarız. Müşteri oluşturduğumuz uygulamaya baktığında bir sanat eseri, bize baktığında bir sanatkar görmez. Ama aynı şahıs bir bakır ustasına baktığında bir sanat eseri ve sanatkar görür. Demek oluyor ki sanat eserine ve sanatkara bu sıfatı değer görenler başkalarıdır. Kendi kendimize sanat eseri ortaya koyduğumuzu ve sanatkar olduğumuzu iddia etmemiz birşeyi değiştirmez. Bu yüzden programcının kendisini sanatkar olarak görmesi doğru değildir, çünkü müşterisinin gözünde sanatkar değildir.

Programcılar Zanaatkar Değildir

Zanaat demek ustalık demektir; gelenek demektir; ustadan öğrenmek demektir. Siz hiç bir berber çırağının ilk işe başladığı gün saç kestiğini gördünüz mü? Çırak önce ustasına hizmet edip, ondan birşeyler öğrenmeye ve yavaş yavaş olgunlaşmaya başlayacaktır. Usta ise çırağını kendi tecrübeleri doğrultusunda ve kendi ustasından öğrendigi şekilde yönlendirecektir. Belli bir zaman diliminden sonra çırak yavaş yavaş bir zanaatkara dönüşecektir. Bunun gerçekleşmesi için ustasının kendisine gösterdigi yolu takip etmesi gerekmektedir. Bu yolu gitmek yıllar sürebilir. Ama bu yolun sonunda çırak için kendi ustası gibi bir usta, bir zanaatkar olma ödülü vardır. Ustalaşmak ve bir zanaatkar olmak hiç te kolay olmayan bir süreçtir. Ustası olmayan bir çırağın, bu yolu tek başına giderek ustalaşması çok zor olacaktır ya da mümkün olmayacaktır.

Yukarda yer alan tanımlamaya gore programcılar zanaatkar değildir, çünkü programcılar usta-çırak geleneginden gelerek yetişmezler. Programcılar için işe başlama bariyeri yok denecek kadar azdır. Bir bilgisayar ya da başka bir mühendislik ögrencisi diplomasını eline aldığı andan itibaren programcı olarak çalışmaya başlayabilir. Hiç kimse senin ustan kim ya da kaç sene çırak programcı olarak çalıştın diye soru sormaz. Programcının daha önce hangi projelerde çalıştığı sorulur. Buradaki amaç daha çok programcının ne kadar tecrübeli olduğunu anlamaya çalışmaktır. Ama yıl bazında edinilen tecrübe, şahsın ustalık oranını göstermez. On sene tecrübesi olduğunu söyleyen bir programcı, son dokuz senesini, birinci sene öğrendiği şeyleri tekrarlamakla geçirdiyse, son dokuz sene tecrübe topladığı söylenemez.

Tecrübesiz ve bir usta tarafından yetiştirilmemiş bir programacının hemen program yazmaya başlamasını, diplomasını almış bir doktorun hemen kalp ameliyatı yapmaya başlamasıyla kıyasladığımızda, durumun programcılar açısından aslında ne kadar absürd olduğunu görebiliriz. Kalp ameliyatı yapmaya aday bir doktor yıllarını usta doktorlara asistanlık yapmakla geçirir. Bu ona kalp ameliyatlarının nasıl yapıldığını ustalarından öğrenme fırsatı verir. Asistanlık dönemi bittikten sonra, asistan doktor seçtiği dalda uzmanlaşma dönemine girer. Hem asistanlık hem de uzmanlaşma döneminde doktor adayı ustalarından gerekli herşeyi öğrenerek, onlarca seneyi bulacak bir zaman diliminden sonra kalp ameliyetlarını yapabilecek kıvama gelir. Yukarda da belirttiğim gibi programcılar için bunların hiçbirisi geçerli değildir. Programcı diplomasını alır, masasının başına oturur ve hemen müşteri için program yazmaya başlar. Neden birçok projenin yapılan hatalı kalp ameliyatlarından dolayı öldüğü ortadadır, çünkü ameliyatı yapan programcılar yetkin değildir.

Usta-çırak geleneğinin olmadığı yerde bir zanaatin icrası ya da yapılan işin zanaat olarak tanımlanması çok zordur. Programcılar ustasız yetiştikleri için, zamanlarının büyük bir kısmını deneme yanılmayla boşuna sarf ederler. Yıllarca aynı şeyleri yapıp, yerlerinde saysalar bile, bunu tecrübe yapmış olarak algılarlar. Kendilerine yön gösteren bir ustaları olmadığı için kendilerini geliştirmekte ve ustalaşmakta çok zorlanırlar. Bu sebepten dolayı birçok programcı ustalık mertebesine erişemez. Oysaki bir ustanın denetiminde olsalar ustalaşmaları çok daha kolay olacaktır.

Programcılık Zanaattir

Bir önceki bölümün başlığına baktığınızda bu bölümün başlığı tezat gibi algılanabilir. Bir önceki bölümde neden zanaatkar olamadığımızı anlatmaya çalıştım. Bu bölümde ise aslında neden zanaatkar olduğumuzu anlatmak istiyorum.

Zanaati, sermayeden çok nitelikli emeğe dayalı; öğrenimin yanısıra el becerisi ve ustalık gerektiren meslek şeklinde tanımlamıştık. Bunun yanısıra bir zanaat usta-çırak geleneğini kapsamaktadır. Bu tanımlama bir programcıya tamamen uygun yapıdadır. Eksik olan programcıların ustasız yetişmeleridir. Ama bu onların zanaatkar olmadıkları anlamına gelmez. Bu eksiği kapatmak için ustalığa giden yolun tarifini yapmamız gerekmektedir. Bilge Programcı programı (http://www.bilgeprogramci.com – şu an üzerinde çalıştığım, yapım aşamasında olan projemdir) böyle bir yolun tarifesini ihtiva eder. Daha once bu yoldan geçmiş, şimdilerde usta programcılardan kendimize örnek alarak, bizde yaptığımız işte ustalaşabiliriz. Ustalaştıkca bir zanaatkar olmaya başlarız ve yaptığımız iş bir zanaat haline dönüşür. Usta programcılar zanaatkardırlar. Genç programcılara da onlara çırak olmak düşer. Eti senin, kemiği benim misali :)

Not: Bu yazının devamı olarak Mantığın Köleleri başlıklı biz yazı daha oluşturdum. Bilginize sunarım.

EOF (End Of Fun)
Özcan Acar

Programcılar yazar olsalardı keşke!

Birçok programcının büyük bir büroda çalıştığını düşünelim ve böyle bir ortama girdiğimizi. Programcı olduklarını bilmiyoruz, ne yaptıklarını da. Bu çalışanların ne yaptığını düşünürdük? Büyük ekranlarda devamlı birşeyler yazdıklarını gözlemleyip yazar olduklarını düşünürdük belki. Birşeyler yazana yazar denir. Bu bir roman, bir ders kitabı ya da bir yemek tarifi olabilir ya da bir kod parçası.

Dışardan bakıldığında biz programcılar böyle algılanıyoruz. Bizler de birer yazarız ama bu ünvanı taşımayı hak etmiyoruz. Neden mi? Açıklamaya çalışayım.

Bir yazar kitaplarını okurları için yazar. Baştan savma yazmaz; nasılsa okur ne demek istediğimi anlar demez; bir kitap olsun da, içinde ne olduğu önemli değil demez; roman yazıyorsa roman kahramanlarına abx, xyz gibi anlaşılması zor isimler vermez; o isimleri özenle seçer, onlara kişilik, ruh ve beden verir; kısaca yazar işini severek yapar, bu uğurda yıllarını verir.

Şimdi bir yazarı bir programcı ile kıyaslayalım. İkisi de birşeyler yazıyor. Yazarın yazdıklarını okuyucuları okuyor, programcının yazdıklarını çalışma arkadaşları. Hangi grup daha mutlu okucuyu kitlesi? Ben ikinci guruba dahil olmakla beraber çok mutsuzum. Okuduklarım bana haz vermiyor. Hadi ondan da vazgeçtim. Ne yazdıklarını anlayabilsem…… Bahaneler de hep aynı: “yeterli zamanim yoktu”, “patron programı hemen bitirmemizi söyledi”…. Bir kitap yazarı bu bahanelerle bir kitap yazsa bu kitap ne kadar başarılı olabilir?

Haklı olarak “Bir romanın bir yazarı olabilir. Programlar zaman içinde onlarca ya da yüzlerce programcının elinden geçiyor” dediğinizi duyuyor gibiyim. Bu okunamaz kodun oluşması için bir gerekçe değil. Her programcının benimsemesi gereken birkaç prensip ve pratik ile bu sorunun önüne geçilebilir. Bunların neler olduğuna yazımın ilerleyen bölümünde değineceğim.

Elli yıl oldu neredeyse; programcılar program yazıyor, bilgisayarlar bu programları çalıştırmak için kullanılıyor. Elli yıl oldu ama biz programcılar hala yazarliğa terfi edemedik. Yazdıklarımız okunmuyor. Kendimiz bile bir süre sonra yazdıklarımızı okuyamıyoruz. Bu mu işimize verdiğimiz kıymet?

Elli satırlık bir metodu anlamak beni zorluyor; yüz satırlık bir metot beni çileden çıkartıyor. Sekiz yüz ya da daha fazla satırlık bir metot hakkında ne düşündüğümü anlayabiliyorsunuz sanırım…. Dışarda böyle metotlar bulmak çok kolay. Yazılım dünyası sanki böyle metotlardan oluşmuş…. Yazar olarak ne kadar kötüyüz…. Bu ünvanı hak edebilecek en son meslek gurubu biziz… biz programcılar.

Programcıların yazar olduğu bir evren düşlüyorum, gerçek yazarlar kadar yaptıkları iş taktir edilen, yazdıkları kodun herkes tarafından (buna ev kadınları da dahil) okunabildiği, kod yazarken değişken ve metot isimlerini roman kahramanı olarak görüp, isimlerini özenle seçtikleri, yazdıkları kodun bir hikaye anlattığı programcıların yaşadığı bir evren…

Böyle bir evren var ama bize yüzlerce ışık yılı uzaklıkta, ışık hızı ile hareket edebilsek bile yüzlerce sene sonra erişebileceğimiz bir evren. İyi birer programcı olmaktan yüzlerce ışık yılı ötedeyiz! Şimdi bir düşünce deneyi yapalım ve bu evreni keşfedelim. Düşünce deneyimizde bizim evrenimizden bahsettigimiz evrene seyahat edecek bir programcımız var. Programcımız ışık hızının çok üstünde bir hızla bu evrene gidecek, oradaki programcılarla sohbet edip geri dönecek. Döndü bile; ne kadar hızlı gidip geldi degil mi? Bize neler getirdi ona bir bakalım. Bundan sonrasını bu seyahati gerçekleştiren programcının ağzından okuyacaksınız.

Yolculuğum uzun sürmedi, birkaç saniye… Uzay aracımla programcıların yaşadığı gezegene indim. Beni çok hoş karşıladılar. Bizlerden bir farkları yok. Beni çalışma ofislerine götürdüler. Bir ekip, evrenler arası ışık hızıyla hareket edebilen uzay araçlarının yazılımı ile uğraşıyordu. Koda bakıp bakmak istemediğimi sordular. İlk önce çekindim; programcı olarak böyle roket mühendisliğinden ne anlarım ki… kodu okusamda anlamam imkansız diye düşündüm. Sen yine de bir bak dediler. Baktım. Bir daha baktım. Birkaç satır okudum. O da ne! Ne kadar kolay okunuyor, okuduğum herşeyi anlıyorum. İnanılacak gibi değil. Bizim programlama dilleri gibi if/else/while yapılar kullanıyorlar, ama yazdıklari kod roman gibi okunuyor. Çok temiz ve sade. Metotlar çok kısa tutulmuş, verilen isimler çok anlamlı. İnsan ne okuduğunu hemen anlıyor. Çok şaşırdım! Bizim dünyamızda durum çok farklı. Zamanımızın büyük bir bölümünü başkalarının yazdığı kodu anlamak için saatler boyu debugging oturumlarında harcıyoruz. Nasıl program yazdıklarını soruyorum. İçlerinden birisi şunları söylüyor:

  • İlk önce bir test yazıyoruz. Ortada hiç birşey yok, sadece test kodu var.
  • Daha sonra kodu yazmaya başlıyoruz. Testler bizi yönlendiriyor. Herhangi birşeye dikkat etmeden testlerin çalışır hale gelmesi için kodu geliştiriyoruz. İlk sürümde metotlar uzun, isimleri anlaşılmaz olabiliyor, ama ilk sürüm de bunlar önemli değil. Önemli olan kodu çalışır hale gelmesi.
  • Kod çalışır hale geldikten sonra tekrar tekrar gözden geçirip, herşey anlaşılır hale gelene kadar değişiklik (refactoring) yapıyoruz. Elimizde otomatik çalışan testler olduğu için refactoring bizim için hiç sorun değil.
  • Yaptığımız her değişikliğin ardından testleri koşturarak oluşan yan etkileri tespit etmeye çalışıyoruz. Testler yan etkileri hemen bulmamızı sağlıyor. Bu bizim güvenimizi ve cesaretimizi artırıyor. Çok ufak adımlarla refactoring yapıyoruz. Kodu böylece yavaş yavaş yoğuruyoruz.
  • Programlarımızı KISS (Keep It Stupid Simple = Kısa tut) prensibine göre geliştiriyoruz. Her zaman en basit çözümü tercih ediyoruz. Basit olmayan çözümler kodun okunurluğunu olumsuz etkiliyor. Aramızda en iyi algoritmaları kim yazdı yarışı yapmıyoruz, en basitini ve okunuru kim yazdı yarışı yapıyoruz. Okunmayanar kod gözden geçirme oturumlarında diskalifiye oluyor
  • Kod tekrarlamasını önlemek için DRY (Dont Repeat Yourself = Kendini tekrarlama) prensibine sadık kalıyoruz. Kod tekrarları programın geliştirilmesinin önünde büyük bir engel.
  • Belirli etaplarda birden fazla çalışma arkadaşımızla kodu beraber gözden geçiriyoruz (code review). Burada amacımız kodu daha da okunur hale getirmek. Çalışan testlerimiz olduğu için kodu değiştirmek bizim için çocuk oyuncağı. Kodu bu şekilde yoğurmak bir zaman sonra çok zevkli bir uğraşı haline geliyor. En geç kod gözden geçirme oturumlarımızda uzun metotları ortadan kaldırma fırsatı buluyoruz.
  • Yazdığımız metotlar en fazla dört satırdan oluşuyor. Her sınıfın ve metodun sadece bir sorumluğu (SRP) var. Sınıf, metot ve değişken isimlerini çok özenle seçiyoruz. Kesinlikle bir kod parçasını açıklamak için koda yorum eklemiyoruz. Kod yoruma ihtiyaç duyuyorsa o zaman ya seçtiğimiz isimler yetersiz ya da kodun birden fazla metoda bölünmesi gerekiyor. Kodu okunur hale getirmek için bir sebep daha.
  • Genel olarak kod yazarken SOLID prensiplerine dikkat ediyoruz. SOLID testler kadar önemli.
  • Testler bizim için yazdığımız kod kadar önemli. Test kodunu da zaman zaman gözden geçirip daha okunur hale getirmeye çalışıyoruz. Testlere üvey evlat muamelesi yapmıyoruz.

Bunların yanında kırık cam metaforu bize devamlı izci kuralını hatırlatıyor. Kırık cam ve izci kuralı nedir diye soruyorum. Programcı arkadaş şu şekilde açıklıyor:


Tamir edilmeyen bir cam mahalle sakinlerinde terkedilmişlik hissi uyandırır. Bu kırık cam binaya sahip çıkılmadığının göstergesi olarak algılanır. Kısa bir zaman sonra başka pencere camları kırılır ve bina sakinleri ya da bölgede oturan diğer şahışlar düzensizliğin artmasını çabuklaştırırlar. Binaya sahipleri tarafından sahip çıkılmadığı taktirde bina büyük hasar alır. Artan hasar nedeniyle bina sahipleri binayı tekrar düzene sokma şefkini yitirebilirler. Program kodları kırık cam misali düzensizlikler giderilmediği taktirde zamanla bakımı zor hale gelirler. Programcı izci kuralını uygulayarak koda sahip çıkar.


Her izcinin uyduğu bir kural vardır:
“Kamp yaptığın yeri bulduğundan daha iyi bir şekilde bırak!”

Biz programcı olarak geride bıraktığımız kodun kalitesi, işe başladığımızda bulduğumuz kodun kalitesinden daha iyidir. İzci kuralını uygulayan programcı kırık cam prensibinden dolayı oluşan düzensizlikleri gidermiş olur. İzci kuralının uygulanması durumunda kırık cam hiç oluşmaz ya da mevcut kırık camlar tek tek tamir edilmiş olur.

Bu programcılarla sohbetimiz saatler boyu sürdü. Birşeyi çok iyi anladım ki o da bu programcıların işlerini çok severek yaptıkları. Aramızda ne kadar büyük farklılıklar varmış! Bu programcıların benimsedikleri ve günlük iş hayatlarında uyguladıkları prensipler, pratikler ve bir değer sistemi varmış meğer. Vaybe! Keşke burada kalabilsem ve bu muazzam yazarlarla çalışabilsem. Onlarla çalışmak ne kadar zevkli olurdu kimbilir. Yaptıkları işten çok büyük haz aldıkları ve ortaya çıkan kodla gurur duydukları yüz ifadelerinden ne kadar da belli oluyor. Benim dünyamda programcılar devamlı endişe içinde. Kafalarındaki sorular hep aynı: “programı zamanında yetiştirebilecek miyim?”, “anlamadığım şeyi nasıl değiştireyim ben şimdi”, “bu metot bu kadar uzun olmak zorunda mı ya!”, “neden bu mesleği seçtim? herkesin pisliğini ben mi temizlemek zorundayım?”, “bir an önce yönetici olupta bu pislikten kurtulayım bari, zaten bir ömür programcılık yapan adama kim kıymet verir”….. Biz programcılar kendi dünyamızda çok mutsusuz. Bu değişmeli. Zaman ne çabukta geçmiş. Geri dönmem gerekiyor artık.

Uzay aracıma binmek ve dünyama geri dönmek üzere yola çıkıyoruz. Uzay aracıma doğru giderken tekrar yaşadıklarımı gözden geçiriyorum. Programcılık ve yazarlık arasındaki parallelliği ve farklılığı daha değişik bir gözle görüyorum. Programcılık yazarlık demek, bir yazardan farklı birşey yapmıyoruz, ama bir yazardan çok farklı bir şekilde yazıyoruz. Bunun değişmesi gerektiğini düşünüyorum. Bu mesajı mutlaka kendi dünyamdaki programcılarla paylaşmalıyım.

Böyle düşüncelere dalmışken, uzay aracıma geliyoruz. Beni bu evrenin programcıları uğurluyorlar. Bana veda ederken elime bir adet “Clean Code” isimli kitabın nüshasını tutuşturuyorlar. Aralarından birisi “biz bu kitabı sizin dünyanızda keşfettik, bizim için çok faydalı oldu, siz de mutlaka bir göz atın” diyor. Bu kitabı tanıyorum: Robert C. Martin yazmış. Okuma firsatı bulamamıştım. Şimdi mutlaka okuyacağım. Elveda diyorum ve uzay gemime biniyorum. Birkaç saniye geçiyor… Tekrar kendi dünyamdayım. Artık bir yazar olmaya karar veriyorum, programcı bir yazar….

Siz de bir yazar mısınız?


EOF (End Of Fun)
Özcan Acar