Neden JavaScript’i bırakıp Ruby’e geçiyorum?

Feragatname: Bu içerik tamamen öznel olup herhangi bir polemik yaratma maksadı içermemektedir.

Başlık böyle ama tam olarak “bırakıyorum” da diyemem, neticede öğrenilmiş bir dil “bıraktım” diyerek bırakılabilen bir şey değil. En nihayetinde de altın bilezik. İlişkileri toptan koparmamak lazım. Velakin insan hayatında dönem dönem önceliklerini düzenlemesi gereken bir canlı.


Neyi bırakıyorum?

“Bırakıyorum” deyince tam olarak hayatımda bıraktığım (önceliğini değiştirdiğim) şeyin ne olduğunu biraz anlatayım:

JavaScript

JavaScript yazmaya yaklaşık 17 yıl önce başladım. Tabii tam olarak yazmak denemez, çocukluk dönemi. ~2000 yılında, ilkokul 5. sınıfa giderken indirdiğim JavaScript kütüphaneleri ve örneklerinde ufak tefek değişiklikler yaparak, daha sonra bu ufak tefek değişiklikleri daha büyük değişikliklere taşıyarak iyice bu dünyaya giriş yaptım. Alaylı başladığım için tüm yazılım algım JavaScript kökenli idi. İnsanlar JavaScript’teki callback’lerden şikayet ederken, ben callback olmayan bir dilde nasıl iş yapacağımı bilemiyordum.

JavaScript yazdığım yıllar boyunca JavaScript için kendimce bir çok katkı yapmaya gayret ettim:

Jstanbul Logosu (Tasarım: Kıvılcım Kökbil)
  • 2012'de Bahçeşehir Üniversitesi’nde Jstanbul JavaScript Konferansı’nı ve pyistanbul ekibi ile JSPyConf’u düzenledik. Bu süreçte çok güzel insanlarla tanıştım.
  • 2013'te “Modern JavaScript” adlı kitabı yazdım. Kitabı yazarken tonlarca şey öğrendim.
  • Uğur abi ile Kod.io, Kod.io Linz, Codefront, JSIst gibi Türkiye ve Avusturya’da konferanslar düzenledik ve bu konferanslarda JavaScript dünyasında öncü diyebileceğimiz bir sürü insanla tanıştım. Hepsinden bir çok şey öğrenme fırsatım oldu. Mathias Bynens, Vitaly Friedman gibi müthiş isimlerle birebir sohbet etme imkanı buldum. Ayrıca Burak Yiğit Kaya, Ustun Ozgur, Armağan Amcalar, Fatih Acet, Osman Yüksel ve ismini sayamayacağım bir çok değerli JavaScript insanı ile de yine bu konferanslar ve etkinlikler dolayısıyla tanıştım.
Modern JavaScript, Dikeyeksen Yayınları
  • Koding’te JavaScript’le büyük bir mimarinin nasıl kurulabileceği ile ilgili tonlarca şey öğrendim. İşinde en iyi insanlarla çalışmanın değerini orada öğrendim, CoffeeScript yazdım.
  • Bir çok konferansta JavaScript ve Front-end ile ilgili sunumlar yaptım, eğitimler yaptım.
  • Jstanbul Buluşmalarını düzenledik. Murat Çorlu’nun kurduğu JSTurk Slack kanalında hala JavaScript ile ilgili olağanüstü kaliteli tartışmalar dönüyor. Ve bu kaliteyi koruma konusunda çok ciddi bir tutum mevcut.
  • GitHub’da bir çok JavaScript projesi geliştirdim ve hala geliştirmeye devam ediyorum.

Peki neden Ruby?

Öncelikle daha önce denediğim diğer programlama dillerinden bahsedeyim ki sırf “daha elit duruyor” diye geçmişim gibi görünmesin.

PHP

İlk olarak JavaScript’i öğrensem de, işe başladığım yıllarda JavaScript pek geçer bir dil değildi. Dolayısıyla JavaScript’e benzeyen ve öğrenmesi kolay (alaylı olduğum için) bir dile geçmeliydim; önümde de pek alternatifim yoktu. PHP, Apache, MySQL üçlüsüne başlayarak uzunca bir dönem çalıştım. PHP şu anki haliyle çok yol katetmiş durumda.

Python

Markafoni’ye girince Python’a ufaktan merak sardım. Markafoni Python yazıyordu: etrafta o kadar Python’cu olunca ister istemez bulaşmış olduk. PHP ve JavaScript kadar hakimiyet sağlamamış olsam da Django ve Flask ile bir iki küçük uygulama geliştirdim. Python çok güzel bir alternatif, fakat JavaScript’te rahat olduğum kadar rahat hissedemediğim için Python’da çok derinleşemedim. Ayrıca zaten Markafoni’de bir front-end geliştirici olduğum için bu tarafta gelişmeye ihtiyaç da duymadım.

Fakat Python’da PHP’de o zaman mevcut olmayan paket yöneticisi (PIP), daha oturmuş bir web framework (Django [Ben bıraktığımda PHP’de Zend Framework popülerdi]) gibi yapılar ufkuma ufuk kattı. Ayrıca Python’un “indentation” yapısı da çok hoş gelmişti.

CoffeeScript (Ruby-vari JavaScript)

CoffeeScript’i ilk çıktığında da duymuştum fakat ilk adamakıllı CoffeeScript kodumu Koding’te yazdım. CoffeeScript’in en büyük özelliklerinden birisi fazlaca Ruby’e benzemesi. Ayrıca Python’dan gelen “indentation” yapısına da aşina olduğum için adapte olmam çok kolay oldu (1 gecede yazmaya başladım). Zaten CoffeeScript’in geliştiricisi Jeremy Ashkenas aslında iyi bir Ruby’ci ve Ruby’e benzeyen bir dil geliştirmeye çalışırken CoffeeScript’i yazıyor. Dolayısıyla Ruby syntax’ına fazlaca yakınlaşmamın nedenlerinden birisi de CoffeeScript.

Crystal

Bu aslında Ruby’den daha sonra denediğim bir programlama dili, keza hala öncelikli dillerimden birisi olma özelliği taşıyor. Ruby syntax’ında olduğu için Ruby ile bir tutabilirsiniz. Biraz da type ve macro bilgisi eklerseniz Ruby gibi ama çok daha hızlı (derlenen dil) bir dilin avantajlarına sahip olabilirsiniz.

Resim: https://danielmiessler.com/blog/ruby-vs-javascript-as-a-first-language/

Ruby & Ruby on Rails

Uğur abi, Serdar ve Aşkın ile çalıştığım dönemlerde daha yoğun olarak merak sardığım fakat başlayamadığım Ruby son dönemlerde özellikle Aşkın ve Serdar sayesinde ana dilim olma yolunda ilerledi. Yukarıdaki dil geçişlerimin sonucunda da yolumu bu noktada odaklamaya karar verdim. Ruby topluluğunun bir çok alanda diğer dilleri çok olumlu etkilediği malum: Rails gibi bir framework gerçekten mucizevi şekilde iyi.

  • Bir çok büyük firma Ruby’i aktif olarak kullanıyor: Twitter (front-end), GitHub, Shopify, Airbnb, Basecamp (RoR’un çıkış noktası), Dribbble, Goodreads, Hulu, Kickstarter, Square, Strava, Twitch, Zendesk, GitLab, Xing… Dolayısıyla best-practice’leri oturmuş durumda.
  • Topluluk olarak gerçekten çok başarılı işler yapıyorlar.
  • Dil yapısı (syntax olarak değil) JavaScript’e çok yakın, JavaScript’e hakimseniz Ruby’e hakim olmanız işten değil.
  • İşin çoğunu yapıyor: Ruby ve özellikle Ruby on Rails ile yazılım geliştirirken bir çok teknik işle boğuşmak yerine sadece yapmak istediğiniz işe odaklanıyorsunuz. Topluluk standartları çok net.
  • Herhangi bir projenin prototipini Rails ile 1–2 saatte yazabilirsiniz. Startup’ların tercih etmesinin nedenlerinden biri bu.
  • Bir Ruby projesinden başka bir Ruby projesine geçmek çok kolay, çünkü yapı değişmiyor.
  • PHP’nin Laravel’ine ilham veren Rails, JavaScript’in Express’ine ilham veren Sinatra gibi bir çok güzel araç Ruby.
  • TDD/BDD proje geliştirme süreçlerini ayarlamak diğer birçok dile kıyasla çok daha basit ve kolay.

Tabii burada amacım Ruby’nin diğerlerinden çok daha iyi olduğunu falan ispatlamaya çalışmak değil, benim için daha uygun olan bir dil olduğunu hissediyor olmam. Maddeler subjektif bakış açısı içermektedir, dolayısıyla polemiğe mümkün olduğunca kapalı :)

Eee? JavaScript’in nesi yanlış peki?

Denediğim diğer dilleri ve fikirlerimi özetledim; bu diller arasında bana neden Ruby’nin daha yakın olduğunu da özetledim sanırım. Peki şimdi esas soruya gelelim: “Madem JavaScript’te bu kadar emek harcadım, Ruby’e geçmeye neden karar verdim?”

JavaScript tabii ki gelişmeye devam ediyor. Artık ECMAScript yazmaya başladık. JavaScript topluluğu gelişmeye devam ediyor. Hayatımızda artık Vue var, React, React Native, Node.js vs... JavaScript dünyası çok aktif ve ben de her zaman bu aktiviteye ayak uydurmaya devam edeceğim.

  • JavaScript maalesef bir hype girdabına girmiş durumda. Bu da beraberinde bir çok psikolojik yorgunluk getiriyor. Her paradigmanın kendi doğruları olmaya başlıyor ve hemen hepsi de maalesef doğru oluyor; hangi birini ciddiye almanız gerektiğini kestiremiyorsunuz, hepsini idrak etmeniz gerekiyor.
  • webpack-*, babel-* gibi araçların konfigürasyonu ve yönetimi yapmanız gereken işi yapmaktan çok vakit almaya başladığında ufak çaplı krizler geçirebiliyorsunuz.
  • JavaScript’e yapılan yoğun göç beraberinde birçok farklı paradigmayı da getiriyor. Bu paradigmalar hayatımıza bir yandan birçok şey katarken bir yandan da kaos getiriyor.
  • Bunlar, neticesinde stabil olmayan bir topluluk da getiriyor.
  • Her 6 ayda bir “X framework’ünden Y’ye neden geçtik” makalesi okumaktan ve daha kötüsü takip etmekten gına geliyor. Değişim güzel, fakat bu kadarı insanı yıpratıyor. (Bakalım Vue’i bırakıp neye geçeceğiz.)
  • “Realtime uygulama istiyorsan Node.js kullanabilirsin” gibi sığ ve temelsiz topluluk yorumlarından sıkılıyorsunuz.
  • Temelsiz topluluktan sıkılıyorsunuz.
  • Tüm dillerde aynı olan fakat her nedense JavaScript’e atfedilentypeof NaN == "number" durumunu her yerde duymaktan ve anlatamamaktan sıkılıyorsunuz.
  • Test (TDD/BDD) odaklı çalışmak için Ruby, JavaScript’e (Node.js) göre bir kaç adım daha ileride.
  • NPM’de RubyGems’ten çok daha fazla paket var; fakat birçoğu gerçekten çöp. RubyGems’deki gem’ler genellikle daha nitelikli. (Kaynak: genel tecrübe)

Tabii yine bunlar ölümcül, değişim yaratacak seviyede problemler değil. JavaScript/Node ekosistemi ne kadar güzel olursa olsun Ruby ekosisteminin bir adım ileride olduğunu hissetmem pragmatik olarak bu kararı almamda yol gösterici.


Şu anki hedefim, Ruby’de en az JavaScript’te olduğum kadar rahat olabileceğim bir seviyeye erişmek. Gelecekte neler olacağını zaman gösterecek.

Bunun haricinde, siz benim gibi daha sert bir dönüş yapmasanız bile Ruby’i incelemenizde fayda var. Bence JavaScript’i iyi bilen birisinin Ruby ve Ruby on Rails’i öğrenmesi çok kolay ve Ruby / Rails ikilisi gerçekten verimli.

Sevgiler.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.