14 Nisan 2015 Salı

Programlama Dillerinin Değerlendirilmesi

Kaç tane programlama dili vardır diye sorsak: kimi 20 der, kimi 50, belki 150. Ama gerçek şu ki dünyada 1000(bin)'e yakın programlama dili mevcut. Peki ihtiyaç var mı bu kadar dile? Tabi ki de yok. O halde maraton koşusunda birincilik için mücadele eden atletler gibi öyle diller çıkmalı ki aralarından, diğerlerinden sıyrılıp önlerde yer bulmalı. Ama nasıl ve neye göre? İşte bu sorunun cevabıyla ilgileniyoruz bu yazımızda.

Öncelikle belirtmeliyiz ki bu yarışın bir finish çizgisi yoktur. Üstelik belirli bir güzergahı da yoktur. Dolayısıyla en iyi programlama dili şudur diyebilmemizin ihtimali de yoktur.Programcı, programı yazacağı alan penceresinden seyretmeli bu yarışı. Bir önceki yazımızda uygulama alanlarından bahsetmiştik. İşte bu alanlara göre programlama dili hangi kriterlere uymalı sorusuna cevap aranmalı. Tabi bu bilgileri profesyonel bir programcı olmak isteyenler için veriyoruz. Nitekim bunları bilmeden de program yazılabilir elbette. Ancak kullandığı dilden ne düzeyde faydalanır, bunu siz cevaplayın.

Programlama dilleri genel olarak 12 başlık altında değerlendirilebilir.

1) İfade Gücü (Expressivity)

Bir programın kaynak kodu, programın algoritmasını açık bir şekilde yansıtıyorsa bu programda kullanılan dilin ifade gücü yüksektir diyebiliriz. Örneğin, bir matematiksel işlem, matematikçinin kullandığı sembollerle ifade edilmeli ki anlaşılabilir olsun. Aksi taktirde programın kaynak kodu okuyana bir anlam ifade etmeyebilir. Bu da ifade gücüyle birlikte bir başka kriter olan okunabilirliğin düşmesine neden olur. C ve PASCAL gibi yapısal diller ifade gücü bakımından oldukça başarılı dillerdir.

2) Taşınabilirlik (Portability)

Bir işletim sisteminde yazılmış olan kaynak kodun diğer sistemlerde de sorunsuz çalışabilmesi durumuna denir. Bu da derleyiciler yazılırken önceden belirlenmiş ortak tanımlamalara uymasıyla mümkün olur. Bu noktada, yüksek seviyeli dillerin alçak seviyeli dillere göre taşınabilirlik açısından daha üstün olduklarını söylemekte fayda görüyorum. Ancak kusursuz taşınabilir hiçbir dil olmadığını da bilmemiz gerekiyor. Derleyici paketlerinin güncellenmesiyle birlikte gelen yenilikler ortak tanımlamaların dışında kalabiliyor. Sonuç olarak yine programcıya iş düşüyor ve hangi komutların hangi sistemlerde sorunsuz çalışabildiğini bilmesi gerekiyor. Bu kriter için de C dilinin önemli bir başarısı olduğunu söylemek yanlış olmaz.

3) Altprogramlama Yeteneği (Modularity)

Ana programın, altprogramlara parçalanabilme özelliğidir. Tekrarlanan işlemler için altprogram kullanma, bu işlemi yapan kodların tekrar tekrar yazılmasını önler. Bu da kaynak kodun kısa olmasını ve daha hızlı derlenmesini sağlar. Aynı sebepten dolayı kodun okunabilirliği de artar.
Bir başka getirisi ise hatayla karşılaşıldığında bunun hangi altprogramda olduğunu bileceğimiz için hata çözme sürecini oldukça kısaltıyor olmasıdır. C dili bu kriter için de örnek olarak verilebilir. C'deki bu altprogramlara fonksiyon denir.

4) Veri Türleri ve Yapıları (Data types and structures)

Çeşitli veri türleri (karakter, metin, tamsayı, gerçel sayı vb.) ve veri yapılarını (diziler vb.) destekleme yeteneğidir. C veri yapıları açısından da oldukça zengin bir dildir.

5) Giriş/Çıkış Kolaylığı (Input/Output facilities)

Sıralı, indeksli ve rastgele dosyalara erişme, veritabanı kayıtlarına veri gönderme, geri çağırma ve sorgulama yeteneğidir. Veritabanı programlama dillerinin (SQL, DBASE, PARADOX vb.) bu yetenekleri çok üstündür. C dili ise bu kriterde sınıfta kalan bir dildir ve veritabanı yönetimi için özel kütüphanelere ihtiyaç duyar.

6) Verimlilik (Efficiency)

Kaynak koddan makine diline çevrilen programların hızlı çalışabilmesidir. Bu hızda en önemli faktör derleyici olsa da dilin seviyesi ve genel yapısı göz ardı edilemez. C programlarının hızlı çalıştığı birçok programcının ortak kabulüdür.

7) Okunabilirlik (Readability)

Kaynak kodun rahatça anlaşılabilir durumda olmasıdır. Bu kriterde en önemli sorumluluk programcıda olsa da okunabilirliği güçlendiren yapılar sayesinde programlama dillerini de iş düşüyor. Biz derslerimizde bu kavramı hatırlatarak okunabilirliği nasıl arttırabileceğimiz hakkında sizlere bilgi vereceğiz.

8) Esneklik (Flexibility)

Programlama dilinin programcıyı kısıtlamaması anlamına gelir. Şöyle ki esnek olmayan diller programcıyı olası hatalardan uzak tutmak için kısıtlamalar ve yasaklamalar getirir. Oysa iyi bir programcı bu kısıtlamalar olmadan ve hata yapmadan programlama dilinden daha fazla faydalanabilecektir. Örneğin bir çok programlama dili, karakter türüyle tamsayı türünü birbirine atamaz, bunu hata olarak kabul eder. Ancak iyi bir programcı bu yolu kullanarak algoritmik bir kazanç sağlayabilirdi. Bunun için C gibi esnek diller bu tür işlemleri hata olarak düşünmez ve programcıya müsaade eder. Ancak bu kötü programcılar için de büyük tehlikeleri beraberinde getirir ve birçok hatayla karşı karşıya kalmalarına neden olabilir.

9) Genellik (Generality)

Çeşitli uygulama alanlarında kullanabilme durumudur. Örneğin, COBOL bilimsel yazılımlarda tercih edilmezken; C, PASCAL, BASIC genel amaçlı dillerdir ve her alanda kullanılabilirler.

10) Öğrenme Kolaylığı (Pedagogy)

Programlama dillerinin  öğrenme zorlukları büyük farklılıklar gösterir. Yüksek seviyeli diller insan algılamasına yakınlığından dolayı daha kolay öğrenilebilirler. BASIC dilinin bu kadar tutulmasının sebeplerinden biri kolay öğrenilebilir olmasıdır. C dili için aynısı söylemek mümkün olmaz. Eğitimi zor ve zahmetli bir dildir.

11) Yapısallık (Structural programming)

Yapısal programlama bir programlama tekniğidir ve bloklar halinde yazım ön plandadır. Atlamalar okunabilirliği güçleştirdiği için istenmez. Altprogramların bu teknikte rolü büyüktür. Programlar küçük parçalara ayrılarak soyutlama sağlanır. Bu tekniği destekleyen dillere yapısal diller de denir.

12) Nesne Yönelimlik (Object orientation)

Yapısallık gibi bu da bir programlama tekniğidir. Programlama dillerinin büyük bölümünün nesne yönelimli uyarlamaları yapılmıştır. C'nin nesle yönelimli uyarlaması da C++'tır.

Mustafa Altun

13 Nisan 2015 Pazartesi

Uygulama Alanlarına Göre Programlama Dilleri

Programlama dillerini sadece seviyelerine göre sınıflandırmak yetersiz kalır. Bir programcı hangi alanda program yazacağına dair bir karar verdiyse aşağıda vereceğimiz sınıflandırma sayesinde hangi programlama dillerini kullanması gerektiğini öğrenebilir. 

1) Bilimsel ve Mühendislik Diller: 
Bilimsel problemler ve mühendislik hesaplamalar yapan programlarda tercih edilirler.
Örnek: C, Pascal, Fortran...

2) Veritabanı Programlama Dilleri:
Veri tabanı yönetiminde kullanılan dillerdir.
Örnek: SQL, Dbase, Paradox, Foxpro.
..
3) Genel Amaçlı Diller:
Çeşitli konularda uygulama geliştirmek amacıyla kullanılırlar.
Örnek: C, Pascal...

4) Yapay Zeka Dilleri:
İnsan zekasını taklit etmeye yönelik çalışmalarda kullanılan mantıksal dillerdir.
Örnek: LISP, Prolog...

5) Sistem Programlama Dilleri: 
Sistem programlarının yazımında kullanılan dillerdir.
Örnek: C, sembolik makine dilleri...


Mustafa Altun

12 Nisan 2015 Pazar

Seviyelerine Göre Programlama Dilleri


Programlama dillerinin seviyesini belirlemede tek faktör insan algılamasına ne derece yakın olduğudur. Yüksek seviyeli diller insanlar tarafından daha anlaşılır dillerdir. Alçak seviyeli diller ise insan tarafından anlaşılması güç ve makine diline daha yakın dillerdir. O halde seviye yükseldikçe programcının işi kolaylaşır diyebiliriz pek tabi.

Madalyonun öteki yüzü yok mu peki? Elbette var.

Bir dil insan algısına ne kadar yaklaşırsa, haliyle makine dilinden de o kadar uzaklaşmış oluyor. Ve bilgisayar makine dilinden başka bir dili anlamadığı için yazdığımız kodlar makine diline çevrilirken, aradaki o mesafe bir çok açıdan olumsuz yönde etki ediyor. Programlama dillerinin değerlendirilmesinde önemli kriterlerden olan Verimlilik(Efficiency) ve Esneklik(Flexibity) bunlara örnek olarak verilebilir. Bu terimleri Programlama Dillerinin Değerlendirilmesi başlıklı yazımızda irdeleyeceğiz. (Profesyonel bir programcı olmak ve programlama dilini daha etkili kullanmak için okumanızı tavsiye ediyoruz.) Şimdi bu konuyu daha fazla dallanıp budaklandırmadan bizi hangi sonuca götürüyor ona bakalım:

Yüksek seviye dillerle yazılan projelerin Source(Kaynak) Kodları kısa, Derlemeden sonraki kodları ise uzun olur. Bu da çalışma hızlarını yavaşlatan bir etkendir.

Düşük seviye dillerle yazılan projelerde ise Source Kodlar uzun, Derlenmiş kodlar kısadır. Dolayısıyla çalışma hızları en yüksek seviyededir.
Çok Yüksek Seviyeli Programlama Dilleri
(Visual Basic, Access, FoxPro, Paradox...)
Yüksek Seviyeli Programlama Dilleri
(Pascal, Basic, Cobol , Fortran...)
Orta Seviyeli Programlama Dillleri
(C, C++, C#, Ada)
Düşük Seviyeli Programlama Dilleri
(Assembler, Sembolik Makina Dilleri...)
Makine Dili
(1 ve 0'lardan oluşan sayısal kodlar)
Uygulama Alanlarına Göre Programlama Dilleri'ni okudunuz mu?

Mustafa Altun

28 Şubat 2015 Cumartesi

Dev-C++ Kurulumu (Resimli Anlatım)


C diliyle program yazabilmek için bir editöre ve yazılan kaynak kodunu makine diline çevirmesi için bir derleyiciye ihtiyaç vardır. Bunları tek bir ortamda toplayan yanına da hata ayıklayıcı ve programcıya çeşitli kolaylıklar sağlayan bir kaç araç ekleyen yazılımlara Tümleşik Geliştirme Ortamı denir. Biz programcılar buna kısaca IDE (Integrated development environment) deriz.

Daha önce araştırma yapanlar görmüştür ki piyasada bir çok C derleme işini yapan yazılımlar bulunuyor. (Code:Blocks, Eclipse, NetBeans, CodeLite, Visual Studio, Dev-C++) Biz derslerimizde Dev-C++'ı kullanacağız. Bu tercihimizde sadelik ve hafiflik faktörleri rol oynuyor. Neticede C'yi 10gb'lık alana sığmayan Visual Studio gibi uçsuz bucaksız bir derleyici ile de pekala derleyebiliriz. Ancak öğrenme aşamasında yazacağımız 15-20 satırlık kod için bunu yapmanız, Pendik Spor'un karşısına Barça ilk 11'ini sahaya sürmeniz demek olur. Bellek israfı..

Dev-C++ hakkında bir kaç şey söylemek gerekirse; Bloodshed firması tarafından Delphi dili ile geliştirilmiş ve 2011 yılından sonra developer koltuğuna Orwell firmasın oturduğu bir derleyicidir. Bu noktada bir ayrıntıya dikkatinizi çekmek istiyorum. Google arama motoruna Dev-C++ yazdığınızda ilk sonuçlar Bloodshed kaynaklarını göstermektedir. Eğer bu kaynaklardan download ettiyseniz eski bir sürüm(v4.9.9) kullandığınızı söylemeliyim. 2011'den bu yana geliştiriciliğini Orwell üstlendiği için son sürümü (bunu yazarken v5.9.2) Orwell'ın web sitesinden bulabilirsiniz. Ben kurulum aşamasında direk linkini paylaştım.

KURULUM


1- İlk olarak Dev-C++'ı bu siteden indirin. (Güncelleme gelse bile son sürüm hep aynı linkte olacaktır..)


2- Download butonuna tıklayın.


 3- İndirilen setup dosyasını açın.


 4- Sözleşme kabulü, bileşen seçimi(hepsi) ve yükleneceği yeri seçtikten sonra kurulumun tamamlanmasını bekleyin.. (Tahmini: 2dk)


 5- Kurulum tamamlandıktan sonra programı çalıştırdığınızda bir seferlik yapılandırma ayarları isteyecek sizden. Bu pencerede derleyici arayüzünün dilini seçin. (Sol taraftaki kod kısmı bir sonraki pencere için.)


 6- Kod kısmının yazı tipini biçimlendirin. (Tercihim değişmemeniz yönünden.)


 7- "Ok" butonuna tıklayın ve kısa süren bir beklemeden sonra programın arayüzüyle karşılaşacaksınız.


 8- Dosya>Yeni>Proje yolunu takip ederek yeni bir proje açın.


9- Console Application ve C Projesi seçeneğine tıklayın ve projeye bir isim verin. "Tamam" dedikten sonra projenizi kaydetmek istediğiniz yeri belirleyin.


10- İşte bu kadar artık kod yazmaya başlayabilirsiniz.

Mustafa Altun

25 Şubat 2015 Çarşamba

Merhaba Dünya :)


Bismillah diyerek sıvadık kollarımızı. Hedef, dünyadaki tüm developer adaylarının faydalanabileceği bir platform oluşturmak. Bunun için yazılarımızı Türkçe'nin yanı sıra İngilizce olarak da yayınlamaya çalışacağız.
Zaten bir çoğumuz, kullanımını unuttuğumuz bir kodu Google'da İngilizce ifadelerle aratmıyor muyuz? Her yazılımcının en azından bunu yapabilecek düzeyde İngilizce bilgisine sahip olması gerekir. Aksi taktirde öğrenme aşamasına rakiplerinizden 1-0 geride başlamış olursunuz. Elbette maçı çevirip rakipleriniz üstüne çıkmanız ve üst düzey bir programcı olmanız gayet mümkün. Ancak meslek hayatında çok daha keskin bir çizgi vardır aranızda. Örneğin bir iş başvurularında iki grup vardır "İngilizce bilenler" ve "bilmeyenler". Eğer ikinci gruptaysanız bu maçı çeviremezsiniz, hükmen mağlupsunuzdur. Tabi kendini bir şekilde kanıtlamış kişiler bu gruplara pek takılmaz.

Konumuza geri dönersek bu blogda başlangıç dili olarak belirlediğimiz C programlama diliyle başlayıp diğer dillere uzanacağız. Karışıklığa sebebiyet vermemek adına bir dil bitmeden diğerinden bahsetmemeye çalışacağız. Derslerde anlamadığınız bir yer olursa yorum yapabilir veya özel sorularınızı bana mail ile ulaştırabilirsiniz: altunmstf@gmail.com

Yakında videolu anlatımlar da gelecek. Takipte kalmanız ümidiyle, hoşçakalın...

Mustafa Altun