21 Şubat 2016 Pazar

Merhaba

     Hangi yazılım dilini kullanıyor olursanız olun, kod yazmak zevklidir. Problem çözmek, araştırmak ve karşılaşılan yeni sorunlara yeni çözümler üretmek. Bazen bir yapbozun parçalarını, sonuç resmi bil(e)meden birleştirmeye çalışmak, bazen de varış noktası belirlenmiş bir yola çıkmak. Profesyonel bir yazılımcı olsanız da olmasanız da yazılımlar hakkında bilgi sahibi olmanın faydası vardır.

     Bu yazı serisinde, kod yazmayı ve ortaya bir yazılım çıkarmayı isteyen ancak nereden başlayacağını bilemeyen kişilere sıfırdan başlamaları için gerekli bilgileri sunmaya çalışacağım. Eğer sıkılmaz da yazmaya devam edersem CSharp'dan sonra C++ ve VisualBasic yazılım dilleri, OpenGL grafik kütüphanesi ve SQL veritabanı üzerine de yazılarım olacak.

     Şimdi düşündüm de, C# hakkında aklımdakilerin hepsini yazarsam uzun bir yazı olacak. Bu blogu okuduktan sonra yazılımların çalışma prensibi hakkında birkaç şey biliyor olacaksınız (umarım).

Neden CSharp (C#)

      İlk programınızı yazmak için neden C# tercih edeceğinizi kısaca açıklamaya çalışalım:

      * Aşağıdaki bağlantı adresine tıkladığınızda görebileceğiniz üzere, Windows tabanlı işletim sistemleri hala dünyada en yaygın kullanılan işletim sistemleridir.

      * CSharp, Microsoft'a ait bir yazılım geliştirme dilidir. Dolayısıyla Windows tabanlı sistemlerde istediğiniz yazılımları hazırlamak için yeterli altyapıyı size sunar.

      * Yazılım sektöründe tercih edilen bir yazılım dilidir.

      * C# ile kod yazarken kullanacağınız IDE (IDE nedir sorusuna birazdan geleceğiz.) bulabileceğiniz belki de en kullanıcı dostu yazılım geliştirme platformudur.

      Bu arada şunu da belirtmeliyim ki, C# her ne kadar Microsoft tarafından geliştirilmiş bir yazılım dili olsa da, açık kaynak kodlu yazılım geliştiriciler tarafından bir muadili hazırlanmakta. Şu an için bu konu ilgi alanınızın dışında olmakla birlikte, C# ileride Windows işletim sistemlerinde olduğu gibi diğer işletim sistemlerinde de kullanılabilecek gibi duruyor. Hatta muhtemelen şu an da öyle. Bu açık kaynak kodlu C# projesine (http://www.mono-project.com/) Microsoft'un kendisi de destek vereceğini açıkladı.

Yazılım Dili Nedir

      Tam kod yazacağız derken bir de yazılım dili nedir sorusu mu çıktı şimdi? Eğer bir profesyonel olduğunuzu düşünüyorsanız bu yazıyı okumanıza gerek olmadığını düşünebilirsiniz. İlk yazılarım kodlamaya yeni başlayanlar için olacak.

      Yazılan her yazılım bilgisayarınızın işlemcisine komut göndererek çalışır. Yani siz hangi yazılım dilini kullanırsanız kullanın, ürettiğiniz yazılım bir şekilde bilgisayarınızın işlemcisi ile iletişime geçmek zorunda olacaktır. İşlemciler her yazılım dilini ayrı ayrı tanımazlar. İşlemcilerin tanıdıkları komutlar vardır ve bu komutlar kullanılarak hazırlanan kod dizilerine Machine Language, yani makine dili denir.

      Yazılım dilleri, işlemcilerin kullanmakta olduğu bu makine dilini, daha anlaşılır bir şekilde yönetmek için tasarlanmış dillerdir.

      Peki işlemcinin tanıdığı bir dil varsa, farklı yazılım dillerinde hazırlanan yazılımlar nasıl bu işlemcilerle iletişime geçiyorlar? Farklı yazılım dillerinde hazırlanmış olan kodlar bir şekilde makine diline çevrilmek zorundadır. Yani siz A dilinde kod yazacaksınız, bir tercüman da yazdığınız kodları makine diline tercüme edecek. İşte bu işi yapan yazılımlara Compiler, yani derleyici denir. Derleyiciler, yazdığınız kodları ".exe" (executable) veya ".dll" (dynamically linked library) dosyalarına dönüştürürler.

      Hmm, eğer arada bir tercüman varsa ve yazdıklarımızı çalıştırılabilir kodlara dönüştürecekse biz boş bir sayfa açıp içine tercih ettiğimiz yazılım dilinde kodlar yazabilir, bu kodları da derleyiciye derlettirebiliriz. Evet, aslında şunu söylemeye çalışıyorum, bir not defteri (text dosyası) açarak içine istediğiniz yazılım dilinde kod yazabilirsiniz. Daha sonra bu not defteri dosyasını (txt uzantılı dosya) bir derleyici kullanarak bir yazılıma dönüştürebilirsiniz.

      Peki C# ile yazacağımız kodlar da makine diline çevrilecek mi? E yani, çevrilmek zorunda. Bu konuya biraz daha ayrıntılı yaklaşacağız. Önce cevaplamamız gereken iki soru daha var. Framework nedir? High level ve low level yazılım dilleri ne anlama gelmektedir?

Framework
   
      Büyük yazılım projelerinde ihtiyaç duyulacak genel fonksiyonları barındıran yazılımlara framework denir. En bilinen framework'lerden bir tanesi ".Net framework"dür. Bilgisayarınıza bir yazılım yüklediğinizde, sizden önce "Microsoft .Net Framework 3.5 veya 4.0" sürümlerinden birini yüklemenizi istediği olmuştur. Windows güncellemeleriniz açıksa bu framework'lerin muhtemelen birkaç farklı sürümü bilgisayarınızda halihazırda yüklüdür (Windows işletim sistemlerinde.). Belirli amaçlara yönelik genel fonksiyonları bulundurması ve bir veya daha çok farklı projede kullanmak için bir yazılım hazırlarsanız bu yazılım da sizin framework'ünüz olacaktır.

      C# ile kod yazarken de arka planda .Net Framework kullanırsınız. Örneğin bir klasörün içindeki dosyaların isimlerini öğrenmek istediğiniz zaman bu işlem için bir veya iki satır kod yazmanız yeterli olacaktır. Eğer Microsoft'un hazırlamış olduğu bu framework'ü kullanıyor olmasaydınız bu kadar basit işlerden bile bir iki satır kodla kurtulamazdınız. .Net framework içinde Windows işletim sisteminin araçlarına erişimler için fonksiyonlar ve tabi ki daha birçok işlem için fonksiyon bulunmaktadır.

High Level ve Low Level Yazılım Dilleri

      High level yazılım dillerinin tanımı için Wikipedia'dan yardım alalım:

     "Bilgisayar biliminde, "high level language" (yüksek seviye dil), bilgisayarın ayrıntılarından yüksek düzeyde soyutlanmış bir yazılım dili anlamına gelmektedir. "low level" (düşük seviye) dillere kıyasla "high level" (yüksek seviye) diller, bilgisayarın temel bileşenlerini genellikle doğrudan kullanmaz, hatta çoğu zaman bu bileşenleri (Örn: bellek yönetimi) tamamen gizlerler. Bu soyutlamadaki amaç, düşük seviye dillere kıyasla, yazılım üretimi çalışmalarını daha basit ve anlaşılır bir düzeye indirgeyebilmektir. Soyutlamanın düzeyi, yazılım dilinin yükseklik düzeyini belirler."

     Yukarıdaki metni ben çevirdim, yazının orijinali için:

     Kısaca tanımlamaya çalışırsak; Yüksek seviye diller, bilgisayarın temel mekanizmalarıyla uğraşmanıza gerek kalmadan kod yazmanız için tasarlanmıştır. Yüksek seviye yazılım dillerini kullanarak daha hızlı ve daha az hatalı kod yazabilirsiniz. C# da bir yüksek seviye yazılım dilidir.

      Yüksek seviye yazılım dilleri ile yazmış olduğunuz kodlar, makine diline doğrudan çevrilmezler. Bu kodlar öncelikle bir "intermediate language"e (Ara dil) çevrilirler. Sonra makine diline çevrilirler.

     Şimdi iki başlık önce sormuş olduğumuz soruya dönelim. C# ile yazdığımız kodlar makine diline çevriliyor mu?

     C# ile ürettiğiniz bir "MerhabaDünya.exe" dosyasını ele alalım. Bu dosyada yer alan kodlar "intermediate language (IL)" (Ara dil.) olarak kaydedilmiştir. Ürettiğiniz yazılıma çift tıklayıp başlattığınızda ise .exe dosyanız içinde yer alan kodlar makine diline çevrilir. Yani kodlarınız siz yazılımı açtığınız anda makine diline çevrilir. Bu çevirme (derleme) işini yapan yazılımlara da "JIT Compiler" adı verilmiş. JIT harfleri "Just In Time" (Anında) kelimelerinin kısaltmasıdır.

   Yazılımınızın, çalıştırılma anında makine diline çevrilmesinin en büyük faydası ise yazılımınızı, üzerinde çalıştığı makinenin donanımından soyutlamasıdır. Bir yazılımın bir bilgisayarda çalışması için önemli olan tek şey işletim sistemi değildir. Yazılımın çalıştığı makinenin işlemcisinin yazılımı da önemlidir. JIT derleyiciler, sizin "ara dil" ile derlediğiniz yazılımı makine diline çevirirken işlemcinizin, markasını ve sürümünü (mimarisini) de dikkate alır. Böylelikle kullanıcılarınız, her türlü donanımla yazılımınızı kullanabilirler. Burada akla şöyle bir soru geliyor; Düşük seviye dillerle yazılmış olan yazılımlar işletim sistemleri aynı olsa bile farklı makinelerde çalışmayabilir mi? Bu sorunun yanıtı evet, çalışmayabilir. Ancak bildiğim kadarıyla işletim sistemleri kendi içlerinde oluşturdukları soyutlamalarla bu konuyu aşmakta (daha ayrıntılı bilgi için araştırmanızda fayda var:)).

   Şimdi yazdıklarımızı toplarlayalım, C# ile bir *.exe dosyası ürettiğimizde elde ettiğimiz ürün aşağıdaki özellikleri taşıyacaktır diyebiliriz:

C# kodlarınız => Microsoft C# derleyici  => Ara Dilde Derlenmiş .exe Dosyası => Çalıştırma Anında Makine Diline Derleme

   Terimlerin kısaltmalarını da, gördüğünüz yerlerde aşina olmanız için yazmak gerekirse:

C# => Microsoft C# Compiler => MSIL => JIT Compiler

Integrated Development Environment (IDE)

   Integrated Development Environment, kısa adıyla IDE; Yazılım geliştirme platformudur. Bir not defteri dosyası açarak içine istediğiniz yazılım dilinde kod yazabileceğinizi ve bu kodları ilgili derleyiciyi kullanarak bir yazılım haline getirebileceğinizi anlatmıştık. Yazılım geliştirme platformları, kod sayfalarınızı daha iyi yönetebilmeniz ve gerektiği durumlarda hata ayıklayabilmeniz için geliştirilmiş yazılımlardır. Basite indirgemek gerekirse, yazmış olduğunuz not defteri dosyalarını derli toplu tutan ve kodlarınızdaki hataları ayıklayabilmenizi sağlayan platformlardır diyebiliriz.

   Yazılarımızda referans vereceğimiz IDE yazılımı, Microsoft Visual Studio olacak. İlk yazılımımız olan "Merhaba Dünya" yazılımını bu platform üzerinden yayınlayacağız.

   Sanıyorum artık ne yaptığımızı az çok biliyoruz, kod yazmaya başlamamızın vakti geldi:)