Python’ın Gerçek Süper Gücü
(youtu.be)Bu, HYNEK Schlawack’ın PYCON UK 2025’te yaptığı "Python’ın Gerçek Süper Gücü" başlıklı keynote konuşmasının özetidir.
Konuşmacı, sunuma başlamadan önce kariyerini kısaca tanıttı ve özellikle PyCon topluluğunda 14 yıl boyunca yer alırken deneyimlediği "nefret dolu dostluk"tan söz etti.
Python 2’den 3’e Geçiş (The Python 2 to 3 Migration)
- Arka plan: Python 3.0 ilk olarak 2008’de yayımlandı; genel kullanıma sunulmuş bir sürümden çok, Python’ın hedeflerini göstermek ve geri bildirim almak için tasarlanmıştı. Python 3.2’den itibaren kullanımı önerilmeye başlandı.
- Başlıca değişiklikler:
- String işleme: Python 3, varsayılan string türünü makine dostu byte’lardan insan dostu Unicode’a çevirdi.
- Örtük davranışların kaldırılması: Python 2’de mümkün olan string ve sayı karşılaştırması gibi, geliştiricilerin fark etmeden bağımlı hale geldiği birçok örtük davranış kaldırıldı. Bunlar, hata ayıklaması zor bug’lara yol açıyordu.
- Uluslararasılaştırma iyileştirmeleri: Python 2 kod tabanları Unicode decode hatalarıyla doluydu; Python 3 bunu iyileştirerek dili daha uluslararası hale getirdi.
- Geçişin zorlukları:
- Topluluk maliyeti: Tüm ekosistemi Python 3’e taşımak çok büyük bir maliyet doğurdu. Çok sayıda yazılımın taşınması gerekiyordu ve o dönemde test kapsamı yaygın değildi.
- Karma kod tabanı geliştirme: Hem Python 2 hem Python 3 üzerinde çalışan hibrit kod tabanlarının nasıl yazılacağına dair uzlaşı ancak Python 3.3’ün çıktığı 2012’de oluştu.
- Dil moratoryumu: Python 3.0 ile 3.3 arasında neredeyse hiç yeni özellik eklenmediği için geliştiricilerin Python 3’e geçmek için güçlü bir motivasyonu yoktu.
- Belirsizlik: Python 3’ün baskın sürüm haline gelip gelmeyeceği belirsizdi; Perl 6 örneğinde olduğu gibi başarısız olma ihtimali de vardı.
- Python’ın hayatta kalma nedenleri:
- Yeni kullanıcı akışı: Python, diğer dillerin (Go, Rust vb.) büyüdüğü dönemde, kaybettiğinden daha fazla yeni kullanıcı kazandı.
- Bilim ve mühendislik topluluğu: Bilim insanları ve mühendisler uzun süredir Python kullanıyordu; 2010’ların ortalarından itibaren veri bilimi alanında Python’ın popülaritesi hızla arttı. Bugün Python kullanıcılarının yarısından fazlası Python’ı veri keşfi ve işleme için kullanıyor.
- Mevcut ekosistem: NumPy gibi güçlü bilimsel hesaplama kütüphanelerinden oluşan bir ekosistem zaten vardı.
- Diğer derlenen dillerle kolay etkileşim: Python, diğer derlenen dillerle kolay etkileşime girdiği için C, C++, Fortran ve Rust ile yazılmış yüksek performanslı bileşenleri birbirine bağlayan bir "yapıştırıcı" görevi görebilir.
- Keşif odaklı programlama: Python, etkileşimli shell (REPL) ve Jupyter Notebook gibi araçlar sayesinde keşif odaklı programlamaya çok uygundur.
- Kademelilik (Graduality): Python, farklı katılık düzeyleri sunar. Geliştiriciler deney aşamasında esnek çalışabilir, production aşamasında ise type hint, linter ve test gibi araçlarla katılığı artırabilir. Ayrıca Jupyter Notebook’ta başlayıp bir web servisine genişlemek gibi farklı kullanım senaryolarına da uygulanabilir.
Python’ın Gerçek Süper Gücü: Kademelilik (Graduality)
- Python, yalnızca giriş eşiği düşük bir dil değil; aynı zamanda ihtiyaçlara göre esnek biçimde yararlanılabilen birden fazla yüksek tavan sunar.
- Kademeliliğin iki yüzü:
- Olumlu tarafı: Kullanıcılar istedikleri katılık ve karmaşıklık seviyesini seçebilir. Örneğin script yazarken type hint kullanmadan özgürce kod yazabilir, büyük uygulamalarda ise sıkı tip denetimi uygulayabilirler.
- Olumsuz tarafı: Sisteme özel durumlar veya istisnalar eklemek, kısa vadede tek tek kullanıcılara kolaylık sağlar; ancak uzun vadede sistemin genel karmaşıklığını artırır. "Kolay olan her zaman basit değildir" vurgusu yapılır ve bunun Python’ın paketleme yaklaşımında görüldüğü belirtilir.
Paketleme Sorununa Bir Örnek (Packaging Problem Example)
- Python uygulamalarını yapılandırmanın iki yolu vardır: 'ad hoc' yaklaşım ve 'paket' yaklaşımı. Paket yaklaşımı daha iyi tanımlanmıştır ve araç desteği yerleşiktir; ancak tarihsel nedenlerle ad hoc yaklaşım da desteklenmeye devam etmektedir.
- Bu durum
sys.pathgibi sorunların anlaşılmasını zorlaştırır;pip install --usergibi özellikler ise global namespace üzerinde sorunlar yaratarak hata ayıklamayı güçleştirir. - UV gibi yeni araçlar başlangıçta yalnızca paket yaklaşımını destekledi, ancak sonunda ad hoc projeleri de desteklemek zorunda kaldı ve bu da karmaşıklığı artırdı.
- Bu tür "çekici baş belaları (attractive nuisance)" kısa vadeli kolaylık sağlar; ancak uzun vadede topluluğa ciddi bir maliyet yükler.
Yazılım Mimarisi (Software Architecture)
- Python topluluğunda yazılım mimarisi üzerine yeterince konuşulmadığını belirtiyor; bunun nedenleri olarak da "enterprise pattern"lara karşı tepkiyi ve "Java’ya dönüşme korkusu"nu gösteriyor.
- Gereklilik: Karmaşık yazılım sistemleri kurmak ve bakımını yapmak için modülleri, katmanları ve etkileşimleri düzenleyip yönetmeye yönelik yazılım mimarisi tartışmaları önemlidir.
- Çözüm:
- Python topluluğu, tartışmaları "pythonic" veya "unpythonic" gibi terimlerle kapatmaktan kaçınmalıdır.
- Diğer dil topluluklarının iyi uygulamalarını (ör. domain-driven design) öğrenip uygulamalıdır.
- Daha fazla insan yazılım mimarisiyle ilgili bilgisini paylaşmalı, ilgili içerikler üretmeli ve çözümlere odaklanmalıdır.
Sonuç (Conclusion)
- Python konusunda kaygılanmak yerine, Python yazmanın farklı yollarını benimsemek gerekir.
- Yeni stilleri ve araçları deneyerek düşünme biçimimizi genişletmeliyiz.
- Seçeneklerin bir maliyeti vardır; bu yüzden belirli bir özelliğin tüm topluluk üzerindeki etkisi dikkatle değerlendirilmelidir.
- Basit olanı kolaylaştırmanın yanında, karmaşık olanı mümkün kılmaya da daha fazla emek verilmelidir.
- Yazılım mimarisi hakkında daha fazla konuşulmalı ve Python’ı daha iyi bir geleceğe taşımak için dogmatik düşünce biçimleri sorgulanmalıdır.
Bu sunum, Python topluluğunun geçmişini, bugününü ve geleceğini kapsıyor; dilin gerçek gücü olan "kademelilik"i vurgularken topluluğun karşı karşıya olduğu sorunlara ve aşması gereken kültürel engellere dair derinlikli içgörüler sunuyor.
Videoyu izlemek için şu bağlantıya bakabilirsiniz: https://youtu.be/gDvwRpl9erE
3 yorum
uv tarzı modern bir paket yöneticisi standart hâline gelirse çok daha rahat olur gibi geliyor ama herhâlde zor, değil mi..
Lisansın ilk yıllarında python 2 kıl payı daha yaygındı; mezun olmaya yaklaştığımda ise herkesin python 3’e geçtiğini hatırlıyorum.
Kodlamayı meslek olarak yapan biriyseniz, ağırlıklı olarak Python kullanıyor olsanız bile çoğu durumda en az bir başka dili daha biliyorsunuzdur.
Python’ın daha iyi hale gelmesi gerektiği söylenerek başka dillerin özelliklerini ya da karakteristiklerini sürekli içine katmaya çalışılmasını anlayamıyorum.
Python’ın eksik görülen yanlarının, aslında onun popüler olmasının nedenlerinden biri olduğu gerçeği göz ardı ediliyor gibi geliyor.
Python giderek tuhaf biçimde daha karmaşık ve daha uğraştırıcı hale geliyor.
Sanki Python kullanmanın avantajları ortadan kalkıyor gibi.
Python’ı Java gibi yapmaya çalışmak yerine, ihtiyaç varsa doğrudan Java kullanmak daha doğru olmaz mı diye düşünüyorum.
Java olmazsa Kotlin de var, Scala da var.
Ama yine de Python’ın yok olacağını sanmıyorum.
Çünkü bu kadar pratik şekilde kod yazdıran başka bir dil fiilen yok.