Dünden beri şans eseri ardı ardına bir kaç makale okudum. Python'un marketing stratejisi ve Ruby ile ilgili. Hayatı hem uygulama geliştiricilere hem de hackerlara zindan eden "adı çıkmış" programlama dilleri dışındaki programlama dillerini sevmemeyi semvem aslında; zaten bir programlama dilini çok sevmek veya çok yermek ziyadesiyle anlamsız gelir bana (mesela Mehmet Java'ya toz kondurmaz, fakat "dili anlatmayı bir kenara bırak, ne yaptın kardeşim Java ile?" diye sorduğunuzda da Zemberek'i pat diye koyar masaya, "peki o zaman" dedirtir size).
Fakat böyle materyalistik düşüncelerin de sahibi olan bendeniz, Ruby'yi sevmediğime karar verdim. Tamamen duygusal bir şekilde..
Ruby, Rails gibi bir killer app ile ciddi bir kesimin dikkatini çekmiş durumda gerçekten (zamanında Perl ile web uygulaması geliştirmek zorunda kalmış olan kitleyi kurtarmış olan PHP'nin mağdurlarına ilaç gibi gelmiş olduğu bir gerçek). Öte yandan Python'cuların ilgisini bekleyen Zope, Django, Pylons, TurboGears, Subway gibi framework'lerin sayısının fazlalığı da her birinin kendi içinde küçük bir geliştirici ve kullanıcı kitlesine hapsolmasına neden olmuş, web için uygulama geliştirmenin PITA hissiyatından kurtulmak isteyenlerin beklediklerini hızla sunamamışlar ve bu da RoR'un önünü açan faktörlerden bir diğeri olmuş sanırım. Ha bir de marketing vardı değil mi. Sürekli eleştirdikleri kendini beğenmiş, ukala ve gerçekleri saptıran Python geliştiricilerinin yapamadığı ve Larry Wall tarzı şebekliklerle potansiyel developer'ına sıcak bir community ortamı sunan geliştiricileri ile yaptıkları marketing. Yanlış bir şey yapılıyormuş gibi duyulduğundan değil de, hoşuma gitmedi bu yaklaşım sadece.
Aşağıda aynı basit işi yapan iki kod parçası var, ilki Python ikincisi Ruby ile yazılmış:
for f in filter(lambda f: f(-1)>=f(1),
[lambda x:x, lambda x:x**2, lambda x:x**3]):
for x in range(-10, 11):
print x, f(x)
for f in [lambda { |x| x }, lambda { |x| x**2 }, lambda { |x| x**3 }
].select { |f| f.call(-1) >= f.call(1) }
for x in -10..10
print x, f.call(x)
end
end
Tamam, Python'da da saçma olan bir takım şeyler var ve öte yandan Ruby'nin de bazı hoşa gideceği kesin tatlı inovasyonları yok değil, fakat birisi bana yukardaki 'end'lerin ne iş yaptığını (ne iş yaptığını biliyorum elbette, neden o işi yaptıklarını anlamıyorum) ve hangi devirde geliştirilmiş ve ölmüş dillerde kaldıklarını söylesin (Ada? Eiffel? Dylan?)(dikkat retorik soruyu geçtiniz). Boşluk karakterinin sentaktik olarak anlam ifade etmesine Python'dan da alışkınız, fakat semantik olarak bir anlam taşıması da ayrı bir tat katmış (yani 'a+b' ile 'a +b'nin aynı şey olmuyor oluşu durumu). Ya da "lambda x: x" şeklinde bir anonymous fonksiyon tanımlayabilecekken "lambda {|x| x}" şeklinde bir sentaksın ekstra ne kazandırdığını anlayabileceğimi sanmıyorum (anlayabileceğimi sanıyorum aslında da, ikna olabileceğimi sanmıyorum). Gerçekten sentaktik olarak beni irite etti Ruby (ki ben AWK'ye bile bir yere kadar tahammül edebilen bir insanımdır). "Ruby: Programmers' Best Friend", peh, bu sentaksla mı. Yağ gibi akıcı okunabilir koduna rağmen bunu ukelaa dediğiniz Python geliştiricileri bile iddia etmiyorlar.
Her neyse. Bunlar elbette ve gerçekten Python Ruby'yi döver değil. Bunlar Ruby'yi tamamen **ktan bir dil haline de getirmiyorlar, sadece benim bir iki günde aklımda birikenlerden ibaretler. Fakat söylenenlerin hepsi doğru olsa ve developer community'sinin vizyonunda bunalmış bir Guido duruşu da olsa, standart kütüphanesi zaman zaman argo sözcük haznemizin tozunu da alsa genel amaçlı kallavi programlama işlerini Python ile yapmaya devam etmenin önünde hiç bir engel/alternatif yok şimdilik bence (haskell, ocaml gibi stand-by aşklarımız şöyle dursun).
Daha yazılacak bir sürü şey ve hepsine verilecek bir sürü cevap olabilir tabi.. Ama ben bu kadar. Teşekkürler.



