Programlama dilleri ve geliştirme çerçeveleri karmaşası

3
acme

Hala emekleme aşamasında, bu işle daha çok hobi olarak ilgilenen bir yazılımcı olarak, kafamı çok meşgul eden bir durumu sizlerle paylaşmak istedim. Yazılım dünyasındaki gelişmeleri takip ederken, son zamanlarda, bu işin okulunu okumamış olmanın da etkisiyle, kendimi şekerci dükkanına girmiş çocuklar gibi hissettiğimi farkettim. Her an ilgimi başka bir yere çeken bir başka güzellikle karşılaşıyorum. Konuyla kısa bir süre ilgilenip, basit bir çalışma yapıp hemen başka bir konuya atlıyorum. Bu durum uzunca bir süredir devam etmekte. Bu kısa süreli ilişkiler CV'me işlesem ciddi bir profil görüntüsü verecek. Ama iş bir ürün çıkartmaya geldiğinde - örneğin bir web projesi - kendimi ne yapacağımı bilemez halde buluyorum. Ruby, PHP, Go hepsi için yazılmış toplamda yüzlerle ifade edilebilecek geliştirme çerçevesi var ve maalesef bu işin uzmanları arasında da bir görüş birliği yok. Özünde çoğu proje senaryosunda hangisini kulandığınızın da bir önemi yok. Ama tercihin baş ağrıtması olasılığı beni her zaman ürkütüyor.

PHP ve Go dillerini ele alalım. Bu ortamda, yapacağım bir web projesi için hangi dili tercih etmem gerektiğiyle ilgili bir anket yapsam, muhtelemen Go açık arayla galip gelecektir. Ama iş tercihe geldiğinde rakamlar ve istatistikler tam tersini söylüyor. Henüz birkaç yıllık geçmişi olan, buna rağmen sayısız çerçeve sahibi bu dilin gereğinden fazlaca parlatıldığını düşündürüyor bu rakamlar (bu dile karşı boş değilim bu arada).

Java ve Python günümüzün trend konularından machine learning alanında en çok tercih edilen dillermiş. Java web için de çok tercih edilen bir dil. Bu durumda kısa süreliğine meşhur olacak diller geliştirmek yerine, eski ama tercih edilen dillerin iyileştirilmesi için enerji harcamak daha akılcı olmaz mı? Bunun önünde bir engel mi var?

Bir de dönem dönem Lisp'e ve Haskell'e methiyeler düzme durumu var. Aslında yaygın anlamda kimsenin gerçek bir iş için kullanamadığını hissettiğim bu dillerin, birilerinin elini kirletip iyileştirip, yaygınlaştırması ihtiyacı olduğunu görüyorum.

Özetle; Neden bu kadar çok programlama dili ve geliştirme çerçevesi var? Emektar diller gerçekten işimizi görmüyor mu? Bir dili diğerinden üstün yapan şey nedir? Dil tercihi bir moda konusu mudur?

Yorumlarınız için şimdiden teşekkürler.

Görüşler

0
auselen

Ben oncelikle cerceve olayina takildim. "geliştirme çerçeveleri" dense bile "development frame" gibi birsey oluyor. "Mantik cercevesi" "Logical framework" olabilir ama "Development Framework" daha cok "Gelistirme temel yapilari / iskeletleri" degil mi?

0
FZ

Bir ara "çatı" da deniyordu ama halen yaygin kullaniliyor mu, bilemedim.

0
FZ
  • "Neden bu kadar çok programlama dili ve geliştirme çerçevesi var?"

Soruya soru ile cevap vereyim mi? -> Neden bu kadar cok insan dili var? Bazen de bazi dil yaraticilari bazi seylerin farkinda olmayabiliyor. Mesela Groovy'yi gelistiren James Strachan'in dedigi gibi:

I can honestly say if someone had shown me the Programming Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I'd probably have never created Groovy. 
  • "Emektar diller gerçekten işimizi görmüyor mu?"

Goruyor. Mesela C programlama dili kullanarak halen Linux'a her sene yeni ozellikler ekleniyor. Bir baska ornek olarak USENIX Dosya ve Depolama Teknolojileri Konferansi 2016'daki makalelerdeki yazilimlarda kullanilan emektar dillere bakabilirsiniz. Veya INTEL'e bakalim, halen Fortran derleyicisi gelistirip satiyorlar. Diger yandan gunumuzde universiteye baslayan pek cok ogrenciden biraz daha yasli Java dili halen milyar dolarlik sistemlerde kullaniliyor, kolay kolay bir yere gidecegi de yok. Benzer sekilde Java'dan birazcik daha yasli olan Python da yuzbinlerce kisi tarafindan yiginla projede basarili sekilde kullaniliyor. Onun da kolay kolay bir yere gidecegi yok (diger yandan son birkac otel rezervasyonumu yaptigim booking.com halen epey Perl kullaniyor).

  • Bir dili diğerinden üstün yapan şey nedir?

Kime gore, neye gore? Basit bir "ustunluk" tanimi yapabilsek ne guzel olurdu. Ama duruma gore, ekiplere gore ve baska pek cok seye gore degisiyor.

  • Dil tercihi bir moda konusu mudur?

Hangi matematik alanlarinin daha populer hale geldigi, fizikte hangi konularda daha cok arastirma yapildigi bir moda konusu mudur? Kimine gore evet. Zira insan faktoru, ekonomi faktoru ve sonuc itibari ile hayat. Ve bunda da bir kotuluk yok. Ekonomi bizi sekillendiriyor, sonra da biz ekonomiyi sekillendiriyoruz. Tek bir kurum asiri guclenip de fiili olarak bazi seyleri dayatir hale gelirse o zaman biraz uzucu olabiliyor ama teknolojik acidan o tur durumlarda bile epey manevra payimiz var. Simdilik.

0
tongucyumruk

Bana kalırsa "Neden bu kadar çok programlama dili ve geliştirme çerçevesi var?" sorusunun cevabı "Neden bu kadar çok insan dili var" sorusuna o kadar da yakın değil. Doğal diller zaman içinde, bildiğim kadarıyla birkaç "kök" dilden, insan gruplarının coğrafi olarak birbirinden ayrılması sonucunda evrilmiş yapılardır1. Bu anlamda insan dillerinin bu kadar farklı şekillerde evrilmiş olmasının altında genelde yatan sebep farklı gruplar arasındaki iletişimin kesilmiş olmasıdır. Günümüzün iletişimden geçilmeyen toplumunda programlama dillerinin bu şekilde birbirinden bağımsız olarak evrilmesinin pek mümkün olduğunu düşünmüyorum.

Groovy/Scala konusuna bakacak olursak ilk bakışta bir iletişim eksikliği varmış gibi gözükse de Odersky'nin Scala'yı tasarlarken Groovy'deki fikirlerden etkilenmemiş olduğunu düşünemeyiz. Bu anlamda Scala'nın Groovy'nin yaratıcısını da etkilemiş olması çok da sürpriz olmamalı bence.

0
tongucyumruk

Şimdilik bunu şöyle bırakayım. Daha sonra detaylandırırım bu konudaki düşüncelerimi:

Uncle Bob - The Churn

0
FZ

Bob amca gene vermis 'straw man'i, vermis coskuyu.

0
simendiferlerin

Bob amca dediniz ve ben geldim. Yine her zamanki "yolun sonuna geldik" tezi.

0
auselen

Isin komik tarafi her dakika karsilastigimiz bir problem.

"Java'da pair/tuple yok - yoksa var mi?", keske bu projeyi Python ile yapsaydim, ama en son python ile yapmaya calistigimda anlamsiz bir "segmentation" almistim. Ruby'i denemek icin iyi bir firsat olabilir. Hmm, acaba virtual-env/pip gibi birsey kullanmak gerekecek mi? Deployment'i zor olur mu? Ruby, icin bi sablon hazirlasam, herkes kullanir - ama o da en az bir gunumu alir, ustelik sadece hazirlamasi, sonra ugras dur diger problemlerle sonrasinda. Herseyi scala mi yapsak? Onunda sadece binary-compability problemleri canimiza yeter. Herkese scala ogretmeye calismak da herhalde en eglenceli donemimizi yasatir. "Nee yeniden mi C++?". Yinede node/javascript deliliginden iyi olabilir. Frontend-cilerin dunyayi ele gecirme cabasi. Komple bu sektorden ciksam mi ne? Bir oyun gelistirme sirketine girip pipe-line ne ise, onunla yasarim. Ya da embedded, Android'e geri donus. Yok yok, en iyisi yeni-cesur-dunya'yi kucaklamak.

0
FZ

Neyse ki mevcut bir projeye dahil olunca bu tur dertler olmuyor (mevcut proje derken birkac yildir gelistirilen, araci, iviri ziviri belirlenmis sistemleri kast ediyorum). Sifirdan bir seylere baslama asamasinda karsilasilan bir gerilim var tabii ama yazilim islerinin cogu da mevcut sistemlerin bakimi, bunlara ek yapilmasi falan filan.

Komple bu sektorden ciksam mi ne?

20 kusur sene calismanin ardindan bazen benim de sordugum bir soru :)

0
auselen

mikro-servis mimarisiyle onu da cozduler. artik ayni sistem icinde farkli catilar, sistemler kullanabiliyoruz ;)

sektor derken programciligi kastetmiyorum tabi ki. programcilik super, ama surekli komunikasyon, bankacilik, vs gibi sektorlerden cikip baska alanlara oyun, sanat, eglence, gazetecilik vs gibi kastediyorum. yine de 20 sene cokmus yaw :)

0
FZ

mikro-servis mimarisiyle onu da cozduler. artik ayni sistem icinde farkli catilar, sistemler kullanabiliyoruz ;)

Bazen de kullanamiyoruz, misal "buyur, filanca sistemin yonetim yazilimi, su hatalari giderip, bu ozellikleri eklememiz gerekiyor 6 icinde. Buyur bu da 400.000 satirlik Python kod tabani," dediklerinde karsilastigim durum gibi. Ne mikroservisi? Yok oyle bir sey :)

Bazen gene kullanamiyoruz, misal "buyur, falanca ESA sistemi, buyur birkac yuz sf.lik PDF dokumantasyon ve 10.000lerce satir C kodu, simdi filanca yeni gorev icin alete X, Y, Z ozelliklerini eklemen gerekiyor," dediklerinde oldugu gibi. Ne mikroservisi?

yine de 20 sene cokmus yaw

Su anda yazismakta oldugumuz sitenin arsivi nerede ise 15 senelik :)

0
auselen

Her tarafinizi danismanlar sarip hype 2.0 gucuyle uzerinize yuruyup, uzerlerinize javascript mizraklari atmiyorlar yani :)

Saka bir yana, israfi cok ama, rest tabanli mikro-sistemler fena olmuyor. keske bu yuzlukleri birlestirebilecek tek bir guc olsa da dagitik mimarileri idare etmek bu kadar zor olmasa.

bana programlama yapmak calismak gelmiyor dogrusu, eve gitsem de ayni seyi yapiyor(dum|um|olacagim), dogal olarak seneleri buyutmeyelim. para alip angarya yetistirmek is sayiliyor. iste bi kac sene oldu :)

0
FZ

Her tarafinizi danismanlar sarip hype 2.0 gucuyle uzerinize yuruyup, uzerlerinize javascript mizraklari atmiyorlar yani :)

O tur mizraklarla uzerime gelindiginde -> ben.

1
tongucyumruk

Evet, biraz gecikmeli de olsa cevabımı esirgemeyeyim.

Aslında tüm "neden bu kadar çok X var" sorusunun cevabı genellikle aynı oluyor: İhtiyaçtan. Programlama dillerinin gelişimine bakarsanız genelde bir dil patlaması yaşanan dönemler ile teknolojik bir takım değişikliklerin örtüştüğünü göreceksiniz. Örneğin:

  • Bilgisayarların bilimsel araştırmalar için kullanılmaya başlaması -> Fortran, Lisp, APL ve benzeri "bilimsel notasyona yakın diller"in ortaya çıkışı
  • Birbiriyle alakasız/uyumsuz pek çok donanım mimarisinin ortaya çıkışı -> C (bir yüksek seviye assembly dili olarak)
  • Bellek miktarının artması/çöp toplamanın mantıklı hale gelmesi -> Python, Java, Ruby vs...
  • Web tarayıcı içinde çalışan uygulamaların yaygınlaşması -> JavaScript, JavaScript'e derlenen diller (CoffeeScript, Elm, Dart, TypeScript vs...), CSS, CSS'e derlenen diller
  • Çekirdek sayısının artması, concurrency'nin önem kazanması -> Fonksiyonel paradigmalar, Node JS, Go

Eğer dikkatli bakacak olursanız göreceğiniz üzere bu diller genellikle farklı ihtiyaç alanlarını karşılayan diller ve aynı ihtiyacı karşılayan diller arasında da bu ihtiyacı nasıl karşıladıkları ile ilgili ciddi farklılıklar var (mesela Node vs Go). Bu da bizi ikinci noktamıza getiriyor: Neden bu kadar çok sayıda ve farklı programlama çerçevesi var? Aslında aynı sebepten.

Örneğin, web uygulamalarını ele alalım: Bir web uygulaması geliştirmenin birçok farklı yolu var. Ruby On Rails'ten Java/Scala ile Play framework üzerinde geliştirmek veya Go ile bir microservice backend yazıp üzerine Elm ile UI yazmaya kadar pek çok farklı ihtiyacı karşılayan pek çok farklı model sözkonusu. En önemlisi de Python/Django ile gerçekleştireceğiniz bir "monolith" proje ile bu sayılan dillerin hepsini kullanan bir "microservice" projesinin gerek teknik, gerekse yönetimsel ihtiyaçları genellikle birbirinden çok farklı oluyor. Bir yazılım geliştirici olarak bu konuda edinilebilecek en önemli yeti de hangi durumlarda hangi araçları kullanmanın doğru olduğuna objektif olarak karar verip onları kullanmak için gerekli argümanları oluşturabilmek oluyor (çünkü genellikle sadece sizin bu en doğru çözümü bulmanız yetmiyor, bir de çevrenizdeki insanları ikna etmeniz gerekiyor).

Kısacası pek çok dil, pek çok çerçeve var ve bunlar sanılanın aksine X kişinin egosunu tatmin etmek veya Y kişisinin fikirlerini zorlaması sebebiyle değil gerçekten bir ihtiyacı kasıdığı için ortaya çıkıyor. Bu noktada bir geliştirici olarak kendini şekerci dükkanında hiseetmemek tabi ki mümkün değil. Bu konuda da pek çok araç ile pek çok ikücük proje geliştirmenin yanlış bir yöntem olduğuna inanmıyorum. Zira bir geliştirici içinde bulunduğu yazılım ekosistemini ne kadar iyi tanırsa ileride ihtiyaçlar kendini gösterdiği zaman doğru aracı kullanmaya o kadar hazır olacaktır. Bu illa ki her araçta uzman olmayı gerektirmiyor, ama bir fikir sahibi olmakta her zaman fayda var. Kişisel olarak ben bunu geliştirme işlerimi ikiye bölerek yapıyorum: Üzerinde ciddi şekilde çalıştığım projelerde (mesela iş sebebiyle vs...) en uygun aracı kullanmaya çalışıp onunla devam ediyorum. Bir yandan da boş vakitlerimi yeni, ilginç bulduğum teknolojilerle küçük deneyler yaparak geçiriyorum.

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