İlk önce C#'mı, C'mi yoksa JS'mi öğrenilmeli?


İlgi duyduğunuz alan ne ise ilgili dile yönelin. Ayrıca JS öğrenmeden önce temel dillerini öğrenmeniz gerekiyor. Ben HTML CSS ile başladım. Eğitim gördüğüm yerde de C ile başladık. Ben size mantığı kavramak açısından C dilini öneririm. Basit bir dil. Döngüleri fonksiyonları vesaire öğrendikten sonra C# da da sıkıntı yaşamazsınız. Ama dediğim gibi ne yapmak istiyorsanız ilgili dile yönelin. Yazılıma bir dil ile başlanmaz. İlgi duyulan alan belirlenir daha sonra bunu yaratacak dil öğrenilir.
 
Eğer amaç detaylı bir öğrenimse; C. Eğer amaç frontendse, detaylı öğrenmeye gerek yok diyorsan, JS. Yok benim amacım web backend diyorsan PHP, JS, Ruby, C# vs. Eğer bunlardan biriyle başlıyorsan bil ki temel mantığı kavraman C'ye göre daha uzun sürecek. C'de her şeyi senin yerine yapan frameworkler ve fonksiyonlar yok. Dolayısıyla mecburen öğreneceksin. C++'ı C'ye göre tercih ederim başlangıç dili olarak. Temel sebebi ise OOP olması. Yaygın dillerin pek çoğu OOP, C'nin aksine.

C#, Java, JS, C++, PHP, Ruby, Python, Kotlin, Swift... Daha pek çok dil. Dolayısıyla structered bir dil olan C ile başlamak yerine C++ ile başlamak daha mantıklı olur bana göre.
 


İkinci üniversite olarak oyun tasarımı okumayı düşünüyorum hep o yönde başlamak istemiştim. ilk bölüm tercihim biraz farklı oldu ama 2. ünide kesin olarak okuyacağım. Onun için oyun dillerini öğrenmek istiyorum.
 

Oyun yapma konusunda evet C# iyi bir seçim. Mantığı kavramak adına C ile başlayıp kolay bir şekilde mantığı oturtabilirsiniz isterseniz. 1 2 haftada halledilecek bir dil (mantığı anlamak konusunda). Veya direk C# ile başlayın. Eğitim videolarını tükettikten hemen sonra örnek projelere göz atın kodları okumaya çalışın. Akılda kalmak açısından her zaman kod yazmak gerekmeyebilir. Kod okumak emin olun daha anlaşılır yapıyor bu işleri. Basit projeler bulun örneğin tek çift sayı bulma programı, veya hesap makinesi gibi. Buradaki kodları değişkenleri, döngüleri anlamaya çalışın. Daha sonra bunu kendiniz yapmaua çalışın. Hata yapmaktan korkmayın hata yapın hatta. Kafanızda senaryolar kurun hata üretmeye çalışın bunların çözümünü araştırın. Zamanla oturacaktır. Sonrasında zaten hem bu dili hem de ileride öğrenecek diğer dilleri daha iyi anlayacaksınız. Bu arada eğer programlama dilinde özellikle döngüleri vesaire anlamakta zorlanıyorsanız algoritma ve programlama derslerini izlemenizi tavsiye ederim. Murat yücedağ ın bu konuda çok güzel anlatımları var.
 
C++'la başla o halde. Pek çok oyun motoru C++ kullanıyor. OOP'a giriş için de mükemmel bir dil. C++ ile temelleri attıktan sonra eğer Unity kullanacağım ben dersen, C# öğrenmek de zorlamaz ardından.
 

C++'la başla o halde. Pek çok oyun motoru C++ kullanıyor. OOP'a giriş için de mükemmel bir dil. C++ ile temelleri attıktan sonra eğer Unity kullanacağım ben dersen, C# öğrenmek de zorlamaz ardından.
C++ çok zor bir dil olarak geçiyor onun için ilk önce C# ile başlamak istedim. C++ bir tık korkutuyor beni nedense xD
 
C++ çok zor bir dil olarak geçiyor onun için ilk önce C# ile başlamak istedim. C++ bir tık korkutuyor beni nedense xD
Korkacak bir şey yok. Zor bir dilde değil. Hata yapması kolay olduğu için sağda solda zor diye anlatılıyor. Pointerlara gelene kadar her şey normal zorlukta. Pointerlar ve VTable işin içine girince biraz karışmaya başlıyor ama OOP'un mantığını en iyi anlayacağın dillerden biri. Inheritance'da pointerlarla yapıldığından, oralar yorar anlamak açısından. Temel söz diziminde bir zorluk yok.

OOP = Nesne Yönelimli Programlama (Object Oriented Programming)
Temel söz diziminden kastım döngüler, değişken ve fonksiyon tanımlamaları, sınıf tanımlamaları, anahtar kelimeler... Bunlar kolay kısım. OOP'u C#'ta da öğrenmen gerekecek. OOP orta zorlukta ki kısım. Üç temel ilkesi var nesne yönelimli programlamanın. Bunlar Abstraction (Soyutlama), Encapsulation (tam karşılığı olarak ne denir bilmiyorum Türkçe'de, ama ben sarma diyorum), Polymorphism (çok biçimlilik).

Abstraction, kısaca veriyi soyutlamak. Adından da anlaşılacağı üzere sınıfın kullanıcılarından erişmelerini istemediğin şeyleri saklıyorsun.

Encapsulation, kısaca, harici kodun bir nesnenin dahili işleyişiyle ilgilenmesini engeller.
Polymorphism, kısaca bir yapının birden fazla halde bulunabilmesi. İmzası aynı olan bir fonksiyonun farklı halleri olmasına deniyor.

Aşağıda bir abstraction örneği var. private içerisinde dışarıdan erişilmesini istemediğimiz şeyleri yazıyor, public'eyse erişilebilir olmasını istediğimiz şeyleri. most_important, (farazi konuşuyorum) sınıftaki dahili bir değişken ve bunun dışarıdan görülmesine gerek yok. too_important dışarıdan görülebilir olmalı ama değiştirilememeli, sadece sınıf içindeki fonksiyonlar onu değiştirebilmeli. less_important, dışarıdan değiştirilebilir ve erişilebilir. const versiyonu ise, eğer program nesne constant oluşturulduysa, internalların değiştirilmeye çalışılması illegal olur, dolayısıyla const olarak oluşturulmuş bir nesnede sadece value dönmeli, değiştirelemez olmalı.
C++:
class Class {
    private:
   float most_important;
    int too_important;
    char less_important;
    public:
    int get_too_important();
    char &get_less_important();
    char get_less_important() const;
}

Encapsulation, internal bir methodun (dışarıda kullanıma uygun değildir yada gerek yoktur, kafa karışıklığı önlenmek isteniyordur vs vs) sadece internal kalmasını sağlamak. Aşağıda bir örneği var. Aşağıda sırasıyla çalışması gereken üç adet fonksiyon var. Dışarıdan rastgele sıralarda çağrılmaları daha sonrasında data'da ve nesnenin çalışmasında sıkıntı çıkartabilir diyelim. Yada kullanıcıların kafasını karıştırabilir. Dolayısıyla bunu kullanıcıdan gizledik, onun yerine internal bir fonksiyon bu fonksiyonlardan gelen veriyi işler ve çağrılması gereken sıraya göre çağırabilir.
C++:
class Class {
    private:
    int run_first();
    int run_second();
    bool run_third();
    public:
    int do_something() {
        run_first();
        run_second();
        if(!run_third()) {
            return -1; 
        }
        return 0;
    }
}

Polymorphism, function ve operator overloading, function overriding... Fonksiyon ve operatörlerin aynı isimleriyle ancak farklı parametreler kullanarak yeniden yazılması. Verilen parametrelere karşılık gelen fonksiyona çağrı yapılır. Aşağıda bir örneği var;
C++:
class Class {
    public:
    int sum(int a, int b) {
        return a + b;
    }

    float sum(int a, float b) {
        return (float)a + b;
    }

    float sum(float a, float b) {
        return a + b;
    }
}

Eğer mainde sum(float, float)'a çağrı yaparsak ve değer olarak 3,14 , 2,21 verirsek ikisinin toplamı olan 5,35 dönecektir. Eğer sum(int,float)'a çağrı yaparsak (bunun için yapmamız gereken birinci parametre olarak int verip, ikinci parametre olarak float vermektir) ve 3,14 ve 2 verirsek çıktı 5,14 olacaktır. Yani overloading parametreler üstünden olur ve verilen parametrelere uygun versiyonu çalışır. Üçü de bakınca farklı fonksiyonlar ama aslında. Operator overloading ise, operatorlerin aynı fonksiyonlar gibi yeniden yazılması. C++'ta, operatorlerde fonksiyon imzasıdır. Örneğin function call operatorü "()"
C++:
int operator()(int a, int b) {
     return a + b; 
}
Nesneye yapılan her operatör çağrısı uygun parametreli haliyle yer değiştirecek.

Kısaca bunlar. Eksik anlattığım veya yanlış anlattığım şeyler olabilir. Amacım o kadar zor ve karışık olmadığını göstermek, bunu yaparken daha da karıştırıyorsam mevzuyu kafanda eğer bunları dikkate almadan da öğrenebilirsin. OOP eğlencelidir. Pointerlarda öyle. Zor diyerek korkutmasınlar seni.
 
C++ çok zor bir dil olarak geçiyor onun için ilk önce C# ile başlamak istedim. C++ bir tık korkutuyor beni nedense xD.

C++ hiç zor bil değil emin olun. Başlayın zaten bana hak vereceksiniz.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…