Blog.

JS Levels?

Cover Image for JS Levels?
Baris Guler
Baris Guler

Ge├ženlerde link takibi ile rastlad─▒─č─▒m bir blog postÔÇÖunda ScalaÔÇÖn─▒n yarat─▒c─▒s─▒ Martin Odersky, Scala dili i├žin bir yetkinlik derecelendirmesi yapm─▒┼č. Kendi i├žerisinde dilin kendisine has niteliklerini referans alarak bir tablo ├ž─▒kartm─▒┼č. Peki bunu Javascript i├žin d├╝┼č├╝nd├╝─č├╝m├╝zde nas─▒l bir tablo ile kar┼č─▒la┼č─▒r─▒z diye kendime sordum ve akl─▒ma gelenleri a┼ča─č─▒daki gibi toparlad─▒m.

├ľzellikle g├╝n├╝m├╝zde yap─▒lan i┼čin hemen ├Ân├╝ne eklendi─čini g├Ârd├╝─č├╝m ÔÇśseny├ÂrÔÇÖ, ÔÇśmajesteleriÔÇÖ, ÔÇśmasterÔÇÖ, ÔÇś├╝stadÔÇÖ, ÔÇślordÔÇÖ, ÔÇśekspertÔÇÖ, ÔÇśk├╝├ž├╝k eni┼čteÔÇÖ, ÔÇśZiyaÔÇÖ, vb. gibi ├Ân ekleri de d├╝┼č├╝nd├╝─č├╝mde zannedersem akl─▒mdakileri b├Âyle bir ┼čema ile en az─▒ndan di─čer geli┼čtiricilerle tart─▒┼čarak daha da netle┼čtirebilece─čim fikrindeyim. Baz─▒ ayr─▒nt─▒lar─▒ ka├ž─▒rm─▒┼č olabilirim, mazur g├Âr├╝n.

Bu listeyi ÔÇślibrary/k├╝t├╝phaneÔÇÖ ya da ÔÇśframework/├žat─▒ÔÇÖ kullan─▒m─▒n─▒ g├Âz ├Ân├╝ne alarak haz─▒rlasayd─▒m ├žok objektif bir de─čerlendirme yapamayacakt─▒m. Nitekim hangi dil olursa olsun, ├žat─▒ ya da k├╝t├╝phanesi yerine dilin kendi ├Âz niteliklerine hakim olmak, o dili ger├žekten kullan─▒yor olmaktan ge├žiyor ve ÔÇśuzmanl─▒─č─▒ÔÇÖ o tan─▒ml─▒yor. ÔÇťAbiii, m├╝thi┼č React yaz─▒yor!ÔÇŁ, ÔÇť├╝stad, AngularÔÇÖ─▒ yazanlar bu adam─▒ g├Âr├╝nce utand─▒lar, vallaha!ÔÇŁ, ÔÇťeleman BackboneÔÇÖu ba┼čka bir┼čeye ├ževirdi, hala anlamak i├žin kodun ba┼č─▒nda n├Âbet tutuyoruz!ÔÇŁ, ÔÇťAbi, o adama bula┼čma; Node.jsÔÇÖe pull requestÔÇÖi var!, gel biz ├žay demleyelim, gelÔÇŽÔÇŁ gibi ┼čeyler kula─č─▒ma ├žok ├žal─▒nd─▒; seviyorum sizleri┬á:)

Buyrun listemizÔÇŽ

Seviye A1┬á: Ba┼člang─▒├ž Seviyesi Uygulama Geli┼čtirici (aka. Beginner)

  • Durumlar (statements) ve ifadeler (expressions): Operat├Ârler, metod kullan─▒m─▒, ┼čartlar (if, switch, vb.), d├Âng├╝ler, try/catch kullan─▒m─▒.
  • Scope kontrol├╝ (Etki alan─▒ kontrol├╝): this ile akrobasi.
  • Ba─člam kontrol├╝ (bind, apply, call, vb.): Kim kim i├žin, ne ne i├žin.
  • Geri-bildirim y├Ânetimi: CallbackÔÇÖler.
  • Nesne-y├Ânelimli ve prototip-tabanl─▒ geli┼čtirme yetkinli─či (OOP ve Prototypal inheritance): Temel nesne tabanl─▒ yakla┼č─▒m─▒n JS dilindeki kar┼č─▒l─▒─č─▒ ile uygulama geli┼čtirebilme yetisi.
  • JSON veri yap─▒s─▒
  • Ek 1: ES2015 jargonu ile import, export, const, let, arrow metodlar.
  • Ek 2: Otomatik task y├Ânetimi (automated task management) i┼čini toolÔÇÖlar (grunt, gulp, broccoli, vb.)ile yapabilir, 0'dan kurmak i├žin u─čra┼č─▒r.
  • Ek 2: Donat─▒m ara├žlar─▒n─▒ (webpack, rollbar) bilir, duymu┼čtur ama ├žok u─čra┼čmam─▒┼čt─▒r.
  • Dipnot: Stack Overflow addict┬á;)

Seviye A2┬á: Orta Seviye Uygulama Geli┼čtirici (aka. Intermediate)

  • Hoisting kontrol├╝: var m─▒s─▒n, yok musun?
  • Closure kullan─▒m─▒: Scope kontrol├╝ ile ayn─▒ de─čerlendirilebilir ancak aktif ve do─čru kullan─▒m─▒n─▒ da i├žerisine ekleyelim.
  • Currying: topla(1)(2); //logs 3
  • Diziler: Map, filter, reduce ve di─čerleri ile dizi kontrolleri
  • Ek 1: Asenkron Javascript, ya da PromiseÔÇÖler ve benzerleri.
  • Ek 2: ES2015 jargonu ile s─▒n─▒f (class) ve kal─▒t─▒m (inheritance).
  • Ek 3: Donat─▒m ara├žlar─▒n─▒ bilir
  • Dipnot 1: SOÔÇÖda soru sorar, cevap al─▒r, cevap yazar.
  • Dipnot 2: En az bir adet out-of-work projesi vard─▒r ve g├Âz├╝ gibi bakar.

Seviye A3┬á: Uzman Seviye Uygulama Geli┼čtirici (aka. Expert)

  • Tasar─▒m kal─▒plar─▒ (aka. Design Patterns): Temelde observer, mediator, pub/sub, builder ve benzeri kal─▒plar ile uygulama geli┼čtirme.
  • Fonksiyonel programlama: Temel prensipleriyle A2'deki Diziler k─▒sm─▒n─▒n daha pratik kullan─▒m─▒ diyebiliriz. ─░├žerisine tekrar-kullan─▒labilir (reusable) ve mod├╝ler geli┼čtirme de eklenebilir.
  • Nesne/Metod kompozisyonu: ÔÇťObject CompositionÔÇŁ olarak nitelendirebilir, temelde yetkinliklerin (ya da metod ve nesnelerin ├Âzelliklerinin) mixinÔÇÖler gibi harmanlanmas─▒ diyebiliriz.
  • SOLID ve KISS gibi prensipler, onun i├žin hayatidir.
  • Ek 1: async/await Yakla┼č─▒m─▒
  • Ek 2: noSQL veritaban─▒ yap─▒s─▒ (JSON/BSON veri yap─▒lar─▒)
  • Dipnot 1: Birden fazla projesi ile yine birden fazla geli┼čtiricili projeler geli┼čtirir.
  • Dipnot 2: npmÔÇÖe a┼činad─▒r.

Seviye L1┬á: Ba┼člang─▒├ž Seviyesi K├╝t├╝phane/├çat─▒ Geli┼čtirici

  • View katman─▒ i├žin k├╝t├╝phane/├žat─▒ geli┼čtirme yetisine sahiptir. Dojo, YUI ya da jQuery istemci temelli k├╝t├╝phanelerle i┼če yarar k├╝├ž├╝k kod par├žalar─▒ d├╝zenlemi┼č ve yay─▒nlam─▒┼čt─▒r. D├╝zenli katk─▒ya devam eder.
  • Taray─▒c─▒lar─▒n ├žal─▒┼čma mant─▒─č─▒ ve y├Ânetimi konusunda yeterince bilgilidir.
  • Kodun her noktas─▒n─▒n testini de yazar ve coverage de─čerleri onun i├žin ├Ânemlidir. Bunun i├žin ara├žlar kullan─▒r.
  • Kodunun performans─▒ i├žin ├žal─▒┼čmalar yapar, s├╝rekli okur.

Seviye L2┬á: Orta Seviye Geli┼čtirici, Ekosistem Kurucu

  • Ekosistem yarat─▒r. Tek bir katman i├žin de─čil, bir├žok katman i├žin uygulama geli┼čtirir.
  • RFC olarak da bir s├╝redir bilinegelen (ya Node.jsÔÇÖteki addonÔÇÖlar ya da) FFIÔÇÖler ile birden fazla dil kullan─▒m─▒n─▒ performans i├žin tercih eder.
  • Sunucu taraf─▒ i├žin geli┼čtirdi─či kodu ko┼čturur, performans konusuna dikkat eder ve bunun i├žin bir ├žal─▒┼čma program─▒na sahiptir.
  • Kayna─č─▒n─▒ a├žaca─č─▒ kodun y├Ânetimini de kendisi yapabilir. Bunun i├žin konferanslarda konu┼čmalar yapar, di─čer projeleri destekler.

Seviye L3┬á: ─░leri Seviye Geli┼čtirici, Uygulama/Yaz─▒l─▒m Mimar─▒

  • Yarat─▒lan ekosistemleri hem geli┼čtirir, hem y├Ânetir, hem de geni┼čletebilir. Bunun i├žin birden fazla y├Ântem ve ara├ž kullan─▒r. Aktif kod katk─▒s─▒ ├žok sa─člamayabilir ancak soru sordu─čunuzda mutlaka makul bir cevap al─▒rs─▒n─▒z.
  • Geli┼čtirdi─či k├╝t├╝phane ya da ├žat─▒y─▒ (hem istemci hem de sunucu taraflar─▒ i├žin, farketmez) s├╝rekli desteklemeye ├Âzen g├Âsterir.
  • Bulundu─ču ├žal─▒┼čma ortam─▒nda TDD ve ├žiftli-programlamaya (pair-programming) te┼čvik eder.
  • ├çok me┼čgul edilmeye gelmez, hep i┼či vard─▒r ama sevilir, severiz.

Listeye modern Javascript paradigmalar─▒n─▒ da ekleyerek daha gelece─če uyumlu hale getirmek istedim. Bunu yaparken ES2015 ve ES2016 spesifikasyonlar─▒na yap─▒lan ├Ânerileri de tekrar okumam gerekti.

Bunlar─▒n d─▒┼č─▒nda en sevdi─čim ├çX kategorisi. ÔÇť├çaylak-Tan─▒mlanamayanÔÇŁ gibi bir ┼čekilde a├ž─▒klayabilece─čim bu seviye, hem ├Â─črenme h─▒rs─▒ hem de payla┼č─▒m iste─či ile en sevdi─čim ancak yukar─▒da sayd─▒─č─▒m kategorilerin b├╝t├╝n hepsini de kapsad─▒─č─▒n─▒ d├╝┼č├╝nd├╝─č├╝m bir kategori. ÔÇťBeni kategorize etme!ÔÇŁ diye ├ž─▒k─▒┼čt─▒─č─▒mda (Sezen ablaya selamlar!) ├çX ile susturuyorum kendimi, tavsiye ederim; b├╝t├╝n seviyelere bedeldir; er ya da ge├ž b├╝t├╝n kategorilerin hakimi olur. Sadece ├Â─črenme, okuma ve deneme arzusundan bir┼čey yitirmesin.

Bu arada yaz─▒y─▒ yazarken ┼ču alb├╝m bana ├žok iyi geldi, ├Âzellikle bu nadide toplululu─čun ilk 4 alb├╝m├╝n├╝ tavsiye ederim.

Ezginin G├╝nl├╝─č├╝ÔÇŐÔÇöÔÇŐBah├žedeki Sandal (1988)

Umar─▒m yaz─▒dan da zevk alm─▒┼čs─▒n─▒zd─▒r. Okudu─čunuz i├žin te┼čekk├╝r ederim.

Sevgiyle.