Yazılarımız

Veri Akademi

TEMEL PROGRAMLAMA NEDİR? DEĞİŞKENLER, KONTROL AKIŞI VE HATA AYIKLAMA MANTIĞI

Programlamayı öğrenmek, bir dili ezberlemekten çok düşünme biçimini inşa etmektir. Değişkenler, koşullar ve döngüler ilk bakışta “kurallar listesi” gibi görünür; ama aslında bilgisayara net talimat vermenin, belirsizliği azaltmanın ve problemi küçük parçalara ayırmanın yollarıdır.

Bu yazıda “temel programlama” denince akla gelen ana taşları; değişkenler, kontrol akışı ve hata ayıklama mantığı etrafında ele alacağız. Amaç, yalnızca “nasıl yazılır”ı değil, “neden böyle yazılır”ı da kavramak: hangi durumda hangi yapı daha iyi, hatayı nasıl iz sürerek buluruz, kodu nasıl okunur kılabiliriz.

İster Python, ister JavaScript, ister Java ile başlayın; mantık aynı kalır. Dil farkı çoğunlukla sözdizimidir. Asıl değer, bir problemi tanımlamak, veriyi temsil etmek, akışı yönetmek ve sonuçları doğrulamaktır. Bu bakış açısı oturduğunda yeni bir dili öğrenmek de hızlanır.


Temel programlama: Problem çözmeyi koda dönüştürmek

Temel programlama, bir problemi bilgisayarın anlayacağı kadar açık bir tarife çevirmektir. Bu tarif; verinin nasıl tutulacağını (değişkenler), işlemlerin hangi sırayla yapılacağını (akış) ve sonucun doğru olup olmadığını (test ve hata ayıklama) kapsar. Programlama, temelde “girdi al, işle, çıktı üret” döngüsünün disipline edilmiş halidir.

Algoritma mantığı ve adım adım düşünme

Algoritma, çözümün adımlar halinde ifadesidir. İyi bir algoritma; gereksiz adımları azaltır, uç durumları düşünür ve tekrar eden işleri otomatikleştirir. İlk etapta “psödo kod” ile yazmak, zihni sözdizimi yükünden kurtarır. Sonra bunu seçtiğiniz dile aktarabilirsiniz.

Program = veri + işlemler + kurallar

Bir programda veri (kullanıcı adı, fiyat, toplam, durum) ve bu veriye uygulanan işlemler (toplama, karşılaştırma, filtreleme) birlikte yaşar. “Kurallar” ise koşullar ve döngülerle ortaya çıkar. Bu üçlü, hemen her uygulamanın temelini oluşturur.

Değişkenler: Veriyi isimlendirmek ve yönetmek

Değişken, programın içinde bilgi saklamak için kullandığınız isimlendirilmiş bir kutu gibidir. Doğru isimlendirme, kodun okunabilirliğini doğrudan etkiler. “x” yerine “toplamTutar” gibi niyeti anlatan isimler, ileride hata ayıklamayı da kolaylaştırır.

Veri tipleri: Sayı, metin, mantıksal değer

Çoğu dilde temel veri tipleri benzerdir: sayılar, metinler ve true/false gibi mantıksal değerler. Veri tipleri, hangi işlemlerin güvenle yapılabileceğini belirler. Örneğin metinle sayıyı karıştırmak beklenmedik sonuçlar doğurabilir; bu yüzden dönüştürme (cast/parse) ve doğrulama adımları önem kazanır.

Kapsam ve yaşam süresi: Nerede tanımlandı, nerede geçerli?

Bir değişkenin “kapsamı”, hangi bloklarda erişilebilir olduğunu anlatır. Fonksiyon içinde tanımlanan bir değişkenin dışarıda görünmemesi, çakışmaları ve yan etkileri azaltır. Bu, özellikle büyüyen projelerde hata riskini düşüren bir alışkanlıktır.

İyi isimlendirme ve tutarlılık

İsimler; neyi temsil ettiğini, birimi varsa birimini ve kullanım amacını yansıtmalıdır. “adet” ve “count” gibi farklı dillerde karışık terimler yerine tek bir stil seçmek; ekip içinde ortak okuma hızını artırır. Ayrıca sabitler (değişmemesi gereken değerler) için ayrı bir isimlendirme yaklaşımı kullanmak, niyeti daha net gösterir.

Kontrol akışı: Programın hangi yolu izleyeceğini belirlemek

Kontrol akışı, programın hangi durumda hangi adımı çalıştıracağını yönetir. Kullanıcı bir şey seçtiğinde, bir veri eksik olduğunda ya da bir kural sağlandığında farklı yollar devreye girer. Bu yapı, gerçek hayattaki “eğer böyleyse şunu yap” düşüncesinin kod karşılığıdır.

Koşullar: if/else ile karar verme

Koşullar, en temel karar mekanizmasıdır. Bir kontrol ifadesi, doğruysa bir blok çalıştırır; değilse başka bir blok çalıştırabilir. Burada kritik nokta, koşulların okunabilir olmasıdır: karmaşık ifadeleri parçalara bölmek ve anlamlı ara değişkenler kullanmak, hataları azaltır.

Karşılaştırmalar ve mantıksal operatörler

Karşılaştırmalar (eşit mi, büyük mü) ve mantıksal operatörler (ve, veya, değil) birlikte kullanılır. “Hem giriş dolu hem de format doğru” gibi bir kural, genelde birden fazla koşulun birleşimidir. Bu birleşimleri yazarken parantezler ve öncelik sırası, beklediğinizden farklı bir sonuç üretebilir; bu yüzden küçük testlerle doğrulamak iyi bir pratiktir.

// JavaScript örneği: basit doğrulama ve koşullu akış
function indirimliFiyat(fiyat, kuponKodu) {
  if (typeof fiyat !== 'number' || fiyat <= 0) {
    throw new Error('Fiyat pozitif bir sayı olmalı');
  }

  const kuponAktifMi = (kuponKodu === 'YENI10' || kuponKodu === 'KIS20');

  if (kuponAktifMi && fiyat >= 100) {
    return fiyat * 0.90;
  } else if (kuponAktifMi) {
    return fiyat * 0.95;
  }

  return fiyat;
}

Bu örnekte iki şey dikkat çeker: önce veri doğrulanır, sonra akış karar verir. Hata ayıklama açısından da bu yaklaşım güçlüdür; çünkü problem çıktığında önce “girdi doğru mu” sorusuna net cevap verirsiniz.

Döngüler: Tekrar eden işi otomatikleştirmek

Döngüler, aynı türden işlemi birden çok kez yapmayı sağlar: listedeki ürünleri dolaşmak, 1’den 100’e kadar saymak, bir dosyadaki satırları işlemek gibi. Döngüler doğru kullanıldığında kod kısalır; yanlış kullanıldığında ise sonsuz döngü veya performans sorunları ortaya çıkabilir.

for ve while: Ne zaman hangisi?

Bir aralığı veya listenin indekslerini biliyorsanız “for” doğaldır. Bir koşul sağlandığı sürece devam etmek istiyorsanız “while” daha uygundur. Her iki durumda da döngünün bitiş şartının net olması gerekir. “Sayaç artıyor mu?” ve “koşul bir gün false olur mu?” soruları, döngü tasarımının temel kontrol listesi gibidir.

Liste dolaşma ve filtreleme

Günlük programlamada en sık yapılan işlerden biri koleksiyonlar üzerinde dolaşmaktır. Her eleman için bir işlem yapmak, belirli koşullara uyanları seçmek ya da toplam hesaplamak; değişken ve kontrol akışının birlikte çalıştığı tipik örneklerdir.

# Python örneği: liste üzerinde dolaşma, koşul ve biriktirme
siparisler = [
  {"tutar": 120, "durum": "odendi"},
  {"tutar": 80, "durum": "beklemede"},
  {"tutar": 200, "durum": "odendi"}
]

toplam = 0
for s in siparisler:
  if s["durum"] == "odendi":
    toplam += s["tutar"]

print("Ödenen siparişlerin toplamı:", toplam)

Burada döngü veriyi gezer, koşul filtreler, değişken biriktirir. Bu üçlü, temel programlama becerisinin pratikteki en net yansımasıdır.

  • Tekrarlı işi döngüye taşıyın, kopyala-yapıştırı azaltın.
  • Döngü içinde değişken güncelliyorsanız başlangıç değerini açıkça belirleyin.
  • Gereksiz iç içe döngülerden kaçınmak için veri yapınızı gözden geçirin.

Fonksiyonlar: Tekrarı azaltmak ve kodu bölümlere ayırmak

Fonksiyonlar, bir işi adlandırıp tekrar kullanılabilir hale getirir. Böylece programınız “büyük bir metin” olmaktan çıkar; mantıksal parçalara bölünür. İyi bir fonksiyon; tek bir sorumluluk taşır, anlamlı bir isimle çağrılır ve mümkünse yan etkisi azdır.

Parametre ve dönüş değeri düşüncesi

Bir fonksiyonun ne aldığı (parametreler) ve ne verdiği (return) net olursa, onu kullanmak kolaylaşır. “Bu fonksiyon hangi veriye ihtiyaç duyuyor?” sorusunu iyi cevaplamak, global değişken kullanımını azaltır ve test edilebilirliği artırır.

Küçük parçalarla büyük resmi kurmak

Özellikle yeni başlayanlar için en büyük sıçrama, problemi küçük adımlara bölmeyi öğrenmektir. Örneğin “kayıt ol” akışını; giriş doğrulama, kullanıcı oluşturma, e-posta gönderme gibi fonksiyonlara ayırmak; hem hatayı izlemeyi kolaylaştırır hem de kodu yeniden kullanılır kılar.

Bir geliştiricinin ekranda değişken, koşul ve döngü yapısını adım adım kurgulayıp notlarla netleştirmesi

Hata ayıklama: “Neden çalışmıyor?” sorusunu sistemli çözmek

Hata ayıklama (debug), rastgele denemeler yapmak değil; belirtileri, olası nedenleri ve kanıtları takip ederek kök sebebi bulmaktır. Yeni başlayanlar için en verimli alışkanlık, “beklenen” ile “gerçekte olan” arasındaki farkı görünür kılmaktır.

Hata türleri: sözdizimi, çalışma zamanı, mantık

Hatalar genelde üç sınıfa ayrılır: sözdizimi hataları (kod derlenmez/çalışmaz), çalışma zamanı hataları (çalışırken patlar) ve mantık hataları (çalışır ama yanlış sonuç verir). Mantık hataları en zor olanıdır; çünkü ortada “çökme” yoktur. Bu yüzden ara değerleri gözlemlemek, küçük örneklerle doğrulamak ve sınır durumlarını denemek kritik hale gelir.

İz sürme teknikleri: log, breakpoint, küçük test

En pratik yöntem, programın kritik noktalarında ara değerleri yazdırmaktır. Daha ileri seviyede breakpoint ile adım adım ilerlemek, değişkenlerin nasıl değiştiğini görmenizi sağlar. Ayrıca küçük test verileriyle başlamak, problemi daraltır: önce 2 elemanlı listeyle çalıştırın, sonra büyütün.

Sorunu daraltma: En küçük hatalı örneği bulmak

Bir şey bozulduğunda “hangi değişiklikten sonra?” sorusu çok değerlidir. Kodunuz büyüdükçe, hatayı bulmanın en hızlı yolu “en küçük hatalı örneği” üretmektir. İlgisiz parçaları geçici olarak kapatmak, girdiyi basitleştirmek ve tek bir fonksiyonu izole etmek; kök sebebe hızla yaklaştırır.

Okunabilirlik ve bakım: Gelecekteki kendinize yatırım

Programlama sadece bilgisayarın anlaması için değil, insanların da anlayabilmesi için yapılır. Bir ay sonra geri döndüğünüzde kodunuzu hızlıca kavrayabiliyorsanız, doğru yoldasınız. Okunabilirlik; daha az hata, daha hızlı geliştirme ve daha kolay ekip çalışması demektir.

Temiz kod alışkanlıkları

İyi isimlendirme, kısa fonksiyonlar, tekrarların azaltılması ve tutarlı biçimlendirme; temel ama etkili kurallardır. Gereksiz karmaşıklık genelde birikerek büyür. Bu nedenle her eklemeden sonra “bunu daha basit anlatabilir miyim?” sorusunu sormak, uzun vadede ciddi kazanç sağlar.

Yorum yerine niyet: Kod kendini anlatsın

Yorumlar faydalıdır, ancak en iyisi kodun niyetinin açık olmasıdır. “neden”i açıklayan kısa notlar işe yarar; ama “ne yaptığı” zaten koddan anlaşılmalı. Bu yüzden iyi değişken isimleri ve küçük fonksiyonlar, yorum ihtiyacını azaltır.

Hata ayıklama ekranında breakpoint ile adım adım ilerleyen akışın yanında beklenen ve gerçek değerlerin karşılaştırılması

Pratik yol haritası: Temeli sağlamlaştırmak için çalışma önerileri

Temel programlama becerisi, kısa ama düzenli pratikle hızla gelişir. Her gün 30–45 dakika; bir problemi küçük adımlarla çözmek, çıktıyı doğrulamak ve hatayı sistemli aramak için yeterli olabilir. Önemli olan, çözdüğünüz problemleri çeşitlendirmek ve öğrendiğiniz yapıları gerçek senaryolara uygulamaktır.

Mini egzersiz fikirleri

  1. Bir alışveriş sepeti toplamı hesaplayın: indirim koşulları ekleyin.
  2. Metin içinde kelime sayacı yazın: boşlukları ve noktalama işaretlerini düşünün.
  3. Bir listeyi filtreleyin: belirli koşullara uyanları ayrı bir listeye alın.
  4. Basit bir menü yapın: kullanıcı seçimlerine göre farklı akışlar çalışsın.

Bu egzersizler; değişkenler ile veri tutmayı, kontrol akışı ile karar vermeyi ve hata ayıklama ile doğrulamayı birlikte çalıştırır. Öğrenirken “neden böyle çıktı?” sorusunu sormak, en hızlı ilerleten alışkanlıktır.

Eğer bu temeli daha planlı bir şekilde, bol alıştırmayla ve rehberli bir akışla ilerletmek isterseniz Temel Programlama Eğitimi sayfasına da göz atabilirsiniz. Burada değişkenlerden akış kontrolüne, fonksiyon mantığından hata ayıklama pratiklerine kadar adım adım ilerleyen bir yol haritası bulursunuz.


Özetle: temel programlama; veriyi doğru temsil etmek, akışı doğru yönetmek ve hatayı sistemli biçimde ayıklamaktır. Bu üçlü oturduğunda, yeni bir dil öğrenmek “sözdizimi değişimi”ne dönüşür. Düzenli pratik ve küçük adımlar, sağlam temelin en güvenilir yoludur.

 VERİ AKADEMİ