Yeni bir dil ogrenirken Python, veya herhangi bir dil kullanmis olmanin saglayacagi avantaj for dongusunun syntax’inin ayni olmasi degil. Direkt olarak for dongusu.
Ornegin for dongusu kullanarak imperatif yolla Python’da problem cozen birisi aynisini Java’da yaparken zorlanmaz. C#'ta yaparken zorlanmaz. Cunku zaten for dongusunun ne oldugunu biliyordur ve cozmesi gereken bir problem oldugunda Python’da yuruttugu mantigin aynisini yurutur. Python’da imperatif problem cozmus birisi cogu yuksek seviyeli imperatif dilde aynisini yapabilir.
Ancak C’de yaparken zorlanabilir mesela, o da memory management kurallarini ve C’de bu isin nasil oldugunu ogrenmesi gerekir ekstra olarak. Ki ustune Python ve Java’da bulunan string-manipulation isleri icin binbir turlu ufak tool da yok C’de, her seyi bastan yazmak ya da ek bir kutuphane kullanmak gerekir.
Benim 13 yasindaki bir kiz cocugu hangi dille programlamaya baslamali sorusuna bir cevabim yok, farketmez. Yuksek seviye, populer, herkesin ogrenebilecegi bir dil olabilir. Hic farketmez. Mesele, programlama konseptlerini hangisinde daha iyi kavrayabilecek.
Tabii cocugun hevesi, ilgisi var mi o da ayri konu. Biraz biraz her hobiden gosterip hangisi ilgisini cekiyor gormek daha iyi.
Verdiğiniz bilgiler için teşekürler. Sorularıma verdiğiniz yanıt nezaketi içğnde teşekkür ederim. Aklın yolu farklı farklı ama ortak akla gelmek için bilginin kaynağına ulaşmak istedim. Benim bilgim ve tecrübem geçmişin, ama bugün teknoloji ve dillerin modüler yapısı ile çok güzel. Ve o modüllerinde öğrenilmesi gerekiyor onu anladım.
Saygılarımla…
Tabi ki sadece for döngüsü meselesi değil. Ama kapsam belirlemek için girinti çıkıntı yapmak gibi diğer dillerde pek rastlanmayan özellikleri de gözardı etmemek gerekir. Bunun yanı sıra, nesneye yönelik programlama odaklı bir dil olduğu için nesneler üzerinde çalışmaya başlamadan önce temel programlama tekniklerini de göz önünde tutmak gerekir.
Şimdi bir kaç dilin syntax ini alt alta koyun şunu göreceksiniz, neredeyse hepsi C formatında yazılıyor.
Yani bu daha önce saydığım birkaç dil içerisinde hemen hemen hepsi syntax olarak bir birine yakın. Vurguladığım bu.
İstisnası, pascal ve object pascal grubu olabilir.
Tabi ki C yi yeni başlayan birine önermem. Bu nedenle yazımda öğrenme eğrisi dik bir dildir diye belirttim.
Benim şöyle bir cevabım var.
Programlama öğrenirken, tip kontrollü, derlenen bir dil öğrenmek.
Nedeni neden integer, neden char, neden string veri kullandığını görebilmek.
Tabi bu tip kontrollerini yaparken tip dönüşümlerini de kolayca yapabileceği diller.
Aynı zamanda yapılsal programlama ile başlanmalı.
Böylece, işlem basamaklarını, akış şemalarını net bir şekilde kafasında canlandırabilmeli.
Ardından nesneye yönelik programlama ile devam edebilir.
Doğrudan nesneye yönelik programlama ile başlamak sınıf yapısının zihinde canlanmasında zorluklara neden olabilir.
Kaldı ki yazılan/öğrenilen bir çok kod nesne gerektirmeyecek kadar basit kodlar olacaktır. Nesneleri neden kullanması gerektiğini kavraması açısından da önce yapısal programlamanın öğrenilmesinde fayda vardır.
Bu nedenle görsel kodlayıcısı olan dilleri önerdim. Labview, strach gibi dillere bakarsanız anlarsınız diye düşünüyorum.
Sebebi de şu, öğrenilecek ilk şey bir problemin çözümünün bilgisayara nasıl aktarılacağı, bilgisayarın neyi yapıp neyi yapabildiğinin anlaşılımasıdır.
Yani yeni öğrenen birinin, syntax hataları, kütüphane/modül yükleme sorunları gibi doğrudan problemin çözümüne katkı sağlamayacak kısımlarıyla uğraşmasını istemem.
Ardından tabi ki her dil ile haşır neşir olup, bunlarla da uğraşmak isteyebilir.
Burada aslolan, hiç bu kelimeyi kullanmayı sevmem ama algoritmayı oluşturabilmektir. Yani sorunun çözümü için bir yol oluşturduktan sonrası sadece o dilde kodu yazma kısmıdır.
Yani, mp3 codec ini düşünelim. Burada hangi dilde yazıldığına gelmeden önce, Huffmen sıkıştırma algoritmasının tasarlanması anlamlıdır.
Yada, yapay zeka, görüntü işleme konularında görülen, kenar belirleme algoritmaları gibi algoritmaların tasarlanması bu işin asıl çekirdeğidir.
Sonrası zaten bir dilde bunu kodlamaktan ibarettir.
Bize, ülkeye gerekli olan bu algoritmayaları tasarlayacak insanlara yol göstermektir. Yoksa kod işçisi olursunuz. Bana pythonda, şunu yapan, c de bunu yapan bir program yaz, demek zaten varolanın tekrarıdır. Ancak öğrenme aşamasında faydalı olabilir ama bu bir nevi tüketiciliktir. Dili tasarlayan, algoritmayı tasarlayan insanlar bu işin başındayken, bunları öğrenmeye çabalayarak ömrünü dolduranlar sadece kod işçisi olabilirler, kodun patronu olamazlar.
Kişiler özelinde konuşmuyorum.
Kodlamayı sevdirmek için tabi ki önemli. Dikkat çekmek, ilgisini artırmak, vs. Bunlar pedagojik konular. Ben yetişkin eğitimine odaklıyım. Diğer taraftan yetişkin eğitimi ile çocuk eğitiminin de neredeyse tam tersi işlediğini de rahatlıkla söyleyebilirim.
Özetleyecek olursak;
Yeni başlayan biri, daha az yazım hatası gibi konularla uğraşabileceği, daha az nesnelerle uğraştığı prosedürel/ yordamsal/ yapısal programlama ile başlamalı ki, adım adım ne yapabildiğini farkedebilmeli.
Maalesef bir çok dilin temel eğitimi, konsol/terminal üzerinde başladığından evet çocukların eğitminde ilgisini çekmeyebiliyor.
Ama görsel arayüz içeren bir programı, konvansiyonel dillerle, python dahil , öğrenme aşamasında kullanırsanız, aynı zamanda arayüz programlama bilgisini de ayrıca öğretmeniz gerekiyor ki bu da asıl odağı, algoritma/problem çözüm yöntemleri yerine arayüze harcatıyor.
Burada çok gördüm.
TKinter da bir kod yazıyor. Daha iki sayıyı toplayacak bir kod. Sonra butona tıklıyor hop arayüz dondu.
Bu sefer dönüp, uzun süren hesaplamalar esnasında nasıl arayüzü serbest bırakabielceğini, windows veya linux işletim sisteminin temel dinamiklerini açıklamak, multithreat gibi konuları anlatmak zorunda bırakıyor.
Bir anda iki sayıyı toplayacak yada bir while döngüsü içinde karşılaştırma sürelerini beklerken donan ekrandan. Paralelizm çoklu işlem konuları anlamaya geçip, aşırı bilgi yüklemesine neden olunuyor.
Bu sorunu ilk ben farketmedim. Çocuk eğitimi, pedagojik eğitimde bu işi nasıl çözeriz diye, MIT kafa yormuş ve sonuç, Sctrach.
Yani temel programlama eğitiminde arayüz ile uğraşmak sizi yanlış yöne götürür. Arayüz geliştirmekle ilgili bilgileri öğrenmeye harcadığınız vakit asıl algoritma bilgisinden sizi uzun süre alıkoyar.
Şurada windows’un mesaj kuyruğunu, olaylarını , mesaj işlemeyi anlatsam sayfalarca yazı ve öğrenilmesi gereken sayısız bilgi gerektirir. Hepi topu bir butona tıklanacak ama arkasında devasa bir mekanizma dönüyor. Tabi ki bu da öğenilmeli ama ilk buradan başlanmaz.
Ben olsam yeni başlayan birine visual basic önerirdim. Arayüz oluşturmak gayet kolay. Tip kontrolü ve tip dönüşümü kolay.
Yani sürükle bırak kodlamadan bir önceki seviye olarak, VB, sürükle arayüz tasarla sayesinde makul bir nokta olabilir. Bunun yanı sırsa Visual C# da ikinci sırada olabilirdi.
Yalnız bunlar microsoft shit’i olduğundan sevmeyen de olabilir. Bu durumda Eski borland, yeni Codegear ın, Delphi’sini önerebildirdim.
Tabi dil önermek çok karmaşık bir konu. Adam, web programcısı, backendçi, frontendçi falan o konular ayrı. Ama yeni öğrenen ve programlamaya başlayan biri için önerilerim bunlar olurdu.
Yine hedefi android olan birine (temel programlamayı öğrendikten sonra olma koşuluyla) kotlin ve java önerirdim. Java her ne kadar sevmediğim dil olsa da, anroid için gayet native bir dil. Hatta yeri gelmişken, apk dosyasını winrar gibi bir zip açabilen programla açarsanız içinde xml dosyası, dex dosyası olan bir zip dosyası olduğunu anlayabilirsiniz.
Burada dex dosyasının, derlenmiş java byte dosyası olduğunu, aslında androidin bu dosyayı yürüttüğünü kolayca görebilirsiniz.
Çok uzadı. Sonuçta görsel arayüz programlama bilgisi gerektirmeyen yeni nesil, sürükle bırak mantığı ile kod yazabileceğiniz alternatiflere mutlaka bakmalısın.
Yeni başlayanlar, tip kontrolü, sınıf yapılarıyla boğuşma, arayüz detayları ile boğuşmama, sadece işlem adımlarına odaklanma için rahatlıkla buralardan başlayabilir.
Ve tabi ki kod tabanlı programlama önemli ama yeni başlayan ve hevesi kırılmasın diyorsanız bunları da göz önünde tutmalısınız.
Reo çok çok teşekkürler…
Çok aydınlatıcı bir bilgi vermişsin. Scratch ve visual basic ile algoritmanın önemi ve sonuca ulaştıran bir işlevi olduğunu öğrenmek sonrasının kişiye özel hitabı olan görselşik yada modüler yapılar ki oda yaşına , merakına ve zamana bağlı olarak twrcih doğrultusunda olgunlaşır
Ya cok farketmiyor bence. Python’da scope girinti ile, tamam ama bu cok da buyuk bir sorun degil sanki. C’de ve C syntax ailesine dahil dillerde suslu parantez ekliyoruz sadece basina ve sonuna.
Katiliyorum. Nesne tabanliyi ogrenmeden temel programlamada sorun yasamiyor olmak onemli. Hic oralara girmeden Python bi noktaya kadar yaziliyor ama.
Evet, su an konustugumuz dillerin cogu syntaxinda C ailesine mensup.
Istisnasi cok var. Benim ilk aklima Lisp ailesi, Haskell ailesi geliyor. Kalan dillerin cok buyuk kismi ya unique syntaxa sahip ya da ortalarda bir yerlerde.
Yazinin devamina diyecek fazla bir seyim yok, cogunda hemfikirim.
Tabi ki size göre farketmet, birden çok dil ile uğraşmaya başlanılan aşamada farketmez. Ama bir dili yeni öğrenip diğerine geçmeye çalışan biri için hele ki yeni öğreniyorsa şaşırtıcı olabilir.
Ama sadece konu parantez meselesi değil. C++ daki nesneye yaklaşım, nesne üyelerine erişim ile python nesne tanımlaması çok da bir birine yakın diyemeyiz.
“->” nesneye pointer erişimi ile python snınıfları arasında bağ kurmak da baya zaman gerektirir.
Aslında yazılamıyor.
Veri tipinin kendisi bile sınıf olan bir dilde yapısal programlama yaptım demek yanılsama.
string veri tipinin capitalize() gibi bir metodunu, yapısal programlamada izah etmek zor olabilir.
Buna şunu da ekleyin syntax aynı ve alt yapı ve çalışma metodları çok çok farklı olabiliyor.
İstisnaları beni güldürdü. Ben de benden başka autolisp kullanıp onca parantez arasında kod yazan kaldı mı diye merak ediyordum.
Tabi ki popülerliği azalmış yada yaygınalaşamamış dillleri genellememin içine almamıştım. Ama lisp i görünce anılarım tazelendi.
Konunu özüne dönersek. Şimdiki gençler, çocuklar arka planda ne olup bittiğine enerji harcamadan doğrudan görsel fonksiyonel kodlara ilgil duyuyor.
Bu nedenle bu yönü güçlü dillere bakmak gerekir. Buradaki güçten kastım. Arayüz hazırlamaya zaman harcamadan doğrudan görsel elle tutulur bir sonuç istiyorlar.
Bu konuda maalesef uzun süre üzerinde çalışırsanız, python gui kütüphaneleri ile iyi işler çıkarılabilir ama özellikle gui tasarımın gözardı etmek isteyen kullanıcılara uygun değil.