Programlama öğrenmek isteyenlere altın tavsiyeler

Merhabalar, programlama öğrenmeye yeni başlayanlar ve ilerletmek isteyen arkadaşlara bu yollardan geçmiş, bu alanda teknik dersler vermiş biri olarak tavsiyelerim;

Programlamanın aslında bir soruna karşılık çözüm geliştirmek olduğunu bilerek başlayın. Bu iş baştan sona sorun bulmak, sorun çözmek, çözümü daha iyi hale getirmek yani çözümü sorun haline getirip onu da çözmek derken sonsuz bir çözüm döngüsüdür. İster çok basit bir uygulama yazıyor olun, ister karmaşık bir algoritmanın karmaşıklığını hesaplıyor olun sürekli olarak hata alacak, hata çözecek, çözümü geliştirmeye çalışacak ve yine hata alacaksınız. Bu işi huşu içinde, huzurlu bir şekilde yapmak neredeyse imkansız. Kendinizi bu sürece hazırlayın.

Önce algoritma öğrenin. Giriş seviyesi bir algoritma eğitimi almak, programlamayı öğrenmenizi, adapte olmanızı inanılmaz hızlandıracaktır. Ayrıca algoritma dersleri genellikle bir programlama dili üzerinde anlatıldığı için belli başlı programlama terimlerini de öğrenmeye başlamış olacaksınız. Algoritma derslerinin içerisinde veri yapılarının da anlatıldığından emin olun. Yani kısacası programlamaya başlamanın birinci adımı bana göre algoritmalar ve veri yapılarıdır. Bu adımı geçtikten sonra artık bazı şeyleri çözebiliyor hale geliyorsunuz.

Bir alan seçin. Örneğin web programlama ya da masaüstü uygulamaları yazmak istiyorsunuz. Ya da mobil uygulamalar yazmak istiyorsunuz. Her işin farklı kültürü, yolu, yöntemi ve dili vardır. Neyi yapmaktan zevk aldığınızı bulmanız gerekiyor. Bir web sitesinin tasarımını yapmak, kullanıcının etkileşime geçtiği, gördüğü kısmı yapmak istiyor olabilirsiniz. Bu alana Front-End diyoruz yani ön yüz. Bir de kullanıcıların görmediği, sitenin sunucularla haberleştiği, API'ların olduğu, daha karmaşık ve kaotik bir ortam var. Buna da Back-End diyoruz. Bu örnekler çoğaltılabilir. Algoritma öğrenirken yavaş yavaş bunları da gözünüze kestirmeye başlıyor olacaksınız.

İstikrarlı çalışın. Programlama da tıpkı bir konuşma dili gibidir. Günlük yaşantınızda insanlarla konuşurken Türkçe konuşuyor olabilirsiniz. Bilgisayarlarla konuşurken de programlama dillerini kullanmanız gerekiyor. Biliyorsunuz ki dil konuşulmadıkça, okuyup yazılmadıkça unutulmaya müsait.

programlama dili önemli değildir. dillerin yapıları çoğunlukla birbirlerine benzerlik gösterirler. Programlama dillerini birbirinden ayıran şey dillerin paradigmalarıdır. Bir dil nesnel yaklaşımlı bir diğer dil ise yapısaldır. Ya da bir başka dil fonksiyoneldir. Dilleri birbirinden ayıran yönelimleri, yazım şekilleridir. C# dilini bilen bir yazılımcı Java kodunu rahatlıkla okuyabilir. Ya da Java bilen bir yazılımcı C# dilini birkaç gün içerisinde öğrenebilir. Geçiş sırasında zorluk yaşatan şeyler frameworklerdir. Bunlar da birbirlerine çok benzer yapıdadır. Bunlara takılmaya hiç gerek yok.

Dil seçimi yaparken popüler olana değil fazla kaynak olana yönelin. Başlangıçta ingilizcenizin seviyesi ya da teknik ingilizcenizin seviyesi yetmeyebilir. Gidin en çok Türkçe kaynak olan dili seçin.

YouTube üzerinde güncel anlatım yapan kanalları bulun. 10 yıl önce anlatılmış derslerde eski arayüzler, eski kurallar olacağından, şu an mevcut arayüzde bazı şeyleri bulamayacağınız ya da bazı kodlarda hata alacağanızdan eski olmayan dersleri izleyin.

Topluluklara katılın. Burası belli bir noktadan sonra zorunluluk haline gelmeye başlıyor. Artık yazılım toplulukları bloglar, forumlardan çok herkesin kullandığı popüler olan Discord gibi yerlere taşınmaya başladı. Bu gibi topluluklarda sorularınıza hızlı cevap alabilir, müsait kişiler tarafından bazı konularda kısa ve ücretsiz dersler alabilirsiniz.

Yazılmış projelere bakın. Örneğin github.com üzerinde insanların kodlarını inceleyin. Kim hangi programı yapmış, nasıl yapmış bunlara göz atın.

Bootcamp'lere katılın. Bootcamp'ler genellikle belli bir seviyeden sizi alıp daha yukarı bir noktaya çıkarır. Sizinle birlikte başlayan onlarca hatta yüzlerce insanla birlikte çalışma imkanı bulursunuz.

Bootcamp düzenleyen, eğitim serileri çeken kişileri ve kurumları bulup takip edin. Bunlara verebileceğim örnekler;
  1. Patika. Dev.
  2. BTK akademi (sertifikalı)
  3. Udemy (ücretli-ücretsiz / sertifikalı-sertifikasız)
  4. Engin demiroğ (YouTube üzerinde Bootcamp'ler düzenliyor bakmanızda fayda var. Kodlama. IO kurucusu)
  5. Murat yücedağ.
  6. Folksdev(YouTube üzerinde Java Bootcamp'i devam etmekte ve çok verimli bir kanal. Topluluğu da harika)
Araştırma yapmaya özen gösterin. Gelip forumlarda programlama nasıl öğrenilir diye konu açmadan önce, forumlarda bu şekilde açılmış konuları okuyun. İnanın daha hızlı ve verimli ilerleyeceksiniz.

Aklıma geldikçe buraya ekleyeceğim, faydalı olması ümidiyle.
 
Son düzenleme:
Aklı olan şu zamandan sonra C++ veya C# dilleriyle vakit kaybetmez. Yenilikçi olun. React, Angular, Node öğrenin. Bunlar yeri geldiğinde programlamaya da girebiliyor. Türkiye için konuşmayacağım, hep arkadan geliyor Türkiye fakat dünya çapında pazarın %80'i artık bu dillere ait.

Saygısızlık etmek istemem fakat katılmıyorum. C# bildiğim bir dil olduğu için onun üzerinden konuşayım, C# dilinin arkasında Microsoft var ve çok ciddi yatırımlar yapılıyor. Dillere biraz da ticari olarak bakılması taraftarıyım. Örneğin bir firma bir proje yazacağı zaman dil seçimi yaparken o dili bilen piyasada kaç yazılımcı var, bu dilin arkasında hangi firma var gibi etkenleri de göz önüne alıyor. C# bu noktada Microsoft'un en başarılı ürünlerinden biri sayılır. Çünkü çok fazla eğitim, reklam, pazarlama gibi yatırımlar aldı. Kaldı ki hala geliştirilen, oldukça fazla kaynağa sahip. Bu sebeple hala ilk 5 dil arasında olduğunu düşünüyorum.

Bana kalsa Java hariç bütün diller yalan, standart bir Java'cı bakış açısı bu. Elbette bu da yanlış.

Tekrar etmiş olayım, dillere, Framework'lere takılmayın. Günün sonunda algoritma ve matematik konuşuyor. Tecrübe olayı diğer meslekler gibi değil. Örneğin 10 yıllık bir yazılımcı, 3 yıllık bir yazılımcıdan iyidir diyemiyorsunuz bu sektörde. Sürekli güncellenen bir sektör.

Sonuç olarak hiçbir şeyin savunucusu olmamak gerekiyor.
 
Aslında bu işin de kültürü sanırım bu. Birkaç kere paranızı çöpe atmadan kurs seçimi yapmayı öğrenemiyorsunuz.

Kurs seçimi yaparken dikkat edilecekler;
  1. Kursun eğitmenini araştırın. Daha önce ne yapmış, nerelerde çalışmış, insanlar hakkında ne diyor, diksiyonu ve anlatım tarzı size uyuyor mu? Bunlara bakın.
  2. Kursun başlıklarını inceleyin, Google'da birkaç tanesini araştırın. Çok mu karmaşık? Çok mu basit? İnceledikten sonra kafanızda bazı cevaplar oluşmaya, kursun sonunda neleri öğreneceğinizi kestirmeye başlarsınız.
  3. Kursun yorumlarını okuyun ama hepsini de dikkate almayın. Bu son zamanlarda çok canımı sıkmaya başlayan bir konu. Sırf eğitmene saygıdan, ya da eğitmene yakın olabilmek için herkes 5 yıldız veriyor. Halbuki eğitmen, eğitim berbat. Kötü yorumları daha çok dikkate alın.
  4. Kursun içeriğinin ücretsiz versiyonlarının olup olmadığına bakın. Boşuna para vermeyin.
  5. Sertifika var mı yok mu buna da dikkat edebilirsiniz. Bazı orta ölçekli firmalar sertifikaları çok değerli zannedip önem veriyorlar. Halbuki yazılım alanında sertifikaya değil Repository'e, çalıştığı projelere bakmak gerek.
  6. Kursun ne zaman çekildiğine bakın. Eski kurslar genellikle acemilik döneminde yapılmış, ya da az kaynaktan yararlanılarak yapılmış oluyorlar.
Aklınıza başka şeyler geliyorsa siz de ekleyin bir şeyler 😄

Bu kadar detaya gerek yok aslında, 2 önemli ayrıntı var bahsettiğiniz gibi negatif yorumlar ve sebepleri diğeride satın alım/aktif öğrenci sayısı. Mümkün olduğunca çok tercih edilmiş ve az negatif yorum bulunan ve tabii ki İngilizce olan kurslar tercih edilirse problem yaşanmaz.
 
O tonlarca güzel eklentiyi saf JS ile yazabilirsen; kullanmana gerek kalmaz. :) Ayrıca saf JS ile her şeyi yapabiliyorsun zaten.

Hız ve optimizasyonu bozan şeylerin başında eklentiler gelir. Normal bir kullanıcı için farkı anlamak zor olabilir.

Dostum, dostum... Burada PHP'den bahsetmiyoruz. Diyelim Digitalocean'da barınan sunucudaki uploadları Amazon'da barınan CDN sistemime aktaracağım. Neden gayet güzel eklentiler varken saf JS ile uğraşayım? Yazmak isteyen her türlü şeyi, her türlü kaynaktan elde ederek yazar. Fakat bizler yorulmayalım diye adamlar tek command ile tonlarca eklenti sunmak için elinden geleni yapıyor. Bu arada sizin söylediğiniz şey Front-End bir geliştiriciye çok ters. Umarım tasarladığınız sitelerde jQuery vb. Framework'ler kullanmıyorsunuz çünkü sizin bakış açınızla JQuery'nin işlevlerini saf JS ile de yapabilirsiniz.

Saygısızlık etmek istemem fakat katılmıyorum. C# bildiğim bir dil olduğu için onun üzerinden konuşayım, C# dilinin arkasında Microsoft var ve çok ciddi yatırımlar yapılıyor. Dillere biraz da ticari olarak bakılması taraftarıyım. Örneğin bir firma bir proje yazacağı zaman dil seçimi yaparken o dili bilen piyasada kaç yazılımcı var, bu dilin arkasında hangi firma var gibi etkenleri de göz önüne alıyor. C# bu noktada Microsoft'un en başarılı ürünlerinden biri sayılır. Çünkü çok fazla eğitim, reklam, pazarlama gibi yatırımlar aldı. Kaldı ki hala geliştirilen, oldukça fazla kaynağa sahip. Bu sebeple hala ilk 5 dil arasında olduğunu düşünüyorum.

Bana kalsa Java hariç bütün diller yalan, standart bir Java'cı bakış açısı bu. Elbette bu da yanlış.

Tekrar etmiş olayım, dillere, Framework'lere takılmayın. Günün sonunda algoritma ve matematik konuşuyor. Tecrübe olayı diğer meslekler gibi değil. Örneğin 10 yıllık bir yazılımcı, 3 yıllık bir yazılımcıdan iyidir diyemiyorsunuz bu sektörde. Sürekli güncellenen bir sektör.

Sonuç olarak hiçbir şeyin savunucusu olmamak gerekiyor.

Olaya ticari açıyla baktığınız zaman React gibi Framework'lerin arkası daha dolu. Facebook ve Instagram sürekli kendini geliştirdiği için haliyle React'te gelişiyor. Node.JS günümüzde pazarda en çok hacime sahip Framework. Şöyle baktığımızda da zaten React ile yazılmış masaüstü uygulamaları ben buradayım diyor. Örnek olarak Discord. Zaten öyle kendini geliştirmez demiyor kimse fakat size yine aktarmak istediğim nokta C++, C# ülkemizde çok gereksiz bir popülariteye sahip. Bugün kendine bir şeyler katmak için yazılım öğrenecek bir insan, 3-4 yılda olayı tam anlamıyla kavrar. Sizin ele aldığınız dillerin 3-4 yıl önceki haliyle, benim bahsettiğim dillerin 3-4 yılda kendine neler kattığına bakabilir misiniz? Hiçbir şeyin savunucusu olmamakla beraber, her zaman tek bir dile de bağlı kalmayın arkadaşlar. Bu işlere adım atmaya başlayan insanlar yaklaşık 2-3 ay sonra kendinde olan değişiklikleri görür. Hayata tamamen algoritma gözüyle bakmaya başlarsınız. Bir program kodlarken karşılaştığınız sorunları çözme eğiliminiz, araştırma eğiliminiz hayatınıza yansıyor. Sadece program kodlamak için değil, kendinizi geliştirmek için bile istediğiniz dilden istediğiniz şekilde ilerleyebilirsiniz. Emin olun eksisinden daha çok artısı olur.
 
Bu arada sizin söylediğiniz şey Front-End bir geliştiriciye çok ters. Umarım tasarladığınız sitelerde jQuery vb. Framework'ler kullanmıyorsunuz çünkü sizin bakış açınızla JQuery'nin işlevlerini saf JS ile de yapabilirsiniz.
Bu olay genelde müşterilerimin bilgi işlemde çalışan çalışanlarının verdiği bir karar oluyor. Ben ikisini de yazabiliyorum ama büyük projelerde eklenti ve framework kullanman genel olarak. Lakin bana müşteri "kullanabilirsin" ya da "kullan" dediği zaman kullanırım. Evet, bunlar işleri hızlandıran eklentiler ama büyük projelerde sorunlara yol açabilirler. Söylediğim şeylerin terslikle bir alakası yok, bunları kullanmak bir tercih ve isteyen kullanır istemeyen kullanmaz.

Projeye göre değişir yani lakin C dilleriyle bir JS frameworkunu karşılaştırmanın hiçbir mantığı olduğunu sanmıyorum. Bu güne kadar birçok kişiyle konuştum, senin dediğin gibi bir iddiada bulunan birisini görmedim ki C dilleriyle kıyaslanması mantıklı bile değil o frameworklerin.
 
React, Angular, Node öğrenin. Bunlar yeri geldiğinde programlamaya da girebiliyor. Türkiye için konuşmayacağım, hep arkadan geliyor Türkiye fakat dünya çapında pazarın %80'i artık bu dillere ait.

İnterpreter ya da VM' gibi katmanlara ihtiyaç duyan programlama dillerini övüp C++'yı yermenin mantığı yok, sizin at koşturduğunuz platformların geneli ya da Framework'lerin artık her neyse, hepsi C++ veya muadili compile edilen low level programlama dilleriyle yazılır.

Teknoloji üretecek adam C, C++ vb. öğrenir, teknoloji kullanacak adam Java, Python, JS vb. öğrenir. Burada ince bir nüans var anlayan anlar. Oturup da o döver bu döver ya da o eski bu eski muhabbeti döndürmenin mantığı yok.
 
İnterpreter ya da VM' gibi katmanlara ihtiyaç duyan programlama dillerini övüp C++'yı yermenin mantığı yok, sizin at koşturduğunuz platformların geneli ya da Framework'lerin artık her neyse, hepsi C++ veya muadili compile edilen low level programlama dilleriyle yazılır.

Teknoloji üretecek adam C, C++ vb. öğrenir, teknoloji kullanacak adam Java, Python, JS vb. öğrenir. Burada ince bir nüans var anlayan anlar. Oturup da o döver bu döver ya da o eski bu eski muhabbeti döndürmenin mantığı yok.
Kimisi teknolojiyi üretecek kadar yeteneklidir, kimisi teknolojiyi kullanacak kadar. İşin zayıf kalan kısmında mı kaldınız bilmiyorum burada herkes bir şeyler iddia edip pot kırıp duruyor. Platform olarak bakmanıza gerek yok. Javascript, C temelli, Java temelli bir dil. NodeJS'nin başyapıtı C++ değil, Javascripttir. Uzun lafın kısası high-level programlama dili diye geçer. Ve C++'de interpreterdir haberiniz olsun. Assembly'den sonraki neredeyse bütün diller interpreterdir. VM' nedir bu arada? Virtual Machine mi kastediyorsunuz? Umarım bu yazdıklarınızda ciddi değilsinizdir.
Bu olay genelde müşterilerimin bilgi işlemde çalışan çalışanlarının verdiği bir karar oluyor. Ben ikisini de yazabiliyorum ama büyük projelerde eklenti ve framework kullanman genel olarak. Lakin bana müşteri "kullanabilirsin" ya da "kullan" dediği zaman kullanırım. Evet, bunlar işleri hızlandıran eklentiler ama büyük projelerde sorunlara yol açabilirler. Söylediğim şeylerin terslikle bir alakası yok, bunları kullanmak bir tercih ve isteyen kullanır istemeyen kullanmaz.

Projeye göre değişir yani lakin C dilleriyle bir JS frameworkunu karşılaştırmanın hiçbir mantığı olduğunu sanmıyorum. Bu güne kadar birçok kişiyle konuştum, senin dediğin gibi bir iddiada bulunan birisini görmedim ki C dilleriyle kıyaslanması mantıklı bile değil o frameworklerin.
Ben karşılaştırma yapmıyorum, yapılacaksa gayet güzel yapılır orası ayrı fakat sıfırdan başlayacak insanların C++'den değil de daha yenilikçi ve pazar payı büyük olan dillerden başlamasını öneriyorum. Siz bana diyorsunuz ki biz program yapacağız NodeJS ne alaka veya Javascript? Ee ben bunu diyen adama ne diyeceğim? NodeJS ile sadece web siteleri falan oluşturulduğunu falan mı sanıyorsunuz?
 
Ben karşılaştırma yapmıyorum, yapılacaksa gayet güzel yapılır orası ayrı fakat sıfırdan başlayacak insanların C++'den değil de daha yenilikçi ve pazar payı büyük olan dillerden başlamasını öneriyorum. Siz bana diyorsunuz ki biz program yapacağız NodeJS ne alaka veya Javascript? Ee ben bunu diyen adama ne diyeceğim? NodeJS ile sadece web siteleri falan oluşturulduğunu falan mı sanıyorsunuz?
Kim sana NodeJS ve JS ile program yapmayacağını ya da bunların sadece web alanında kullanıldığını söyledi?

Yaptığın karşılaştırmanın mantıksızlığına değiniyor herkes ama sen inadına devam ediyorsun garip bir şekilde. C dilleriyle JS frameworklerini karşılaştırman mantık dışı. Ayrıca o saydığın firmalar bunları ana dil olarak kullanmıyorlar, geliştirdikleri toollarda kullanıyorlar. Kendin yazıp kendin cevaplıyorsun. İşin garibi şu ana kadar fikrine katılan kimse de yok, nedenini hiç sorgulmayı düşündün mü? Doğru sandığın şeyler bazen yanlış olabilir.

Burada kimse C dillerini övüp JS'yi ve frameworklerini gömmedi. Bunun mantıklı bir karşılaştırma olmadığını ve C dillerinin çok geniş bir alana hizmet ettiğini söyledik. Eski teknoloji dediğin dillerle OS yapılıyor. :D
 
Burada gerçekten yazılım ile ilgilenen birilerinin olduğunu düşünmüyorum.
Burada boştan yere böyle bir şey yazmak istemezdim ama bunu yazdığın kişi devlet sitelerinde dahi çalışmış birisi. :D Yine de sen bilirsin. Elde bir argüman kalmadığında karşısındakine sallamak bir Türk geleneği sanırım. Buradan sonra tartışmanın bir manası olduğunu düşünmüyorum. Zira daha "Vanilla" ne demek bilmeyen birisinin böyle konuşması garip.

İsterseniz konuyu R10 gibi gerçekten bu işin ehillerinin olduğu forumlara taşıyabiliriz bakarsınız bunda beni savunan insan sayısı çoğalır. :) Eski teknoloji ve hep öyle kalacak. İsterseniz OS yazın isterseniz BIOS yazın. C++ veya Java geliştiricileri NodeJS ve benzer frameworkler ile tanışınca gençleşiyorlar. Önceden 10 satıra mâl olan fonksiyon 3 satıra iniyor. Daha da anlatmayacağım, gerçekten fikir almak isterseniz R10'a bekliyorum :)
Bu güne kadar birçok Senior ile tanışıp konuşma imkanım oldu. Onların fikirlerini, başka forumlardaki kişilerin fikirlerine tercih ederim. Ayrıca burada bile seni destekleyen bir kişi bile olmadı. :) Her neyse amacın konuyu saptırmak, yazdıklarıma karşı bir karşılık veremeyip konuyu farklı yerlere çekmeye çalışıyorsun.

"Her dili alanında kullanmak en mantıklısı" derken hangi dile laf ettiğimi çok merak ediyorum. :D
 
@die "Vanilla" ne demek onu bilmeden Senior kişilere laf atman cidden aşırı komik dostum. Daha fazla tartışmayacağım. Güvenlik alanından geçmiş birisinin C dilleriyle içli dışlı olması gerekiyor, o yüzden yalan söylemeye gerek yok. :D Karşındakini yenemediğin zaman sallamak hiç iyi bir yöntem değil sadece kendini küçük düşürürsün. Her neyse daha da uzatmanın bir anlamı yok sanırım. :)

@Vavien. hocamı etiketleyelim de gözümün gönlümüz bir C dillerini sağlam bilen birisini görsün. Eğer müsaitse kendisi sana bizden daha iyi şekilde açıklar zaten durumu.
 
Son düzenleme:

Geri
Yukarı