Python mı kullanıyorsunuz? İkna etmek için nedenleriniz?..
Merhaba sevgili okurlar,
Ben yıllardır -neredeyse araştırma yaşamıma başladığımdan beri- MATLAB kullanıyorum. MATLAB, bilimsel programlama için biçilmiş kaftan. Fakat sık sık Python'a geçsem ne de güzel olur diye sıçramalar yaptım. Bir kısmında başarılı oldum. Örneğin bir dönem aldığım derslerin projelerini hep Python'da yaptım. Fakat iş bilimsel programlamaya ve yazdığım MATLAB kodlarını Python'da tekrar yazmaya gelince çok zorlandım. Dayanamayıp vazgeçtim. Ama yine ve yeni bir motivasyonla tekrar bu işe dalmayı düşünüyorum. Kendimce nedenlerim şöyle:
- Python bilimsel hesaplamalar için yeterli bir dil. Numpy, Scipy, matplotlib, IPython gibi kütüphane ve araçlarla MATLAB'ın temel işlevlerini görebiliyor.
- Python özgür. Üniversite içindeyken MATLAB lisans erişimi var ama sonrasında ne olacak?
- Her ne kadar şu anki araştırmalarım araçkutusu gerektirmese ve temel matris ve olasılık kütüphaneleri ile yapılabilse de yapay öğrenmeden sinyal işlemeye birçok kütüphane var Python'da.
- MATLAB'ın aksine genel kullanım için uygun bir dil. Günlük betik (scripting) işlerinizi de MATLAB ile yapabilirsiniz ama bu çiviye balyozla dalmak gibi oluyor biraz. Python bu işler için biçilmiş kaftan. Bunun yanında web uygulaması (Django) veya arayüz tasarımı (PyQT) için de harika.
- Python yazanlar yeni programlama paradigmalarıyla daha hızlı tanışıyor. MATLAB ile ise biraz tavşanın suyunun suyu durumu var. Örneğin yılların nesne tabanlı programlaması bile MATLAB'de bi' güdük yapılıyor. Diyebilirsiniz ki, nesne tabanlı yazmaya ne gerek var, anlayışla karşılar ve kaçarım.
Sizin önerileriniz nedir, çok merak ediyorum. Mesela neden MATLAB kullanıyorsunuz? Ya da neden Python kullanıyorsunuz? Birini ötekine neden tercih edersiniz? Siz benim yerimde olsanız nasıl bir yöntem izlersiniz?
Not: Python ve MATLAB özelinde fikir belirtirseniz çok sevinirim. Octave, R, vb. bu yazının ve benim ilgi alanım kapsamında değil. Araştırmacıların ne düşündüğünü ve nasıl bir çalışma içinde olduğunu gerçekten merak ediyorum.
5 yorum
MATLAB tek bir is yapiyor (bilimsel hesaplama), onu da cok iyi yapiyor.
MATLAB'da ozellestirmenin getirdigi avantajlar var. Kalkip web uygulamasi yazilmaz (gerci yazan taniyorum) ama matris transpozu almak bi tirnaga bakar. MATLAB kullanarak matematiksel ifadeleri cok hizli koda donusturebilirsin. Cemaati cok genis, cok insan kullandigindan yardim almasi kolay, kodun hazir yazilmisini bulmak kolay. Kendi icinde tutarli, PHP gibi birsuru konvansiyonun bir araya gelmesinden ibaret bir corba degil. IDE'si cok guzel, cogu kisinin oneminin farkinda olmadigi debug, profile islemleri cok kolay yapilabiliyor. Bu nedenlerden seviyorum ben MATLAB.
Sevmedigim taraflari da var tabi, onlar hakkinda da bir iki saat soylenebilirim herhalde ama degmez. O vakti yillardirsizlandigim C++ hakkinda soylenmeye harcarim daha iyi.
Ben kendi adıma bilimsel hesaplama gerektiren yerlerde Matlab, interaktif geliştirmeler yapacağım zaman Python kullanıyorum, fakat Python'da yeniyim zaten bilimsel hesaplama kısmını pek araştırmadım. Birini diğerine tercih etmektense sorunun ne olduğuna bakıp ona göre çözüm düşünmek daha iyi diye düşünüyorum. Örneğin ben senelerdir Java kullanıyorum fakat dört işlemin ötesine geçtiğimde Matlab kullanmayı düşünürüm, aynı şekilde kırk yıl düşünsem Matlab ile bir web uygulaması yazmak aklıma gelmez.
Doktoranin sonuna geldim sayilir ve bugune kadar tum ihtiyacimi Matlab ile karsiladim. Bahsettigin gibi ozgur olmamasi okul disinda sikinti yaratacak bunun da farkindayim. Ki bazen okul icinde bile yaratabiliyor. Bu yorumu yazmadan 10dk once adminlere mail attim, Signal Processing Toolbox'inin max kullanici lisansi sayisi doldugu icin kullanilamiyordu, lisans sunucusu hata veriyor. Basit bir filtre islemini bile yapamaz durumdayim su an. Bu acidan bakildiginda evet mantikli Python'a gecmek. Tabii eger cok spesifik, yalnizca Matlab ile yapilabilen bir isle ugrasmiyor isen. @baris_evrim'in dedigi gibi bazi islemler de Matlab'da cok cok kolay. Mathworks'un File Exchange sitesinden de birkac kez yararlandigim oldu. Ama ayni yardimi Python topluluklarindan da almak mumkun diye tahmin ediyorum.
Matlab kullanmak icin bir diger onemli neden (benim icin) Simulink. Onun yaptigi isi yapacak bir program malesef ki bilmiyorum. Sistem modellemesinde cokca kullaniyorum. Ayni model Matlab'da elle yazarak da yapilabilir. (terorik olarak mumkun) Fakat pek de akil kari olmaz.
Matlab/Simulink'i her isi gorebilecek sekilde donatmak istedigimizde toolboxlara harcanacak para da hic azimsanmayacak derecede. O acidan Python gibi bir alternatif gayet iyi olur. Python hakkinda yorum yapacak arkadaslarin yorumlarindan ben de birseyler ogrenmeyi bekliyorum.
Birileri oturup Python ile Simulink esdegeri bir platform gelistirse ne de guzel olur. Blender'in Node Editor modu gibi bir altyapi ile cok da guzel olabilir.
Python ile ilgili yorumlari ben de bekliyorum.
"Hangi Dil?" tartışmasının en meşhur flame warları başlatabildiğini hatırlatarak başlıyorum :)
Ben herhangi bir dilin taraftarı hiç olmadım sanırım. Soruna göre dil seçmek gerek. Mesela en stressizi büyük IDEleri (eclipse) kullanmak, zira arkalarında ve eklemlenebildikleri diğer birçok dilde olmayan araçlar var. Version Control, Time tracking, Bug Management, Code Review, vs vs.
Ama "one shot" şeyler için durum değişiyor.
Bu yüzden bence Matlab bir teknik hesaplama platformu olarak hala mantıklı. Evrim'in blog yazına yazdığı bütün noktalara katılıyorum.
Ancak bana kalırsa Matlab'ın bir programlama dili olarak önemli sorunları var.
1. Bir kere type declaration yok.
2. Fonksiyonlar arası değişken paylaşmak bir işkence.
6. 1 ve 2 nedeniyle refactoring çok zor.
3. Alıştığımız geliştirme araçlarını, yani emacs, vim, git, eclipse, vs. gibi araçları kullanmaya pek müsait değil.
4. POSIX environmentlarında, veya diğer başka dillerde dikkat edilen bazı fonksiyon adlandırmalarına uymuyor. örneğin geçen gün external bir uygulama çalıştırıp arkaplana atmak istedim, bunun için system fonksiyonunu hatırlıyordum. ama blocking olduğunu da biliyordum. help system yazıp öğrenmeye çalıştım ancak nafile. halbuki linuxta veya python'da exec ve türevleri var. bunlarla çalıştırdığınız processin stdout ve stderr gibi çıktılarını zevkinize göre yönlendirebiliyorsunuz.
a. buna başka bir örnek echo fonksiyonunun yapısı aşağıda. normal olarak echo'nun argümanlarını stdout'a yazmasını beklersiniz. ne yazık ki DOS'ta kalan ECHO komutuyla karşılaşıyoruz.
>> help echo
ECHO Display statements during function execution.
ECHO ON turns on echoing of commands inside Script-files.
ECHO OFF turns off echoing.
ECHO file ON where 'file' is a function name causes the
named Function-file to be echoed when it is used.
ECHO file OFF turns it off.
ECHO file toggles it.
ECHO ON ALL turns on the echoing of commands inside any
Function-files that are currently in memory (i.e., the
functions returned by INMEM).
ECHO OFF ALL turns them all off.
See also FUNCTION, SCRIPT.
Reference page in Help browser
doc echo
5. 4'ün hatırlattığı: documentation'ı açık değil. bazen eksik. documentation'ın structure'ı belirsiz. sanki yeni yazılmaya başlamış bir dil kadar zayıf.
Bu saydıklarım bazen geliştirme hızını çok fazla baltalıyor.
Sanki programlama çok da bilmeyen bilim insanları için yazılmış gibi. Bazı şeylerin tek satırda yapılabilmesiyle övündüğümüz ama bir yandan da software engineering için hiç uygun olmadığını bildiğimiz popüler bir dil vardı eskiden, Perl. Çok iyiydi güzeldi ama büyük çaplı şeyler için uygun değildi.
Neyse, yine de Python da çok iyi bir seçenek değil gibi. Zira her ne kadar çok fazla librarysi olsa da, saydığım bazı dil sorunları onda da var. explicit type declaration yok, blockları boşluklarla belirliyor vs. Nedense ısınamadım, ısınanlar vardır tabii. Gerçi bunları yazarken artık scripting işleri için perl'den python'a ve bash'e geçtiğimi de not etmem lazım.
Dağınık yazdım kusuruma bakmayın.
Ben de yaklaşık 2-3 yıldır Matlab'ı yavaş yavaş terk ediyorum.
Python'un açık kaynak olması ve lisans kısıtlaması olmadan istediğiniz kadar makinada paralel çalıştırılabilmesi en önemli avantajları, hele ki AWS veya ulakbilim gibi hizmetlere ulaşmak bu kadar kolaylaşmışken. Bi de Ipyton var, internet tarayıcısı üstünden bir nevi Python defteri.
http://ipython.org/
Araştırmalarda ara notlar almak için çok işime yarıyor.
Matlab'ın bizim alanda (Elektrik Müh) şu an için rakipsiz olduğu alan Simulink ve donanımla iletişim sağlayan bazı özelleşmiş araçları.