Yazılımın ilk 250 günü - Part 16

9 dk okuma

151. Gün

Bugün programlama hakkındaki en büyük sevincimi kendi içimde yaşadım: Yazılan kodun kendinin farkında olabildiğini gördüm, gösterdiniz. Sanki yapılabilecek ve öğrenilebilecek o kadar çok şey varmış gibi hissediyorum ki, düşünmesi bile oldukça fazla haz veriyor.

Onun dışında bugün yine Laravel dokümantasyonuna baktım genel olarak. Cross site request forguery’nin nasıl engellenebileceğini ve mvc’deki yerini gördüm. View kısmına bakarken Blade template engine ile karşılaşınca ofEngine’I hatırladım ve daha çok dikkatimi verdim. Laravel’deki Blade ile ilgili kod biraz fazla karışık geldiği için çok dikkatli inceleyemedim ama en temel seviyede template engine’in ne iş yaptığını ve nasıl çalıştığını anladığımı düşünüyorum.

Ek olarak, dilden bağımsız şekilde yazılan kodları okuyabilmenin verdiği haz da bambaşka. Elbette çok iyi değilim fakat kendimce kara cahil olmadığımı görerek öz-tatmin de olabiliyor.

152. Gün

Bugün ufkumu çok açan yeni bir şey öğrendiğimi söyleyemem. Mental açıdan oldukça sakin geçti. Blade’in snytax’ına tekrar baktım. Template inheritance’ın olduğunu okumuştum ama pratikte ne olduğuna bugün bakabildim. Blade’in, Laravel’in, MVC’nin alternatifleri ile de oldukça sık karşılaştım konuyu araştırırken. Bir yanım tekerleği yeniden icat etmemelisin darken, diğer yanım da işin mantığını öğrenmek için, kendini ispat etmek için yapmalısın diyor. Ama gerçek şu: var olan herhangi bir mvc framework’ü nü tank olarak düşünelim. Benim tanka ihtiyacım varsa direkt onu kullanabilirim. Ama eğer ben uçak yada Ferrari’ye ihtiyaç duyuyorsam onları kullanmalıyım, yok ise ben oluşturmalıyım.

Ayrıca gün boyu aklımın bir köşesinde öz farkındalığı olan program aklımdaydı. İyi ki gösterdiniz. Yarın büyük ihtimalle çalışacağım. Merak ettiğim konular ve yapmak istediklerim (side project olarak ya da kendime katmam gerekenler olarak) oldukça fazlalaştı. Algoritmalar kitabını bitirmem, özümsemem, hatim etmem gerekiyor. Öz farkındalığı olan bir programın yapabileceğini düşünmek, bunun üzerine nasıl bir proje geliştirilebilirdi diye düşünmeye zaman ayırmak istiyorum. Yazılım ve donanımın birleştiği yerde olanlara hiç hakim olmadığım için o kısmı da net bir şekilde öğrenmek istiyorum. Bir de David Malan'ın CS50 kursunu çok duymuştum ama hiç başlamamıştım. Ona da zaman ayırmak istiyorum. Bunların ötesinde, kendi işimde elimden gelenin en iyisini yapmak için kendi konularımı (web, hatta mobil özelinde) pekiştirmem, öğrenmem, taze tutmam gerekiyor. Yapacak çok fazla şey var. Bu yüzden mutluyum.

153. Gün

Bugün ustalara saygı kuşağı gibiydi gözümde. Önce Martin Fowler’a saygım daha da arttı çünkü yazılım mimarisi konusunda hangi konuya baktıysam hep temellerinde onun yazıları karşıma çıktı. Bugün kendimce yeni bir şey bulmuşum sanmış olsam da (NFC ile telefonumdan kredi kartıma erişim) çoktan bunun üzerine çalışıldığını öğrendim. Sizin de yıllar yıllar önce bunu yapmış olmanız epey etkiledi.

Bugün çalıştığım konu ise ORM idi. İki mimari ORM’de kullanılıyordu. Active record ve data mapper mimarileri. Unutmadan söylemek gerekir ki ORM aslında iki kısımdan oluşuyordu. SQL sorgularının soyutlandığı “data abstraction layer” ve active record ya da data mapper’dan oluşan “data access layer”. İkisinin de avantajları dezavantajları olmakla beraber hangisinin kullanılacağı duruma göre değişmekte olduğunu öğrendim. Bir konuya benzettim aslında. Satrançta en zayıf taş hangisidir? İki seçenek var aslında:
  1. Her zaman kaçmak zorunda olan Şah,
  2. Zayıf olanın herhangi bir taş değil, taşın konumu olduğu düşüncesi cevap olarak verilebilir sanırım.
Bizim konumuzda da hangi mimari iyidir, en iyi ORM kütüphanesi hangisidir, en iyi orm tekniği hangisidir gibi sorular örnekteki ikinci seçeneğe oldukça benzemektedir. It depends.

Eve gelince de biraz google hizmetlerini karıştırırken google finance ile karşılaştım. Tıpkı diğer finans uygulamaları gibi hatta çok daha yetersizdi. Yine bu düşündüğüm şeyi belki binlerce-yüz binlerce kişi düşünmüştür ama aklıma şu geldi: Para birimleri, borsadaki değerli kağıtlar üzerine oldukça fazla grafik var. Bu grafiklerin tahmin edilebilirliği oldukça düşük aslında. Eğer yüksek olsaydı herkes zengin olurdu (ki herkesin zengin olması imkansız). Eğer bir varlığın değerindeki volatiliteyi öngörebilecek bir program olsaydı diye düşündüm. Buna göre borsada oynayabilecek akıllı bir bot olsaydı mesela. Ama bu botun akıllı olabilmesi için borsada kazanan bir insanın düşünce yapısına (sıkça kullandığı sezgisel algoritmalara) sahip olması gerekirdi. Haberleri takip edip analiz etmek ya da grafiklerin eğer bir anlamı varsa onları okuyup tahminde bulunmak üzerine bir kabiliyeti olmalıydı sanırım. Hatta zeki olan botumuz manipülasyon yapabilir miydi? Sonuçta tüm ekonomik sistem, hatta insan ilişkileri güvenmek ve inanmak üzerineydi. Bir insanın yapabildiğini zeki bir bot yapabilir gibi geldi. Üzerine tekrar düşüneceğimi düşünüyorum.

154. Gün

Bugün node.js’de bir ORM aracını (TypeORM) kullanarak veritabanı ile bağlantı kurup sorgular yaptım. Alıştıktan sonra ORM kullanmak aslında işleri çok daha kolaylaştırıyor gibi geldi kişisel olarak. Ben eğer daha bireysel ya da küçük çaplı bir uygulama yapıyor olsam ORM kullanmalıyım diye önyargı ile hemen bir ORM kütüphanesi aramazdım. Ya ORM kütüphanesi ya da işime yarayacak bir query builder kullanarak işlemlerimi yapardım. Ama geniş çaplı bir uygulama için gerekli olduğunu düşünüyorum. Böyle düşünmemdeki sebeplerden biri, ORM’nin de tıpkı MVC’nin varolma sebebi gibi separation of concerns’e dayalı olması. Şu an bulunan projede ihtiyaçlarımı SQL sorgularını yazarak karşılayabilirim fakat gelecekte onlarca yazılımcı proje üzerinde çalışırken ORM’nin getirdiği soyutlama ve tek işe sahip ol prensibi onlara ve proje yöneticisine (kim ilgiliyse) kolaylık sağlayacaktır. ORM’de anladığım kadarı ile tek sorun proje geliştikçe performans sorunlarına yol açabilmesi. Çoğu popular ORM bunun için kendi çözüm yollarını geliştirdiklerini belirtmişler. Ama bu konuya çok vakıf değilim henüz.

155. Gün

Bugün yine TypeORM’yi biraz inceleyip sonrasında Sequlize’ın syntax’ına ve nasıl kullanıldığına baktım. Birbirlerine oldukça çok benzediklerini gördüm. Elbette farklılıkları boldu. En basitinden Birinde esas karakter Typescript iken diğerinde Javascript. Ya da birinde Active Record ve Data Mapper Pattern opsiyonları bulunurken diğerinde sadece Active record bulunmakta. Nesneler (veri modelleri-veritabanı tabloları) arası ilişkileri içeren kullanım durumları birbirlerine oldukça benzemekteydi.

Sonrasında group by, having, subquery, join gibi sql’deki anahtar kelimelerin kullanıldığı sorguların nasıl yazıldığına TypeORM’de bakıp kendi durumuma uyarlamaya çalıştım. Başlangıç durumunda olduğum için biraz uzun sürdü. Biraz pratik yapsam oldukça oturur diye düşünüyorum çünkü mantığını anlamak da bir problem görünmüyor.

Bugünlük bu kadardı.

156. Gün

Günün en önemli kazanımları SQL’de bilmediğim, ya da bakmış olsam da anlamadığım konuları kavramaktı.

İlk başta TypeORM ile devam edecektim. Dün oluşturduğum proje gayet normal şekilde çalışsa da, typescript’in kendisi, kavramların gittikçe karmaşıklaşıp dokümantasyona çok bağımlı kalmam (aslında bu sorun değildi, sorun dokümantasyonda aradığımı bulmamın kolay olmamasıydı), ORM’nin kendisinin çok fazla seçenek vermesi fakat bir süre sonra bu seçeneklerin kullanımının biraz daha ortaya karışık ilerleme ihtimali (benim acemiliğimden büyük ihtimalle) ile beraber TypeORM’den vazgeçtim. Çünkü ORM işimi kolaylaştırmaktan öte yeni bird il öğrenir gibi vaktimi oldukça çok almasıydı.

Sequalize’ı hemen kullanmaya başladım. Çok daha basit bir kullanımı vardı ve karmaşık bir söz dizimi yoktu (en azından kullandığım ve gördüğüm kadarı ile). Özellikle Javascript olması, yardımcı mesajların oldukça detaylı olması ve işlemleri hızlandırmaya olanak tanıması, sağladığı fonksiyonların ve seçeneklerin kullanışlılığı çok faydalıydı. Bugün de o ORM’yi kullandım.

157. Gün

Verilen görevi yerine getirebileceğimi düşünüyorum. Web-socket kavramına ilk kez detaylı bakınca başta anlamakta zorlandım. Açıkçası üstünkörü bakıp copy paste alırsam elbette bir şeyler yapılabilir fakat iyice sindirerek kavramaya çalışıyorum. Sanırım o yüzden biraz yavaş oluyorum. Ama bence iyi gidiyorum yine de.

Sadece stateless bir protokole (HTTP) bu kadar alışmışken ve tüm işlemler o mantıkla ilerlediği için socket konseptini oturtmak biraz zaman aldı. Hala tam oturmadı fakat gün sonuna doğru nasıl işlediğini biraz kavradım en azından.

158. Gün

Haftanın en sakin geçen günüydü mental anlamda. Bu, en boş geçen gün anlamında değildi. Bilakis düne göre daha çok şey öğrendiğimi hissettim kendi emeğim ve sizin kaldıraç etkiniz ile elbette. Bilgi dolu bir rapor olmadığının farkında olarak bunun rahatsızlığını hissetmekteyim. Fakat yine de bu içeriksiz raporu göndereceğim. Alınan notları not ederek raporu süsleyebilirim. Bu kötü bir şey değil eğer o süsler bana bir şey katmışsa. Yine de bugünlük böyle bir rapor oldu. Tekrarlanacağını düşünmüyorum. Saygı ve sevgilerimle.

159. Gün

Yarın yanlış yapmaktan korkmadan ve çekinmeden fikirleri uygulamaya koymaya çalışacağım. Bugün birçok örnek, uygulama, kavram ile karşılaşınca “en doğrusu, en iyisi”ni öğrenip uygulamak gibi bir fikre ister istemez sahiptim. Elbette bir örnek uygulamayı bilgisayarda çalıştırabileceğimi düşünüyorum fakat aradığım şey sanırım mükemmel olan şey. Yapmaya çalıştığım şey de mükemmel olan. Kendi seviyemden çok daha fazla şey bekliyorum. Bu beklentiden dolayı da yapmam gerekeni, problemin çözümünde en temel mantıktan başlayıp fikri geliştirerek büyütmeyi biraz erteliyorum. Başka insanların büyümüş fikirlerine bakıp kendi fikirlerimi de öyle büyütmek ya da ilham almak istiyorum galiba. Ya da korkuyorum yanlış yapmaktan ve doğrusunu da yapmıyorum bu yüzden. Oysa yanlış yapmaktan korkmam baştan yanlış bir düşünce. Bu düşüncelere girmeden devam etmeliyim. Finans örneğinizdeki sınırlı kaynak ile sınırsız ihtiyacı karşılama sanatı aklıma geldi şimdi. Gerçekten güzel bir tanımdı.

160. Gün

Bugün zorlandığım kısım node.js’e ve kullandığım kütüphanelere, hatta kullandığım teknolojiye hâlâ hakim olmamamdı. Evet basitçe bir sunucuya istek gönderen kişiyi farklı bir server’a yönlendirebiliyorum. Gerekli birkaç parametreyi de gönderebiliyorum o yönlendirmeyi yaparken. Fakat bu parametreleri yetkilendirme-doğrulama sunucusuna göndermek ve kullanıcıyı o sunucu ile iletişime geçmesi için yönlendirirken bu parametreleri henüz gizleyemiyorum. Ve bugün de asıl takıldığım nokta bu oldu. Elbette çok kolay bir şekilde aşılıyordur belki fakat ben henüz bu sorunuma çözüm bulamadım. Belki şimdilik bir sorun da değildir.

Yarın bu gibi konulara çok takılmadan en ilkel şekilde çalışan bir single sign on yapıyı kurmaya çalışacağım. Elbette geliştirmeler yapmak çokça gerekecek fakat onları sonrasında yapabileceğimi düşünüyorum. Yarın kendimde gördüğüm en büyük sorumluluk o primitif sso yapıyı kurabilmek.
İşteki konulardan bağımsız olarak bugün Person of Interest’in finalindeki bir cümleyi buraya yazmak istedim:
“Everyone dies alone. But if you mean something to someone—if you help someone, or love someone, if even a single person remembers you—then maybe you never really die at all.”
Dün konuştuklarımız ve bugün de dizinin finalinde “iyi” olmaya dair söylenenleri dinleyince içimi huzur kapladı. İşe başlamadan önce, hatta birkaç yıldır oldukça nihilist ve rasyonel bir düşüncelere genel olarak sahip olduğumu düşünüyordum. Hala daha öyle tabii ki. Ama bir zararı vardı ki, amaçsız kalmıştım. 18 yaş ve öncesi hayal kurma yeteneğimi kaybetmiş gibiydim. Bu 6.5 aylık süreçte evet yazılım hakkında birçok şey öğrendim ne kadar öğrenilebilirse. Ama en çok öğrendiğim şey tekrar hayal kurabilmek oldu. Eylemsizlik ve apolitiklik ile o hayallerin arkasından gidilemez tabii ki. Gerçi sürükleyici herhangi bir hayalde henüz yok fakat kurabildsiğimi tekrar doyurucu şekilde hissetmek çok güzel. Bunun için de çok teşekkür ederim. Şu an teşekkür etmekten öte bir katkım olmuyor maalesef. Hatta hala daha kendimi parazit gibi hissediyorum fakat umarım bu durum istenilen hale gelecek. Hala daha makine ile konuşurken onu dinlemiyorum. Ve bildiklerimi, gördüklerimi ona uygulamaya çalışıp istediğim sonuçları bana vermesini istiyorum. Bu çok yanlış ama düzeltmek için de çabalıyorum.