Programlama öğrenmeye başlayanlar için birkaç not.
Hedef: Programlamaya giriş yapmak hiç kolay değil günümüzde. Çok fazla “dil”, çok fazla “araç”, çok fazla kafa karışıklığı. Bazı insaların bu sebepten dolayı vazgeçtiklerini biliyorum. Bu durumda yardımcı olacağını düşündüğüm bazı notları burada, zaman zaman güncelleyerek, tutmak ve sonunda bir “özet” halinde derlemeyi düşünüyorum.
Programlama Dili veya Programlama öğrenmek?
Bence ilk olarak yapılması gereken, ama ne yazıkki çoğu zaman yapılmayan, bir ayrım var. O da Programlama dili ve Programlama öğrenmek arasındaki ayrım. Bu basit gelsede çok önemli; Sonucu “başarılı” veya “başarısız” olacak şekilde etkiliyor.
Ayrım:
İlk önce bu ayrımı yapmak ve bir farkındalığa varmak gerek:
Programlama dili öğrenmek için mesela:
- söz dizimi (syntax)
- “tipler” (types)
- kütüphane kapsamı/kullanımı (bibliothek)
- …
Programlama öğrenmek isterken ise mesela:
- “Teknik Temeller”:
charset
,byte-code
, … - Paradigmalar
- Konseptler
- Algoritmalar (algorithms)
- Otomat Teorileri (automata theory)
- …
Yani:
Geçişkenlikler olsa bile, Programlama öğrenmek ile Programlama dili öğrenmek arasında büyük fark var. Buna dikkat etmek gerek.
Bak:
Şu bağlantılar işe yarayabilir.
PROGRAMLAMA DİLLERİ
PROGRAMLAMA DILBİLİMİ VE PROGRAMLAMA PARADİGMALARI
Not:
Kaynak bol! Yukarıdaki bağlantılardan “Anahtar kelimeler” ayıklayarak farklı kaynaklara ulaşabilirsiniz.
"Makineye yakın" veya "Makineye uzak" yazılım dilleri (high-level/low-level programming languages)
Bu terimler “soyutlama” derecesini ifade eder (01
'e yakın veya uzak).
Kabaca:
-
Makineye yakın: Kodlarken insana daha çok iş düşer. Daha hızlı.
Mesela:Assembler
-
Makineye uzak: Kodlarken makineye daha çok iş düşer. Daha yavaş.
Mesela:C++
Resim: Yakın/Uzak
http://www.muhaz.org/busch-r-1985-basic-fur-einsteiger/img31.jpg
Genelleme:
- Makineden uzaklaştıkça senin işin kolaylaşır, kod’un performansı düşer.
- “Makineden uzaklaşmak” mesela bellek yönetiminde sağlanan kolaylıklar veya “hata hoşgörüsü” ile gerçekleşir.
- Çoğu kullanıcı ve kullanım alanları için bir fark yaratmaz (zahmeti hariç).
Amaç?
“Kullanım amacı?” ve “Kullanıcı Profili?” sorularının cevabı, programlama dili seçimini etkiler.
Devam etmeden önce not edilmesi gereken, bir proje için tek bir dil kullanılmasının nadir bir durum olduğu. Burada bahsettiğim “taşıyıcı dil” seçimi; Yani, projenin “hayati mekanizmaları” nın oluşturulduğu dilin seçimi.
Kullanım amacı:
Örneğin, Kullanma amacınız “Web Tabanlı Kodlama” ise C
dili pek doğru bir seçim olmaz. Tam tersi, amacınız “Robotik alanında Kodlama” ise JavaScript
aynı şekilde pek doğru olmaz (“taşıyıcı” dil olarak!).
Kullanıcı Profili:
Bu biraz zor açıklanır. Mesela bir deyim/espri vardır "C
Programlayıcıları en azından ne yaptıklarını bilirler" diye. Yani, “Kütüphaneye verdim, çıktıyı aldım” değilde, “Fonksiyonu yazdım, çıktıyı tasarladım” gibi.
Bu “Kendim yaptım”'ın bir bedeli var tabi. “Bu bedeli, eğer sadece arasıra kodlamayı düşünüyorsanız, ödemeye değermi?” “Amacını aşarmı?” gibi soruları cevaplarsanız, “doğru dil” seçimine bir adım daha yaklaşmış olursunuz.
Örneğin, “Kontrol bende olsun” diyorsanız mesela C
ve benzeri dilleri tercih edebilirsiniz. Yok, “Azami kontrole gerek yok. Ben vereyim, o yapsın.” diyorsanız mesela Python
tarzı bir dil daha uygun olur. Ya da, “Benden oynatmadıysam, yaprak bile kımıldamasın” diyorsanız mesela Assembler
ve hatta Binary
olarak kodlayabilirsiniz (Bu durumda şimdiden bir “Kolay gelsin”
Bu arada, yukarıdaki "C
programlayıcı" espirisi Java
Programlayıcıları için kullanılan bir espiri; Ama ayrı bir tartışma konusu
Dipnot: Bu notları kanaatimce, tecrübelerimden yola çıkarak yazdım. Yani, fazlasıyla “genelleme” içeriyor!