Kodları anlayıp yazamamaya ne yapılabilir?

Endersqui

Femtopat
Katılım
19 Eylül 2023
Mesajlar
71
Daha fazla  
Cinsiyet
Erkek
Python'da yazılan kodları anlayabiliyorum, videolarla beraber de yazabiliyorum. Ama iş tek başına yazmaya gelince yapacağım projenin şeması aklımda canlanıyor bir parça kodu aklımdan bile yazabiliyorum ama başlangıcı getiremiyorum. Çözüm olarak kod yaz, proje yap vs. diyenler oluyor fakat dediğim gibi yazacağım kodların başını getiremiyorum, kopya çekerek yapmanın da pek bir yarar getireceğini düşünmüyorum. Dediğim şeyler dışında nasıl bir yol izleyebilirim?
 
Ne yapacağını bilmeden nasıl kod yazacağını da bilemezsin.

Örnek vereyim yukarıdaki cümleyi açmak için;

Basit bir hesap makinesi yapmak istiyorsun. Genel hatlarıyla bir hesap makinesi ne yapar bir fikrin var. Ama kafanda tam detaylı bir adım yok. Dolayısıyla başlayamıyorsun çünkü ne yapman gerektiğini bilmiyorsun. Eğer eline bir kağıt kalem alır, ya da bilgisayarında bir yere not defteri açıp aşama aşama nasıl yapabileceğini yazarsan, detaylı bir şekilde, daha sonrasında geriye dile nasıl dökebileceğin kalacak. Bunun içinde her zaman dokümantasyonu ve Google'ı kullanabilirsin.

Bu aşamalar her zaman işe yaramak zorunda değiller. Yanıla yanıla yapıyorsun. Mesela bir önceki örneğimizin aşamalarını yazalım.

1. Kullanıcıdan ilk sayıyı al.
2. Kullanıcıdan işlemi al.
3. Yukarıdaki aşamalara kullanıcı eşittir işlemi verene kadar devam et.
3.1 Kullanıcıdan her aldığın sayıya kullanıcının verdiği işlemi uygula ve bir değişkende tut.
4. Sonucu görüntüle.

Bu şekilde yazdık. Şimdi dile dökmek gerek.
C++;
1: int inp = 0, result = 0; std::cin >> inp;
2: char opt = ' '; std::cin >> opt;
3: Burada mevzunun bir döngü olduğunu, ve döngünün eşittir aldığında duracağını görüyoruz;
C++:
    while(opt != '=') {
        std::cin >> inp;
        switch(opt) {
            case '+':
                res += inp;
                break;
            case '-':
                res -= inp;
                break;
            case '*':
                res *= inp;
                break;
            case '/':
                res /= inp;
                break;
            default:
                std::cout << "bad action";
        }
        std::cin >> opt;
        inp = 0;
    }
4: std::cout << res;

Totalde şöyle bir şey çıkacak;
C++:
int hesapmakinesi() {
    int res = 0, inp = 0;
    char opt = ' ';
    std::cin >> inp >> opt;
    res = inp;
    while(opt != '=') {
        std::cin >> inp;
        switch(opt) {
            case '+':
                res += inp;
                break;
            case '-':
                res -= inp;
                break;
            case '*':
                res *= inp;
                break;
            case '/':
                res /= inp;
                break;
            default:
                std::cout << "bad action";
        }
        std::cin >> opt;
        inp = 0;
    }
    return res;
}

Programlama hep yukarıdaki örnekteki gibi. Sadece daha zor programlar aslında bu aşamaları belirlemenin daha kompleks olduğu programlar oluyor ve işin içine hatalara karşı önlem almak giriyor. Ama genel mantığını anlamışsındır.

Login içinde aynı, veri tabanı vs için de. Sonrasında dilin syntaxına göre bu adımları yerine getiriyorsun. Hepsi bu.
 
Ben genellikle uygulamada kullanacağım ana veri sınıflarını yazarak işe başlarım. Mesela bir banka uygulaması yapıyorsam ilk önce kullanıcı türlerini oluştururum. Daha sonra işlem yapacağım sınıfların interfacelerini yazmaya başlarım. Daha sonra işlem sınıflarında işlemler yapar ve veri sınıfıyla bağlantı kurarım. En sondada arayüzü tasarlarım. Sana önerim kesinlikle programlı bir şekilde git. Bir uygulama yapacağından bu uygulamanın özelliklerini ve sınırlarını bir yere yaz. Sonra bunu nasıl uygulayacağın hakkında uzun uzun düşün, paint te birşeyler karala, çiz vs. Aklına takılan yerleri araştır. Genellikle senin karşılaştığın problemlerle başkaları daha önce karşılaşmış oluyor.
 
Sadece video izleyerek öğrenemezsiniz, burada herkes hemfikir herhalde.
Siz öğrenmeden, pekiştirmeden, henüz anlamadığınız ya da anlamayacağınız noktalara gelmişsiniz, tabiri caiz ise yürümeden koşmaya çalışıyorsunuz.

Kopya çekmeden yapamadığınıza göre öğrenene kadar kopya çekerek yapsanız fena olmaz.
 
Ne yapacağını bilmeden nasıl kod yazacağını da bilemezsin.

Örnek vereyim yukarıdaki cümleyi açmak için;

Basit bir hesap makinesi yapmak istiyorsun. Genel hatlarıyla bir hesap makinesi ne yapar bir fikrin var. Ama kafanda tam detaylı bir adım yok. Dolayısıyla başlayamıyorsun çünkü ne yapman gerektiğini bilmiyorsun. Eğer eline bir kağıt kalem alır, ya da bilgisayarında bir yere not defteri açıp aşama aşama nasıl yapabileceğini yazarsan, detaylı bir şekilde, daha sonrasında geriye dile nasıl dökebileceğin kalacak. Bunun içinde her zaman dokümantasyonu ve Google'ı kullanabilirsin.

Bu aşamalar her zaman işe yaramak zorunda değiller. Yanıla yanıla yapıyorsun. Mesela bir önceki örneğimizin aşamalarını yazalım.

1. Kullanıcıdan ilk sayıyı al.
2. Kullanıcıdan işlemi al.
3. Yukarıdaki aşamalara kullanıcı eşittir işlemi verene kadar devam et.
3.1 Kullanıcıdan her aldığın sayıya kullanıcının verdiği işlemi uygula ve bir değişkende tut.
4. Sonucu görüntüle.

Bu şekilde yazdık. Şimdi dile dökmek gerek.
C++;
1: int inp = 0, result = 0; std::cin >> inp;
2: char opt = ' '; std::cin >> opt;
3: Burada mevzunun bir döngü olduğunu, ve döngünün eşittir aldığında duracağını görüyoruz;
C++:
    while(opt != '=') {
        std::cin >> inp;
        switch(opt) {
            case '+':
                res += inp;
                break;
            case '-':
                res -= inp;
                break;
            case '*':
                res *= inp;
                break;
            case '/':
                res /= inp;
                break;
            default:
                std::cout << "bad action";
        }
        std::cin >> opt;
        inp = 0;
    }
4: std::cout << res;

Totalde şöyle bir şey çıkacak;
C++:
int hesapmakinesi() {
    int res = 0, inp = 0;
    char opt = ' ';
    std::cin >> inp >> opt;
    res = inp;
    while(opt != '=') {
        std::cin >> inp;
        switch(opt) {
            case '+':
                res += inp;
                break;
            case '-':
                res -= inp;
                break;
            case '*':
                res *= inp;
                break;
            case '/':
                res /= inp;
                break;
            default:
                std::cout << "bad action";
        }
        std::cin >> opt;
        inp = 0;
    }
    return res;
}

Programlama hep yukarıdaki örnekteki gibi. Sadece daha zor programlar aslında bu aşamaları belirlemenin daha kompleks olduğu programlar oluyor ve işin içine hatalara karşı önlem almak giriyor. Ama genel mantığını anlamışsındır.

Login içinde aynı, veri tabanı vs için de. Sonrasında dilin syntaxına göre bu adımları yerine getiriyorsun. Hepsi bu.
Cok sagolun hocam bir seyler olustu simdi
 
Algoritma kurma ve problem çözme eksikliğinden kaynaklı.

Bunun için seninde dediğin gibi çokça pratik yapmalısın.

Tavsiye olarak hackerrank, leetcode, exercism sitelerinden Algoritma problemlerini çözebilirsin.

Arkadaşın verdiği hesap makinesi örneğindeki aslında asıl algoritma, iki sayının aritmetik işlemidir. 2 sayıyı kullanıcının belirlediği işleme göre çıktıyı ekrana yazdırmak. Sonrasında işlem önceliği, sonsuz hesaplama vs eklenir.
Sen şimdi bu örnekte ilk önce sonsuz veya işlem önceliğini düşünürsen detaylarda boğulursun. Önce küçük bir adım atıp üzerine inşa etmek lazım.
 
Zaten süreç bu şekilde ilerler. Ne yapacağını bilmezsin. Kendini zorlarsın bir şekilde yarım yamalak bir şeyler ortaya çıkar. Bir sonrakilerde daha da alışmaya başlarsın. Her projede gittikçe problem çözmeye yatkınlığın gelişir.
 
Proje şemasını kafada oluşturup kodu yazamaman çok ilginç. Gerçekten kodun sıra sıra nasıl işleyeceğini ve ne yapacağını düşünüyor musun?
 

Geri
Yukarı