Egosuz Programlasak Nasıl Olur?

Ali Emrah Pekesen
KoçSistem
7 min readFeb 8, 2020

--

Merhabalar,

Öncelikle bu yazıyı okuduğunuz için gününüz,geceniz daha güzel geçecek diyebilirim çünkü tüm pozitif enerjimi sizinle paylaşarak yazıya giriş yapıyorum. Yahu telefondan, bilgisayardan veya tabletten pozitif enerji mi geçermiş arkadaş demeyin lütfen.

Kesinlikle geçer. İstedikten, inandıktan sonra her şey olur. Küçük bir tebessüm her sorunu çözer..

Açıkçası Mediumdaki ilk yazımın tamamen teknik bir konu olacağını düşünmüştüm hep. Ve bu konuda kopyala yapıştır dışında ne yapabilirim diye düşünürken öyle uzun zaman geçti ki yazıyı yazamadım bile :) Sonunda “.. bir yerden başla Emrah ve bu başlangıç en azından bir işe yarasın mutlaka..” dedim kendime.

Bahsetmek istediğim konu literatürde “Egoless Programming” olarak geçiyor. İlk etapta insana acaba yeni bir programlama paradigması mı diye düşündürüyor aslında. (Bakınız..) Hayır değil! Temelde, başka insanlarla birlikte yazılım geliştirirken zaman zaman unuttuğumuz ve farkında olmadan kendimize ve takımımıza zarar verebileceğimiz unsurları ortadan kaldıracak basit öneriler diyebilirim. Gerald Weinberg (a.k.a. Jerry Weinberg) ’ın “The Psychology of Computer Programming” kitabında değindiği 10 ana başlık konuyu gayet temiz özetliyor. Başlıkları kendimçe ifade etmeye çalışacağım.

Hadi Başlayalım..

1-> Understand and accept that you will make mistakes
*(Hata yapabileceğinizi anlamalı ve kabul etmelisiniz)

Ne kadar anlaşılır ve anlayışla karşılanır bir başlık değil mi? Ben ilk okuduğumda, “.. yahu evet bana bunu 6–7 yaşlarımdayken öğretmenin, annem, babam yani birileri söylemişti zaten yeni duymuyorum ki.. “ demiştim. Fakat her duyduğumuz ve “öğrendiğimiz” kavramı gerçekte uyguluyor muyuz?

Evet kesinlikle haklısınız, işte tam da bu yüzden siz de bir insan olduğunuz için rahatlıkla dile getirebilirsiniz, evet siz de hata yapabilirsiniz, yapmış olabilirsiniz. Değişim ve gelişim, eksiğimizi kabullenmeden başlayamaz. Bu yüzden gelin birlikte kabullenelim. Biz insanız ve hata yapmış olabiliriz. Yazdığımız her satır kod, her uygulama konfigurasyonu kesinlikle hatasızdır diyemeyiz öyle değil mi?

Öyle ki, şimdiye kadar hata yapmamış olsakta, gelecekte hata yapmamızın kaçınılmaz olması da kuvvetle muhtemeldir. Bu noktada Google’ın “Failing is Learning” post mortem kültürünü çok önemli bir öğrenme kapısı olarak ele almak bizler için faydalı olacaktır. Bakınız..

2-> You are not your code
*(Siz yazdığınız kod değilsiniz, kişiselleştirmeyin)

Yazdığınız kod sizce sizin hayata bakışınızı, aile düzeninizi, karakterinizi, huyunuzu suyunuzu kısaca her şeyinizi ifade mi ediyor da , bir hatalı kod yazdığınızı fark ettiğiniz anda, yada bir başkası kodda yaptığınız hatayı bulduğunda tüm keyfiniz kaçıyor? Acaba yazdığınız hatalı kodu açık yüreklilikle söyleseniz ve düzeltme için gerekiyorsa yardım isteseniz hem başkalarına da faydanız olabilir hem de daha mutlu olabilir misiniz? Bakınız..

Hatamızı açıkça söylemekten imtina etmemeliyiz. Bir çok bilim insanı yıllarca bir tez üzerinde çalışıyor ve sonucu beklediği gibi çıkmadığında bile çalışmasını yayınlıyor ki, başkaları aynı hataları tekrar etmesin. Bakın fayda sağlamaya başladık bile..

Tam tersi de düşünülebilir elbette. Temiz, performans ve bellek yönetimini çok iyi yaptığımız kaliteli bir kod parçası yazmış olmamız kişiliğimizin de aynı kalite de olduğunu ispat etmez maalesef :)

3-> No matter how much “karate” you know, someone else will always know more
*(Ne kadar çok bildiğinizin bir önemi yok, her zaman daha iyi bilen birileri olacaktır)

Ben her şeyi bilirim, bu konuda en bilgili benim!

Eee? Bu yaklaşımın kimseye faydası yok hatta kendimize zararı var önce bunu kabullenelim. Ayrıca unutmamalıyız ki, dünyada bir yerlerde bizim tahmin bile edemeyeceğimiz birileri bizden daha fazla bilgiye sahip olabilir.

Biliyoruz dediğimiz konularda bizden daha fazla bilen, daha doğru yaklaşan birileri olacaktır mutlaka. Çünkü öğrenme asla bitmeyen bir süreçtir ve herkes bu sürecin içinde, sadece biz yeni bir şeyler öğrenmiyoruz. Bu yüzden açık yüreklilikle hem biz hem de başkaları bu süreçten faydalansın diye düşünerek, acaba karşımdaki kişinin önerisi daha mantıklı olabilir mi sorusunu kendimize sormalı ve arkadaşlarımıza fikir, öneri paylaşımları için fırsat vermeliyiz. Günün sonunda herkesin kazanması muhtemel olacaktır.

4-> Don’t rewrite code without consultation
*(Bir bilene danışıp emin olmadan kodu yeniden yazmayın)

Bu kod yanlış yazılmış hooop hemen değiştirip düzeltiyorum, nede olsa ben bu konuda uzmanım ve bilmediğim bir şey olamaz!

Alın size bir tehlike daha. Belki de o kodu yazan arkadaşımız bir başka yere dokunan ve ayrı çalışan bir süreç uygulamıştı! Artık bizim sayemizde, çalışması gereken bir süreç bozulmuş olacak. Doğrudan kodda değişiklik yapacağımıza, kodu yazan yada süreçle ilgili bilgisinden emin olduğumuz birisine danışsak daha doğru olmaz mıydı? Ne dersiniz?

Ayrıca yazılımcılar olarak elimizde “Pair Programming” adında paha biçilemez bir method var ve uyguladığımızda teknik çeviklik konusunda da ciddi katma değer sağladığını yıllardır tecrübe ediyoruz. Ve inanın bu method herkes için, çalışmayı çok daha çekici hale getiriyor.

5-> Treat people who know less than you with respect, deference, and patience
*(Sizden daha az bilen kişilere karşı sabırlı ve saygılı olun)

10 seneden fazladır sektörde çalışıyorum ve çok fazla projede farklı teknolojilerde harikalar yarattım ve en önemlisi de, inanın ki ilk başladığım gün de aynı bilgi ve tecrübeye sahiptim, hiç hata yapmazdım, her şeyi doğru bilir, doğru anlar ve doğru uygulardım.

Yok artık :) Bu söylediğime ben de inanmadım :)

Hepimiz aynı yollardan geçtik ve daha düzelteceğimiz ve geliştireceğimiz çok yönümüz var elbette. E madem öyle, kendimize beklediğimiz bu empatik yaklaşımı neden diğer arkadaşlarımıza göstermiyoruz? Çalışma arkadaşlarımızı aktif bir şekilde dinleyip, fikirlerini öğrenip gayet saygılı ve sabırlı bir yaklaşımla destek olarak aynı noktada buluşmak daha efektif değil mi? Bir kişi kazanmış olmanın vereceği hazzı düşünebiliyor musunuz? Arkadaşımızın ne kadar az bildiğinin bir önemi var mı? Birlikte kol kola yürüdüğümüzde onun da en az bizim kadar öğrenebileceğinden şüphem yok. Hatta farklı bakış açıları ve önerileri sayesinde kendimizi geliştirme şansımız da cabası.

6-> The only constant in the world is change
*(Dünyadaki değişmeyen tek şey değişimdir)

Bizim eskiden kullandığımız dil ve teknoloji daha iyiydi bu nereden çıktı şimdi, ne gerek vardı?

Evet o söz neydi? “Değişmeyen tek şey değişimin kendisidir”. O halde her değişime hazır ve açık olmakta fayda var. Yeni bir teknoloji olabilir, yeni bir platform olabilir, yeni bir süreç yaklaşımı olabilir vs.. Değişim sürecini yönetebilmek ayrı bir yetenektir ve önce kendimizde bu süreci yönetmeye başlamalıyız.

Kaizen kültürüne göre, “Ben oldum artık!” hatasına düşmeden, sürekli değişen ve gelişen dünyanın ve teknolojinin bir parçası olmak artık nefes almak gibi olmalı bizler için.

7-> The only true authority stems from knowledge, not from position
*(Asıl otorite bilgiden kaynaklanır, pozisyonunuzdan değil)

İnsanlar hiyerarşik konumunuza duyduğu saygıdan daha fazlasını, hoşgörülü bir biçimde aktarabildiğiniz ve uzman olduğunuzu kanıtladığınız bilginize, tecrübenize duyarlar. Hepimiz öyle yapmıyor muyuz?

Örneğin, özellikle start-up larda CEO ve CTO lar sıradan birer çalışan olarak, gerekli rolleri üstlenip, bilgileri ve tecrübelerini üretim bandına katkıda bulunmak için kullanmaktadır. Bakınız Elon Musk. Kendi branşında sahip olduğu uzmanlığı ve enerjisini diğer mühendisler ile birlikte ortaya koyuyor olması, sizce de Elon Musk’ı daha saygı duyulur bir hale getirmiyor mu?

8-> Fight for what you believe, but gracefully accept defeat
*(İnandıkların için savaş ver fakat yenilgiyi nazikçe kabullen)

İşte bence en çok tökezlediğimiz konu bu maalesef. Elbette doğruluğundan emin olduğumuz konularda tecrübemizi masaya koymak en doğal hakkımız. Kesinlikle yanınızdayım, üslubumuzu doğru tutarak bildiğimiz konuyu savunmaktan imtina etmemeliyiz. Birden fazla kez anlatmamız gerekebilir, faklı yöntemlerle ifade etmemiz gerekebilir, yorulmadan izah etmeye devam etmeliyiz.

Harika! Problem hakkındaki fikrimizi ve tecrübemizi çok kez anlatmaya çalıştık. Fakat arkadaşımız öyle bir noktadan bahsetti ki, haklı olma ihtimali söz konusu diyelim. Ne yapmalıyız? Elbette reddetmek yerine anlamaya çalışıp, doğru olan arkadaşımızın önerisiyse, “Evet haklısın, ben bu açıdan bakmamıştım. Dediklerine katılıyorum ve destekliyorum” demek ne kadar zor olabilir ki? Hatta biraz daha öteye götürüp teşekkür etmek bize bir şey kaybettirmez ve hem arkadaşımızın gönlüne dokunmuş oluruz, hem de başarıya giden yolda azmini arttırırız diye düşünüyorum. Neticede başarı takdire muhtaçtır..

Egolarımızı geri planda tuttuğumuz, amacın gelişmek ve en doğruyu bulmak olduğu takım çalışmalarında ki üretim ve çıktı her daim daha değerli olmuştur ve olacaktır.

9-> Don’t be “the coder in the corner.”
*(Köşesine çekilmiş, yalnız takılan bir yazılımcı olma)

Bu konuya iki açıdan bakıyorum aslında.

Bilgi paylaştıkça çoğalırdı değil mi? O halde neden iletişim kurmadan kendi kabuğumuza çekilerek çalışmayı tercih edelim? Belki çok başarılı bir algoritma geliştiriyoruz, belki ürüne bir çok açıdan katkı sağlayacak bir fonksiyonalite ekliyoruz ve tüm takım arkadaşlarımız için çok faydalı olabilir bunu bilmeleri. Neden haberleri olmasın? Hemen paylaşalım hatta, çünkü bir araya geldiğimizde aklımızdakinden daha gelişmiş bir kod parçası yazmamamız işten bile değil.

Öte yandan, iletişimin yüksek olduğu bir takımda çalışmanın pozitif çıktısı, bize, takım arkadaşlarımız ve şirketimize yansıyacaktır. Yapıcı iletişimin getirdiği, kolayca yardım isteme, özverili bir şekilde destek olma avantajları sayesinde bu pozitif çıktının bir parçası olmanın keyfini neden yaşamayalım?

10-> Critique code instead of people — be kind to the coder, not to the code
*(Kişileri değil, kodu eleştir — Koda değil kişilere nezaket göster)

Aslında yukarıda bahsettiğimiz konularla çok ortak noktası olan bu başlıkta özel olarak vurgulanmak istenenin, kod bloklarında görüğümüz hatalara yorum yaparken, konuyu asla kişiselleştirmeden, yapıcı ve geliştirici olmaya özen göstermek olduğunu düşünüyorum. Pozitif ve destekçi olmak hep daha zor gibi gelir fakat inanın aksi daha zordur :) Dolayısıyla empati yaparak “.. bu yorum bana gelseydi nasıl gelmesini isterdim ..” sorusuna cevap vererek yorumlarımızı yapmak ilgili arkadaşımızı çok daha fazla motive edecektir.

Evet sonunda söyleyeceklerim bitti. Hepsini okudukdan sonra kendinize, “.. ben zaten biliyorum bunları neden okudum ki ..” dediğinizi duyar gibiyim. Elbette biliyorsunuz ve hatta daha güzel önerileriniz olacaktır. Yapmaya çalıştığım sadece bir çırpıda söyleyebileceklerimizi bir araya getirmiş önemli bir yazarın, değerli bir kitabında paylaştığı “The Ten Commandments of Egoless Programming” yazısından anladıklarımı kendimce tercüme etmekti.

Sabırla okuduğunuz için (umarım öyledir :)) teşekkür ederim.

Sevgi ve saygı ile..

--

--