“Clean Code” mu? Hadi canım sen de!
O, etkili iletişimdir; iyi bakın.
Global Köy, İnternet
1980'lerin sonu 90'ların başı; W(orld) W(ide) W(eb) kavramının köylünün hayatına giriş yapması. Bir an gözlerinizi kapatın ve bu kavramın bir şemaile büründüğü zamanları gözünüzün önünden geçirin. Özellikle benim gibi 30lu yaşlarının hemen başında olan kişiler bir çırpıda statik web sayfalarını, Frontpage uygulamasını, tablolardan — alabildiğince satır ve sütunlardan — oluşturulmuş kişisel tanıtım sayfalarını, Yahoo’yu; Java ile oluşturulmuş tarayıcı oyunlarını hatırlayacaktır. Yeni yüzyılın başlangıcında ise — en azından benim için — “interaktivite”nin, bu statiklik statükosunun yerini dinamik web uygulamaları ile derinden sarsmasına şahit olduk. Forumlar (WebWiz, VBulletin, SMF — programlamaya merhaba dediğim ilk küçük eklentilerim mirasımdır — ), bloglar (tabii ki Wordpress). Şimdi ise sosyal medya denilen kavram ile hepimizin bildiği uygulamalar “yüz yüze iletişim” kavramının tahtını ufak ufak oynatmaya devam ediyor.
Köyün delisi, Yazılımcılar
Hemen söylemeliyim ki, içinde bulunduğum bu grubun aktivitelerine birebir şahit olduğum için “Yazılımcılar” dedim ancak bunun içerisine IT çatısı altındaki tüm değerli meslektaşlarımı da katmakta beis görmüyorum.
Forumlar, bloglar, sosyal medya hesapları, günlük/haftalık “belli bir ortamda, belirli zaman çizelgesinde” gerçekleştirilen programlar aracılığıyla bu deliler bir şekilde iletişimi sürekli tutmayı başarıyorlar.
Doktorların “Adım Adım Damar Yolu Açma”; inşaat mühendislerinin “AVM nasıl tasarlanır?” konulu ve içerisinde teknik detayların yer aldığı repository’ler var mıdır, bilmiyorum. Varsa bile lütfen bunları evde denemeyin :) An itibariyle hiç Clojure programlama dili kullanmamış bir geliştirici olarak “Facebook API’si kullanılarak nasıl login olunur?” sorusuna cevap arasam eminim ki 10 dakika sonra temel uygulamam hazır olacaktır. Takıldığım bir noktada soru sorsam yarın sabah kahvaltı masamda irili ufaklı bir sürü cevap yer alır. İşte bu “İletişim” denilen kavramın gücüne işaret eder.
Bu zenginlik, kendi içerisinde büyük avantajlar sağladığı gibi dezavantajları da peşi sıra getirmekte. Dezavantajları asgari seviyede tutabilmenin temel koşulu ise “Etkili İletişim”.
İddia: Temiz Kod = Etkili İletişim
Temiz kod tasarımı ile ilgili internet ortamında ve yazılı mecrada onlarca etkili, doyurucu, eğitici yazı; takibe değer meslek erbabı bulmanız mümkün. Ben bu konuya hiç girmeyeceğim. Benim derdim “function, variable, class, interface, implementation, design pattern, …” gibi teknoloji kavramlarını biraz daha günlük dilde ifade edebilmek.
Etkili iletişim konu başlığı ile kaleme alınmış bir çok akademik makale de yine aynı mecrada bulunabilir. Bu makalelerden ve almış olduğum eğitimlerden edindiğim bilgileri mesleğim ile ortak bir kümede buluşturduğumda, bende yarattığı bazı farkındalıkları ve yaptığım işe yansımalarını paylaşmak isterim.
Kendini Tanı
Mevcut durumunun ve potansiyelinin farkında ol. O an yaratmaya çalıştığın çözüm, kurmaya çalıştığın algoritma; bağlı bulunduğun sosyal ve kültürel parametrelerin birer yansıması. Stres ve zaman yönetimini etkin yapamazsan, bulduğun — ya da bulduğunu düşündüğün — çözüm başka sorunlara açılan bir kapıya dönüşebilir. Arkana yaslan; gözlerini kapat ve derin bir nefes al.
2 sayıyı toplayan bir fonksiyon yazdın ve istediğin değere ulaştın! Şimdi bu iki sayıyı çıkartan bir fonksiyona ihtiyacın var. Yarın bölmeye ya da çarpmaya ihtiyacın olmayacak mı? Hepsini tek tek fonksiyon mu yapacaksın? Hadi ama itiraf et, “toplama sorunu”na bu kadar takılmışken, diğer alternatifleri nasıl düşünebilirsin? Asıl sorun “toplama işlemi” mi, “matematiksel operasyonlar” mı?
Kendini Doğru ve Yalın İfade Et
En son ne zaman bir tartışmanda “sen beni anlamıyor musun!” tepkisini verdin? En son ne zaman “anlatabiliyor muyum?” sorusunu karşındakine değil de kendine sordun? Kelime bulutun ile içinde bulunduğun durum kesişim kümesinde buluştuğunda sorunun kendiliğinden çözüldüğünü göreceksin.
“Sepet()” isimli bir fonksiyon yazıp, bu fonksiyon içerisinde “üyelik mail ile onaylanmış mı?” sorusunu soruyorsan ve fonksiyonun en sonunda sepetteki ürünleri silmeyi tercih ediyorsan yalınlıktan biraz(!) uzaklaşmışsın demektir. Benim bu fonksiyonu okuyup anlamamı ve iş akışının bir noktasına dahil etmemi beklemen sence de haksızlık değil mi?
Empati Yap
Bir arada bulunuyor olmamızın sebebi aynı korkuları, zevkleri, endişeleri aynı düzeyde yaşıyor olmamız değil; asgari seviyede dahi olsa paylaşmamız ve temel düzeyde aynı yetkinliklere sahip olmamız. Benden seni, senin kendini anladığın gibi anlamamı bekleme. Kendini benim yerime koy ve kendini tekrar dinle.
“Değişken kategori id’sini tutuyor, liste içerisindeki mail adreslerine de o kategoriye ait ürünleri mail olarak gönderiyor, bunda anlamayacak ne var?” Hikayedeki değişkenlerimizin isimleri “cId” ve “cMails”; fonksiyonunun ismi ise “gPrdListByCatSend2CusViaMail”. Harflerin sıralaması ve bağlam konusundaki yetkinliğimiz ne yazık ki aynı düzeyde değil.
Bu 3 temel kavram çevresinde gelişen maddeler, etkili iletişimin temel tekniklerini oluşturuyor. Tartıştığımız üzere yine bu 3 temel kavram temiz kod kavramının da temel felsefesinde yer alıyor. İddiamı öznel olarak destekleyen bir başka durum ise, çevremde iletişim gücü yüksek ve aynı projeye kod yazdığım dostlarımın tasarımları diğer dostlarımın üretimlerine nazaran daha temiz ve anlaşılır olduğu algısı.
Sonuç ve Öneriler
“Yazılımcılar asosyaldir, iletişim gücü zayıf; sadece klavye ve monitörlerle haşır neşir tiplerdir.” söyleminin altını doldurmaya çalışan kişiler çevremizde hala var. Onları ön yargıları ve kompleksleriyle baş başa bırakalım.
Dahil olduğumuz bu köyde “kod” iletişimin temel taşı. Bu taşı en doğru şekilde yontmanın ve bir şekle sokmanın yolu ise iletişim tekniklerimizi geliştirmekten geçiyor. Hikaye, şiir, roman okuyalım. Etkinliklere katılalım, konuşalım, anlatalım ve en önemlisi dinleyelim. Her ne kadar eril bir söylem olsa da çok sevdiğim bir sözü; kalın harflerle yazdığım kelimeleri değiştirerek bir çok duruma uyarlamaya çalışıyorum: “Erkekleri şiir okumayı bilmeyen toplumların kadınları sevmeyi öğrenemezler”.
Sonuç olarak “anlamak ve anlatmak” konusunda kendini geliştirmeyen yazılımcılar, “refactoring” nedir öğrenemezler; yanılıyor muyum?
Konuyla ilgili görüş ve eleştirilerinizi lütfen benimle paylaşın. Bir sonraki Medium iletişiminde tekrar görüşmek dileğiyle :)