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

16 dk okuma

1. Gün

Bugün çok çok şey öğrendiğimi, en azından çalıştığımı düşünüyorum. Çalıştığım konuları, kısaca hafızamda kalan şekilleriyle sıralayabilirim:
  • Binary-bit-byte-shifting kavramları
Binary sistem, bit ve byte konuları gibi, hakkında daha önce araştırdığım fakat çok da detayına girmediğim şeylere zaman ayırdım. Big endian,little endian kavramlarını öğrendim.
  • Asenkronize programlama
Senkronize programlama ile farkını öğrendim. Asenkronize, “I will call you back” diye aklımda kalacak gibi görünüyor. Kısaca şu: kodlarımız içinde uzun sürebilecek bir işlem varken ya da engelleyebilecek bir durum varken, bekleyen diğer işleri yapmak ve o işleri bitirdikten sonra yapılmamış işleme geri dönmek asenkronize programlama diye geçiyor. Yani işlem sırasını düz bir çizgide yapmıyor ve o çizgi üstünde bir işlem hata verirse onu es geçip yoluna devam ediyor. Sonrasında tekrar oraya geri dönüyor. Senkronizeye göre daha hızlı çünkü olduğu konumda takılı kalmıyor. Thread sayılarının da bir önemi var tabii ki, bir thread yerine iki ya da üç thread le işlem çok daha hızlı sonlanabiliyor.
  • Javascript’te değişkenler, diziler ve object
Benzer örneklere bakıp, ilk kez web tarayıcıda console üstünden bir şeyler yazabildim. İlk adım olarak önemli görüyorum. Bir dizinin içeriğini oluşturmak ve object hakkında ufak örnekler yaptım ve inceledim. Değişken tiplerini öğrendim.
  • Scope hakkında
Var,let ve const ile değişken (ya da sabit) atamayı, bunların kullanımında scope özelliklerini öğrendim. Let ve const ile süslü parantez arasında bulunan scope (yani local scope) ta atama yapılınca global scope için bir anlam ifade etmediğini, aslında bunun da 'var' ile değişken tanımlamaya göre daha avantajlı olabileceğini öğrendim.
  • AST(Abstract Syntax Trees)
Kaynak kodunu bir ağaç gibi farzedersek, kökünden yaprağına kadar dallanıp budaklandırma işlemi gibi düşünülebilir. Kodun yapsısını göstermek, derleyicinin analiz fazı ile alakalı işlemlerde, ve static kod analizinde kullanılıyor. Vikipediye göre program dönüşüm sistemlerinde de kullanılıyormuş fakat pek vakıf olamadım. Ama bir AST’nin nasıl çıkarıldığının örneklerini inceledim ve anladım.
  • Döngü kullanmadan döngünün getirilerini sağlayabilmek
Çok basit bir ‘do while’ döngüsünü, sadece recursive function ve if statement kullanarak PHP de oluşturdum. Açıkçası biraz google dan yardım aldım fakat mantığını anladım.
  • Son olarak SEO
Türk ve yabancı sitelerdeki bizim e-ticaret işimize muadil/benzer işler yapan e-ticaret sitelerini karşılaştırdım aslında. Açıkçası biraz daha araştırmak istiyorum ama yarına kaldı. SEO’ya da bir giriş yaptım diyebilirim Yarın ve sonrasında ufkumu/zu hep genişletecek bilgiler öğrenmek ve kullanmak dileğiyle.

2. Gün

Günün çoğunluğu Javascript ile temel programlama dersleri gibi geçti diyebilirim. Ama çok şey kattığını düşünüyorum. Hızlıca günün özetini yaparsam eğer:
  • Javascript
Gün içinde baktığım konular: ‘Conditionals, Functions, Scope, Arrays, Loops, Iterators’ .Objects konusuna maalesef zaman yetmedi çünkü dediğim konu başlıklarında 50’den fazla örnek inceleyip hepsinin üstüne kendim tek tek benzer kodları yazdım. Zorlandığım kısımlarda çözümlere baktım fakat işin özündeki mantığı kavramak istediğim için biraz fazla zamanımı aldılar. Bugün öğrendiğim en güzel bilgiler aslında ‘Iterators’ konusundaydı. Bir fonksiyonun hem bir “data” olarak, hem de bir “parameter” olarak kullanıldığını görmek, ve bunun üstüne kodları inceleyip mantığını kavramak günün en olumlu sonucuydu benim için. Higher-order functions’larda fonksiyonu parametre gibi kabul edip işlemler yaparken, aslında callback kullanmadan da benzer işlemlerin yapıldığını, yapılabildiğini anladım. Call-back fonksiyonunun mantığını anladığımı düşünüyorum fakat işlem sırasını makine tam olarak nasıl izliyor onu çözemedim. Yarın acil bir şey olmazsa, ilk işim onu öğrenmek olacak. Bir de event ve callback fonksiyonlarının başka bir programlama dilinde kullanıldığı bir kodu stackoverflow’ da inceledim. Kod yapısını çözümleyebilmek ve anlamak da çok sevindirdi açıkçası. Diziler ve fonksiyonlar ile birçok örnek yaptım ki ve bu sırada kavramların isimlerini değil, nasıl kullanıldıklarını öğrendiğimi belirtmeliyim.
  • Değişken
Değişkenlerin yapısını düşününce, bir değişken, iki şeyden oluşur temelde: Tanımlama, değer atama. Bunlar ise bilgisayar belleğinin bir kısmına kaydedilerek yapılır. Burda kendi kendime şu örneği kurguladım bir an: Tanrının insanı yaratması, ve ona ilk ismin verilmesi. Ve o insanın dünyanın nerede konumlandığını Tanrı’nın belirleyebileceği veya belirtmese bile Dünya’da bir yerde doğmuş olduğunun kesin olması. Ve eğer tanrının isterse bu varlığın konumunu direkt değiştirebilmesi. Değişkenimiz insandı. Bellekte kapladığı veri Adem’di. Bellek dünyaydı. Kapladığı yer ise konumuydu. Sonra bu örneği çok genişletmek istedim fakat fırsat olmadı. Evet gereksiz bir (Stanley) Kubrickvari yaklaşım oldu fakat yazmak istedim yine de.
  • SEO
Google’ın tarayıcıda siteleri neye göre ilk sayfaya (hatta en üste) çıkardığının algoritması her sene Google tarafından güncellendiğini öğrendim. Biraz araştırma yaptıktan sonra bunun üstüne yayınlanan raporlar ve yazılar buldum. Bir tanesinde de sitenin hızının, ya da tarayıcıda gösterilme hızının öneminden bahsediyordu aslında. 0.61 saniye içinde ortalama 200-300 milyon sonuç arasından bir siteyi ilk sayfada çıkarıyorsa, bu sayfaların da hızlı bir şekilde yüklenecek kapasitede olmaları gerektiğini düşündüm. Bu yüzden de sitenin performans analizini, yapısal analizini, sitenin yüklenme süresini (LCP,TBT,CLC gibi birçok kavram var) gözlemledim. “gtmetrix” ve “google page speed” den bu değerleri inceledim ve buna göre onların iyileştirme(optimizasyon) önerilerine baktım. Milisaniye cinsinden işlemler bile bu konularda çok önemli olduğu için aklıma bir an “block scope ta değişken tanımlamanın bellekte yer kaplamadaki geçiciliği konusundaki avantajı ve global variable olarak hep kalıp bellekte yer kaplamaması gibi konular” geldi. O kadar basit görünen ufak kodlama farklılıklarının, site içindeki resim büyüklüklerinin, CSS’i Bootstrap’le yaparken aslında fazla yüklenme sürelerine sebebiyet verdiğini öğrendim. Bunlar tabii ki SEO’daki asıl konular değil. Keywords gibi daha temel konularda var. Daha teknik konulara da geçeceğim. Günün Özeti : 3’e kadar say denildiğinde “1,2,3” diye basitçe düşünüp sayan bir insanın; kendi mantığını, bir makineye anlatıp bunda da başarılı olduğunu görmekle hayretler içinde kalıyor, öğrenmeye devam ediyorum.

3. Gün

  • Bugün Iterator ve Object konusunu örnekleriyle beraber tamamladım. Dün biraz fazla çalıştığım için ve uykusuz kaldığım için bugün biraz daha verimsiz geçtiğini hissettim. Ama iki gün içinde CodeAcademy’deki Beginner-Javascript kursunu tamamlamak da bir yandan güzel oldu. Sırada Intermediate kısmını tamamlamak var. Tabii burda biraz hızlı olmaya çalışıyorum çünkü çok fazla bilgi var ve olabildiğince şey öğrenip, nasıl kullanıldıklarıın görüp, unutsam bile karşıma bir proje çıktığında ya da bir soru geldiğinde, çözümünü yaparken ya da başka birisinin kodunu incelerken kurduğu algoritmaya, kod yapısına, kodda bulunan ifadelere ve kullanımlarını bilmek istiyorum.
  • ‘Eloquent Javascript’ kitabındaki konular, projeler, örnekler ile alakalı bir Github kaynağı buldum. Javascript’in içine biraz daha girince-hatta her konu sonrası- onlara bakıp, daha da çok pekiştirmeyi düşünüyorum.
  • Bugün sizin ofisteki toplantınızda konuştuğunuz konulardan “page speed” e dün bakmıştım ve Javascript ile alakalı iyileştirmelerin gerektiğine kulak misafiri olunca aslında doğru bir yeri incelemişim gibi hissettim. SEO konusuna bugün hiç bakamadım ama yarın bunu telafi etmek istiyorum.
  • Gün sonuna doğru toplantıda konuşulan konuları aslında gayet beyin jimnastiği gibi gördüm ve çok severek dinledim. Yapay zeka, matematiğin üstüne kurulduğu temel varsayımlar gibi konuları sizden dinleyince, “Gödel, Escher, Bach” ı okumayı daha da çok istedim fakat boş kalan vakitlerde önce MIT’deki bu kitap ile alakalı ders kayıtlarını izleyip, sonra kitabı okumayı düşünüyorum.
İyi geceler, bugünkü bilgisayar/hayat/bilim/bilişim/felsefe konularındaki düşüncelerinizi de hiç zorunlu olmadığınız halde bizimle paylaştığınız için de çok teşekkür ederim.

4. Gün

Bugünü yine çoğunlukla Javascript’e verdim. Hemen konuya girecek olursam eğer:
  • Nesne
Önce Object konusunda biraz daha detaylı kısımlara girdim. Factory Functions’I öğrendim mesela. Aslında biraz da Class a da benzetmedim değil fakat Class konusuna tam bakmadığım için büyük konuşmamalıyım. Ama Factory Functions’lar Object konusunda en sevdiğim yerlerden biriydi bugün için.
  • Web Compability and Transpilation
Object konusunu tamamen bitirdikten sonra Browser web Compatibility and Transpilation konusu vardı. Caniuse.com ve babel.io sitelerinden ES6 ve ES5 ile alakalı kodların ES6’dan ES5’e nasıl döndürüleceği ile alakalı dökümanlara baktım. 2021’ de artık ES6’dan ES5’ in formatına syntax aktarımı yoktur sanırım fakat ama birkaç sene önce web’in çoğunuluğu ES5 formatında Javascript I desteklediği için gerekli oluyormuş. Terminal’I kullanarak, Node paketleri indirip ve babel kütüphanesini indirdikten sonra bu işlem gerçekleştirliyormuş. Teminal kullanmayı biraz öğrenmek için işlemleri biraz takip ettim fakat 2021 sonrası (ki web’in %97 (caniuse.com’a göre) sinden fazlası ES6 kullandığı için) sadece araştırmakla yetinmeyi tercih ettim bu konuyu.
  • Sınıf
Constructor, instance, method ve method call konularına baktım. Anladığımı düşünüyorum fakat üstünde örneklere bakmam gerekiyor tekrar. Sonrasında bugün Class konusunu tamamlamyı düşünüyordum fakat haftaya gireceğimizi öğrenince onu yarıda bıraktım ve ‘Eloquent Javascript’ isimli kitaptan şimdiye kadar öğrendiğimiz her şeyi tekrar etmek istedim örnekleriyle beraber. Bugün iki bölümünü bitirdim. Yarın da başarabilirsem tüm örneklerine bakıp, kendim yazmaya çalışıp, yazıp, problem yaşayıp çözüme ulaşamazsam da solution manul’ından bakarak günü tamamlamayı düşünüyorum. Kitapta her şey en öz ve anlaşılabilir haliyle anlatıldığı için ve ben de birkaç gündür kavramları okuyup, araştırıp, biraz da öğrendiğim için çok iyi bir tekrar olacağını düşünüyorum. Aynı zamanda gözden kaçan noktaları, ya da bilerek çok da bakmadığım fakat önemli olabilecek konu içeriklerini de tekrar edersem iyi olur diye düşünüyorum.
  • SEO
İki gün önce SEO’ya baktığımda sitemizin internet hızını, ve diğer erişebildiğim paramerelerinin analizine bakmıştım. Aynı zamanda rakip firmaların (ya da benzer ürünler üstünden ticaret yapan firmaların) da aynı şekilde analizlerini yaptığımda sitemizin websitesi olarak (yazılım anlamında, mesela bağlanma hızı, sitenin yapısal analizi gibi) daha iyi olduğunu gördüm. Fakat yine SEO içinde ele alınabilecek fakat beni çok ilgilendirmediğini düşündüğüm sosyal medya, bilinirlik gibi konularda çok iyi olduğunu düşünmüyorum. Fakat site içi yorumları da koyarak güzel bir şey yapıldığını düşünüyorum müşteri ile iletişim için. Siz şeyi farkettiniz mi bilmiyorum ama (Google Analytics I kullanarak en azından marketing kısmı kesin farketmiştir bence) sitemiz ve benzer sitelerde google araması yapıldığında öneri aramalarda websitemizin güvenilirliği ile ilgili bir arama sonucu ile karşılaştım. Benzer sitelerin arama önerilerinde de aynısını çok kez gördüm. Hatta ekşisözlükte de websitemizin ve benzeri sitelerin yorumlarına da bakıldığında güvenlik konusuna değindiklerini gördüm. SEO dediğimiz şeyin bir tarafını site, diğer tarafını kullanıcı oluşturuyorsa ve ortada kalan Google ise, bizim kullanıcının istediklerini bir şekilde vermemiz gerekiyor ve güvenli-güvenilir olduğunu, bu kelimeleri ifade etmeden söylemenin bir yolunu düşündüm biraz ama cevap bulamadım. Açıkçası SEO hakkında fikirlerim oluşmaya başladı fakat tam istediğim seviyede olmadığı için sadece kendi kişisel görüşlerimi yazıyorum.

Günün Özeti : Gerçekten severek bir şeyleri yapınca zamanın nasıl geçtiğini anlayamıyormuş insan. Bu demektir ki uzun süredir bir şeyleri severek yapmıyormuşum. Öyle düşünmüyordum ama mantığım bunu söyletti şimdi. Demek istediğim biraz alakasız olacak ama Morpheus’tan gelsin:

Bu senin son şansın. Bundan sonra geri dönüş yok. Mavi hapı alırsın - hikaye biter, yatağında uyanırsın ve neye inanmak istiyorsan ona inanırsın. Kırmızı hapı alırsın - Harikalar Diyarı'nda kalırsın ve ben sana tavşan deliğinin ne kadar derine gittiğini gösteririm.
Wonderland’ de kalıp, tavşan deliğinin ne derinliklere gittiğini öğrenmek, “Ignorance is bliss”(aslında neden olmasın?) demeden devam edebilmek dileğiyle.

5. Gün

Bugünü kısaca anlatayım:
  • Sizin bugün yorumlamamızı istediğiniz kodu doğru yorumladığımı düşünüyorum fakat tabii ki eksik yanı fonskiyonların amacını belirtmemiş olmamdı. Aslında kodun sonucunu kağıda yazıp elle hesaplamaya çalışmıştım ve biraz zaman kaybettiğim için onunla, fonksiyonun amacını belirten yorumu yazmamıştım.
  • Günün çoğunluğu Eloquent Javasscript kitabından daha önceki konuları tekrar yapmak, yazarın konularla alakalı ilginç düşünceleri ve üstüne çok düşündüren açıklamaları ve oradaki örnekleri yapmak/incelemekle geçti. Class konusuna dün biraz bakmıştım fakat bugün bakmadım doğruyu söylemek gerekirse. Yarın Class konusunu tamamen bitirmeyi düşünüyorum, bir beklenmedik şey olmazsa bitireceğim de.

6. Gün

Bugün tamamen Javascript ile geçti.
  • Class konusunda ekskik kalan yerleri tamamladım. Inheritance yapısını ve static metodunu öğrendim.
  • Promise objesinin ne olduğunu ve niçin kullanıldığını, bir promise objesi oluşturmayı, catch(),promise.all(), gibi yapıların kullanımını öğrendim. Zincir halindeki birkaç tane promise yapısı oluşturan bir yapıyı inceleyip üstüne örnekler çözdüm. Promise hakkında bugünkü çalışmalardan akılda kalanlar:
    • Asenkron programlarda kullanılırlar.
    • Üç durumda bulunurlar:”Pending, resolved, veya rejected” Bu konu hakkında bir ev temizliği örneği vardı. Diyordu ki, ev işlerini yaparken mesela sadece odaları süpürmezsin. Aynı zamanda çamaşırları da makineye atarsın, bulaşıkları da makineye atabilirsin. Süpürme işlemin bitince pencereleri temizleyebilirssin. Ama bunları tek tek yapmak yerine sen kendi işlerini hallederken bir yandan da makineler çalışabilir. İşte burda asenkron yapı ortaya çıkıyor. Javascript aslında tek thread’li, yani tek tek işi yapan bir programlama dili fakat event-loop olayı ile multi-thread gibi çalışma özelliği var. Event-loop ve call stack konusuna da bugün bolca baktım. Hangi işlemlere öncelik verildiğini, systemin nasıl çalıştığını öğrendim. Örneğe geri dönelim. Eğer çamaşır tozu makineye koyulmadıysa makine uyarı verir, bunun adı da rejected olarak geçer. Eğer makine işini tamamlarsa bu resolved anlamına gelir. Başlangıçta da adı üstünde pending durumundadır.
    • setTimeout (Node API ile çalışır) ile execution’ın zamanı ertelenebilir.Burda da event-loop un çalışma mantığını anlamakta fayda vardı. setTimeout’ta argument olarak bir callback function ve bir tane de delay süresi verilir.
    • Promise resolve edildiğinde, .then() kullanarak çağırabiliriz.
    • .then() : “I have a promise. When it settles, then here’s what I want to happen” diye özet geçilebilir.
    • .catch() ile de diğer handler ımız olan reject durumunda kullanırız.
    • Eşzamanlılığın avantaji ile de Promise.all() fonksiyonunu kullanabiliriz.
    • İç içe olanlar(nested) yerine zincir içindeki çoklu promise’ler daha işlevli olduğu için onları kullanmalıyız eğer kullanmamız gerekirse.
  • Bugün sizin verdiğiniz koddaki problemi anlamak da bugünün en güzel aydınlatıcı konularındna biriydi. Global değişekn kullanmanın zararlarının konu edildiği, iki kod arasındaki çok ufak bir farkla kodlarında işleyişinin farklı olduğu harika bir örnekti. Kodu okuyabildiğimi düşünüyorum, “büyük resmi” görmeye çok yaklaştığımı da hissediyorum fakat biraz daha kavramlar ve kodların arasında kayboluyorum sanırım. Öğrenme aşamasında olduğumuz için, zaten bir anda tüm kodları okuyuop anlayıp yorumlamamızı beklemekten çok, mantıklı yaklaşımlar sergileyebiliyor muyuz ya da çaba verip bir şeyleri anlayacak kadar analitik yaklaşabiliyor muyuz olaylara o önemli sanırım.
  • Async-await konusunda bugün en ilgimi çeken nokta, birkaç await yapısı kullanarak, kodun senkron bir kod gibi görünüp okunabileceğini öğrendim.
  • Async-await yapısının kullanım amacı .then() zincirlerinden kurtulup, kısa kod yazmak değil, onun synchronous koda benzemesi ve bu sayede maintain ve debug işlemleri için yazılım geliştiriciye yardımcı olmasıdır. Ayrıca store etmesi daha kolaydır.
  • Singleton Pattern: Constructor’ı private olan bir sınıfn(class’ın) özelliklerine ulaşmak için bir getter yapısı ile kullanılabilen bir pattern’in genel adıdır. Bu işlemde sadece tek bir instance oluyor.

Günün Özeti : Hamdım, Pişiyorum..

7. Gün

Bugün ilk kez zorlandığımı hissettiğim gündü o yüzden birazcık stres yaptım. Çabuk bir şekilde bir kodu size göndermem gerektiğini düşünüp, çözümü direct stackoverflow da bulup copy-paste yapınca kendimi de kötü hissedip tekrar konuyu inceleyip kendim yazdım. Sonuçta amaç bir kod yazmaktan öte kendimin yazdığı, yanlışlarım da olsa bir şeyler üretmemdi. Sebebi de ilk kez karşılaştığım logic devrelerle alakalı şeyler olunca bir önyargıyla yaklaşıp çözümü aramak oldu. Ama işin içine girince yapılabildiğini anladım. Kendi yazdığım kodda ,Half Adder buldum. Full Adder’ın da yarısını bulup diğerlerini koda dökemedim ama biraz çabalasam olacaktı. Bugün şunları şunları bitirdim gibi bir cümle kullanamam zira bitirmedim. Bugün kod yazmak için bir şeyleri okumaktan çok yine Pratik yapmanın önemini kavradım. Son verdiğiniz kodu Javascript’e uygun hale getirdim ve sorunsuz bir çıktı aldım. Sonrasında da yorumlamaya ilk fonksiyondan başladım ama başlarda kaldı. Yarın devamını getirip hepsini yorumlamış hâle gelmek istiyorum. Son bir şey, siz gittikten sonra ofiste kalıp biraz daha çalıştım ama kötü bi niyetim yoktu yanlış anlamayın, ofiste çalışmak evde çalışmaya göre daha verimli oluyor diye durmuştum. Haber vermem gerekirdi bu konuda ama rahatsız etmemek istemiştim, kusura bakmayın.

8. Gün

Bugün öğle arasına kadar verilen php kodunun javascript’e dönüştürüldükten sonra yorumlanması ile geçti. Sonrasında design pattern nedir ve örnekleri nelerdir onlara baktım. Özellikle singleton pattern ile alakalı çok şey araştırdım. Aslında basit bir mantığı var ama anladım ki henüz konuya tam hakim değilim. Javascript’te constructor’I private yapmalıyım diye bir yargının içine girince, biraz afalladım. Ama constructor’ı private yapmadan da private gibi davranabileceği bir yapı öğrendim: Object.freeze () yapısı. Yarın güzel bir örnek üstünde çözmeyi düşünüyorum. Hatta yapabilirsem hem async yapısını, hem singleton’ı, hem module pattern ile privacy yapma konusunu, hem de factory pattern’ini bir kodda yapmaya çalışacağım. Yapamazsam eğer hepsini ayrı ayrı yazıp yorumlamayı düşünüyorum. Bugün design pattern’lere bakarken öğrendim ki, aslında nesne yönelimli programlama ile gelişmişler. Sonrasında UML(Unified Modelling Language) diye bir şey buldum. UML ile soyut olarak tasarlanan nesne yönelimli modelleri görselleştirilebiliyor. Class’lar arasındaki inheritance ilşikisi gibi en basit konular dahi görselleştirilebiliyor. Yani design pattern’ler yazılım konusunda yıllardır biriken çok benzer sorunlara artık bir tepki olarak doğmuş ve bu kalıba göre bir çözüm üretin diye çıkmış gibi. Bu sayede kodun okunabilirliği, düzeltilebilirliği artıyor. Çünkü senden önce o kodu yazan kişinin tasarım kalıbınının ne olduğunu ve mantığını kavrayabiliyorsun.

9. Gün

Bugün öğle arasına kadar dün verilen görevi tamamlamaya çalıştım. Singleton ve diğer yapıları çok araştırdım ve artık anladığımı düşünüyorum. Bazı şeyleri sindire sindire öğrenmek istediğim için hıphızlı yapıp birçok şeyi kaçıracağıma, üstüne düşünerek her yapının varlığını ve kullanım sebebini anlayıp ilerlemek açıkçası hoşuma gidiyor. Bugün verdiğiniz ödevi yaparken farkettim ki, bazı şyapıları bol bol kullanmak gerekiyor ki hafızada yer etsin. Tıpkı yabancı dil öğrenmek gibi maruz kalmadan pek sonuç alınmıyor. O yüzden Singleton, Factory pattern’lerine, async...await yapısına, biraz da try catch yapısına baktım bugün. Daha önce de baktığım konulardı fakat tekrar etmek çok iyi oldu. Gün sonlarına doğru da ödevi yapmaya başladım. Onun da birçok kısmı bitti. Sadece yapmam gerekenler şunlar: Satılmamış ürünlerin bulunduğu diziden, alıcının istediği ürünü rastgele(ya da bulunduğu sıraya göre) seçmek ve sonrasındaki işlemleri yapmak. Gün sonunda o kısmın mantığını kafamda oluşturdum, yarın kaldığım yerden devam edeceğim.

10. Gün

Bugün güzel geçti. Verilen ödevdeki bazı kısımları yaparken bazı yerleri yapamayacağımı düşündüm ama yeni bir solukla tekrar tekrar üstüne düşününce işin içinden çıkabildiğimi düşünüyorum. Çıkıtılar her ne kadar istenen formatta olmasa da, doğru şeyler çıktığı için mutluyum biraz. Özellikle kendi emeğinle bir kodu ‘okumak’, yorumlamak, istenenler doğrultusunda şekil vermek çok güzeldi. İster istemez mantığın devreye girdiği birçok yer oluyor ve bu da insane keyif veriyor çünkü zekanı kullanıp bir şeyler yaratıyorsun. Evet gelelim yazmam gereken şeylere:
  • Singleton kalıbı kullanılan bir kodun nasıl çalıştığını bugün daha iyi öğrendim. Class’lardan bir object çıkarmayı, o objeler üstünden başka işlemler yapmayı pekiştirdim. .foreach, .map, .push, if statement, for döngüsü gibi şimdiye kadar öğrendiğimiz her şeyi bu örneğin içinde bol bol kullandım. Diziye nesne eklemeyi, diziden nesne çıkarmayı (gizleme daha doğrusu, kullandığım metoddan dolayı), fonksiyon içine başka bir fonksiyonu argument olarak kullanmayı, kısaca object ve arrays konusu bugünün gündemiydi. Ve bu örneği yapmanın çok faydası olduğunu düşünüyorum. Günün çoğunluğu farklı yöntemlerle ödevin içerdiği mantığı anlamak, buna çözümler üretmekle geçti.
  • Module kavramını öğrendim bugün. Bazı kod parçalarını, aynı dosya içinde birkaç farklı dosyaya kaydedip ona göre işlemler yapmamız gerekebilir. Burada da, o dosyalar arasında köprü görevi görecek olan komutları öğrendim. ES6 ve Node Runtime environment’larında ufak farklı isimleri olsa da genel mantık aynı. Export ve import etmek için ‘module.exports’ ve ‘require()’ yapıları temel anlamda kullanılıyor Node için. Birkaç örnek inceleyip kendim de denedim.
  • Bu yaptıklarım aslında biraz ön araştırma ve önbilgi olması amacıyla yaptığım okuma gibi. HTTP Requests konusunu biraz araştırdım. Araştırırken karşıma tekrar ‘event loop, heap, stack, event queue’,hatta ‘XML, AJAX’ gibi kavramlar çıktı. Bunlar hakkında biraz okumalar yapıp üstüne görselleştirmek için biraz video izledim. Daha detaylı şekilde:
    • Javascript’in en iyi özelliği, non-blocking özellikleri olması, ya da asenkron yapıda olması.
    • İçinde çok fotoğraf bulunan websiteleri örneğin, bu özellik sayesinde daha iyi kullanıcı deneyimine sahip olurlar. Mesela bir gazete websitesi büyük fotoğraf dosyalarına sahip olabilir. Onların yüklenmesi beklenirse kullanıcı durmak istemez ya da beklemek zorunda kalır. Ama o sırada yazıları okuması mümkündür.
    • Asenkron foknsikyon çağrılarında event loop kullanılıyor javascript’te. Function calls’lar stack’e eklenir. Server’ın cevap vermesi için beklemesi gereken fonksiyon request’leri, mecburen sıraya girerler. Stack boşaldığı anda sıradakiler execute edilir. First in, first out kuralına göre execute sırası belirlenir.
    • Web geliştiriciler de daha iyi bir kullanıcı deneyimi için event loop’ları kullanır.
Neleri öğrenmem gerektiğini öğrenmeye başladığımı düşünüyorum ama henüz en başındayım yolun. Yolun sonu güzel olacak diye umuyorum. Bugünlük bu kadardı.