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

16 dk okuma

31. Gün

Bugün öğrendiğim en iyi şey: İngilizce kaynaklar bolluktan geçilmezken, asla Türkçe kaynaklara bakıp, yazarın İngilizce kaynaklardan okuduğu ve dar bir pencereden sunma ihtimalinin olduğu metinlere önce bakmamak. Öncelikle iyice bakmaya fırsat bulamadığım ama yarın sabah (7saat sonra) bakacağım ilk site ve REST API ve API örnekleri olan site: What is rest?.

Günün konusu REST API idi. Başlangıçta birkaç kaynak buldum ama onlara takılı kaldığım için ve işim mantığından çok teknik tarafındaki terimleri açıklamakla zamanımı aldıkları için araştırdığım şeyin varolma sebebini anlamamıştım. Bunu maalesef yine stackoverflow’dan araştırıp güzel kaynaklara erişerek anlayabildiğimi düşünüyorum. Günün öğrenilenleri:
  • REST, web’in mimarisel prensibinin temelidir.
  • Web’teki en garip gelebilecek ama en temel şeylerden biri: Client (browser,yani requesting machine), server( responding machine) ve onun host ettiği(sahiplik yaptığı ya da sunduğu) resource'lar hakkında önceden hiçbir şey bilmeden etkileşim kurabiliyor. Yani iki apayrı makine var. Bunlar birbirini tanımıyor. Ama birbirleriyle işlem yapabiliyorlar. Nasıl mı? Makineler isim ise, biz her ismi farklı fiiller kullanarak cümle oluşturabiliriz. Yani her makineyi bir fiil ile kullanarak onu diğer makineyle ortak anlaşabildikleri bir fiil ile etkileşime sokabiliriz. Fiilimiz ne? Fiili belirlemeden önce şu konu netleşmeli: hem server hem de client kullanılan media üstünde anlaşmalı, ve onu kullanmalıdırlar. Bu bizim başlangıç koşulumuzdur. Ki web üstünde çalıştığımız için bu durumda media’mız “HTML” olacaktır.
  • API, REST’in prensiplerini alır ve böylece REST API dediğimiz kavram oluşur. Client, API’nin yapısı hakkında bir şeye sahip değildir. Server, client’ın web service ile olan etkileşimi için gerekli olan ne bilgi(information) varsa sağlamalıdır. Mesela HTML form yapısına bakalım. Server, resource’un ve gerekli alanların yerini belirtir. Browser, bilgiyi nereye teslim edeceğini ve teslim edeceği bilgiyi önceden bilemez.Formların bilgisi server tarafından sağlanmalıdır.
  • Pratikte bu dediğimiz şeyler ve HTTP ile bağlantılı olan şey ne? HTTP resource’lar ve verb(fiil)’lerin etrafında şekillenir. GET, POST, PUT, DELETE gibi verb’ler; server’ın sağladığı talimatlara göre resource’lara uygulanır. Örneğin web service tarafından sağlanan bir user database’imiz var. Bu servis JSON’a dayalı bir hypermedia kullanır( application/json+userdb) gibi. Client ve server bu format anlamak için progrmalanmıştır. Ama ikisi de birbiri hakkında hiçbir şey bilmez. Request’I GET ile yaparak bir response u json formatında elde ederiz örnek olarak. JSON içinde links adlı property’den resource’ları bulabiliriz. Bu da hypemedia controls olarak geçer. Yani farklı HTTP verb’leri kullanarak resource’ları manipüle edebiliriz. Ve client tarafında bizim bildiğimiz tek şey media tanımımız.
  • GET request’I bilgi güncellemek için asla kullanılmamalı. Sepete ürün eklemeyi düşünelim. GET etkisiz(idempotent) olmalı. Bir request’I iki kez göndermekle bir kez göndermek arasında fark olmamalı. Bu, request’i cachable yapmak anlamına geliyor. Sepete ürün eklemek ise etkisiz değil (iki kez yapınca, ürünün kopyasını iki kez ekliyor sepete). Bu yüzden bu tür işlemlerde POST request’I kullanılmalı.
  • Başka bir konu: Resource’lar URI sayesinde kimlik kazanır. Resource’ları bulmak client’a nerede olduklarını söyleyebilmek için evrensel-genel- bir yol olmalı. URI bunu sağlar. URI ve URL arasındaki fark: her URL bir URI’dir, ama her URI bir URL değildir. Neden? URI kimliğini belirtir, URL ise yerini. Yani URL de protocol de belirtilir, HTTPS gibi.
Asıl konuya gelelim. Bazı sebeplere ve REST’I tanımlayan şeylere:
  • Yüksek trafik hacmini destekleyecek bir mimariyi kullanmalıyız ki server’ımız farklı client’lardan gelen response’ları işlesin. Bu yüzden önceki request’lerdeki bilgileri hatırlayarak sunucumuzu yormak(ya da boğmak) istemeyiz. Bu yüzden de client-server arasındaki her request-response pair’ini birbirinden bağımsız yaparak kısıt koyarız. Yani, server yeni bir request’e cevap vermek için eski request’I hatırlamak zorunda değildir. Yani etkileşimimiz stateless olsun isteriz.
  • Sunucumuzdaki yükü daha da azaltmak için, client için daha önce yapılan hesaplamaları tekrar yapmamak için caching’ e izin verilir. Yani, client’e sağlanan ilk response’un snapshot’ı alınır. Eğer client aynı request’i tekrar yaparsa, initial response’u yaratmak için gerekli hesaplamaları tekrar yapmak yerine snapshot’ı client’a sağlar. Ancak snapshot olduğu için bunun bir expire date’i olur, server’ın sağladığı. Eğer expire date’i geçmediyse ve response update edildiyse, catch in expire date gelmedikçe veya tekrardan sayfa render edilmedikçe client update’leri göremeyecektir.
  • Layer konusuna gelirsek eğer: Sistemimizdeki her layer, komşusu olduğu layer ile etkileşime girer.Yani client layer’ımız bizim server layer’ımız ile etkileşime girer. Ama ana server layer’ımızın bir request’i işlemesine yardım eden başka bir server layer’ımız olursa eğer, client bu layerlar ile direkt olarak iletişim kurmaz. Denildiği gibi herkes komşusu ile iletişime geçer. Sunucu requset’in gerektiği gibi iletir bu durumda da.
  • API ne idi? API emekti klişesinden uzaklaşıp hemen detaya bakalım: Bir yazılım parçasının, diğer yazılım parçası tarafından kullanılması durumu. Amaç, app’ler arasında iletişim sağlamak. Makine ile makineyi konuşturmak. Web API mesela: ne zaman request gelirse, bir app client’e data gönderir. API sadece web development’ta yok. File system veya http module’ün kullanımı aslında bir API örneği. Sizin de dediğiniz gibi, işletim sistemi, windows bir program. Ve bu program bize kendi içinden bir kod parçasını (api’yi) kullanmamıza olanak sağlıyor. Ve tabii ki authorization, authentication gibi konularla bizim o kod parçasından ana programı manipüle etmemizi ve istenmeyen yerlere erişmemizi engelliyor.
Bugünlük bu kadardı. Genel olarak mantığı anladığımı düşünüyorum.

32. Gün

Bugün en kısa raporumun olacağı gün olabilir. HTTP prokolü ile anlaşan ve konuşan makineler arasındaki ilişkinin bizim için en optimize ve isterlerimize uygun hâlde düşünerek bir sistem üretmeliyiz. Ya da en azından algoritmasını oluşturmalıyız şimdilik. 3 tane server olsun denildiği için ve bir tanesinde bazı bilgiler tutulduğu için onu database gibi ele almıştım. Database sunucusu tüm verilerimizin olduğu bir depo gibiydi. Bu depoya erişim sadece sunucularımız tarafından gerçekleştirilebilmeli, client ise sadece dosya ekleme ve çıkarma listeleme gibi işlemleri database sunucumuzda değil, ayrı bir sunucuda ona verilen yetkiler ile yapabilmeliydi. Bu durum için de, yani yetkilerin belirli olduğu kısıtlı bir alanda ( tıpkı web uygulamalarımızı yazarken paypal, twitch, youtube, google bize nasıl apiler sağlıyorsa ve bize verdiği kısıtlı alan içinde bir şeyler yapabiliyorsak) işlemler gerçekleşsin dedim. Mesela dosya listeleme işlemi ya da dosya ekleme/silme işlemi, yine bu alanda gerçekleşmeliydi bu mantığa göre. Database sunucusunda verilen metodları (fonskiyonları) kullanarak bunlar gerçekleştirilebilir diye düşündüm.

Yarın farklı bir bakış açısıyla tekrar soruyu ele alacağım ve öncelikle dediğiniz şekilde çözümü oluşturmaya çalışacağım. Birçok kavram birikti ki aslında, birçok şey hakkında fikirsel anlamda parçacıklar oluştu fakat bütünü oluşturmakta biraz zorlanıyorum.

Bir de şu sitedeki kavramlara (frontend, backend, ve diğer konular için ayrı ayrı ) bakıyorum. Bir şeyler öğrendiğimi, ama onlarca kez duyduğum şeyleri hala öğrenmemiş olmak ve öğrendiklerimi de daha çok pekiştirip gerçekten kendime özgü bir algoritma kurup bir şeyler ortaya çıkarmayı dört gözle bekliyorum.

33. Gün

Bugün farklı konulara biraz göz attım ama günün çoğunluğu REST API üstüneydi. Öncelikle sizin verdiğiniz görevi yaptım. Büyük ölçüde doğrudur diye düşünüyorum ama kime göre doğru neye göre doğru. Ve neye göre optimize onu bilmiyorum. O görevden sonra tamamen REST API üstüne yazılmış bir kitap okudum. Evet, konu hakkındaki bir kitabı da bitirmiş oldum. Birkaç gündür çalışırken zorlanmıştım ama kitabı okurken aslında basit şeyler olduğunu düşündüm. Ve 3 gün önce çok karmaşık gelen şeyler şimdi daha anlamlı gelmekte. Büyük ölçüde konuya vakıf olduğumu düşünüyorum artık.
Mesai sonrasında biraz farklı algoritmalar görerek; ufkumu, limitimi genişletmek istedim. Bir tane machine learning (neural network) yapısını en en basit şekilde kurgulayıp sadece javascript ile bir algoritma nasıl oluşturulur ve yazılır ona baktım. Adı üstünde makine öğrenmesi olduğu için, 3-4 gündür üstünde durduğumuz server-client konusunda makineler söz konusu olduğu için acaba machine learning konularını burada uygulayabilir miyiz diye düşündüm. Web app’I için chatbot, recommendation gibi konular zaten AI ya da benzeri şekillerle yapabiliyorken server’lar ve server-client arası iletişimde ne olabilir diye düşündüm. Ama henüz bir şey bulamadım.

34. Gün

Bugün ve dün çok soft geçti diye düşünüyorum. Boş kaldığım zamanlar hep bir şeyler katmaya çalıştım yine. Bugün verdiğiniz görevlerde de genel olarak mantık yürütülerek yapılan şeylerdi ve genel mantığını kurabildiğimi düşünüyorum sizden tam bir feedback almamış olsam da sizden.

1 ayda olan değişikliği en basit şekilde şöyle açıklayabilirim: 1 ay önce obje nedir bilmiyordum. Design pattern nedir,neden kullanılır bilmiyordum. Javascript’I hiç bilmiyordum. CSS’I ben ne ara temel seviyede öğrendim hala anlamış değilim mesela. Şu an ise javascript ile bir şeyler yazmak ya da o dilde yazılan şeyleri okumak, yeni algoritmaları bulup öğrenmek, çözmek, bulmaca gibi eğlenceli geliyor. Bugün demiştiniz hani, aranızda yarış var mı ya da öyle şeyler var mı diye. Evet bazen kim hızlı cevap gönderdi, kim hızlı bitirdi, kim hızlı anladı gibi şeyler dönebiliyor. Bu, şu an olan atmosferden ve şartlardan dolayı diye düşünüyorum. Ama ben kendimi soyutlamaya çalışıyorum gündelik yaşantı, diğer insanlar, başka insanların maaşları, düşünceleri, kadın-erkek ilişkileri, arkadaşlıklar ve her ne ise. Sebebi mi? Motivasyonum, yani bu işi öğrenmeyi kafama birkaç ay önce koydum ve ciddi ciddi bir tutku ya da hobiye dönüştüğünü hissediyorum. Ya da öyle bir şey yoktur ben de sallıyor olabilirim. Ama yok gerçekten çok zevk alıyorum. Ve bu güzel şeyin bozulması en son istediğim şeylerden biri. Bu yüzden kendimi insanlarla kıyaslarsam mutlu olamam, motivasyonum düşer. Stres olurum. O yüzden de insanlarla değil, yaptığım işle ilgilenmek en güzeli. Hem ekmeğimi kazanıp, hem de sevdiğim işi yapmak bence çok çok büyük bir şans. O yüzden de mutluyum ve biraz fazla belli ediyorum. Ama elimde olduğunu da düşünmüyorum.

Son bir şey. Gönderdiğiniz kitaptaki algoritma ile alakalı çok basit bir örnek vardı. O basit örneğe kendim de yine sadece 10 satır olan güzel bir seçenek yazdım(kitaptaki örneğe göre döngü sayısını çok daha kısa tutan). Ve o en basit şey bile çok mutlu etti. Evet gereksiz yere beyninizde bir yer kaplamış olabilir bu dediklerim. Kusura bakmayın (:

Bugünlük bu kadar.

35. Gün

Bugün tamamen CSS ile geçti. Tamamen tekrar ve pratik niteliğindeydi. Yeni bir şey öğrendim mi? Kayda değer yeni bir şey öğrenmedim. Ama unuttuğum kısımları hatırladım. Mesai sonrası sadece karosel örneklerini inceledim. Evet sıralı normal bir karosel yapılabilir sadece javascript ve CSS ile fakat mouse ile sürüklenebilir bir karosel yapmak çok zormuş onu anladım. Birkaç saatimi vermeme rağmen olmadı. Örneklerine baktım internetten. SCSS, React Js, Angular Js ile çok çeşitli şekillerde yapılmış ama basit seviye CSS ve Javascript le bir yolunu bulamadım. Açıkçası yolları ve yapılan örnekleri vardı fakat bir hayli karışıktı. Bugünlük bu kadardı.

36. Gün

Dün yaptığımız örnek bence biraz fazla problemliydi bence. Ama bir şekilde bitti tabii. Bugün verdiğiniz örnek ise flex yapısı ile çok güzel göründü. Sayfanın yapısına responsive’lik açısından düşününce flex’lerin kullanımı çok işe yaradı. Sayfayı bitirdim fakat karoselli kısımları yapmamıştım. İlk karosel ile alakalı çok güzel bir w3school örneği buldum. Onu inceleyip benzerini bizim sayfamızda yapmaya çalışacağım yarın. Yeni bir şey öğrendim mi? Pratiklik açısından bazı şeyler öğrendim fakat yepyeni bir algoritma ya ufkumu açan bir şey bugün olmadı. Ama güzel bir gündü iş açısından.

37. Gün

Bugün CSS ile alakalı yaptığımız site tasarımından ben tatmin oldum. Özellikle karosel biraz uğraştırdı. Basit bir copy-paste değildi. Nerede neyi, neden kullandığını anladım. Karosel kısmı da oldu. Tabii ki en optimize çözüm , responsive tasarım gibi konular söz konusu. Responsive’lik konusunda da iyiydi bence. İlk defa kendi yaptığım bir şeyi övüyorum galiba neyse burayı geçeyim.
PHP ve Javascript (bunu öğrenmiştik aslında ama farklarına bakarken yine araştırdım) dillerindeki değişken scope’ları hakkında araştırma yaptım. Üstüne ufak ufak örnekler yazdım ki, yazılan şeyin manası ne imiş anlaşılabilsin. Bu aslında bir ödev yapmaktan ziyade, kendime bir şeyler anlatmak ve bir depo gibi o yapılan şeyi tutmak için yapılmış bir şey.
Özetle günün öğrenilenleri ve yapılan pratikler: CSS(özellikle karosel çalışması, ve diğer düzenlemeler), PHP de scope konusu.

38. Gün

Bugün “w3school”daki PHP ile alakalı birçok şeyi araştırdım, öğrendim ya da öğrenmeye çalıştım. Ve bugün şükrettim. Günün en güzel şeyi de o şükretme hissiyatıydı. 1 aydan fazla zamanda Javascript ile çalışınca aslında bir şeyleri öğrendiğimi, PHP içeriğine bakarken farkettim. O kadar hızlı anlaşılıyor ki PHP’deki konular şaşırdım açıkçası. Tabii ki derin konular değil, ama genel olarak konsepti, içeriği çözmek çok daha hızlı oluyormuş. Bugün bu yüzden yapımda emeği geçen herkese bol bol teşekkür ettim kendi içimden. Sizin, karanlık ormanda meşalenin aydınlatması sembolizmi ile anlattığınız hikaye tabii ki doğru fakat benim meşalem hala çok çok zayıf ışık veriyor. Bu yüzden çok teşekkür ederim tekrar yolumu aydınlattığınız için büyük meşale ile. Bugün PHP çalışırken aslında Javascript çalışmışım gibi de hissettim. Çünkü temel yapılar (kodlama,programlama,scripting, adına ne denirse) açısından örtüşüyordu birçok yerde. Ama bugün özellikle şeye şaşırdım: PHP’de milyonlarca fonksiyon varmış gibi hissettim. Gerçekten her konuda yazılmış built-in bir fonksiyon mutlaka varmış gibi göründü. Ben o fonksiyonları ve işlevlerini okurken, kafamda acaba bu fonksiyonun algoritması nasıl kurulmuş ve yazılmış diye düşünceler beliriyordu. Sizin Jquery’deki DOM manipulation için yaptığınız örneği incelerken hissettiğim ile benzer bir şeydi bu. Bugün şeyi de farkettim PHP çalışırken. Biz aslında Javascript’te object-class konusunda birçok örnek yapmıştık ve ben bunların genel konseptine bir anlam verememiştim o zaman. Neden yapmıştık biraz anlasam da bunun genel isminin OOP(ya da OOP’nin yapı taşı) olduğu düşüncesi hiç gelmemişti. Bugün PHP’de OOP konusunu okurken fark ettim tabii ki. Bu kadar uzun bir paragrafın okunurluğu tabii ki de çok düşük fakat bir şey daha eklemek isterim: Bir şeyleri öğrenirken, konseptini anlamaya çalışırken, başka insanların problemlere getirdiği çözümleri ve web geliştirmedeki kavramları öğrendikçe, açlığım dinmiyor üstelik biraz dinlendikten sonra tekrar bakmak istiyorum. Bu bana çok garip geliyor. Daha önce böyle bir hissi yaşamamıştım sanki diye düşünüyorum. Evet lisede matematiği, fiziği çok severdim. Evet çok çalışırdım, ama şu an ki arzumu sadece şeyde hatırlıyorum: Trigonometrinin ne demek olduğunu öğrenirken. Yıllar sonra yine aynı çocuksu ve saf isteğin oluşmasından çok mutluyum. Enişten dileklerimle yine çok teşekkür ederim. Umarım bu emeğinizin, yatırımınızın karşılığında sizin de yüzünüzü kara çıkarmayız, biz de çok şeyler öğreniriz. Makine(bilgisayar, web sunucu, client, ne denirse) dilini “native speaker” seviyesine kadar yükseltebiliriz. Yani bu çok zor olsa da, neden olmasın değil mi? Kısacası çok daha “işe yarar” oluruz çalıştığımız konuda, şirkette. Evet biraz fazla pozitiflik (ve belki boş laf) saçtım farkındayım ama içimdeki hisleri de yazmasam içimde kalacaktı, çok hoş olmayacaktı.

Günün özlü sözü Steve Jobs’tan gelsin:

“Stay hungry, stay foolish”.
Öğrenme açlığımızın, azmimizin hep devam etmesi dileği ile.

39.Gün

Bugünkü örneğin javascript kısmını yapmasaydınız ben yine de yapabileceğimi düşünüyordum. Ama biraz fazla zaman alırdı çünkü recursive kısmını oturtamazdım. Hissettiğim eksiklik, bir programlama dilinden çok işin mantığı olduğu için mesai sonrası recursive fonskiyon örneklerini, algoritmalarını inceledim. Kolay olanlarını kendim yazmaya çalıştım. Orta zorlukta olanlarda (trade-off yaparak*hız-zaman*yapılabilirlik konularında) ise direct yazarların çözümlere bakış açılarını anlamaya çalıştım. Bir probleme verielecek farklı cevapların kurulduğu düzeni anlamaya çalıştım.

Mesela “n” kadar basamağı olan merdiveni bir veya iki adım atan bir insan kaç farklı şekilde çıkabilir gibi bir soruyla karşılaştım. Temelinde çözümü “n”inci Fibonacci sayısının kaç hesaplama yaparak bulunacağı algoritması ile de benzerdi. Recursive çözümlerini (bellekte bir dizi tutup tekrar tekrar aynı hesaplamalı yapmayı engellemek ve diğeri de brute force algorithm denilen ve çalışması programı, CPU’yu yoran ve zaman alan en basit recursion metodu ileydi) anlasam da, dynamic programming yönteminde bir yeri tam anlamadım. Bir süre daha baksam anlaşılır ama günün yorgunluğu ile ona çok odaklanamadım. Örnek algoritmalara şuradan ulaştım: Javascript Algorithms

Peki bugün ne yaptın Buğra? Mesaide ne yaptın onu anlat derseniz, öncelikle sizin verdiğiniz örneği sabah kurguladım. Ne yapmam gerektiğini belirledim. Yapmaya hazırlanırken siz Javascript’te nasıl yazıldığını gösterdiniz. Sonrasında ben yine bir şeyler denedim ama olmadı. Açıkçası kodlarla oynamak o kadar zevkliydi ki hep başka şeyler yapıp, neyin ne işe yaradığını, ne ile neye ulaşılacağı gibi şeylerden dolayı biraz zaman kaybettim. Siz sonra tekrar Javascript kodunu yazdırınca onu PHP’ye döndürmesi çok kolaydı. Tek sorun PHP’yi çok bilmediğim için yeni kavramları tek tek araştırmam. Ama bu da normal bence. Bugün hissettiğim en güzel şey, PHP’de yazılan kod ile direct client tarafında bir çıktıya sahip olabilmemiz. Bugün hissettiğim en çirkin şey de, PHP’de biz debug’I nasıl yapıcaz sorusu. Node.js ile Javascript kodunda hata olduğunda nerde olduğunu ya da neden olduğunu görmek çok daha kolaydı. Ama burda (yeni olduğumuz için bir de) görmek kolay değil gibi geldi.
Şimdiye kadar çok şey yaptık (göreceli olarak). Bunu da öğrenebileceğimize eminim.
1 ay önce biraz daha şu metod şu işe yararmış gibi ezber yapıyordum ama şu an ne kadar çok çalışırsam, ne kadar çok problem ve çözümü görürsem, ulaşırsam o kadar çok maruz kalacağım için daha iyi öğrenileceğini düşünüyorum. Tıpkı yabancı dil gibi. O yüzden tek amacım olabildiğince maruz kalmak bu dile, bu evrene.

40. Gün

Günün çoğunluğu PHP ile ilgili konuları araştırmakla geçti. Javascript’te öğrendiğimiz yapıların PHP’deki çalışma şekillerini öğrenmeye çalıştım. Daha çok okumakla geçtiği için pratik yaparken biraz tökezleyebilirim ama aşinalık kazandırdı.

W3Schools'taki PHP ile ilgili birçok konuyu okuduğumu, anlamaya çalıştığımı, gerekince kendim de yazmaya çalıştığımı söylemeliyim. Özellikle Javascript’te şimdiye dek ne ile karşılaştıysak onların PHP’deki karşılıklarına(varsa) bakarak bir çalışma yaptım diyebilirim. Aklıma çok bir soru takılmadığı için size bir şey soramadım. Takılan kısımları google’layıp bulabildim. Javascript’te çoğu şey object’ler üstüne oluşturuluyordu. PHP’de hangi veri yapısının daha baskın olduğunu anlayamadım ama fonksiyonların çokluğu beni yine çok şaşırttı (Gerçi Javascript’te gördüğümüz kadarıyla onlar da bir obje gibi düşünülüyordu, PHP’de nasıl onu tam bilmiyorum). Associative array ve class’ın bir instance’I olarak daha önce öğrendiğimiz object yapısının iki şekilde oluşturulması ilginç geldi. Sadece associative array yapılabilir miymiş diye şu an bir düşündüm. Ama yıllardır çalışan bir program için gereksiz bir şeyin yazılması söz konusu değildir diye kendi sorumu cevaplıyorum (Cevap büyük ihtimalle object-class ilişkisinin oluşturulması gerekliliği ile alakalı). Bugün mesela “__constructor(), __destructor()” gibi iki method gördüm class içinde oluşturulan. Başta getter setter mantığına çok benzetmiştim. Ama “__constructor”, Javascript’teki “constructor” ile aynı işlevi görüyormuş. Bugün beni en şaşırtan şey, Javascript’te karşılaşmadığım “public, private, protected” gibi “access modifiers” ile karşılaşmak oldu. İlk defa karşılaştığım terimler olduğu için iyi anlamaya çalıştım. Hızlı kavradığımı düşünüyorum, çünkü basitlerdi. Tıpkı Javascript’te olduğu gibi burada da static metodu bulunmaktaydı. Bir de namespace, iterables, trait, interface, abstract gibi “class ve method’”lar ile karşılaştım. Bunlar üstüne örnek çözmediğim için hafızamdan hemen silineceğini varsayıyorum. O yüzden biraz daha detaylı bakmam gerekebilir.

Aslında her öğrendiğim şeyi güzelce açıklayıp buraya yazmak çok istiyordum fakat bugün çok çok fazla şeye baktığım için yazmaya girişirsem sayfalar alabilirdi. Bunun yerine örneklerle karşılaşınca çözmeye çalışmak, kullanmak ve o şekilde yazmak daha mantıklı geldi.