PYTHON NEDEN GELECEĞİN PROGRAMLAMA DİLİ DEĞİLDİR?


Bu makale yazarı Rhea MOUTAFIS’in izni ile towardsdatascience.com sitesindeki orijinalinden Volkan YOLCU tarafından çevrilmiştir. Makalede tam Türkçe karşılığı olmayan terimler ve vurgular çevirinin yanında parantez içinde verilmiştir.

Python’ın kıymetini anlamak programcılık camiasının birkaç onyılını aldı. Fakat 2010’lu yılların başından bu yana Python patlama yaşıyor – ve nihayet popülerlikte C, C#, Java ve Javascript’i geçmiş durumda.

Fakat bu trend acaba ne zamana kadar devam edecek? Sonuçta Phtyon’un yerini ne zaman ve hangi diller alacak?

Python için kesin bir tedavülden kalkma (expiry) tarihi vermek bilim-kurgu sayılabilecek, fazlasıyla spekülatif bir iddia olabilir. Bunun yerine ben Python’ın şu anda popülaritesini yükselten yeteneklerini ve bu durumu gelecekte kıracak zayıf noktalarını değerlendireceğim.

PYTHON’I ŞU AN POPÜLER KILAN NEDİR?

Phython’ın başarısı her bir gönderideki etiketleri (tag) sayan Stack Overflow eğilimlerine de yansımakta. Stack Overflow’un boyutu göz önüne alındığında bu, bir dilin popülerliğini ölçmek için oldukça iyi bir veri.

R son bir kaç yıldır yükselen bir grafik çizerken ve diğer birçok dil sürekli bir düşüşteyken, Python’ın büyümesi durdurulamaz görünüyor. Stack Overflow sorularının neredeyse yüzde 14’ü “Python” olarak etiketlenmiş ve bu eğilim giderek artmakta. Bunun birkaç nedeni var:

UZUN SÜREDİR PİYASADADIR

Python 90’lardan beri var olan bir dil. Bu sadece gelişmek için uzun bir zamanı olduğu anlamına değil, aynı zamanda büyük ve destekleyici bir kullanıcı – geliştirici ağına (community – topluluk) sahip olduğu anlamına da geliyor.

Yani Python ile kod yazarken herhangi bir sorun ile karşılaşırsanız, bunu bir tek Google araması ile çözme ihtimaliniz oldukça yüksektir çünkü aynı sorunla birileri mutlaka daha önce karşılaşmış ve yardımcı olacak bir şeyler yazmıştır.

YENİ BAŞLAYANLAR İÇİN UYGUNDUR

Onyıllardır gündemde olması bir gerçeğe daha işaret ediyor: Programcılara mükemmel dersler (tutorials) hazırlamaları için zaman da sağlamıştır. Bunun da ötesinde Python kodları kod okumaya son derece elverişlidir (human-readable).

Bir örnek olarak: Data tipini belirlemeye gerek yoktur. Bir değişkeni sadece bildirirsiniz (declare); Python içerikten (bağlamdan) bunun bir tamsayı değişken (integer) mi, kayan değer (float) mi, ikili değer alabilen (boolean) bir değişken mi ya da başka bir tür mü olduğunu kendisi anlayacaktır. Eğer C++’da programlama yapmışsanız, float bir değişken ile bir integer değişkeni yer değiştirdiğiniz (swap), yanlışlıkla kullandığınız durumlarda programınızın derlenmemesinin ne kadar sinir bozucu olduğunu biliyorsunuzdur. Ve eğer Phyton ve C++ kodlarını yan yana aynı anda okumuş iseniz Pyhton’un ne kadar anlaşılabilir olduğunu biliyorsunuzdur. Her ne kadar C++ İngilizce düşünülerek (English in mind) oluşturulmuşsa da, okunması Python koduna göre çok daha inişli çıkışlıdır (bumpy).

Pyhton: Bu intihal sayılır.
Sadece “import essay” diyerek işlem yapamazsın
Java: İkinci sayfadayım ve hâlâ ne dediğine dair bir fikrim yok
Assembly: Gerçekten İngilizce dilindeki her kelimeyi
tekrar tanımlamak zorunda mısın?
C: Bu mükemmel.
Ama bir “null terminator” eklemeyi unutmuşsun.
O yüzden şu an bir çöpe bakıyorum.
C++: Sadece bir kopya istedim, 400 değil!
UNIX SHELL: Benim bunu okumaya yetkim yok!
LATEX: Bu kâğıt ne olduğu konusunda hiçbir fikir vermiyor
ama hayatımda gördüğüm en güzel şeye bakıyorum.
HTML: Bu bir çiçek saksısı!

ÇOK YÖNLÜDÜR (VERSATILE)

Python çok uzun süredir piyasada olduğu için, paket geliştiriciler her ihtiyaç için bir paket üretebilmişlerdir. Artık Python’da neredeyse her şey için hazır bir paket bulabilirsiniz.

Sayılar, vektörler ve matrislere hükmetmek mi istiyorsunuz? NumPy aradığınız pakettir. Teknoloji ve mühendislik konulu hesaplamalar mı yapmak istiyorsunuz? SciPy kullanın. Veri analizi ve işlemesinde (manipulation) büyük oynamak mı istiyorsunuz? Pandas deneyin. Yapay zeka ile ilgili bir başlangıç mı yapmak istersiniz? Neden Scikit-Learn kullanmıyorsunuz?

Hangi bilişim sürecini – işini yürütmeye çalışırsanız çalışın, büyük ihtimalle konu ile ilgili bir Python paketi mevcuttur. Python’ın son yıllardaki makine öğrenimindeki artıştan da görülebileceği gibi bu en son üretilen yazılımlarda en üstte olmasının ana nedenidir.

PYTHON’IN DEZAVANTAJLARI (ve ÖLÜMCÜL HALE GELİP GELMEYECEKLERİ)

Buraya kadar verdiğimiz bilgilere dayanarak Python’ın önümüzdeki çağlar boyunca tüm diğer “işe yaramaz” alternatiflerinin üstünde olacağını düşünebilirsiniz. Fakat her teknoloji gibi, Python da kendi zayıflıklarına sahiptir. Bu kusurların en önemlilerini sırayla inceleyeceğim ve ölümcül olup olmadıklarını değerlendireceğim.

HIZ

Python yavaştır. Gerçekten oldukça yavaştır. Python ile bir işi tamamlamak için başka herhangi bir programlama diline göre 2 ile 10 kat arası daha fazla zamana ihtiyacınız olacaktır (Kastedilen programlama süresi değil, çalışma -RunTime- süresidir-Ç.N.).

Bunun çeşitli nedenleri mevcut. Bir tanesi dinamik değişken türlerine (dynamically typed) uyumlu olması. Unutmayın ki bu tip dillerde değişken türlerini önceden tanımlamanıza gerek yoktur. Bu da çok büyük miktarda RAM kullanımı anlamına gelir çünkü yazılım RAM üzerinde her türde çalışabilen her bir değişken için yeterli alanı ayırmak zorunda kalır. Çok fazla RAM kullanımı da çok daha fazla işlem zamanı anlamına gelir.

Bir başka neden de Python’ın aynı anda sadece bir tek görevi çalıştırabilmesidir. Bu da esnek veri türleri kullanımının bir sonucudur. Python her bir değişkenin sadece bir veri türünden olduğuna emin olmak zorundadır, ancak çoklu (parallel – multi) işlemler (processes) bu işleyişi bozabilir. Buna karşılık ortalama bir web tarayıcı aynı anda bir düzine işlemi (thread) gerçekleştirebilir.

Ancak sonuç itibariyle hız sorunlarının hiçbiri çok önemli değildir. Bilgisayarlar ve sunucular bu kadar ucuzlamışken burada konuştuğumuz süreler saniyenin onda birleri düzeyindedir ve son kullanıcı da programlarının 0,001 saniyede mi yoksa 0,01 saniyede mi yüklendiğini aslında umursamamaktadır.

KAPSAM (SCOPE)

Orijinal Python dinamik kapsamlı olarak yapılandırılmıştı. Bu basitçe şu demekti: Bir ifadeyi (expression) değerlendirmek için derleyici önce mevcut bloğu sonrasında peşpeşe tüm çağıran (çağırılan) işlevleri tarar.

Dinamik SCOPE ile ilgili can sıkıcı sorun şudur: Her ifade mümkün olan her bağlamda denenmelidir. Modern programlama dillerinin statik SCOPE kullanma nedeni budur.

Python’da da statik SCOPE’a geçilmeye çalışıldı ancak bu daha da kötü oldu. Genellikle iç SCOPE’lar (örneğin fonksiyon içinde fonksiyonlar) dış SCOPE’ları görebilir ve değiştirebilir. Python’da iç SCOPE’lar sadece dış SCOPE’ları görebilir ancak bunları değiştiremez. Bu da çok fazla kafa karışıklığı doğurur.

LAMBDALAR

(Lambda terimi ve ifadesi Python dünyasında tek satırlık ve çoğunlukla bir başka fonksiyon içinde çağrılan fonksiyonları ifade eder – Ç.N.)

Python’ın kendi içindeki tüm esnekliğe rağmen, LAMBDA kullanımı çok kısıtlayıcıdır. LAMBDAlar Python’da sadece ifade (expression) olabilir, komut (statement) olamaz.

Öte yandan değişken bildirimi (deklarasyon) ve komutlar (statement) her zaman birer ifadedir. Yani LAMBDA’lar bunun için kullanılamaz. İfadeler arasındaki bu ayırım keyfi ve diğer dillerde rastlanmayan bir ayrımdır.

GİRİNTİLER (WHITESPACES)

Python’da farklı kod düzeylerini ayrıştırmak, belirgin kılmak için boşluklar (girintiler) kullanabilirsiniz. Bu kodu görsel olarak çekici ve sezgisel olarak anlaşılabilir kılar.

Diğer diller (örneğin C++) daha ziyade parantez ve noktalı virgül kullanımı üzerine kuruludur. Bu görsel olarak çekici ve deneyimsiz yazılımcılar için çok dostça olmasa da, kodu çok daha sürdürülebilir hale getirir. Proje kapsamı büyüdükçe bu yapı daha kullanışlı olur.

Haskell gibi yeni diller bu problemi çözdüler: Boşluklar üzerinde kurulurlar ancak kullanmak isteyenler için buna alternatif bir sözdizimi (syntax) seçeneği de sunarlar.

MOBİL GELİŞTİRİCİLİK

Masaüstü bilgisayarlardan mobil akıllı telefonlara geçişe şahit olurken, mobil yazılım oluşturmak için sağlam dillere ihtiyacımız olduğu çok açık. Ancak Python ile çok fazla mobil uygulama geliştirilmiyor. Bu yapılamayacağı anlamına gelmiyor – bu amaç için Kivy isimli bir Python paketi de mevcut.

Ancak Python mobil cihazlar düşünülerek üretilmedi. Temel görevler için başarılı sonuçlar üretebilse de, doğru tercih bizzat mobil uygulamalar için tasarlanmış bir dil kullanmaktır. Bu amaçlar için React Native, Flutter, Iconic ve Cordova gibi seçenekler mevcuttur.

Açık söylemek gerekirse, dizüstü ve masaüstü bilgisayarlar önümüzdeki uzun yıllar boyunca yine hayatımızda olacaklar. Ama mobil trafik masaüstü trafiğini uzun yıllardır geride bıraktığından, Python öğrenmenin çok yönlü bir programcı olabilmek için yeterli olmayacağını söylemek doğru olacaktır.

ÇALIŞMA ZAMANI HATALARI (RUNTIME ERRORS)

Bir Python kodu önce derlenip sonra çalıştırılmaz. Aksine her çalıştırmanızda yeniden derlenir, bu nedenle herhangi bir kodlama hatası kendisini çalışırken (RUNTIME) gösterir. Bu da düşük performansa, zaman kaybına yol açar ve çokça test yapmayı gerekli kılar.

Bu yeni başlayanlar için iyidir, çünkü testler onlara çok şey öğretir. Fakat deneyimli geliştiriciler için karmaşık bir programda hata ayıklamakla uğraşmak sinir bozucudur. Bu performans düşüklüğü Python’ın üstüne bir zaman damgası (son kullanma tarihi) koyan en önemli etkendir.

GELECEKTE PYTHON’IN YERİNİ NE ALABİLİR – ve NE ZAMAN?

Programlama dilleri pazarında birkaç yeni rakip var.

>RUST, Python ile aynı türden güvenliği sunar, hiçbir değişkenin üstüne yanlışlıkla yazılamaz. Ama sahiplik (ownership) ve ödünç alma (borrowing) konseptleri ile aynı zamanda performans sıkıntısını da çözer. Aynı zamanda stackoverflow verilerine göre de son yılların en sevilen programlama dilidir (https://insights.stackoverflow.com/survey/2019#technology)

>GO, Python gibi yeni başlayanlar için mükemmeldir. Ve basitliği nedeniyle kodu korumak ve işlemek de çok kolaydır. En güzel nokta ise: Go programcıları pazarda son yılların en fazla kazananlarıdır (https://insights.dice.com/2019/10/30/top-programming-languages-that-will-get-you-paid/)

>JULIA, Python ile kafa kafaya yarışan yeni bir dildir. Büyük ölçekli teknik hesaplamalar konusundaki eksikliği giderir. Python veya MatLab kullanan programcılar genellikle eksikleri büyük ölçüde C++’dan gerekli kütüphaneleri alarak giderirler. Artık iki dil arasında hokkabazlık yapmak yerine Julia kullanabilirsiniz.

Piyasada başka diller mevcut olsa da, Pyhton’un zayıf ve eksik yönlerini gideren diller Rust, Go ve Julia’dır. Bu dillerin hepsi gelişmekte olan (yet-to-come) teknolojiler konusunda ve bilhassa yapay zekada mükemmeldirler. StackOverflow etiket sayılarında da pazar payları küçük görünse de, hepsinin eğilimi yukarı doğrudur.

Her yerde fark edilen şu anki popülaritesine bakılırsa, bu dillerden herhangi birinin Python’ın yerini alması 5 hatta 10 yıl alabilecektir. Bunun bu dillerden hangisi (ya da bu 3 dil dışında hangi yeni dil) olacağını şimdiden söylemek zor. Ancak mimarisinde temelde var olan performans sıkıntıları dikkate alınırsa, birinden birinin Python’ın yerini alacağı kesindir.

Yorum bırakın