Forumlarda ve bloglarda vazgeçilmez bir konu olan bu başlık, programlama kültürünün ülkemizde oluşmasıyla birlikte onlarca kez tartışılmıştır. Uzun bir değerlendirme sonrasında notlarımı aldım. Yanlış olan ifadelerden desteklediğim yorumlara kadar kısa başlıklar halinde değinmenin gerekli olduğunu düşünüyorum.
En sık yaşanılan problemlerden bir tanesi ise (bence en önemlisi) kavramların yanlış kullanımı. Yeni öğrenmeye başlayan birisine bir konu hakkında bilgi verirken şeffaf olmak gerekir. Giriş seviyesinde olan arkadaşlarımın öncelikle öğrenmesi gereken bazı temel kavramlar mevcut.
Makine Dili (Machine Language)
Kendisine verilen komutları işleyebilen denetleyicileri yönetmek için kullanılan dildir. Açıklandığı kadar kolay bir kullanımı ve operasyonu yoktur. Bu nedenle denetleyiciler veyahut işlemciler kendilerine komut vermeyi kolaylaştırma adına farklı seviyelerde derlenmiş yazılımlarla beraber çalışırlar. İnsanların bu tarz işlemcileri programlamaları için kimi zaman yüzlerce ara derleyici çalışabilmektedir. İster tek seferlik kodlanan ister sürekli olarak komut alan bir işlemci olsun, kendi seviyesine yaklaştıkça programlanabilme açısından zaman ve emek artar. Bu nedenle hızlı ara derleyiciler, kolay yazılabilen programlama dilleri sayesinde oluşturulan komutları kök seviyelerine iletilir.
Masaüstü Programlama (Desktop Programming)
Kişisel bir bilgisayardan bu yazıyı okuduğunuzu varsayarak; tarayıcılardan, saatlerce oynadığınız oyunlara kadar işletim sisteminizle uyumlu olarak onun üzerinde çalışan ve derlenip uygun sistemler ile birlikte paket olarak yürütülebilen yazılımlarla uğraşma sanatıdır. Çalıştırıldığı cihazın sahip olduğu donanımları ve daha sonra herhangi bir ara birim elemanı ile çalıştırılabilecek farklı aygıtlara erişimi en kolay olan yazılımlar bu alanda geliştirilmektedir. Tek işlevli statik programlarla birlikte dinamik türden yazılımlar oluşturulabilmektedir. Hangi yazılım dili olursa olsun programı çalıştırabilmek için ona uygun kodladığınız işletim sistemi veya paket sistemlerin yürütme ve şifreleme kütüphanelerine ihtiyaç duyarsınız. Yeni geliştirme alanlarında ise bu duyulan ihtiyaç otomatik hale getirildiği için çok fazla bir şey yapmanıza gerek kalmaz. (Optimizing Compiler)
Web Programlama (Web Programming)
Bir ağ üzerinde, o ağa bağlı olarak gelen isteklere cevap verme çalışmalarının bütünüdür. Bu ağı internet olarak düşündüğümüzde, web siteler kullanıcılardan gelen isteklere cevap veren sistemlerdir. Bunun dışında ise küçük veya kapalı ağlar oluşturularak geliştirmeler yapmak da mümkündür. İntranet olarak adlandırılan bu yapıları küçük internetler gibi düşünebilirsiniz. Bu tarz sistemleri geliştirmek oldukça rahattır. Sadeleştirilmiş kontrol ifadeleriyle birlikte, üzerinde çalıştığı serverside yapısına göre performansı esneklik göstermektedir. Çoğu zaman görsel ve yapısal etiketleme dilleriyle birlikte kullanılır. Genel olarak gelen istek ve bu isteğe verilen cevap şeklinde tasarlanırlar.
Bu notları yazmamdaki temel sebep, isteğinizin öncelikle ne olduğunu iyi belirlemenizdir. Hangi alanda çalışmalar yapmak istiyorsunuz, yazılımla ilgilenirken neler sizin ilginizi gıdıklıyor bunu iyi tespit edip o alana yönelmek faydanıza olacaktır. Web ile alakalı geliştirmeler yapmak isteyen birisini bununla alakasız olan bir kısımdan başlatmak zaman kaybıdır.
Önce Algoritma!
Hangi yazılım diliyle geliştirme yaparsanız yapın, nihayetinde bir şeyleri oluşturmak üzere kod yazmaya başlarsınız. Bunun içinse belirli adımları takip etmeniz ve sırasal düşünmeniz gerekmektedir. Kısaca analitik ve algoritmik zekanızı aktif bir şekilde kullanacağınız programlama dalında dilden daha önemli olan bir husus ise bu işe yatkınlığınızın olup olmadığıdır. Yıllardır yazılım ile içli dışlıyım. Bana bu konuyla alakalı nereden başlayayım diye gelen arkadaşlarımın hepsine ilk önce düşünmeyi seviyor musun diye sorarım. Bu düşünme olayı matematiksel yoğun terimler vs. olarak anlaşılmasın. Şöyle izah etmek gerekirse yazılımda bir şeyi yapabilmek için onlarca yöntem ve argüman vardır, önemli olan nokta ise kullandığınız teknolojileri en verimli şekilde çalıştırmaktır. Bu, sistemin yorulmasından sizin harcayacağınız emeğe kadar her şeyin başlıca ciddi düşünülmesi ve optimize edilmesi anlamına gelir. İşlemlerin sıralı olarak olağan en optimize şekilde oluşturulması veyahut sistem kaynaklarını en az şekilde kullanarak yapılabilecek en kapsamlı iş için beyni biraz ısıtmanız gerekebilir. Küçük projelerde bu kadar kafa yormaya gerek olmasa bile zaman içerisinde sizi tatmin etmeyecek şeyleri aşmak için çok düşünmeniz gerekecektir. Toparlamak gerekirse, düşünmeyi ve deneme yanılmayı sevmiyorsanız köprüden önceki son dönüşten farklı bir yola koyulabilirsiniz.
Düşünmeyi seviyorsunuz, aynı zamanda algoritmik zekanıza da güveniyorsanız hangi alanda çalışmak istediğinizi kararlaştırmalısınız. Kendinize güven aşamasını geçip, algoritma mantığını oturttuktan sonra diller arasında geçiş yapmak oldukça kolaydır. Her dil kendi içerisinde basit kurallara sahiptir. Siz de bu kurallara bağlı kalarak kafanızda olan şeyleri ete kemiğe bürmeye başlarsınız.
Hangi Programlama Dilini Seçmeliyim?
Dil seçme konusuna gelirsek, şu zamana kadar kendisine ciddi manada geliştirici topluluğu oluşturmuş onlarca yazılım dili mevcuttur. Birçoğunun ise ata dillerin daha kolay yazılabilir hale getirilmesi için versiyon atlayarak oluşturulduğu söylenebilir. Kendi alanlarında popüler olan dilleri tercih etmek mantıklı olacaktır. Günlük hayatta bu işi hobi olarak dahi yapsanız ciddi bir geliştirici topluluğu olan dilleri seçtiğinizde, takıldığınız noktaları daha kolay aşabileceğiniz sorundaşlarınızın varlığını bilmek işleri kolaylaştırabilir.
Masaüstü Programlama Dilleri
- C ve kökenli diller.
- Visual Basic ve modern .NET ailesi.
- Java
- Python
- Pascal
- Delphi
Web Programlama Dilleri
- PHP
- Klasik ASP ve .NET
- Java
- JavaScript
- Ruby
- Python
Yazılabilecek onlarca dil mevcut, listeyi oluştururken aslında dillerin bu kadar kolay birbirinden ayrılamayacağının da altını çizmek istedim. Bir süredir yukarıda saydığım programlama dillerinin her birisiyle diğerini kodlamak mümkün hale gelmeye başladı. Yavaş yavaş platform kavramı kalkarak ciddi bir dönüştürücü derleyici çılgınlığı başladı. Microsoft’un stüdyo açılımıyla birlikte masaüstü geliştirme dilleriyle web noktasında korkunç atılımlar gerçekleştirildi. Nihayetinde keskin olarak bir liste çıkarmak gülünç olsa bile kaba taslak kişisel listem bu şekilde. Hepsini uzun uzun anlatmaya gerek yok, kendi düşüncelerim ise;
C : kendi ailesinin dışında (C++ ve C#) diğer birçok dilinde alt yapısını ve esinlenme kaynağını oluşturmuştur. Yöntemlerinin ve deyimlerinin öğrenilmesi sonrasında, diğer dillere geçişiniz fazlasıyla rahat olacaktır. Yazımı ise kendinden önceki A ve B kökenli dillere göre kolaydır. Geliştirme yapmak için de, öğrenmeye başlama dili olarak da önerebilirim.
Visual Basic : Microsoft tarafından MSDN kütüphanesiyle birlikte ciddi bir alt yapısı bulunmaktadır. Sunulduğu zamana kadar diğer dillerin VB kadar gelişmiş bir arayüz tasarımı bulunmamaktaydı. Kontrol ifadelerinin yazımının kolaylığı ve algoritma ezme noktasında fazlasıyla rahat bir dildir. Formsal ögeler ve komponentler ile birlikte aklınızda olan projeleri rahatlıkla geliştirebilirsiniz. Geliştirme yapmaktan çok algoritma mantığını çözmek için öneriyorum.
.NET ailesi : Basic açılımının 6.0 sürümünden sonra, C kökenli dillerin de geliştirilebildiği ve masaüstü programlama ile web ortamının buluşturulduğu köprüdür. Visual Studio yardımıyla görsel arayüzler ile C dillerini geliştirebilmektesiniz. Aileyi genel olarak sevsem de, öğrenmeye başlama adına önermemekteyim. Giriş seviyesindeki mantıkları çözebilecek kolay bir yapıya sahip değildir, işi çözdükten sonra ise koca bir kütüphane ve geliştirici topluluğu sizi beklemektedir.
Java : Geniş kapsamlı uygulamaların ve veritabanı yönetim işlevselliklerinin desteğiyle önemli bir pozisyondadır. Oracle ortaklığıyla birlikte kendisine mobil ve web alanında verilen farklı destekleri bulunsa da giriş seviyesinde önerdiğim bir dil değildir. Büyük verileri işlemek ve onları bütün platformlarda esnek bir şekilde idare etmek istiyorsanız işleri yoluna koyduktan sonra öğrenmenizi önerdiğim bir programlama dilidir.
PHP : En çok sevdiğim dildir kendisi. C diline yazım noktası açısından fazlasıyla benzemektedir. Nesne yönelimli programlama desteği geldikten sonra web alanında başka bir dile ihtiyaç duymadım. Programlamaya başlamak isteyen arkadaşlar için web konusunda fazlasıyla kolaylık sağlayacaktır. Hem geliştirme hem de öğrenmeye giriş aşamasında önerdiğim bir dildir.
Genel olarak popüler diller ile alakalı fikirlerim bu şekilde. Bu tarz bir muhabbet açılmışken bahsetmeden olmayacak bir şey ise HTML ve CSS’in bir yazılım dili olmadığıdır. HTML, sunucu tarafında yorumlanan cevabın tarayıcı bazlı olarak kullanıcıya sunulduğu noktada kullanılan bir etiketleme dilidir. CSS ise bu noktada sunulan içeriklerin stillerine müdahale etmek için kullanılır. Listeye aldığım tüm diller SQL dilini içerisinde desteklemektedir. Piyasada aktif olarak kullanılan veritabanı sistemlerinin hepsi, SQL dilini kullanarak bahsetmiş olduğum yazılım dilleriyle yönetilebilmektedir.
Hangi dili seçerseniz seçin, bir şeyler yerine oturmaya başladığı zaman kendinizi otomatik olarak yönlendireceksiniz zaten. Bir süre sonra yazım alışkanlıklarınıza uyumlu, geliştirmesi size göre kolay olan dili ihtiyaçlarınız doğrultusunda keşfedeceksiniz. Ben ise bu noktada tekrar söylemek gerekirse ilk olarak algoritma sistemini oturtmanızı öneriyorum, sonrası çorap söküğü gibi gelecektir. Konuyla alakalı sorularınızı blogumdaki yorum kısmından bana iletebilirsiniz, detaylı bir şekilde cevaplayacağımdan şüpheniz olmasın.
Kaynak: http://metin.li/hangi-yazilim-dili
Forum Konusu: http://wmaraci.com/forum/yeni-bloglar/yeni-blogum-metin-li-151950.html