Programlama öğrenmeye nereden başlanmalı?

Programlama öğrenmeye programlamanın temellerini öğrenerek başlamalısın. Dillere takılma. Diller senin amacını yerine getirmek amacıyla kullanacağın araçlar. Lazım olduğunda öğrenirsin dili. Dil değil, programlama öğrenirsen her dilde proje geliştirebilir hale gelirsin. Dili öğrenmeye harcayacağın vakit ciddi oranda kısalır. General purpose dillerin mantıkları aşağı yukarı aynı. Bazı diller biraz daha farklı syntaxlar benimsiyor, yine de mantık aşağı yukarı aynı. Kurallar çok değişiklik gösteriyor. Bunun içinde kullandığın dile göre alışkanlık edinirsin zamanla.
 
Programlama öğrenmek istiyorum ama ne için istediğimi bilmiyorum nasıl başlamalıyım?

Genelde web tasarım, uygulama ve oyun geliştirme ile ilgileniyorum nasıl başlamalıyım hangi dili öğrenmeliyim öncesinde ve sonrasında nasıl bir yol izlemeliyim?
Hocam, öncelikle web, mobil, oyun falan hepsiyle aynı anda ilgilenebilirsiniz ancak bu sizi çok zorlayabilir. Web, mobil, oyun derken bir bakmışsınız 4 / 5 tane programlama dili öğrenmeye çalışıyorsunuz. Öncelikle en yatkın olduğunuz alanı belirleyiniz. Yatkınlıktan kastım size en uygun olan, illaki en iyi olduğunuz alan gibi anlamayın demek istediğimi; size ihtiyacı en fazla olan alanı kastediyorum. Mesela iş ihtiyacı için web'e bakabilirsiniz (örnek sadece).

Şimdi ise programlama dili meselesine gelirsek bu konuyu 2 başlık altında detaylı bir şekilde anlatacağım. Tabii, anlattıklarım mobile ve web development için geçerli. Diğer alanlar için araştırma yapabilirsiniz. Buyrun:

1. İlk diliniz için makine diline yakın, yani düşük seviyeli (anlaması ve öğrenmesi yüksek seviyeli dillere göre daha zor, insan diline uzak) ancak yüksek performanslı ve yüksek seviyeli dillere kıyasla daha hızlı çalışan bir dil istiyorsanız, ayrıca yazılım kavramlarına genel olarak hâkim olmak istiyorsanız;

SIze bu durumda Python önermeyeceğim. Zaten bilindiği gibi Python, yüksek seviyeli (high-level) bir programlama ve scripting dili olarak kabul edilir. Python; bu nedenle Java, C ve C++ gibi pek çok dile göre daha yavaş çalışır. Ama dikkat edin, Python'a asla yavaş demiyorum (yavaşlık görecelidir), hatta "bana göre" Python oldukça hızlı ama mesela JavaScript'e kıyasla yavaş kalıyor.

Her neyse, size ilk dil olarak Python yerine C dilini öneriyorum. Çünkü C dili, yazılım âleminin emin olun ki çoğunu oluşturuyor. "Çoğunu oluşturuyor"dan kasıtım tabii ki de C dilini öğrenmenin mobil, web gibi alanlarda uzmanlaşmanın yeterli olacağı asla değil. Hocam, demek istiyorum ki Python, Swift, JavaScript, Java, C#, C++, Objective-C, Perl ve hatta Android, Windows, Linux gibi pek çok işletim sistemi (gömülü sistemler de dahil) C dilinden temel alır.
Yani C dilinin temellerine iyice hâkim olursanız yazılım âleminde işiniz oldukça kolaylaşır. Bu arada C dilini öğrendikten sonra OOP'a (nesne tabanlı programlamaya) daha iyi hâkim olmak isterseniz bir de C++'a da göz atabilirsiniz. Ama C'yi size kesinlikle en başta öneririm.

2. İlk diliniz için yüksek seviyeli, yani öğrenmesi low-level dillere göre insan açısından daha kolay fakat makine diline uzak olduğu için low-level dillere kıyasla daha yavaş çalışan bir dil istiyorsanız;

Size bu durumda Python öneririm. Yukarıda da anlattığım gibi Python, insanın anlaması açısından daha kolaydır; bu nedenle makine diline uzak olduğu için yüksek seviyeli dillere göre daha yavaş çalışır.

Python öğrendikten sonra OOP'in (nesne tabanlı programlama) temel kavramlarından bazılarına ve class (sınıf)vfonksiyonlara hâkim olacaksınız: class'lar (sınıflar), constructor'lar, inheritance vs. Bu arada "temel kavramlardan bazılarına" dedim çünkü Python; encapsulation gibi bazı OOP özelliklerini içermiyor.

Son Durum:

Şimdi ihtiyacınıza göre C'yi veya Python'u öğrendiniz ve yazılım temellerinizi ilk olarak bu dille attınız, diyelim; bu durumda hangi alana yöneleceğinizi seçin. Bu durumu mobil ve web için 2 ayrı başlıkta ele alacağım.

1. Web:

Web Frontend (Web'in Görünen Yüzü):

- HTML / CSS / JavaScript 3'lüsünü veya daha modern bir senaryo için JavaScript dilinden temellerinizi attıktan sonra JS tabanlı framework'ler olan React'ı veya AngularJS'yi öğrenip güzel görünümlü web tasarımlarını yapabilirsiniz.

- Ben, projelerimde web tasarım (web frontend) için HTML / CSS / JS falan kullanmıyorum; bana direkt React yetiyor.

2. Mobil (Android / iOS):

Mobil Frontend (Mobilin Görünen Yüzü):

- Mobil android tasarım (mobil iOS frontend) için Java öğrendikten sonra Java ile Android uygulamalar geliştirebilirsiniz. Ayrıca Java'yı istemiyorsanı JS öğrendikten sonra JavaScript tabanlı bir framework olan React Native öğrenip bu framework ile Android uygulamalarınızı geliştirebilirsiniz, hocam (Java native ve RN cross-platform olduğu için Java mobil uygulamaları, "genellikle" React Native) uygulamalarına göre daha performanslı ve daha hızlı çalışır.

- Ben projelerimde Android mobil uygulama geliştirmek için Java kullanıyorum; bu nedenle çok yönlülüğü ve kullanışlılığı açısından size önerim, Java'dır.

- Mobil iOS tasarım (mobil iOS frontend) için ise aynı şekilde React Native öğrenebilirsiniz, hatta bunun bir avantajı var çünkü RN öğrenirseniz hem Android hem de iOS uygulamalarınızı geliştirebilirsiniz. Ayrıca RN istemiyorsanız Swift öğrenip Swift ile de istediğiniz iOS mobil uygulamasını geliştirebilirsiniz. Ancak unutmayın ki iOS uygulaması geliştirebilmek için en az 1 tane Mac bilgisayara ihtiyacınız olacak, Windows PC ile iOS uygulamasını çalıştıramıyorsunuz maalesef.

3. Web ve Mobil Backend (Web'in ve Mobilin Sunucu Tarafı Kodları):
- Backend (Uygulamanın görünmeyen kısmı, yani sunucu tarafı, server-side) tarafı; uygulamaya kayıt, giriş, uygulamada hesap / kimlik doğrulama, oturum yönetimi, veri tabanı sorguları, eş zamanlı mesajlaşma ve iletişim özelliği gibi kullanıcının pek çok özelliği içerir.

- Backend ile ilgilenecekseniz ve eğer başta C dilini öğrendiyseniz web backend için direkt C/C++ dillerini kullanabilirsiniz ancak eğer internet bazlı öğreniyorsanız internette C/C++ bazlı çok backend kursları veya kaynakları bulamayabilirsiniz; yani bu açıdan Node.js, Django, Go (Golang) ve Laravel gibi dilleri / framework'lere bakabilirsiniz. Aynı şekilde Python öğrenip frontend'den temel attıktan sonra backend'e geçtiyseniz size yine önerim Node.js, Django, Go ve Laravel gibi backend teknolojileridir.

Backend Teknolojileri:

  • Node.js (JS tabanlı bir framework),
  • Django (Python tabanlı bir framework),
  • Laravel (PHP tabanlı bir framework),
  • Go (Google'ın geliştirdiği backend programlama dili)

Bu teknolojiler arasından Node.js ve Go, diğerlerine kıyasla biraz daha performanslı çalışıyor.

Ancak size önerim, Node.js'dir. Çünkü Node.js ile session (oturum) tabanlı yönetim, eş zamanlı mesajlaşma protokolü (mesajlaşma uygulamaları vb. için), uçtan uca şifreleme (AES 256-bit ve RSA-2048 bit ile), token tabanlı kimlik doğrulama işlemleri, güvenlik için password hash'leme (SHA256, SHA512 veya bcrypt modülü ile), sunucuya resim, video, dosya vs. aktarma gibi pek çok özelliği hazır algoritmalardan veya kendi yazdığınız algoritmalardan yararlanarak gerçekleştirebiliyorsunuz.

Ayrıca birkaç hafta önce kendi mobil uygulamamda sunucumu test etmiştim. Laravel ile 5 saniyede yaptığım bir HTTP isteğini Node.js'de 1 veya 2 saniye gibi daha kısa sürelerde ve daha hızlı bir şekilde gerçekleştirebiliyorum.

Önerilerim, bu kadardı; umarım sizlere ve diğer programlama meraklılarına faydalı olur.
Programlamaya başlamadan önce ingilizceniz kötü ise ingilizcenizi geliştirmenizi öneririm İngilizce çok büyük bir etken. Onun hariç web için başlangıçta HTML oyun için Unity başlayabilirsiniz.
Hocam, aslında dediğiniz işin özünde doğru fakat yoruma çok açık diye düşünüyorum ben kendim. Yani en azından İngilizcenin sıfır olması (veya kötü olması); öğrenmeyi imkânsızlaştırmaz, öğrenirken ilgili kodları anlamayı zorlaştırır. Aslında siz belki imkânsız anlamında dememişsinizdir ancak ben, dediğinizin doğru ve eksik yanları olduğunu düşünüyorum. Mesela İngilizce kötü derken ne anlamda kötü? Mesela siz A1 seviyeye kötü, A2 seviyeye yeterli diyebilirken bazıları direkt B1'e de kötü der. Hatta İngilizce seviyesi A2'den aşağıda olan, hatta İngilizcede sıfır bilgisi olan biri bile "programlama"yı cidden isterse iyice kavrayabilir; tabii ki zorlanması da ayrı bir mesele.
 
Hocam, öncelikle web, mobil, oyun falan hepsiyle aynı anda ilgilenebilirsiniz ancak bu sizi çok zorlayabilir. Web, mobil, oyun derken bir bakmışsınız 4 / 5 tane programlama dili öğrenmeye çalışıyorsunuz. Öncelikle en yatkın olduğunuz alanı belirleyiniz. Yatkınlıktan kastım size en uygun olan, illaki en iyi olduğunuz alan gibi anlamayın demek istediğimi; size ihtiyacı en fazla olan alanı kastediyorum. Mesela iş ihtiyacı için Web'e bakabilirsiniz (örnek sadece).

Şimdi ise programlama dili meselesine gelirsek bu konuyu 2 başlık altında detaylı bir şekilde anlatacağım. Tabii, anlattıklarım Mobile ve web development için geçerli. Diğer alanlar için araştırma yapabilirsiniz. Buyurun:

1. ilk diliniz için makine diline yakın, yani düşük seviyeli (anlaması ve öğrenmesi yüksek seviyeli dillere göre daha zor, insan diline uzak) ancak yüksek performanslı ve yüksek seviyeli dillere kıyasla daha hızlı çalışan bir dil istiyorsanız, ayrıca yazılım kavramlarına genel olarak hâkim olmak istiyorsanız;

Sıze bu durumda Python önermeyeceğim. Zaten bilindiği gibi Python, yüksek seviyeli (high-level) bir programlama ve scripting dili olarak kabul edilir. Python; bu nedenle Java, C ve C++ gibi pek çok dile göre daha yavaş çalışır. Ama dikkat edin, Python'a asla yavaş demiyorum (yavaşlık görecelidir), hatta "bana göre" Python oldukça hızlı ama mesela JavaScript'e kıyasla yavaş kalıyor.

Her neyse, size ilk dil olarak Python yerine C dilini öneriyorum. Çünkü C dili, yazılım âleminin emin olun ki çoğunu oluşturuyor. "çoğunu oluşturuyor"dan kasıtım tabii ki de C dilini öğrenmenin mobil, web gibi alanlarda uzmanlaşmanın yeterli olacağı asla değil. Hocam, demek istiyorum ki Python, Swift, JavaScript, Java, C#, C++, objective-C, perl ve hatta Android, Windows, Linux gibi pek çok işletim sistemi (gömülü sistemler de dahil) C dilinden temel alır.
Yani C dilinin temellerine iyice hâkim olursanız yazılım âleminde işiniz oldukça kolaylaşır. Bu arada C dilini öğrendikten sonra OOP'a (nesne tabanlı programlamaya) daha iyi hâkim olmak isterseniz bir de C++'a da göz atabilirsiniz. Ama C++'yi size kesinlikle en başta öneririm.

2. ilk diliniz için yüksek seviyeli, yani öğrenmesi Low-level dillere göre insan açısından daha kolay fakat makine diline uzak olduğu için Low-level dillere kıyasla daha yavaş çalışan bir dil istiyorsanız;

Size bu durumda Python öneririm. Yukarıda da anlattığım gibi Python, insanın anlaması açısından daha kolaydır; bu nedenle makine diline uzak olduğu için yüksek seviyeli dillere göre daha yavaş çalışır.

Python öğrendikten sonra OOP'in (nesne tabanlı programlama) temel kavramlarından bazılarına ve class (sınıf)vfonksiyonlara hâkim olacaksınız: Class'lar (sınıflar), constructor'lar, inheritance vs. bu arada "temel kavramlardan bazılarına" dedim çünkü Python; encapsulation gibi bazı OOP özelliklerini içermiyor.

Son durum:

Şimdi ihtiyacınıza göre C++'yi veya Python'u öğrendiniz ve yazılım temellerinizi ilk olarak bu dille attınız, diyelim; bu durumda hangi alana yöneleceğinizi seçin. Bu durumu mobil ve web için 2 ayrı başlıkta ele alacağım.

1. web:

Web frontend (web'in görünen yüzü):

- HTML / CSS / JavaScript 3'lüsünü veya daha modern bir senaryo için JavaScript dilinden temellerinizi attıktan sonra JS tabanlı Framework'ler olan React'ı veya Angularjs'yi öğrenip güzel görünümlü web tasarımlarını yapabilirsiniz.

- Ben, projelerimde web tasarım (web frontend) için HTML / CSS / JS falan kullanmıyorum; bana direkt React yetiyor.

2. mobil (Android / iOS):

Mobil frontend (mobilin görünen yüzü):

- Mobil Android tasarım (mobil iOS frontend) için Java öğrendikten sonra Java ile Android uygulamalar geliştirebilirsiniz. Ayrıca Java'yı istemiyorsanı JS öğrendikten sonra JavaScript tabanlı bir Framework olan React Native öğrenip bu Framework ile Android uygulamalarınızı geliştirebilirsiniz, hocam (Java native ve rn cross-platform olduğu için Java mobil uygulamaları, "genellikle" React Native) uygulamalarına göre daha performanslı ve daha hızlı çalışır.

- Ben projelerimde Android mobil uygulama geliştirmek için Java kullanıyorum; bu nedenle çok yönlülüğü ve kullanışlılığı açısından size önerim, Java'dır.

- Mobil iOS tasarım (mobil iOS frontend) için ise aynı şekilde React Native öğrenebilirsiniz, hatta bunun bir avantajı var çünkü rn öğrenirseniz hem Android hem de iOS uygulamalarınızı geliştirebilirsiniz. Ayrıca rn istemiyorsanız Swift öğrenip Swift ile de istediğiniz iOS mobil uygulamasını geliştirebilirsiniz. Ancak unutmayın ki iOS uygulaması geliştirebilmek için en az 1 tane Mac bilgisayara ihtiyacınız olacak, Windows PC ile iOS uygulamasını çalıştıramıyorsunuz maalesef.

3. web ve mobil backend (web'in ve mobilin sunucu tarafı kodları):
- Backend (uygulamanın görünmeyen kısmı, yani sunucu tarafı, server-side) tarafı; uygulamaya kayıt, giriş, uygulamada hesap / kimlik doğrulama, oturum yönetimi, veri tabanı sorguları, eş zamanlı mesajlaşma ve iletişim özelliği gibi kullanıcının pek çok özelliği içerir.

- Backend ile ilgilenecekseniz ve eğer başta C dilini öğrendiyseniz web backend için direkt c/c++ dillerini kullanabilirsiniz ancak eğer internet bazlı öğreniyorsanız internette c/c++ bazlı çok backend kursları veya kaynakları bulamayabilirsiniz; yani bu açıdan Node.js, Django, GO (golang) ve Laravel gibi dilleri / Framework'lere bakabilirsiniz. Aynı şekilde Python öğrenip Frontend'den temel attıktan sonra Backend'e geçtiyseniz size yine önerim Node.js, Django, GO ve Laravel gibi backend teknolojileridir.

Backend teknolojileri:

  • Node.js (JS tabanlı bir Framework),
  • Django (Python tabanlı bir Framework),
  • Laravel (PHP tabanlı bir Framework),
  • GO (Google'ın geliştirdiği backend programlama dili)

Bu teknolojiler arasından Node.js ve GO, diğerlerine kıyasla biraz daha performanslı çalışıyor.

Ancak size önerim, Node.js'dir. Çünkü Node.js ile session (oturum) tabanlı yönetim, eş zamanlı mesajlaşma protokolü (mesajlaşma uygulamaları vb. için), uçtan uca şifreleme (AES 256-BIT ve RSA-2048 bit ile), token tabanlı kimlik doğrulama işlemleri, güvenlik için password hash'leme (SHA256, SHA512 veya bcrypt modülü ile), sunucuya resim, video, dosya vs. aktarma gibi pek çok özelliği hazır algoritmalardan veya kendi yazdığınız algoritmalardan yararlanarak gerçekleştirebiliyorsunuz.

Ayrıca birkaç hafta önce kendi mobil uygulamamda sunucumu test etmiştim. Laravel ile 5 saniyede yaptığım bir HTTP isteğini Node.js'de 1 veya 2 saniye gibi daha kısa sürelerde ve daha hızlı bir şekilde gerçekleştirebiliyorum.

Önerilerim, bu kadardı; umarım sizlere ve diğer programlama meraklılarına faydalı olur.

Hocam, aslında dediğiniz işin özünde doğru fakat yoruma çok açık diye düşünüyorum ben kendim. Yani en azından ingilizcenin sıfır olması (veya kötü olması); öğrenmeyi imkânsızlaştırmaz, öğrenirken ilgili kodları anlamayı zorlaştırır. Aslında siz belki imkânsız anlamında dememişsinizdir ancak ben, dediğinizin doğru ve eksik yanları olduğunu düşünüyorum. Mesela İngilizce kötü derken ne anlamda kötü? Mesela siz A1 seviyeye kötü, A2 seviyeye yeterli diyebilirken bazıları direkt B1'e de kötü der. Hatta İngilizce seviyesi A2'den aşağıda olan, hatta ingilizcede sıfır bilgisi olan biri bile "programlama"yı cidden isterse iyice kavrayabilir; tabii ki zorlanması da ayrı bir mesele.

Hocam ben öğrenmesinin işini kolaylaştıracağı anlamında söylemiştim ben dil öğrencisiyim bir ara bir pythona göz atmıştım ve resmen İngilizce konuşmakla aynı gibi gözüktü bana Python, ileri seviye diller böyle değildir belki de ama ingilizcesini de geliştirmesinin etkili olacağını ima etmiştim.
 
Hocam ben öğrenmesinin işini kolaylaştıracağı anlamında söylemiştim ben dil öğrencisiyim bir ara bir pythona göz atmıştım ve resmen İngilizce konuşmakla aynı gibi gözüktü bana Python, ileri seviye diller böyle değildir belki de ama ingilizcesini de geliştirmesinin etkili olacağını ima etmiştim.
Anladım, hocam; tamamdır. Çok teşekkür ederim açıklık getirdiğiniz için, hayırlı çalışmalar dilerim.
 

Yeni konular

Geri
Yukarı