1. Yazılım Geliştirme Süreci
Bir bilgisayar programı, bilgisayar sistemindeki elektrik sinyallerinin akışını yöneten bir dizi yönergedir. Bu sinyaller, bilgisayarın hafızasını etkileyerek ekran, klavye, fare ve hatta diğer bilgisayarlar ile etkileşim sağlar. Bu şekilde insanlar da karmaşık problemleri çözmek, oyun oynamak gibi değişik işlemleri gerçekleştirebilir. Bir program hesap makinesi rolü üstlenirken bir diğeri makineyi satranç tahtasına dönüştürebilir. Buradaki iki örnek;
Alt düzeyde, elektrik sinyalleri somut biçimde bilgisayarın mevcut durumunu değiştirirken,
Üst düzeyde, soyut bir biçimde kullanıcıların eğlenme ya da işleri gereği farklı işlemleri gerçekleştirmelerini sağlar.
Günümüzde, kullanıcı arayüzüne aktarılan üst düzey işlemler ile alt düzey işlemleri kontrol edebilmek, son derece kolaylaşmıştır ve bu nedenle pek çok programcı bu dilleri kullanarak daha soyut bir biçimde kod yazmaktadır. Programlama seçenekleri programlamayı sürpriz bir biçimde basit hâle getirmiştir. Programlama kavramları, temelinde mantıksal ve matematiksel olarak sınıflandırılabilir. Bilgisayar programları bir bilgisayar kullanmadan da yazılabilir. Programcılar, bir programın çalışabilirliğini ve doğruluğunu, gerçek yaşamda yeri olmayan soyut semboller kullanarak tartışabilirler. Bu yaklaşımlar çok değerli olmakla beraber, programcılar çoğu zaman makinelerden uzak kalamazlar. Yazılımlar, gerçek bilgisayar sistemlerinde kullanılmak üzere yazılır. Yazılım mühendisleri belirli sistemler üzerinde çalışacak şekilde programları üretirler. Bu sistemler, donanım alt yapıları ve kullandıkları işletim sistemi ile tanımlanır. Yazılım geliştirenler; derleyici (compiler), hata ayıklayıcı (debugger) ve yanaylaç (profiler) gibi somut araçları kullanırlar.
Yazılım geliştirme süreci şu şekilde işler;
Programcı programlama dili kullanarak kodları oluşturur,
Yazılan kod bütünü, hata ayıklayıcı (debugger) kullanılarak hatalara karşı denetlenir,
Hataları giderilmiş kodlar, derleyici (compiler) kullanılarak bilgisayarın yorumlayabileceği elektriksel sinyallere dönüştürülür.
Bu süreç sonunda bilgisayar, elektriksel sinyalleri yorumlayarak komutların gereğini yapar. Ayrıca yazılım geliştirme sürecinde yanaylaç (profiler) kullanımı, yazılımcının, programın daha hızlı çalışmasını sağlayacak şekilde kodları revize etmesine olanak sağlar.
1.1 Yazılım
Yazılım, bilgisayarın donanımını anlamlı hale getiren, bilgisayarları kullanıcıların amaçları doğrultusunda kullanmasını sağlayan kod, komut ve programlardır.
Bilgisayar yazılımlarına örnek olarak bilgisayar programları verilebilir. Bir program, bir yazılım parçası olarak nitelendirilebilir. Yazılımlar daha soyut, programlar ise biraz daha somuttur. Yazılımlar CD, DVD, sabit disk, taşınabilir bellek gibi farklı araçlar üzerinde saklanabilir. Yazılımların kullanabilmesi için bilgisayarın hafızasında kayıtlı olması gerekir. Bilgisayar programları hafızaya belirtilen araçlardan yüklenir. Bilgisayarın sabit diskine yüklenmiş olan program elektromanyetik bir örüntü oluşturur. Bu elektronik sembollerden oluşan örüntünün, program çalışmadan önce hafızaya transfer edilmesi gerekir. Program bir CD ya da İnternet üzerinden yüklenebilir. Bu elektronik semboller ikilik sayı sistemini kullanan, sıfır ve bir değerlerinden oluşan bir dizidir.
Örnek: Bir ikilik program şu şekilde görünür:
10001011011000010001000001001110
İşlemci olarak adlandırılan bilgisayar donanımı, bu sinyalleri çözümleyerek yapılmak istenen işlemi (grafik ara birimine veri göndererek ekranın bir bölümünün mavi görünmesini sağlamak gibi) gerçekleştirir.
1.2. Yazılım Geliştirme Ortamları
Yazılımlar, ikilik dizileri daha anlaşılabilir kılan kelime ve sembolleri kullanır. Böylece bilgisayarların dilini öğrenmek ve karmaşık problemleri çözen programlar yazmak kolaylaşır. Bu amaçla, komutları üst düzey yazılımlardan alt düzey makine diline çevirebilen araçlar da kullanılabilir. Python gibi üst düzey diller, programcıların İngilizce konuşma diline çok yakın bir şekilde program kodlarını yazabilmelerine olanak sağlar. Geçtiğimiz yaklaşık 60 yıllık süreçten günümüze kadar FORTR AN, COBOL, Lisp, Haskell, C, Perl, C++, Java ve C# gibi pek çok üst düzey dil geliştirilmiştir. Bu tür programlama dilleri ile uygulama geliştiren programcılar, donanım ya da makine dili gibi konulardaki detaylar ile ilgilenmeden çok etkili yazılımlar geliştirebilir. Böyle bir dönüştürme aracının, kendi dilimizi anlayıp işleme dökmesini bekleyebiliriz ancak günlük konuşma dilleri programlama dillerine göre son derece karmaşık olduğundan bu işlem olası değildir. Derleyici olarak kullandığımız, bir programlama dilini diğerine çeviren programlar yaklaşık 60 yıldır hayatımızdadır ancak konuşma dilinin işlenerek programa dönüştürülmesi hâlâ yapay zekâ araştırma konuları arasındadır. Günlük konuşma dilini belirli standartlar çerçevesinde anlaşılır kılmak, bugünkü yazılımların kapasitesinin çok üstünde bir beklentidir. Programlama dilleri oldukça basit bir yapı ve kesin kurallar ışığında bilgisayar tarafından çözülebilecek problemler için çözüm üretmektedir.
Geleneksel olarak yeni bir dilde yazılan ilk program “Merhaba, Dünya!” adı verilen programdır. Python’da aşağıdaki şekilde yazılmaktadır:
Python dili ile yazılmış ilk örneğe bakalım:
print “Merhaba, Dünya!”
Bu print komutunun bir örneği olup ekranda Merhaba, Dünya! yazar. Tırnak işaretleri programda bir değerin başlangıcını ve sonucunu gösterir ve ekranda gözükmez.
Python dili ile yazılmış aşağıdaki örneğe bakalım:
Toplam = 0
DersSaati = 3
Hafta = 14
Toplam = DersSaati * Hafta
Bu satırlar bir Python programındaki bazı satırlar olabilir. Bu satırlar bazı hesaplama işlemleri (= ve *) ile benzerlik göstermektedir. DersSaati, hafta ve toplam olarak ifade edilen kelimeler, değişken olarak adlandırılmaktadır. Bu değişkenler verileri bilgisayarın hafızasında korumak için kullanılır. Bu satırlar Python dili ile yazıldığından herhangi bir makine dili tarafından anlaşılır değildir. Kullanıcı programı çalıştırdığında, yorumlayıcı programlar, Python kodunu makine koduna çevirir. Üst düzey program kodu kaynak kod (source code) olarak adlandırılır. Bu koda karşılık gelen makine diline ise hedef kod (target code) adı verilir. Yorumlayıcı, kaynak kodu hedef koda dönüştürür. Üst düzey programların güzelliği, kodlamanın donanımdan bağımsız olarak yapılabilmesidir. Üstünde çalışılan platform ne olursa olsun, Python yorumlayıcısı kurulu ise tüm programlar tüm platformlarda çalıştırılabilir. Programcıların yazılım geliştirme sürecini destekleyen pek çok araç vardır. Bunlardan bazıları aşağıda listelenmiştir.
1.3. Editörler
Bir editör, programcının kaynak kodu yazmasını ve dosyaya kaydetmesini sağlar. Çoğu editör, renklendirme desteği sunarak dilin özelliklerini ortaya çıkarır ve programcının üretkenliğinin artmasını destekler. Dili oluşturan parçaların kurallara uygun bir şekilde düzenlenmesi söz dizimi (syntax) olarak ifade edilir. Geliştirme araçlarının yazılanları tam olarak doğru anlaması için, kullanılan kelime ve sembollerin kurallara uygun biçimde dizilmesi önemlidir. Yalnızca doğru biçimde ifade edilen programlar makine koduna dönüştürülmek üzere kabul edilir. Bu nedenle bazı editörler yazım yanlışları konusunda renkleri ya da farklı vurgulamaları kullanarak yazım hataları konusunda programcıyı uyarır.
1.4. Derleyiciler
Derleyiciler, kaynak kodları hedef koda dönüştürür. Hedef kod, belirli bir platform ya da gömülü bir araç için makine dili olabilir (Şekil 2.1). Hedef kod diğer bir üst düzey kaynak dil de olabilir. Derleyiciler, kaynak kod içeriğini dönüştürerek hedef kod içeren bir dosya oluşturur. Derlenerek oluşturulan popüler dillere örnek olarak C, C++, Java ve C# verilebilir.
1.5. Yorumlayıcılar
Yorumlayıcılar da derleyiciler gibi üst düzey kaynak kodu hedef koda (genellikle makine kodu) çevirir ancak derleyicilerden farklı çalışır (Şekil 2.2). Derleyiciler herhangi farklı bir dönüşüm gerekmeden defalarca çalışılabilir bir program kodu üretirken yorumlayıcılar kullanıcı kaynak kodu her çalıştırdığında satır satır makine diline çevirir. Derlenmiş bir program, değişiklik yapılmadığı sürece tekrar derlenmez ancak yorumlayıcı ile çalışan program için yorumlama işlemi değişiklik yapılmamış olsa bile tekrarlanmalıdır. Bu nedenle yorumlanan diller daha çok senaryo dili (scripting language) olarak ifade edilir. Yorumlayıcı, programın kaynak kodu olan senaryoyu okur. Genellikle derlenen programlar yorumlanan programlara göre daha hızlı çalışır çünkü derleme işlemi yalnızca bir kez yapılır. Diğer yandan yorumlanan programlar, herhangi bir platformda tekrar derlenmelerine gerek kalmadan uygun bir yorumlayıcı ile hemen çalıştırılabilir. Python, yorumlanan bir dil olmakla birlikte, bunun derleyicileri de vardır. Popüler senaryo dillerine örnek olarak Python, Ruby, Perl ve web ortamı için Javascript verilebilir.
1.6. Hata Ayıklayıcılar
Hata ayıklayıcılar, programcının bir programdaki olası hataları bulmasına ve düzeltmesine olanak sağlayarak programın doğru çalışması için yardımcı olur. Hata ayıklayıcı programlar ile programın hangi satırlarında hata olduğu belirlenir. Programcı, değişkenlerin değerlerine bakarak neyin yanlış gittiğini anlayabilir.
1.7. Yanaylaçlar
Yanaylaçlar, bir programın çalışmasına ilişkin istatistiki veri toplar. Böylece programcılar, genel olarak performansını arttırmaya yönelik önlemler alabilir ve programın belirli bölümlerini yeniden yapılandırabilir. Yanaylaç, program her çalıştırıldığında program parçalarının kaç kere çalıştırıldığını ve bu işlemin ne kadar sürdüğünü ortaya çıkarır. Bu işlem, programın gerçekten tüm parçalarının kullanılıp kullanılmadığını belirlemek için de kullanılabilir. Buna kaplam (coverage) denilir. Genel olarak programın belirlenen parçaları iyileştirilerek programın daha hızlı çalışması sağlanır.
1.8. Bütünleştirilmiş Geliştirme Ortamları
Çoğu yazılım, geliştirici bütünleştirilmiş geliştirme ortamlarını (integrated development environment-IDE) kullanır. Bu ortamlar, editörleri, hata ayıklayıcıları ve diğer programlama yardımcılarını kapsar. Aşağıda en sık kullanılan Python IDE ortamları listelenmiştir.
IDLE: Python.org web sitesinde yer alan ücretsiz program geliştirme ortamıdır. Bu site içerisinde downloads menü başlığı altında Python için son sürümleri bulmak mümkündür. Ayrıca, birçok işletim sistemi için gerekli dosyalara erişim bağlantıları da bu sayfada yer almaktadır.
Wing IDE: Wingware Python’da program geliştiriciler için üç farklı türde IDE ortamı sunmaktadır. Wing IDE Professional, Wing IDE Personal ve Wing IDE 101. Bunlardan Wing IDE 101 ücretsiz olup başlangıç seviyesindeki Python kullanıcıları için basit bir IDE ortamı sunmaktadır. https://wingware.com/downloads/wingide-101 adresinden indirilebilir. Bu ortamda kod yazmak, hata bulmak ve çalışma alanını kişiselleştirmek mümkündür.
Canopy: Enthought çatısı altında yer alan Canopy, içerisinde birçok farklı programlama dilinde kod yazmayı ve derlemeyi kolaylaştırmaktadır. https://store.enthought.com/downloads/#default adresinden Canopy program geliştirme ortamı ücretsiz indirilebilir.
2. Neden Python?
Python, öğrenmesi kolay, tamamen özgür ve ücretsiz bir programlama dilidir. Nesnelere dayalı bir dil olup okunabilirliği yüksektir. Python’un dili başka programlama dilleri ile kıyaslandığında, bunun daha az kod ile işlemleri yapmasının mümkün olduğu görülecektir. Python, bütün işletim sistemleri ile uyum içerisinde çalışmaktadır.
Programlama yapısı içerisinde birçok kütüphaneyi barındırmaktadır. Bu kaynaklarla daha az kod yazmak mümkündür. Pythton ile masaüstünde çalışan uygulamalar geliştirilebileceği gibi, web üzerinde çalışan uygulamalar geliştirmek hatta Rasperry-Pi gibi donanımları da programlamak mümkündür.
3. Python Sürümleri
Python programlama dilinin 2016 yılı için en güncel sürümü Python 3.5.2’dir. Ancak başka kaynaklarda yer alan birçok örneğin daha önceki sürümlerde yazıldığını görmeniz mümkün olabilir. Sürümler arasındaki farklılıklar, özellikle ileride görülecek olan fonksiyonların, print komutu gibi bazı komutların farklı olarak ifade edilmesini kapsamaktadır. Farklı kaynaklardan bulduğunuz örnekler yeni sürümlerde çalışmayabilir. Bu nedenle söz dizimi kurallarına göre komutların değiştirilmesi gerekmektedir.
Yazılım Geliştirme Süreci konusu ile ilgili sunum dosyasına ve konu testine (yakında) aşağıdan ulaşabilirsiniz.