Herkes herşeyi bilmek zorunda!

Herkes herşeyi bilmek zorunda değildir. -vs- Ben bilmem şeyhim bilir.

0 1,200

Girizgah

Böyle bir yazıyı uzun zamandır yazmak istiyordum ancak vakit bulamıyordum. Muharrem kardeşim aşağıdaki çok yıllanmış facebook paylaşımıma yorum yapınca işleri biraz hızlandırmış oldu. Burada yazacaklarımın Muharrem ile yakından uzaktan alakası yoktur. Herkesin herşeyi bilip bilemeyeceğini biraz değişik bir yaklaşım ile teknoloji dünyasındaki insanların sosyolojileri ve davranış biçimleri ile ele almayı düşündüğümden bir sosyal medya içeriği olarak değil de makale olarak ele almaya çalıştım.

  1. Makalede birçok örnek ve hedef yazılım geliştirme dünyasından verilecektir. Ancak tüm sosyal ve fenni alanlarda aynen kullanılabilir, aynı kurallar, aynı durumlar aynen geçerlidir.
  2. Bazı duyguları ve gerçekleri anlatmak için bazen cümleler yetersiz geliyor bazen de çok uzun cümleler kurmak gerekiyor. O nedenle, o duyguları net ve daha kısa ifade edebilmek için bu makale zaman zaman kötü kelimeler içerebilir.  (küfürsüzlük çok zor)

 

Herkes herşeyi bilmek zorunda!
Herkes herşeyi bilmek zorunda!

 

Herkes herşeyi bilmek zorunda değildir.

ve

Ben bilmem şeyhim bilir.

Söylemleri ölümüne çarpışır. Birisi tam bir isyan, diğeri ise tam bir teslimiyeti anlatıyor gibi görünse de ikisinde de inceden inceye

  1. Çok kuvvetli bir savuma güdüsü
  2. Çok derin bir saldırı hazırlığı

gizlenmiştir. Makale boyunca lütfen bu önerme, gönderme aklınızda dursun, buradan ilerleyeceğiz. Devam etmeden aşağıdaki linke bir göz atmak isteyebilirsiz.

TR’de bireysel veya profesyonel hayattaki en büyük şımarıklıklardan bir tanesi…

 

Herkes herşeyi bilmek zorunda değildir. vs Ben bilmem şeyhim bilir.

Bir firmanın yeni bir projeye başladığını düşünelim. Projeye teknik/nateknik bazı karar alıcılar atanır. Teknoloji seçimini birisi yapar, proje takvimini diğeri hazırlar vs vs. Bu hazırlıklar yapılırken karar alıcılar kendilerinden o kadar emindir ki ekiptekilere ya da başkalarına tek bir soru sormak akıllarından bile geçmez.

Projede karar alıcıların bazı yanlış kararlar aldığını, yanlış teknoloji seçimi yaptıklarını varsayalım. Proje kötüye gitmeye başladığında bir sorumlu/suçlu aranmaya başlanır. Örneğin yanlış yazılım dili ya da framework seçimi yapıldı ise karar veren kişi sorulara ya sessiz kalır ya da özür dilerim ama farklı seçimler olabileceğini bilmiyordum, “herşeyi de ben bilemem ki” der.

Herşeyi ben bilemem ki; kuvvetli bir savunma gibi görülebilir. Ancak derin bir saldırı hazırlığı da barındırmaktadır. Kötü gidişat ile ilgili sorular ve sorunlar arttıkça herşeyi benim bilmem mümkün değil cümlesi bir insan herşeyi bilemez, bir insan herşeyi bilmek zorunda değildir atağına dönüşür. Yani…

Zamanla, kötü gidişatın sorumluları aynı argüman ile savunmadan saldırıya geçerler. Zamanla bu tartışma bir kısır döngüye evrilir. Ortada bir hata vardır ancak hatanın sorumlusu yoktur, öyle ya herkes herşeyi bilemez. “Bre pezevenk, bre zilli projeye başlarken herşeyi biliyordun demezler mi?” TR’de demezler.

 

  • Tasavvuf ve tarikat ehline not.
    • Şeyhi olmayanın şeyhi şeytandır veya ben bilmem şeyhim bilir yaklaşımının anavatanı Hindistandır. İlk olarak hindu’lardaki kast sisteminde ortaya çıkmıştır. Üzerinde biraz “tefekkür” ederseniz aynı anlama geldiğini eminim göreceksiniz.
    • Oradaki kast sistemi ve tabakaları bize ilk/orta okulda anlatıldığı gibi masalımsı  bir yapıda olmayıp çok ciddi uçurumlar barındırır.
      • Örneğin üst kast’taki birisi alt kattaki birisinin elinden bir yemek yediğinde temizlenmek için inek idrarı içek zorundadır. vs vs masal çok uzun.
    • Yine oradaki alt kasttaki birisi ilahi emirleri anlayacak seviyede değildir. Bu nedenle ilahi metinleri okuyamaz. Okursa da anlayamaz.
      • Alt kasttakilerin ilahi metinleri anlayabilmesi için daima bir aracıya ihtiyaçları vardır. Bu aracılar ya rahiplerdir ya da üst kast’takilerdir. Bu arada rahipler en üst kast’tadırlar. Yani ben bilmem şeyhim bilir.
    • Bazıları mevzuyu din/diyanet, tasavvuf/tarikat üzerinden çok farklı yerlere çekmeye çalışabilirler. Yapmayın, yeminle kitap sayfaları ile döverim. Bu da benim ego dolu iddiam olsun.

 

Herhangi bir tarikata bağlı birisine çelişkili ya da karmaşık birşey sorduğunuzda verdikleri ilk cevap “ben bilmem şeyhim bilir” olur. Bazıları bunu ucuz/aciz teslimiyet olarak algılar ben bunu kuvvetli bir savunma, derin bir saldırı hazırlığı olarak algılarım.

Bir düşünsenize öldünüz, günahlarınız/sevaplarınız için ahirette yargılanıyorsunuz, bana bunları yapmamı şeyhim söyledi, ben şeyhime tam teslim oldum tüm sorumluluk onun dediniz ve mahkeme de kabul etti. İşlediğiniz tüm günahlara rağmen cennete gittiniz. Bundan daha güçlü savunma mı olur. Size cenneti kazandırdı.

Mahkeme bu savunmayı kabul etmediğinde ise bu savunmanın derinlerinde saklı saldırı ortaya çıkar. Şeyhim emretti ya da izin verdi ben yaptım. Ben bilmiyordum, herşeyi de ben bilemem ki… der. Mürit artık tüm sorumluluğu cehaletine ya da şeyhine atmak için saldırı aşamasına geçmiştir. Savunma argümanı zamanla saldırı için silaha dönüşmüştür. Burada tek birşey farklıdır. Yapılanların bir sonucu ve sorumlusu vadır. Birisi derki bre pezevenk, bre zilli senin aklın yokmuydu, sana kitap gönderdik; biraz araştırsaydın, birkaç kitap karıştırsaydın, en kötü google a sorsaydın deyip ya ödüllendirilir ya cezlandırılırsınız. TR’dekine benzemez aman dikkat.

 

 

Biz bu kadar goygoyu neden yaptık, yapıyoruz? değil mi ya?

Platformumuzun hedef kitlesi olduğundan bu makaleyi çoğunlukla yazılım, bilgisayar mühendisliği mezunlarının ya da sayısal eğitim almış bu alanlarda çalışan insanların okuyacağını düşünerek bu kadar goygoyu açıklamaya çalışayım.

Tüm bilgisayar mühendisliği bölümlerinde matematik ve lineer cebir dersleri kesinlikle vardır. Yaklaşık 10 kadar konferansımda birden 2 milyara kadar olan sayıları toplayan bir program sizce nasıl olmalıdır dediğinde aldığım cevap yukarıdaki kodlardan en tepedeki gibidir. Yani herkes bir for döngüsüne girer ve for içerisinde toplamayı yapar. Matematikten yardım almak kimsenin aklına gelmedi, gelmez.

İşin civcivli tarafı kullanılan veri tipine göre toplama süresi ve toplama için gereken kaynak miktarının aşırı değişiyor olmasıdır. Yazılımsal olarak burada yapılabilecek tek hata; yanlış veri tipinin seçilmesi gibi görünüyor. Yani yapılan işlem için yanlış veri tipini seçerseniz toplamayı ortalama 70 kat daha yavaş yapıyor 8-10 kat daha fazla kaynak tüketiyor olabilirsiniz. Örneğin 1 saniyelik bir iş için kaynakları 8-10 kat fazla olacak şekilde 70 saniye kullanıyor olabilirsiniz. Peki bir ihtimal daha var ve en yavaş algoritmanızdan 260.000 (260 bin) kat daha hızlı çalışabilir dersem?

Devam etmeden aşağıdaki linke bir göz atmak isteyebilirsiz.

TR #akademi dünyası bu farkı kavradığında dünya çapında başarıyı yakalayacaktır. Kesin bilgi (kehanet), yayalım.

 

Mühendislik Matematiği

Ardışık sayıların toplamı için bir for döngüsü yazmamıza gerek yoktur. Matematikte  n . (n + 1) / 2 diye bir formül var hatırladınız mı? Korkmayın bunu bir bilgisyarda bir toplama işleminde aynen kullanabilirsiniz.

Ancak okullarda matematik dersine giren cengaver akademisyenlerimiz matematikten anlıyorlarsa mühendislikten anlamazlar, mühendislikten anlıyorlarsa matematikten anlamazlar. Öyle yaherkes herşeyi bilemez!

Ancak ideal dünya da beklenti odur ki bir matematikçi, bilgisayar mühendisliği öğrencilerine matematik anlatırken bilgisayar bilimine göre anlatmalı ona göre örneklendirmelidir. Böylece öğrenciler bu matematiği gerçek hayatta nerede kullanacağız demezler. Nano saniyeler içerisinde yapılacak bir toplama işlemi için yüzlerce saniyelik for döngüleri yazmazlar.

Soyut matematik, matematikçilerden başkasının işine yaramaz. Kullanıldığı bilim dalına göre örneklendirilerek somutlaştırılmalıdır.

Daha renkli bir örnek vereyim.

Eyy yazılımcılar! Matematikteki lineer cebir ve trigonometri konularını bilmeden küresel konumlandırma ya da oyun geliştiremezsiniz. Copy/paste olarak yapacağınız şeye geliştirme denmez aşırma denir. Yukarıdaki videoda paylaştığım an’a bakarsanız lineer cebir den bir ışık yanar. Videonun tamamına bakarsanız lineer cebir ve trigonometri gibi birçok matematiksel konuyu içerdiğini görebilirsiniz.

Videoda kabaca bir eğrinin nasıl çizileceğini işin matematiği ile birlikte anlatıyor. Böyle bir eğri yaratarak bir oyundaki oyuncunun takip edeceği yolu belirleyebilirsiz. Ya da buradakine benzer matematikleri kullanarak buradaki gibi yaratılan bir eğri ile küresel konumlar arasındaki noktalar arasındaki yolu belirleyebilir. O konuma bir konuma füze gönderebiliriz. Örnekler uzar gider.

Peki matematik ile ilgili derslerin herhangi birinde herhangibir akademisyen matematiği böyle bir örnek üzerinden anlattı mı ya da konuyu böyle bir örnekle açıkladı mı? Açıklamadığı için herkes matematiği, temel bilimleri gereksiz bilgi olarak görüyor ve gerçek hayatta biz bunu nerede kullanacağız diyor. Henüz cevap veren akademisyen görmedim, varsa verenlerin ellerinden öperim.

Hocanıza konuları bizim alanımıza göre anlatıp örneklendirebilir misiniz, biz de konuları eğitimimiz ve gelecekteki işimiz ile bağdaştırarak özümsesek daha iyi olmaz mı dediğinizde; hocanız ben matematikçiyim bilgisayardan, oyun geliştirmeden veya konum belirlemeden anlamam diyecektir.

Biraz sıkıştırdığınızda arkadaşlar herkes herşeyi bilemez; ben sizin istediğinizi bilmiyorum. Ben matematik biliyorum, matematik anlatmak için sizin dersinize atandım. Daha iyisi için Dekan/Rektör ile görüşün, size hem yazılım hem matematik bilen birisini atasın diyecektir. Sorumluluğu kendince bir üst makama havale etti mi? Etti. “Ahanda ben bilmem şeyhim bilir dedi, dedi mi demedi mi?”.

Söylenen sözlere ve görünen kelimelere çok aldanmamak, altındaki manayı irdelemek ve kavramak lazım.

Bu kadar goygoyu; birileri herşeyi bilmediği için, herşeyi birilerinin şeyhi/yöneticisi/idarecisi bildiği için neler kaybettiğinizi/kaybedebileceğini dilimiz döndüğünce anlatmak için yaptık. Buraya Herkes herşeyi bilemez diyerek ya da en iyisini büyüklerimiz bilir diyerek sizlere nasıl bir kötülük yapıldığını anlatabilmek için yaptık. Öylesine sıradan, öylesine gelişi güzel kurulan cümlelerin, çok alışılmış savunmaların altında birçok tehlikenin olabileceğini, bu tehlikelerin sizin hayatınıza, geleceğinize bir saldırı olabileceğini göstermek için yaptık.

İnsan ırkı toplu şekilde yaşayan, iş bölümü yaparak bir şeyleri başarabilen bir canlı türüdür.

Herkes herşeyi bilmek zorunda mıdır?

Birşeyleri başarmak için iş bölümü yapacaksak birileri ile iletişim ve ilişki kuracağız demektir. İş birliği için insanoğlunun sosyolojisi ve neyi neden yaptığı/yapacağı hakkında biraz bilgi/öngörü sahibi olmalıyız. Yoksa işbirliği için doğru veya yeterli iletişimi kurmamız mümkün değildir. Der çoğu sosyal bilimci. Evet, doğrudur ama eksiktir.

Verimli bir işbirliği için iletişim yeteneğinden önce iş birliği yapacak kişilerin yeteneklerinin ve iş becerelerinin/tecrübelerinin net olarak bilinmesi gerekmektedir. Yoksa iki kişi çok iyi iletişim kurabilir, çok güzel sohbet edebilir ancak hiçbirşey üretemeyebilir. Bu da bir tercihtir. Yaşanmış iki örnek üzerinden ilerleyelim.

2016 dan sonra yazılımcıların yazılım güvenliği (özellikle sql injection) için Java Hibernate framework’ünü kullandıklarını duymaya başladığımda kime nasıl küfür edeceğimi şaşırmıştım. Hatta bununla ilgili birkaç sosyal medya paylaşımı vs de gözüme çarpmıştı. 2018 yılında yaptığım bir iş görüşmesinde konu tekrar açıldı.

İş görüşmelerinde adaylara CV leri dışında hiçbir şey sormamaya özen gösteririm. Adayın bildiğini taahüt ettiği yani CV’sine yazdığı konulardan sorarım ki aday çok zorlanmasın. Aday CV’sinde projelerinde hibernate kullandıklarından bahsetmişti. Neden kullandınız dediğimde “security” için demişti. Hibernate’nin güvenlik kaygıları ile kullanılması öneriliyor demişti. Peki neden önerdiklerini biliyor musun dediğim de, bilmediğini ifade etti.

Birkaç ay sonra o kurum için bir siber güvenlik eğitimine dahil edildim. TR’nin çok meşhur, çok cengaver bir siber güvenlikçisi eğitmenimizdi. Konu DB güvenliği ve SQL injection’a geldiğinde o arkadaş da db işlemlerinde hibernate kullanımının güvenli olduğunu söyleyince tek soru sordum “neden”.

Bazen cevaplarını bildiğim soruları sormayı severim. Tam 1.5 saat tartıştık. Tek söyleyebildiği yabancı makalelerde önerildiğinden, hibernate’nin prepared statement’i default kullandığından bahsetti. Tek geçerli/doğru argümanda bu hibarnatenin prepared statement kullanması idi. Çok sinirlendiğimi hatırlıyorum.

Bakın dedim, ortaya bir bok atıyorsunuz temizlemek bize kalıyor. Prepared Statement JDBC’nin temel özelliklerinden birisi ve bunu kullanmayı birçok şekilde zorunlu hale getirebiliriz. Ancak projede hibernate ilk açıldığında 30% performans kaybına neden olur. Karmaşık özelliklerini doğru kullanmazsanız performans kaybı 300% lere kadar çıkar. Ondan sonra o firma bizim yazılım çok yavaş diye beni çağırıyor. Bunu yapmayın, “elinizle ev yapıyor götünüzle köy yıkıyorsunuz” dediğimde bu sefer o çok sinirlenmişti. 🙂

Burada aynı konu ile ilgili iki örnek var. Birisi Hibernate kullanıcısı birisi Hibernate kullandırıcısı. Hangisine daha çok küfür edersin derseniz, ikincisini tek geçerim. O köyün kavalcısı ben olsam tizz vurun bu durzinin kellesini derdim. İlk örnek üzerinden biraz tartışalım.

Hibernate kullanan developerin erkek olduğunu varsayalım. Bu arkadaşa bindiği arabanın özelliklerini sorsak, belki 100 farklı kalemde motor hacminden, silindir kapağına ve piyasa değerine kadar bilgi verir.  Yani bu arkadaşla hiç kullanmadığı veya parasının yetmeyeceği bir araba hakkında konuşsak, sohbet esnasında o araba hakkında ne kadar detaylı bilgiye sahip olduğuna şaşarsınız.

Hibernate kullanan developerin bir kadın olduğunu varsayalım. Bu arkadaşa kullandığı kremin özelliklerini sorsak, belki 100 farklı kalemde o kremin ne kadar doğal olduğu ve hangi bileşenlerden yapıldığı hakkında bilgi verir. Bu arkadaşa yolda giden bir başka kadını gösterdiğinizde o kadının giydiği elbise ve aksesuarları marka/modeliyle, saç rengini koduna kadar anlatır.

Siber güvenlikçi cengaver, hibernate’yi tavsiye etmeden önce; JDBC nedir? Prepared Statment nedir? Hibernate neler kazandırır, ne kaybettirir? Kazandırdıkları, kaybettirdiklerine değer mi? gibi soruların cevaplarını bilmek zorundadır. Ben siber güvenlik uzmanıyım yazılmdan anlamam dersen, küfürü haketmişsindir. Bilmediğin şeyi niye tavsiye ediyorsun?

Bu arkadaşlar sade bir developer olabilir ya da development manager olabilir; bunlara yaptıkları yazılım, kullandıkları teknolojilerle ilgili dahi olsa bile birşey sorduğunuzda bilmiyorlarsa herkes herşeyi bilemez derler. Her boş konuda herşeyi bilen pezevenk ve zillilerin kendi işleri hakkında herşeyi bilmemelerine sizce nedir? Bu herkesin herşeyi bilmediğini söylemeleri yüce bir erdem mi, eşsiz bir karaktersizlik mi? Siz karar verin.

Problem bilgi dağarcığı, kapasitesi meselesi değildir. Problem olaylara bencil yaklaşım meselesidir. Problem işine gelince herşeyi bilen insanların iş’ine gelince herşeyi bilmemesidir.

Herkes herşeyi bilmek zorundadır!

Bilgi dağarcığını ölçeklendirmek yerine katmanlandırmak daha doğru bir yaklaşım olacaktır. Örneğin bir beyin cerrahından bir kalp ameliyatı bekleyemeyiz. Ancak o beyin cerrahı insan anatomisini iyi bilmelidir ki ameliyata hastanın kalp krizi geçirip geçirmediğini anlayabilsin. 6 yıl okul 4 yıl uzmanlık 10 yıllık bir meslek eğitimi alan bir beyin cerrahı entellektüel kaygılarla değil mecbur olduğu için diğer organlar ya da anatomi hakkında derinlemesine bilgiye sahip olmalıdır.

Buradan yola çıkarak bilgi dağarcığımız için aşağıdaki gibi bir yaklaşımın doğru olacağına inanıyorum. Farklı düşünenler varsa yorum yaparlarasa sevinirim. Yazılım dünyasında çalışanlar için yıllara bağlı bir önerme yapacağım. Bu önermedeki süreler kısalabilir, ancak kesinlikle uzamamalıdır. Bu önermeleri tüm sektörlere uygulayabilirsiz. Bir insan

  • 1-3 yıl içerisinde çalıştığı teknolojileri derinlemesine kavramalı ve uzmanlaşmalıdır. “junior developer”
  • 3-7 yıl içerisinde çalıştığı teknolojilerde optimizasyon yapabilmeli, refactoring ve tasarım yapmaya başlamalı, güncel, yaygın ya da çalıştığı yerde kullanılan diğer teknoljilerden en az bir kaçını geliştirme yapacak kadar öğrenmelidir. “senior developer”
  • 7-10 yıl içerisinde kodları başlangıçta optimize olarak yazabilmeli, ekip arkadaşlarının kodlarını inceleyebilmeli, refactoring ve yazılım mimarisine kesin karar verebilmeli, yaygın ya da çalıştığı yerde kullanılan diğer teknoljilerden en az bir kaçını geliştirme+tasarım yapacak kadar öğrenmelidir. “software architect”
  • 10-15 yıl içerisinde tam bir ekosistem kurabilmeli, birden fazla teknolojinin sorunsuz olarak birbiri ile çalışabileceği sistemler tasarlayabilmeli, geliştirebilmelidir. “system architect”
  • 15 ten sonrasında bir sınırlama olmamasına rağmen en azından kullandığı teknolojilerin core algoritmalarını merak etmeli mümkünse optimize core/algoritmik geliştirmeler yapabilmelidir.

Eğer çalıştığınız veya yaşadığınız ekosistem hakkında yeterli bilginiz yok ise yaşam ve çalışma koşullarınız zorlaşacaktır. Örneğin dağa kampa gidip ben yumurta bile kıramam derseniz, aç kalırsınız. Örneğin 12 yıllık yazılım geliştiricisiniz. Sadece bir disipline bir programlama dili biliyorsanız; geniş çaplı bir sistem tasarlamanız sağlıklı değildir. Bu tasarımı gerçekler ve gereklilikler üzerine değil. Eksik bilgileriniz ve güvenli bölgenize üzerine yapacaksınız demektir.

Herkes yaşadığı ortam ve çalıştığı ekosistem hakkında başlangıçta entellektüel boyutta, tecrübe kazandıkça ise uzman seviyede herşeyi bilmelidir.

Ben bilmem beyim bilir diyemezsiniz.

Email adresiniz yayınlanmayacaktır.