Python öğrenmek istiyorum ama nasıl?

python2-300x239Şimdiye kadar bir çok kez Python öğrenmeye başlayan insanlardan nereden başlayacakları ve nasıl devam edecekleri konusunda sorular aldım. Soruların hepsini dilim döndüğünce cevapladım. Sonra bu soruların içeriğinin genel anlamda çok benzer olduğunu fark edip bu konuda herkese ayrı ayrı cevap vermektense -hem de bütünlük ve kolay erişebilirlik olması açısından- böyle bir yazı yazmaya karar verdim.

Genel olarak sorulan soruları toparlayıp olayın “bence”sini anlatayım sizlere.

Programlamaya yeni başlayan biri için Python uygun bir seçim midir?

Evet uygun bir seçimdir. Burada öncelikli olan programlama mantığını oturtmak. Bu kısım dil bağımsız bir olaydır aslında. Yani algoritma oluşturma mantığını kavrayabilmek herhangi bir programlama dili ile doğrudan ilgili bir olay değildir. Pseudo code yazarak da algoritma mantığını oturtabilirsiniz. Yani programlamaya başlamak için yeter koşul bir dil bilmekten öte algoritma oluşturmayı bilmektir. Python ise bu aşamayı gerçekleştirirken kullanabileceğiniz bir dildir ve yeni başlayanlar için oldukça elverişlidir.

Hangi programlama dilini seçmeliyim (Bence en önemli soru bu)?

Python’la neler yapabilirim?

Yukarıdaki soruların cevapları iç içe olduğundan bunlara için genel bir cevap vermek daha doğru olur diye düşünüyorum. Bir programcının hangi programlama dili üzerinde uzmanlaşmak istediğine karar vermesi en zor süreçlerden biridir -bu süreci yaşamış biriyim ben de-. Buna cevap verebilmek için ihtiyaçlarınızı iyi belirlemiş olmanız gerekiyor. Bu süreçte size yardımcı olabilecek bazı ip uçları sunsam da bu süreci çözümleyecek tek kişi sizsiniz. Aslında ihtiyaçlarınızı belirlemeniz de tam olarak çözüm olmayacaktır. Günümüzde programlama dillerinin sınırları birbirine girmiş durumda, yani aynı işi bir çok programlama diliyle gerçekleştirebilirsiniz, programlama dillerinde sınır dil değil sınır sizsiniz. Bu noktada Python’la neler yapılabileceğine değinmek seçiminizi kolaylaştıracaktır diye düşünüyorum.

– Görsel açıdan zengin desktop uygulamalar geliştirebilirsiniz:

Python’la gui (Graphical User Interface) tabanlı desktop uygulama geliştirebileceğiniz bir çok gui kütüphanesine sahip. Bu kütüphaneleri kullanarak platform bağımsız uygulamalar geliştirebilirsiniz.

– Web tabanlı uygulamalar geliştirebilirsiniz:

Python’la yeni tanışmış insanların duyduğunda şaşırabildiği bir bilgidir bu, “Nasıl yani Python’la web sitesi yapabiliyor muyuz?” sorusu gelir akabinde cevabı ise kocaman bir “Evet”tir. Python web uygulamaları geliştirmek için oldukça zengin ve işlevsel framework desteği olan bir dildir. Bunlardan en geniş community’e sahip olanı Django‘dur. Dökümantasyonu zengin ve kullanım alanı diğer framework’lere göre daha geniştir. Djangoproject üzerindeki tutorial’lar başlangıç için idealdir. Burada bahsetmek istediğim bir diğer web framework ise kendi projelerimde de kullandığım web.py‘dir. Web.py’nin en önemli özelliği lighweight olmasıdır. Uygulama geliştirmek için basit(!) bir çatı sunar size, siz bu çatı üzerine istediğiniz gibi uygulamanızı yerleştirirsiniz. Django çok geniş bir kütüphaneye sahip, bir çok işlem için çok işlevsel fonksiyonlar geliştirilmiş, django ile kıyasladığınızda web.py ile daha low-level işlemler yapmak durumunda kalabiliyorsunuz. Kişisel olarak bu işlemleri yapmaktan zevk alıyorum, ayrıca genel mantığı kavramak açısından da gerekli olduğunu düşünüyorum. İlerleyen zamanlarda django’ya geçmeyi düşünüyorum ben de, en azından birkaç proje geliştirerek daha sağlıklı bir değerlendirme yapabilirim.

– Mobil uygulamalar geliştirebilirsiniz:

PyS60 ile Nokia S60 seri telefonlara uygulama geliştirebilirsiniz. S60 bağımlılığı ve Java kadar geniş bir kütüphaneye sahip olmaması gibi eksiklikleri olsa da Python’un bu alanda da var olması gelecek için ümit verici. Eğer profesyonel anlamda mobil programlama ile uğraşmayı düşünüyorsanız önerim C++/Java olacaktır.

Programlamaya yeni başlayanlar için dil seçimi kadar önemli olduğunu düşündüğüm bir diğer konu ise linux. Eğer hiç linux kullanmadıysanız kesinlikle ve kesinlikle bir linux dağıtımı edinip kullanmaya başlamanızı öneririm. Linux kullanmak işin mutfağında olmak gibidir, programcının ufkunu açar. “Hangi dağıtımı kullansam ki?” diyorsanız sizi şöyle alayım. Bir programcı daha önce linux kullanmış ama sonradan kullanmayı tercih etmemiş olabilir, ancak hiç linux kullanmamış programcı bana göre eksik bir programcıdır.

Son olarak konuyu toparlayacak olursak; yukarıda bahsettiğim konular çerçevesinde Python’un ihtiyaçlarınızı karşıladığını düşünüyorsanız başlamak için hiç beklemeyin derim. Python öğrenmek size hiçbir şey kaybettirmeyecektir.

* Python’la ilgili e-book soran arkadaşlar -basit bir google aramasıyla da ulaşılabilecek olan- bu adresten faydalanabilirler.

Kalın sağlıcakla.

Bu bir başlıktır

in_cods_keepingYine uzun bir aradan sonra birlikteyiz muhabbetine girmeyeceğim ama şaka maka baya oldu :) Efendim sizlere şu ara uğraştığım şeylerden bahsedip daha sonra yapmak istediklerimi anlatarak bu güzel yazıyı sonlandırmayı düşünüyorum. Evet düşünüyorum.

Yazılım hayatım boyunca -böyle diyince bi 10 yılı devirmişim gibi geldi- bir şekilde karşılaşmadığım -belki de kaçtığım- web programlamaya artık “balıklama” diye tabir edilebilecek bir şekilde girmiş bulunuyorum. Temel olarak bazı farklılıkları olsa da en nihayetinde yazdığınız bir program, o yüzden fazla kasmadım -yazarın kendine notu: hadi lennn-. Web programlamaya girdik peki bu adam ne yaptı? Ne yaptıysa Python’la yaptı. Evet efendim yaptığımız web projelerinde Python kullanıyoruz. Tek başına değil tabi ki. Python’la birlikte web projeleri geliştirmek için -çeşitli ortamlarda da çığırtkanlığını yaptığım- webpy çatısını kullanıyoruz. Tanımında da yazdığı gibi (Lightweight Web Framework) kendisi -django’ya inat- sade ve kullanışlı bir çatıdır. Çatı demişken bir diğer harika çatı daha kullanıyoruz, o da jQuery. Bundan sonraki yazılarımda bu ikiliden çok söz etmeyi düşünüyorum.

Eveeet, gelelim planlara. İşe pythonturk.com’u Python ile yazarak başlamayı düşünüyorum. WordPress zaten var, gayet de başarılı bir sistem, bu Amerika’yı yeniden keşfetme isteği niye? Efendim WordPress işimi görmediği için ya da yeterli olmadığı için yapmıyorum bu siteyi, madem Python ile web programlamadan bahsedeceğiz bundan sonra ee bi zahmet kendi çöplüğümüzü de buna uygun hale getirelim ama dimi. Öyle çok alengirli şeyler olmayacak zaten, hedefi büyük tutupta başlayamama sendromu yaşamak istemiyorum. İlk olarak yazı girebileceğim bir admin paneli, ve yazılara yorum yapabilme seçeneği olacak. Listeleme, arama işlemlerini dahi sonraya bırakıyorum. Yazı ve yorum girebilecek hale geldiğinde siteyi yayına sokacağım. Akşamları işten sonra kodlayacağım siteyi -bu da patronuma ek bilgi olsun, patroncuğum gördüğün üzere akşamları sitemi kodlayacağım, eve iş getirmek falan yok ona göre -, hatta bu yazıyı yazdıktan sonra css bakmaya başlıyorum -tavsiye edebileceğiniz güzel css’ler olursa beklerim-. Sade mavi ağırlıklı birşey düşünüyorum, bakalım gelişmeleri paylaşırım yine burdan.

Şimdilik benden bu kadar, kalın sağlıcakla…

print(“birşeyler”)

Uzuun zamandır birşey yazamıyordum. Hatta yazdığım en son yazının bitirme projemin taslağı olduğunu gördüğümde utanmadım desem yalan olur. Bu arada hayatımda önemli gelişmelerde oldu tabi. Bu yazıda onlardan bahsedip aradaki geçen süreyi hızlı bir şekilde kapatmayı planlıyorum.

Bu arada olanları kısaca özetleyeyim.

  • Burada taslağını paylaştığım tezimi bitirdim. Sitedeki ile aynı olmasa da ona yakın birşeyler yaptım diyebilirim.
  • Tezimi vermekle kalmadım 5 senemi verdiğim Ege Üniversitesinden de mezun oldum.
  • Beni zorla öğretmen yapmak isteyen sisteme inat (meslek lisesi sendromu) KPSS’ye girmedim.
  • Şu an bir şirkette programcı olarak çalışıyorum. J2ME ile programlama yapıyorum.
  • Uzun bir süre uzak kaldığım Python’a tekrar başladım, PyQt öğreniyorum.
  • UBE’de (Uluslarası Bilgisayar Enstitüsü, Ege Üniversitesi) master yapmak istiyorum. ALES’e ve Yabancı Dil Yeterlilik Sınavı’na girdim, mülakat için Eylül’ü bekliyorum.

Kısaca özeti bu şekilde. Bundan sonra daha sık yazmayı planlıyorum. Hatta ShowMeDo tarzında videolar eklemeyi de planlıyorum. Umarım bunlar için zaman ayırabilirim. Planlama konusunda sıkıntı yaşadığım oluyor.

** Sitenin daha çok insana ulaşması açısından daha çok örnek-makale-belgeye ihtiyaç var. Python’la uğraşan bilgisini, deneyimini paylaşmak isteyen arkadaşlar olursa benimle iletişime geçerlerse sevinirim. Burayı kişisel blog olarak tutmak niyetinde değilim. Amacım Python ile ilgilenenlere faydalı olabilecek bilgilerin bulunduğu bir yer olması. Bu konu ile ilgilenen arkadaşlar sitede yazar olarak bilgilerini paylaşabilirler.

Kalın sağlıcakla..

Bitirme projesi taslağı

j2mecdc_logoMerhaba. Daha önceden de belirttiğim gibi bu siteyi açma amacım bitirme projemi ve gelişimini paylaşmaktı. Bir şeyler öğrendikçe bunu sitede anlatıp bu konuyla ilgilenen insanların da bir nebze olsun gelişimine katkıda bulunabilmekti. Bunu şu ana kadar çok iyi yaptığımı söyleyemem. Bunun sebebi de bitirme projeme tam olarak vakit ayırıp da başlayamamamdı. Zaman konusunda sıkıntı yaşadığım bir dönemin ardından bitirme projeme tam olarak başlıyorum. Buradan da şu an itibariyle yapacaklarımı içeren taslağı sizinle paylaşmak istedim. Belki de biraz da kendimi kontrol etmek adına böyle birşey yapıyorum. Taslağı sadece ben bildiğim sürece tam olarak yapılıp yapılmadığını sorgulayacak benden başka kimse olmayacaktı, sizlerle de paylaşıyorum ki bunu kontrol eden birilerinin olduğunu bilmek beni tembellikten alıkoyar diye umuyorum. Taslakta var olanların durumunu, gelişimini çekinmeden sorgulayınız :)

Öncelikle bu yazıda java logosunun ne işi var ondan bahsedeyim biraz. Bildiğiniz üzere bitirme tezimi mobil ortamlara eğitim yazılımı geliştirmek konulu seçmiştim ve bu uygulamayı Python’da yapmayı düşünüyordum. Ancak projeyi yapmaya başladığım şu günlerde Python’un halihazırda mobil ortamlar için tercih edilebilecek durumda olmadığını farkettim. Elbette ki her proje için geçerli değil bu ancak kendi projem açısından bu yeterliliği bulamadım. Nelerin yeterli olmadığı kısmına kısaca değinecek olursam, Python’un Nokia S60 bağımlılığı en büyük problem. Yaptığım uygulamanın yalnızca S60 telefonlarda çalışacak olması, harcayacağım emek için sıkıntı olacaktı. Çünkü yapmak istediğim uygulama basit bir uygulama değil ve her platformda çalışmasını istiyorum. Python’un S60 bağımlılığını daha önce de biliyordum ancak biraz daha içine girince sorun olacağını düşünmeye başladım.

Bir diğer önemli sorun ise Java’nın kütüphane,ide,emülatör kolaylığı. Bu üçlü maalesef Python için yeterli düzeye ulaşmış değil.

Tüm bunları göz önüne aldığımda tezimi Java ile geliştirmeye karar verdim. Her ne kadar sitenin adı Pythonturk’te olsa bundan sonra Java kodları da göreceksiniz. Amaç bilgi paylaşmak olduğu için bu sorun olmayacaktır.

Tabi bu söylediklerim Java ve Python’un mobil kısmıyla ilgili. Python hala sevdiğim ve öğrenmeye devam etmek istediğim/edeceğim bir dil. Python’la ilgili öğrendiklerimi, sorularınızı elimden geldiğince yanıtlamaya devam edeceğim.

Taslak şöyle:

  • Dersleri modüler olarak programlamayı düşünüyorum, başlangıç olarak bir ders olacak ama program modüler olarak tasarlanacak ve yeni bir ders eklemek için oluşturduğum form çerçevesinde bir class yazmak yeterli olacak.
  • Programa dil desteği koymayı düşünüyorum, buton isimleri, menü isimlerini bir dil dosyası oluşturup oradan çekmeyi düşünüyorum. Başlangıç olarak İngilizce ve Türkçe yeterli, ancak ihtiyaç durumunda başka bir dil desteği eklemek de sorun olmayacak.
  • Derslerin uygun yerlerinde sesli anlatım düşünüyorum (mesela ingilizce dersi için cümlelerin okunuşu olabilir). Programın her bölümüne seslendirme desteği koymayı düşündüm, görme engelliler için de çok kullanışlı olacaktı ancak daha sonra fazla konu dışına çıkmak istemediğimden vazgeçtim. Bu ayrı bir proje olarak ekleme yapılarak sağlanabilir.
  • Dersin sonunda test ve oyun tarzında ölçme yapmayı düşünüyorum.Mesela ingilizce dersi için konu testi olacak ve kelime tahmin oyunu olacak. Bulunamayan kelimelerde ipucu seçeneği ile yardım alınabilecek, yine bulunamazsa cevaba bakabilecek. Oyunda ayrıca kullanıcı adı,skor ve süre bilgilerini de tutmayı düşünüyorum.
  • Yazacağım bir web servisle siteye koyduğum videoların (konu anlatımı olabilir) telefonda izlenmesini sağlamayı düşünüyorum. Bağlantı açısından sorun çıkabilir, henüz bir deneme yapmadım ancak videoları düşük kalitede ve kısa süreli tutmayı düşünüyorum.

Benim düşündüklerim şimdilik bu kadar. Başlangıç için biraz fazla şey eklenmiş olabilir, özellikle tercih ettim bunu. Beklentiler ne kadar yüksek olursa sonuçta ona göre başarılı olur diye düşünüyorum.

Burada sizin de eklemek istediğiniz, “şu da olsa çok iyi olur” veya “yok bu olmasın şöyle şöyle sorun çıkarabilir” dediğiniz şeyleri buradan paylaşırsanız benim için çok iyi olur.

Ayrıca projeme isim bulmadım henüz, isim önerilerinize de açığım.

Kalın sağlıcakla..

Paylaşımcı Mikrosoft!

20 Aralık 2007 itibariyle Özgür Bilgi Protokolü Kurumu (Protocol Freedom Information Foundation,PFIF) – çevirirken hata yapmış olabilirim- microsoft ile bir anlaşma imzaladı. Anlaşmaya göre microsoft, windows server çalışma grubu ürünleri ile ilgili tüm protokol belgelerini paylaşacak. Bunun anlamı birçok özgür yazılımın (örneğin Samba) microsoft ürünleriyle bağlantısı kolaylaşacak.

Peki microsoft bu atılımı neden yaptı? Özgür yazılıma destek mi veriyor yoksa? Tabii ki hayır. Avrupa Komisyonu’nun 24 Mart 2004′te verdiği kararla microsoft bunu yapmak zorunda bırakılmıştır. Kararın akabinde microsoft temyize gitmiş ancak 17 Eylül 2007′de dava sonucu kesinleşmiştir.

PFIF microsoft’a bir kerelik ödeyeceği 10.000 avronun ardından bu belgeler Samba projesinde kullanılabilecek. Bilindiği Samba özgür bir yazılım olduğu ve GPL ile lisanslandığı için diğer kullanıcılar/gruplar Samba’nın içerisinden microsoft’a hiçbir lisans ücreti ödemeden bu belgelere ulaşabilecekler.

Burdan şu mübarek bayram gününde Allah’tan bill amcaya sabır diliyorum. Dolarları eksildi biraz morali bozuktur bu ara. Şu mübarek günlerde küslük olmazmış derler, neyse bill büyüklük bizde kalsın öp elimizi de barışalım…

Bu arada Samba’yı bilmeyenler için kısaca anlatayım. Samba, LINUX-UNIX işletim sistemleri ile Windows NT ve Windows 9X işletim sistemleri arasındaki iletişimi sağlayan bir uygulamadır. Linux yüklü bir makinada Samba üzerinden ağdaki windows makinalara ulaşabilir, yazıcı ve dosya paylaşımında bulunabilirsiniz.

Haberin kaynağı