Python programlama dersi

Bitirdiğimiz dönemde Python programlamaya giriş dersi verme şansım oldu. Python’u yıllardır ufak çaplı hesaplama işleri için kullanıyordum ve çevreme de tavsiye ediyordum, ama bilgimde boşluklar olduğunun da farkındaydım. Bir şeyi öğrenmenin en iyi yolu onu öğretmektir dedim ve bir seçmeli dersi Python’a uyarladım.

Ders hafta arka arkaya üç saat, bilgisayar laboratuarında 10 kişilik bir grupla işlendi. Her kavram için hem bolca kısa örnek, hem de konuları sentezleyen mânâlı programcıklar göstermeye çalıştım.

Dersin resmi adı “Scripting Languages” olduğu için ilk haftayı script (betik) dillerinin ne olduğunu, “sistem programlama” dilleri C/C++ vs.den farklarını irdelemeye ayırdım. Betik dillerinin tercih edildiği uygulama alanlarını sıraladım: Sistem yönetimi; programları bağlamak ve yönlendirmek (gluing and steering); GUI oluşturma, hızlı prototip geliştirme; tek seferlik (throwaway) programlar; metin işleme; Web uygulamaları; varolan yazılımları genişletme.

John Ousterhout’un “Scripting: Higher Level Programming for the 21st Century” makalesini ve CIO’da yayınlanan “PHP, JavaScript, Ruby, Perl, Python, and Tcl Today: The State of the Scripting Universe” tartışmasını genel okuma olarak verdim.

Ders bilgisayar laboratuarında pratik olarak yapıldığından ikinci haftada ilk iş Python ve IDLE kurdurdum. Ardından Mark Lutz‘un “Learning Python“unu (3. edisyon) takip ederek genel Python programlamayı işlemeye başladık.

Lutz iyi ve kapsamlı bir kitap; boşluk bırakmadan her şeyi anlatıyor fakat bazen materyali gereksiz yere uzatıyor ve tekrarlıyor. Bir de biraz aykırı bir sırası var. Stringleri, listeleri, dosyaları didik didik ediyor ama atamalar ve if, while, for yapıları daha sonra geliyor. Eminim tecrübeden kaynaklanan iyi bir sebebi vardır ama bana biraz tuhaf geldi.

Dersin yaklaşık 6-7 haftası temel Python ile geçti. “Learning Python”u 17. bölüme kadar (functional programming) takip ettik. Biraz fazla uzadı. Hem kitapta konular sündürülüyor, hem ilk haftalarda birer saati problem çözmeye ayırdık. Aslında temeller için 3-4 hafta kâfi.

Temellerden sonra bir hafta Matplotlib ile grafik çizme çalıştık, ardından bir hafta urllib ile webden veri indirip işleme ve görsellemeden bahsettik. Bir hafta düzenli ifadelere (regular expressions) ayırdık. Sonraki hafta komut satırı argümanları ve optparse ile opsiyon derlemekten bahsettik; subprocess modülü ile alt program çalıştırmayı inceledik.

Sondan bir önceki hafta Tkinter ile grafik arayüz oluşturma alıştırmaları yaptık. Şahsen çok zevkli buldum; daha fazla vakit ayırabilmek isterdim. Son haftayı öğrencilerin sunuşları ile geçirdik.

Bazı önemli konuları işleyemedik: Modüller, OOP, C/Python birleştirmesi, CGI ve Web programlama, threading, …

Dersi tekrar verirsem şöyle bir plan takip etmeyi düşünüyorum:

  • Betik dillerine giriş ve kurulum: 1 hafta
  • Temel Python programlama (OOP hariç): 4 hafta
  • Matplotlib ile grafikler: 1 hafta
  • Düzenli ifadeler ve metin işleme: 1 hafta
  • Komut satırı argümanları, optparse, urllib: 1 hafta
  • Tkinter: 2 hafta
  • Süreç yönetimi, multiprocessing (veya multithreading): 1 hafta
  • Modüller ve OOP: 2 hafta
  • C/Python birleştirme: 1 hafta

Python dersi veriyorsanız veya Python kullanan bir programcıysanız, derste örnek olarak yaptırılabilecek uygulamalar, sık kullandığınız modüller gibi, bilişim öğrencilerine faydalı olacak tavsiyelerinizi almaktan mutluluk duyarım

Reklamlar

Kaan Öztürk hakkında

Kaan Öztürk İstanbul’da doğdu. İstanbul Lisesi ve Boğaziçi Fizik mezunu. Rice Üniversitesi‘nde uzay fiziği alanında doktora yaptı. Işık ve Yeditepe üniversitelerinde ders verdi. 2015-2016 döneminde Rice'da ziyaretçi araştırmacı olarak çalıştı. Bugünlerde Sabancı Üniversitesi'nde optimizasyon ve yapay öğrenme konularında doktoraüstü araştırmacı olarak çalışıyor.

26 Mayıs 2011 tarihinde Bilimsel Programlama içinde yayınlandı ve , olarak etiketlendi. Kalıcı bağlantıyı yer imlerinize ekleyin. 2 Yorum.

  1. Merhaba, Kısa bir süredir Python ile çalışmalar yapıyorum. Ben de sizin gibi öğreterek öğreniriz (docendo discimus) diyerek bu konuda okuldaki arkadaşlarıma bir sunum yapmayı düşündüm. Yazınız, benim tam da aradığım şey oldu hem kaynak olması, hem de şevk vermesi açısından.

    Merak ettiğim ise yaklaşık 5 sene önce yazdığınız bu yazıya, bugünkü düşünceniz ve Python’un değişimi ile ne eklemek isterdiniz?

    • İşinize yaradığına sevindim, teşekkürler.

      En son 2013’de Python dersi verdim. Bir daha kısmet olursa Python 3 kullanırım. 5 yıl önce Python 2 ile Python 3 arasında kararsız kalmak mümkündü, artık Python 2 legacy software sınıfında.

      Hangi gruba hitap ettiğinize göre değişir dersi nasıl biçimlendireceğiniz. Hiç programlama bilmeyen bir öğrenci grubuna temelleri uzun uzun anlatarak bir dönem doldurulabilir. Programlamayı iyi bilenlerden oluşan bir gruba temelleri iki üç haftada anlatıp, standart kütüphane ve diğer yaygın kütüphanelerle uygulama yaptırılabilir.

      Bugün ilgim daha fazla veri analizine yönelik olduğu için, dersi de buna göre ayarlardım. Şu konuları kullanırdım: Temeller, OOP, düzenli ifadeler, Tkinter, sql, web scraping (urllib, BeautifulSoup, Selenium), Pandas, görselleme, biraz da scikit-learn. Ders notlarını Jupyter notebook olarak hazırlar, GitHub’a koyardım. Öğrencilerin de ödevlerini GitHub’a yüklemelerini isterdim.

      Tabii çok farklı ilgi alanları için farklı syllabuslar hazırlanabilir. Bilimsel programlama yapacak olana NumPy, SciPy, matplotlib, SymPy, Cython, NetworkX, PIL ağırlıklı bir sos hazırlardım. Web, sistem, oyun, güvenlik programcılarının odaklandıkları konular daha da farklı olacaktır, ama bu konular benim bilgimin dışında.

Bir Yanıt Bırakın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: