Bu yazıyı yıllar önce kendi eski günlüğümde yayınlamlıştım. Aradan 11 yıl geçti ve bu süre zarfında programlama dillerinde birçok şey değişti. Her ne kadar artık favori programlama dilim Go olsa da, yeni başlayanlar için hangi programlama dili ile başlanması gerektiği yönündeki görüşlerim yine aynı sayılır.
Birçok yerde programlamaya başlamak isteyenlerin (genellikle lise öğrencileri), hangi programlama dili ile başlamanın daha iyi olacağını sorduklarını görüyorum. Tabi her kafadan bir ses çıkıyor (buraya yazdıklarım da benim kafamdan çıkan sesler) ve soruyu soran da ayrı bir pişman oluyor. Soruyu soranların bir kısmı, sadece merak ettikleri için programlama öğrenmek isterken, bir kısmı da ileride kariyer olarak programcılığı seçmek istiyor. Bazıları da oradan buradan “abi, programcılıkta çok para var, süper bir proğram/site yapsan deli gibi para kazanırsın. Programcılara hem şirketler de manyak gibi para veriyor.”, “olm var ya, Java diye bir şey varmış, öğrenince şirketler havada kapıyormuş” vs. gibi şeyler duyup merak ediyor, “acaba ben de öğrenebilir miyim?” diye heves ediyor. Uzun sayılabilecek bir süredir programcılık yapan birisi olarak o manyak gibi para veren şirketlerle bir türlü karşılaşmış değilim, ama neyse 🙂
Büyük hevesle “ben programlama öğrenmek istiyorum, ne yapmam lazım?” veya “çeşitli programlama dilleri var, hangisini öğrenmeliyim?” diye soran birine, “hoop, biz senelerimizi bu işe verdik, sen bacak kadar boyunla nasıl hemen öyle programlama öğreneceksin? Önce git bakalım üniversiteye, oku adam gibi X’i, Y’yi, zartı zurtu, ondan sonra program yazarsın” diye cevap verip, çocuğun tüm hevesini kıran ruh hastalarını saymazsak, (bana göre) aklı başında cevap veren kişi sayısı çok az oluyor. Çünkü, verilen cevaplar genellikle ya “Java’ da çok para varmış” gibi sadece paraya dayalı ya da herşeyi abartarak “bu işi sonuna kadar öğreneceksen C öğren” tarzı saçmalıklar oluyor. Farklı programlama dillerinin fanatiklerinin de birbirlerine laf atıp, iyice kafa karıştırması da cabası.
Yeni başlayan birisine tavsiyede bulunmadan önce, programlamayı ne olarak gördüğümüze bakmak lazım. Hayatımın son 12 yılında hep yazılım geliştirme ile ilgili işlerde çalıştım. Ya bir yazılım geliştirdim, ya servis için programlama yaptım ya da bir yazılım ekibini yönettim. Her ne kadar programlama bana bir “ekmek kapısı” olsa da, aslında benim için hep eğlence kaynağı olmuştur. Bu, daha bir bilgisayarım dahi yokken bir BASIC kitabı alıp, okuduğum ve öğrendiğim komutlarla kağıt üzerinde kendimce program yazmaya çalıştığım zamandan beri böyle. Bir şey üretmek, bir soruna çözüm bulmak, ürettiğim veya üretilmesinde pay sahibi olduğum şeyin çalıştığını ve kullanıldığını görmek, her zaman daha iyi, daha hızlı yöntemler geliştirebilmek benim için hep eğlence ve haz kaynağı oldu.
Teknik lisede okuduğum için, müfredatta bize gösterilen ilk programlama dili BASIC (GW-BASIC) idi. Her ne kadar öğretmenlerimiz konuları bize ciddiyetle anlatıyor olsalar da, boş kaldığımız ve pratik yaptığımız zamanlarda hemen bize öğretilen konuların dışına çıkar, kendimizce farklı kullanıcı arayüzleri geliştirmeye, hatta basit bir pencereleme sistemi yapmaya, dosya yöneticileri yapmaya falan çalışırdık. Arkadaşım Hakan ile bu konularda çekişmeli bir yarış içerisindeydik. Ben yeni bir şey yaptığımda böbürlenerek gösterirdikten birkaç gün sonra Hakan benim yaptığım şeyi ilerletip, yeni eklerle daha iyisini yaparak çıkagelirdi ya da tam tersine o başka bir şeyler yapar, sonra ben onu daha ileriye götürmeye çalışırdım. Amacımız bir yandan yeni şeyler yapabilmek, yaparken öğrenmekti ama sonuçta bu iş yine bizim için bir çeşit eğlenceydi.
Bence programlamaya yeni başlayacak birisi de işi eğlence olarak görebilmeli ve yaptığı şeylerden zevk alabilmeli. Bunun için de öğrenmeye/kullanmaya çalıştığı programlama dili, sıkıcı, katı kuralları olmayan, basit şeyleri yapmak için hafıza yönetimi gibi konulara girmek zorunda bırakmayan veya onlarca pakete ihtiyaç duymayan bir dil olmalı. Çünkü yeni başlayan birisinin nereye kadar ilerleyeceğini kestirmek oldukça zor. Eğer işe profesyonel olarak devam etmeye karar verirse, başlarda elde ettiği deneyimi, mühendislik veya bilgisayar bilimleri gibi bir disipline devam ederek taşıyabilir. Yok, sadece eğlence olarak kalacaksa, belki basit programlar yazacak birisini, pointerlar vs. ile sıkmanın alemi ne?
Peki hangi programlama dili?
Yeni başlayan birine C’ yi tavsiye etmek bana sanki ilk defa bisiklete binecek bir çocuğa destek tekerlekleri vs olmadan 18 vitesli bir bisiklet verip, al istediğin gibi kafanı gözünü yarabilirsin demeye benziyor. Çünkü, herşeyden önce kişi bir derleyici (compiler) konusuyla karşı karşıya. Bilgisayarlar konusunda çok fazla teknik bir bilgiye sahip olmayan birisinin derleme konusunu anlaması en başta zor. Kişinin amacı bir program yazıp çalıştırmak, ekranda kendi yaptığı şeyleri görmek vs. İşi biraz ilerletmeye çalıştığında, karakter dizileriyle işlem yapması için gerekli basit fonksiyonların standart kütüphanede olmayışı, onun yerine oturup kendisinin yazması gerekliliği, en başta çok moral bozucu olabilir.
Denebilir ki, şu anda Internet var, Google’ da basit bir aramayla her şey bulunabilir. Doğru, bulunabilir ama bu bilgilerin yeni başlayan birisi için ne kadar sıkıcı ve kafa karıştırıcı olabileceğini göz önünde bulundurmak gerek. Eğer birebir ilgilenip, her sorduğu soruya cevap vermeyecek veya doğru cevapları bulması için yön göstermeyecekseniz, C’ yi tavsiye etmek bana göre yanlış olur.
Peki Java veya C#? Her ne kadar C’ ye göre üst seviye olsalar da, nesneye dayalı programlamayı zorlamak, yine basit işler için de bir çok paket kullanmak zorunda kalmak yine yeni başlayan birisini sıkıcı ve birçok teknik terim içeren kitap/makale okumak zorunda bırakmak demek.
Eğer söz konusu kişi bir bilgisayar programcılığı, bilgisayar mühendisliği veya bilgisayar bilimleri öğrencisi olsaydı, belki C, Java veya C# öğrenilmesi gereken ilk dil olabilirdi. Zaten diğer derslerde ihtiyaç duyacağı birçok bilgiyi alan kişiden bu dilleri öğrenirken karşılaşacağı zorlukların üstesinden gelmesi beklenebilir. Ancak bir hevesle birşeyler öğrenmeye çalışan, amacı eğlenceli birkaç program ve belki de basit oyunlar yazmak olan bir kişiyi, ileride programlamaya profesyonel olarak devam edecek olsa da en başlarda teknik konulara boğmanın işin tüm eğlencesini kaçıracağını düşünüyorum.
Bence yeni başlayan birisinin ilk öğrenebileceği ve çeşitli denemeler yapabileceği dil, kolay anlaşılabilir, herhangi bir programlama tekniğini zorlamayan, yazılan bir programı çalıştırmak için onlarca şey indirmeye ihtiyaç duymayan, gerektiğinde küçük bir betik, gerektiğinde web uygulaması, gerektiğinde masa üstü uygulaması geliştirmeyi sağlayan pratik bir dil olmalı. Bu yüzden hiçbir teknik bilgiye sahip olmayan birine tavsiye edilebilecek programlama dili bence Python.
Internet’te her dil ile ilgili olduğu gibi Python ile ilgili birçok kaynak mevcut. Ayrıca Python’ un interaktif konsolu ve IDLE bir deneme yanılma tahtası olarak kullanılabiliyor. Dilin sadeliği ve kolay okunabilirliği öğrenmeyi kolaylaştırıyor. Bana göre, IDLE gibi bir aracın olması, birçok paket yüklemeden hemen kod yazmaya başlayabiliyor olmak, derleme gerektirmemesi yeni başlayan birisi için önemli ayrıntılar.
Evet, biliyorum, Python ile GUI’ ye sahip bir program yazmak istendiğinde “hangi toolkit’ i kullanmalı?” sorusu ortaya çıkıyor. Ancak hali hazırda TkInter var ve hemen küçük uygulamalar yapmak için yeterli. Yine biliyorum ki, Python’da 3. parti paketler ve bağımlılık yönetimi tam bir karmaşa. Ama yine de oraya kadar kişi birçok programlama terimine aşinalık kazanacak ve birşeyler üretebiliyor olacaktır.
Konuyu ünlü bilgisayar bilimcisi Donald E. Knuth’ un şu sözleriyle bitireyim:
Only ugly languages become popular. Python is the one exception.
Yani;
Sadece çirkin diller popüler olur. Python ise tek istisnadır.
Son olarak, programlamaya yeni başlayanlar için hazırladığım ve elimden geldiğince devam etmeye çalıştığım Python ile Programlama video dizisinden bahsetmek istiyorum. Her ne kadar kişisel nedenlerle uzunca bir süre ara vermek zorunda kalsam da, yine başlayıp hızla devam etmeye çalışıyorum. Bu diziyi hazırlamaktaki amacım, basit ve temel programlama bilgisi verebilmek ve Python ile bir başlangıç yapmayı sağlamak. Ne kadar ilerletip ne kadar gelişmiş konulara kadar gidebilirim şu anda bilmiyorum. Ama yeni başlayanlara yardımcı olacağını ümit ediyorum.
Leave a Reply