Fazlamesai'ye soralım: 2018'de ne öğrenmeli?

7
murat

2018 de geldi, geçiyor. @butch'un "Fazlamesai'ye soralım: 2017'de ne öğrenmeli?" yazısını görünce bu konuyu 2018 için de hortlatmak gerektiğini düşündüm.

Ben öğrenecek yeni bir programlama dili arayışındayım. Şuan için seçeneklerim şu şekilde: python, go, elixir ve clojure.

Sizce 2018'de ne öğrenmeli?

Görüşler

2
kakkoyun

Gecen sene demisim ki;

Elixir, CQRS ve GraphQL, daha da zaman olursa Rust, Go, Docker.

Suan tam zamanli olarak Elixir, GraphQL, Docker kullandigim bir iste calisiyorum. Bu listeden CQRS, Rust -elimi kirletmis olmama ragmen, ogrendim saymiyorum- acikta kaldi, bayagi basarili gecmis.

Bu sene, gecen seneden eksik kalanlarin yaninda, Kubernetes, OTP ve Terraform ogrenmeyi planliyorum.

Ogrenecek programlama dili olarakta Elixir (siddetle, baya siddetle yani, hatta hemen tikla) ve Go oneriyorum.

1
murat

Yorumunu görmeden kendi trend araştırmalarımı yazmışım. Şimdi okudum, açıkçası Go ya pek ısınamadım. Elixir hoş geldi gözüme. Ama kaynak ve "her yerde işe yararlık" bakımından Python'a yanaşıyordum tam. Artıları eksileri vs sayma imkanın olur mu?

1
kakkoyun

"her yerde işe yararlık"

Ne demek tam olarak acabilir misin?

1
murat

Yani her platformda her isimi halledebilecegim bir dil demek

3
kakkoyun

Platform cok genis bir tanim. Mevzu "her platformda" (mobile, desktop, browser, embedded etc.) kolayca gelistirmek ise, sanirim JavaScript yazman gerekiyor. Son donemde Java'nin baslattigi, "Write once, run everywhere!" felsefesini hayata en guzel geciren JavaScript oldu.

Ama Alan Perlis'in cok guzel bir lafi var;

A language that doesn't affect the way you think about programming, is not worth knowing.

Buradan yola cikarsak Ruby bilen birinin Pyhon ogrenerek hayatina bir katki saglayabilecegini dusunmuyorum.

Senin bahsettigin seceneklerden, o yuzden Elixir ve Go daha degerli bence. Ruby'den sonra derlenen bir dilde gelistirme yapmak inanilmaz bir rahatlik.

Go'yu basitlik felsefesi ve yapisi, kararinda tip sistemi ve "concurreny" modeli icin oneririm. Makineye yakinligi ve hafiza takintisi benim pek asina olmadigim konseptler, bu yuzden ben ogrenmek istedim mesela.

Elixir'i yine basitligi, "parallelism" modeli, tamamen "immutable" hafiza modeli, fonksiyonel programlama paradigmasi ve zarif, mukemmel alt yapisi icin oneririm. Zamaninda @tongucyumruk'un bana Haskell icin soyledigini; (yamulmuyorsam)

Haskell ogrenmek seni daha iyi bir Java programcisi yapar.

Senin icin soyle degistirip soyleyeyim:

Elixir/Erlang ogrenmek seni daha iyi Ruby programcisi yapar.

Son olarak Elixir'de en cok sevdigim sey, dokumantasyon destegi. Elixir dokumantasyon yazimini cok zevkli ve guzel hala getiriyor ve bir nevi dilin karakterine gomuyor. Ozellikle Doctest'ler mukemmel seyler. (Bu Python'da, Rust'ta da var)

Sozun ozu gel seni Elixir'e alalim. Benden sana tam destek garantisi :)

1
murat

Süper. Beklediğim tür bir cevaptı. Elixir şuan kuruluyor, bu kadar güzel övülünce bakmazsam ayıp. :)

2
kakkoyun

Gel gel tabi, gaza gelip soyle birsey baslattim, beraber yardiririz :)

1
murat

Geldim bile. :) şöyle bir liste buldum zaten. Buradan yürürüm. @tongucyumruk Java öğren demeden Elixir'de biraz ilerleyeyim. Topluluk yok mu şuan Türkiye'de.

2
kakkoyun

Slack'te bir #Turkey kanali var ama henuz cevap alamadim :)

1
murat

elixirtr.slack.com elixir-tr.slack.com ikisi de boş göründü gözüme.

1
kakkoyun

Al dursun istersen, ama hali hazirda varolan global elixir-lang.slack.com'da kanal sahibi olmak daha mantikli geliyor :)

1
murat

Ona elixir-lang.slack.com dan invite gelmedi bir türlü, ama elixirtr.slack.com u aldım. :)

1
tongucyumruk

Uzun yillar Java'dan öcuden kacar gibi kacmis bir insan olarak tabi ki "Java ögren" demeyecegim. Java gerektigi zaman ögrenmesi cok da zor bir dil degil zaten, yeri gelince ögreenilir.

Lakin Effective Java 3rd Edition tam da taze taze cikmisken "Duzgun OOP nasil yapilir" diye anlamak adina mutlaka okunmasi gerektigini dusunuyorum.

Kendi adima, fiziksel bir kopyasi su anda ofiste beni bekliyor, Pazartesi gunu ofise heyecanla gitmek icin daha iyi bir sebep olabilir mi?

1
murat

Abi söyleyebileceğim hiç bir sebebi yok ama Java'dan ben şuan da öcüymüş gibi korkuyorum. Pek çekmiyor nedense kendine beni. Hiç bir sebebi de yok.

1
tongucyumruk

Hayati boyunca bir satir Java yazmamaya yeminli insanlar icin bile Effective Java'nin cok iyi bir kitap oldugunu dusunuyorum. Tabi ki Java uzerine bir kitap oldugu icin pek cok noktada Java dilinin veya JVM'in spesifiklerine dalsa da pek cok noktada sundugu bakis acilari yonunden ufuk acabilen bir kaynak kendisi.

1
FZ

Joshua Bloch telefon rehberi yazsa okurum. O denli.

1
butch

Dur yapma. Daha iyi seçenekler var.

1
murat

Senin bir daha iyi bir önerin var mı?

1
butch

1
murat

Nedenler de saymanı beklerim ama. :)

1
FZ

Goruyorum ve artiriyorum:

Little Typer

Type-Driven Development with Idris

1
murat

Idris kullanan var mı production ortamında acaba?

2
murat

Kısa bir araştırma ile kendi seçeneklerimi kıyaslayınca şöyle bir sonuca vardım.

Stackoverflow trendlerinde en çok kullanılan frameworklere göre arama yaptığımda python birinci iken elixir üçüncü: (go için hangi frameworkün en meşhuru olduğunu kestiremedim) so

Google trendlerine göre dillerin sıralamasında yine python birinci elixir üçüncü: google

Github trendlerine göre ise dil sıralamasında elixir birinci(dördüncü), go ikinci(on dördüncü) ve python üçüncü(yirmi dokuzuncu):

  1. Elixir - 11880 star - 22 açık issue - 696 contributor - Son commit: 18 saat önce
  2. Go - 36203 star - 3225 açık issue - 984 contributor - Son commit: 8 saat önce
  3. Python - 15206 star - 578 açık issue - 456 contributor - Son commit: 3 saat önce

Aslında github trendlerindeki rakamlar karar etkileyecek şeyler değil. :) Sadece merak edenler için paylaşayım dedim.

Kişisel olarak go ne kadar popüler olsa da syntaxını pek sevdiğimi söyleyemem.

Mühendis abilerimizin daha teknik bilgiler ile fikrimi değiştireceği ana kadar python benim en çok öğrenmek istediğim dil olacak.

Saygılarla...

3
tongucyumruk

Bilgi Universitesi Bilgisayar Bilimleri bölumunun benim gözumde en buyuk basarisi, tabi ki bölum baskani Chris Stephenson'in engin birikimi ve keskin zekasi sayesinde, daima "zamaninin ötesini" görebilmesi olmustur. Piyasada herkesin haril hari C/C++ gelistiricisi aradigi zamanda Java, herkesin Java'ya gectigi dönemde Scheme/Racket ile functional programming kullanarak "Introduction to Programming" dersini veren bu bölum her paradigma degisiminde ögrencilerini o gunun degil, mezun olacaklari gunun kosullarina göre hazirlamistir.

Bu yukaridaki grafikleri görup Python'a karar vermek biraz "hah herkes bununla ilgileniyor, ben de ilgileneyim" demek gibi olacaktir. Dogru yol, ileriyi, trendi görup kendini hazir edebilmekten gecer.

Tabi ki gelecegin trendlerini yakalamak icin Google Trends veya Stack Overflow kullanmakta yanlis birsey yok, ama neyi, neyle, nasil karsilastirdigina dikkat etmekte fayda var.

1
murat

Haklısın abi katılıyorum sana, bunlar bugünün trendleri, geleceğin trendlerini bilmek için nasıl bir yol izlenir bilmiyorum ama. Görüşün varsa bu konuda seni dinlerim. Benim bir yanım ileride JavaScript en trend ve ihtiyaç duyulan dil olacak gibi düşünürken bir yanım da Elixir, Erlang, Go, Clojure ve Scala gibi diller günümüzün PHP'si gibi her yerde olacak gibi düşünüyor. Sen nasıl düşünüyorsun bu konuda?

1
unux

Elixir, nodejs, vuejs de benim listemdekiler.

1
murat

Vue sadece bir frontend frameworku. NodeJS tercih sebeplerinizi anlatabilir misiniz?

1
unux

elixir meraktan, nodejs ve vuejs ihtiyactan ve bir de javascripte bulasasim vardi biraz ondan. yoksa elixirden daha iyi cozuyo falan diyemicem concurrency problemlerini ikisi elmayla greyfurt geliyor bana bakinca :)

1
tongucyumruk

Kotlin. Genelde JVM uzerinde Java'dan sasmam lakin Kotlin'in Groovy ve Scala arasindaki o ince cizgiyi iyi yakaladigina iliskin bazi emareler var. Java'nin JVM uzerindeki diger dillerin özelliklerini ihtiyac duydukca kendine uyarlamakta bir sakinca görmedigini de hesaba katarsak Java'nin gelecegine hizlica bir göz atmak adina faydali bir hareket olacagini dusunuyorum.

Groovy'de Spock ile test yazmayi cok sevsem de Groovy'nin dinamik bir dil olmasi biraz tadimi kaciriyordu. Kotlin'in bu konuda bir avantaj saglayabilecegini umuyorum.

Bunun disinda en önemli hedefim iki yildir bitiremedigim Vaughn Vernon'un Implementing Domain-Driven Design kitabini bitirmek. E tabi bir de Effective Java 3rd Edition cikti.

Son olarak, Meltdown icin cikarilan yamalarin sistemlere %30'a varan oranlarda performans etkisi olabilecegini dusununce 2018'in insanlarin performans konularina odaklandigi bir yil olmasini bekliyorum (umuyorum) ve haliyle bu konulardan bahsedince herkesin anmadan gecemedigi Rust ve Go'nun yanina bir de JVM platformunu ekliyorum (Evet, Ruby, Python gibi dillerle kiyaslandigi zaman JVM isik hizinda calisan bir platform)

1
murat

Evet bu meltdown olayından sonra hız önemli bir faktör olmalı seçim yapmak için. Tamamen kulaktan dolma olarak: Erlang hız konusunda efsane(y|miy)miş

1
kakkoyun

Erlang/Elixir, dinamik "runtime"'lar, Ruby/Python/Node'dan, yerine gore ve isine gore hizli gelecektir. Yine yerine gore ve isine gore "garbage collection"'da zaman harcamadagi icin, hafiza yonetimini "garbage collection" ile yapan "runtime"'lardan -mesela JVM tabanli dillerden bile- hizli olacaktir. Ve fakat unutmamak gerekir ki, Erlang Runtime System (ERTS)'de tum veri yapilar "immutable"'dir! Ne kadar senelerdir optimize edilmis bir "runtime"'da olsa, ne kadar da "immutable" yapisi belirli optimizasyonlar icin harika imkanlar saglasa da, dogasi geregi JVM, Go, Rust gibi "runtime"'lardan istatistiksel olarak genelleme yapildiginda daha yavas olacaktir.

Cok guzel orta actigin icin sunu buraya ilistirmek istedim. Ozcesi performans takintili olmamak lazim.

1
murat

Heh işte ben de bunu diyordum sağ solda. Neden o kadar hıza ihtiyacın var diye soruyordum X dili Y dilinden daha yavaş diyene. Düzgün bir cevap alamıyordum. Sunucu maliyetini büyüterek de performans arttırılır evet ama bu düşünceme şu meltdown ve spectre olayı darbe vurdu. Şimdi bu durumda "performans..." geçen karşılaştırmalarda evet haklısın diyebiliyorum.

1
ycanyilmaz

Kotlin(@tongucyumruk detayli anlatmis), Akka Streams, Flink, Apache Beam.

2
csenol

2017 de dikis makinesi alip dikis dikmeyi ogrendim. 2018 de testere ve alet edevat aldim, ilk sandalyemi yaptim. Bunu biraz daha gelistirmeyi hedefliyorum. IT/CS nereye kadar

1
murat

3
tongucyumruk

@csenol 2019:

1
FZ

Su kitabi 1989 sonuna dogru yazmaya baslayip 1991'de yayimlayan Özgen abi ile konustum gecen, Bafa Tarim Urunleri San. ve Tic. sirketinde genel mudur artik, zeytin isine girmis. @butch arkadasimizin dedigi gibi, "rol modelim!"

Kitap: C Programlama Dili

C Programlama Dili

5
ChrisStephenson

İsmim geçtiği için benden de bir yorum.

Galiba bir daha Java gibi büyük bir olay olamayacak (şüküreler olsun). Dil alanı parçalanıyor. Ve bir miktar ilerliyor.

Scripting için Python ve R. PHPve perl'den daha uygar diller. R de yarı fonksiyonel.

Büyük şirketlerin dayatmaya çalıştığı yeni diller (Swift, Go, Dart) hiç beğenmedim. Bakalım kendi ürünleri dışında bu dillerinin kullanımını yayabilecekler mi?

Bu parçalanmış durumda (ve parçalanması bence olumlu) Racket yada ML/Haskell ailelerinden ilham diller kendi ekeoljik nichelerini bulacaklar. Erlang, Elm, Rust gibi. Gelecek fonkisyonel, static typed, strongly typed ve uygar bir type systemi ne ait. Yani null pointer exception olamayacak compile timede yakalanacak.

Kritik sistemler için başka bir gelişme Turing incomplete diller olacak. Finitistic computing yapmak istediği çoğu şey rahatlıkla yapar. Bunlar Blockchain içi ortaya çıkyorlar. Başka yerlere yaybilirler. Obsidian, Simplicity, F* örneğin. Programlama dilleri konusunda Microsoft (daha doğrusu Microsoft Research, Cambridge) Google ve Apple dan daha ileri. Yani MC bir dizi aklı başında araştırmacı işe almışlar. Simon Peyton Jones başta olmak üzere.

Bütün bunlarla başetmek için ne lazım? Bir iki dil konsunda somut dil bilgisi değil. Donanım yazılım ilişkisi hakkında derin bilgi. Yani Meldtown/Spectre anlayabileceksin. Lambda calculus, typed lambda calculus, SKI combinators bileceksin. Bir kaç derin fonkisiyonel dille uğraşmış olacaksın (Racket ve Haskell örneğin). Ve ne önemlisi programlama dilleri teorsinde sağlam bir temelin olacak.

Ondan sonra her işi için en uygun ( ve kutuphaneleri, frameworkleri en uygun) dill rahatlıkla kullanırsın...

2
kakkoyun

Hocam, Elixir hakkinda goruslerinizi bilmek isterim, zamaniniz varsa.

4
tongucyumruk

Saglam bir temele sahip olduktan sonra yeni cikan her turlu ortama uyum saglamanin kolay olacagi konusuna kesinlikle katiliyorum. Bu nedenle her ne kadar Lambda calculus/SKI gibi cok teorik temellere sahip olmasa da Domain Driven Design basligini da "Dogru duzgun OOP nasil yapilir" basligi altinda eklemek lazim.

Functional programming dendigi zaman benim ilgimi en cok ceken seylerden biri FP dilleri ile tek bir problemi cozen sistemler gelistirmenin cok kolay olmasi. Buna karsilik FP ile cok alanda kapsamli fonksiyonlar yerine getiren cozumlerin nasil uretilecegi konusu genelde es geciliyor. DDD bu konuda kapsamli sistemlerin nasil kucuk parcalara bolunebilecegine iliskin oldukca iyi bir rehber olusturuyor. Bu anlamda nasil ki HtDP'de Design Recipe kavrami bize bir problemi nasil parcalayarak cozecegimiz konusunda bir rehber sunuyorsa DDD de ayni seyi buyuk capli uygulamalar icin yapiyor diyebiliriz.

Konunun OOP'ye nasil baglandigina gelince, DDD genellikle hep Java veya C# ornekleri uzerinden orneklendirilen bir tasarim yontemi. Lakin ozune baktigimiz zaman aslinda bu dillerin takip ettigi "geleneksel" OOP stiline iliskin hicbir sey DDD'de mevcut degil. Bunun yerine daha cok kapsamli bir sistemin nasil kucuk problemlere bolunecegi ve o kuculen problem alanlarinin birbirleri ile nasil etkilesime gececegi konusu uzerine yogunlasiliyor. Su anda daha fazla detayina giremeyecegim ama aslinda DDD (ve ona bagli olarak CQRS ve Event Sourcing) icindeki pek cok konsept dogrudan FP ile ortusuyor.

2
ChrisStephenson

Sayende radarıma şimdi girdi. Ne Erlang'ı ne Elixir'i doğru dürüst incelemedim. Artık listeme girdi. Kullanıyor musun? Sen ne düşünüyorsun?

3
kakkoyun

Su an calistigim sirkette ana dil olarak kullaniyoruz. Basite indirgemek gerekirse, Erlang, "distributed", "fault-tolerant", "real-time" sistemler tasarlamak icin "functional programming" kavramlarini kullanan bir dil. Elixir'de, Erlang'a birkac eklenti yazilmis, bir dil gibi. En buyuk getirdigi yenilir LISP'e benzer makrolari. Ayrica Erlang Syntax'ini biraz daha sempatik hale getiriyor, "Pipe operator" gibi ufak guzellikler ekliyor.

Cok seveceginizi dusunuyorum. Fonsiyonel programlama ile gercek hayatta web uygulamalari yazmayi inanilmaz kolay hale getirdigi icin pedogojik olarak da isinize yarayacagina inaniyorum.

Benim acimdan program yazmasi gercekten eglenceli ve sayenizde bana sezgisel geliyor.

Sagliniza duaciyim :D

1
kyilmaz80

Merhaba, ben de tez sırasında MyDLP ürününü incelemiştim. MyDLP sunucu tarafı Erlang ile yazılmış. MyDLP kısaca data-leakage-prevention ürünü, yani uç noktada veya arada veri sızıntılarını bulan sistem. Bu üründe Erlang kullanılmasının nedeni sanırım non-blocking yapıda çalışma gereksinimiydi sunucunun. Ben de Erlang'la ilk o zamanlar tanıştım; ancak tezi hızlı bitirmek için kendi bildiğim dil üzerinden gitmiştim. Ama Erlang ile bloklamasız, ürün ortamı hazır bir sunucu uygulaması yazılabilir.

2
kyilmaz80

Benim de yeni yıl listem aşağıdaki gibi.

  • Boş zamanlarda leetcode.com sitesindeki algoritma sorularını çözmek. Bildiğim diller haricinde bilmediğim dillerde de problemi çözmeye çalışmak, tek dile takılı kalmamak.
  • Ansible öğrenmek ve kullanmak.
  • Rutin işlerimi otomatik yapacak bir iş talep botu yazmak. Bununla ilgili önerisi olanlar varsa çok sevinirim (Bu kapsamda Prof. Patrick Henry Winston'in videolarına bakıyorum).
  • Python bilgimi artırmak ve ayrıca fonksiyonel bir dil (Lisp) öğrenmek (Patrick Henry Winston'un kitabına bakıyorum).
  • Django web çatısını öğrenmek.
  • Tez kapsamında hazırlamış olduğum emailrelay-dlp yi Kubernetes'e taşımak.
  • MOOC'lerimi bitirmek.
  • Introduction to Theory of Computation kitabını bitirmek.
  • Matematik bilgimi artırmak. İlk etapta Discrete.
1
murat

Çok güzel hedefler. Umarım hepsini yıl sonuna kadar tamamlayabilirsiniz. 😃

1
FZ

Bir baska ogrenilmesi gereken konu:

OPC UA

Neden? Cunku gelecegi tahmin etmenin en iyi yolu onu insa etmek. Endustriyel IoT icin ben de oyumu OPC UA baskanima veriyorum (Almanlar kazaninca biz de kazanmis sayilacagiz zira).

1
FZ

Bir baska ogrenilebilecek konu:

Cunku eski gozagrisi. 😃

Görüş belirtmek için giriş yapın...

İlgili Yazılar

Fazlamesai'ye soralım: "Hızlı Paylaş"ı nasıl sıralamalı?

butch

"Hızlı Paylaş" fazlamesai.net’in hayata dönmesi ile denemeye başladığımız bir konsept. Kendisi bir reddit, Hacker News klonu gibi görünse de bunlardan farklı bir amaca hizmet ediyor. Turistik bir bölgede bulunan, kendi dilinizde bir yönlendirme tabelası olarak görebiliriz basitçe. İşaret edilen yerleri ziyaret etmek, ziyaretiniz hakkında değerlendirme yaparak ya da basit bir oy...

Geleneksel üniversiteye mecbur muyuz?

butch

Özellikle ülkemizde, sıkça kulak misafiri olduğumuz konulardır, "Kendime uygun yüksek lisans/doktora programı bulamıyorum", "GPA'm çok düşük beni o programa kabul etmezler", "Yüksek lisansla birlikte götüremiyorum, işi bıraktım" ve türevleri. Acaba bu durumu gerçekten sorguluyor muyuz yoksa hala eski alışkanlıkların kurbanı olmaya devam mı ediyoruz.

Günümüzde...

Kodlamanın da saati mi olurmuş?!? Olurmuş...

eph

Her çocuğa bilgisayar bilimlerini sevdirecek, düşünmelerini ve hatta kendi oyunlarını tasarlamalarını sağlayacak bir platformdan bahsetmek istiyorum... code.org.. Yeni değil, bilen bilir.. 2. sınıf ve üzerindeki her yaş grubuna hitap eden farklı zorluk seviyelerinde ve farklı temalarda görevleri yerine getirme "oyun"u.. Oyun kelimesini özellikle kullandım çünkü çocuklar (öğrencilerim)...

Eski Markalar, Yeni Nesil Eğitim Araçları

butch

Bootstrap - Üniversite Öncesi Bilgisayar Bilimleri Eğitimi yazısını okuduktan sonra aklıma bu konu takıldı. Yazılım temelli bir eğitim modelinin hayatın her aşamasında faydalı olacağı düşüncesine katılmamak mümkün değil ama bunu farklı yöntemlerle (robotik, elektronik ...) geliştirmek, çeşitlilik sunarak her çocuğun dünyasına girebilmek - özellikle maker kültürü ilkokul düzeyine kadar inmişken...

Rehber: Phoenix API uygulaması #2

murat

İlk bölümünü şurada yayınladığım serisinin ikinci yazısıdır.

Bir önceki bölümde basitçe crud işlemleri yapan bir endpoint hazırlamıştık. Tabi ki sırada bir API ın olmazsa olmazı authentication işlemlerini nasıl yapacağımızdan bahsedeceğim.

Öncelikle ihtiyaç duyacağımız paketlerden bahsedelim. Ruby yazanlar ve Rails ile uygulama geliştirenler bilirler plataformatec'in geliştirdiği ve José...