Programlamanın Temel Teknik Terimleri
Yazılımda sık duyulan ama kimsenin düzgün anlatmadığı 20+ teknik terim: binary, machine code, interpreter, derleyici, IDE, runtime. Mutfak, restoran, elektrik ve tercüman benzetmeleriyle.
Bu yazı kimin için?
Eğer bir yazılımcıyla konuşurken "memory ne demek ya, thread de ne?" diye içinden geçirdiysen, bu yazı tam sana göre. Burada 20+ temel teknik terimi günlük hayattan benzetmelerle açıklıyorum. Amaç: "bu adam bana ne anlatıyor?" dediğin an sayısını sıfıra indirmek.
Terimleri rastgele sırayla değil, mantıksal sırayla anlatıyorum: önce bilgisayar ne anlıyor (binary, machine code), sonra sen ne yazıyorsun (source code, syntax), sonra araçlar (IDE, compiler, interpreter), sonra çalışma sırasında olan şeyler (runtime, memory, stack/heap), sonra da programcının işleri (debug, API, veri yapısı, algoritma).
Bilgisayar ne anlıyor?
Yazılımın en temel katmanı. Buradan başlamak önemli çünkü bilgisayar aslında hiçbir şey "anlamaz" — sadece elektrik var veya yok.
Binary (İkili Sayı Sistemi)
Bilgisayar neden sadece 0 ve 1 anlıyor?
1 = açık (elektrik var), 0 = kapalı (elektrik yok). İşte bu yüzden bilgisayar her şeyi 0 ve 1 ile ifade eder: elektriğin varlığı ve yokluğu.Binary (ikili sayı sistemi) sadece iki rakam kullanır: 0 ve 1. Biz günlük hayatta 10 rakam kullanırız (0-9, onlu sistem). Ama bilgisayar için "elektrik var" ve "elektrik yok" olmak üzere sadece iki durum var.
Peki "merhaba" nasıl binary olur? Her harfe bir sayı karşılık gelir. Örneğin ASCII'de A = 65 = binary 01000001. Bir fotoğraf, bir video, bir müzik, hepsi binary'ye dönüşür. İçeride her şey 0 ve 1.
# 65 sayısı binary'ye nasıl çevrilir?
65 = 64 + 1
= 2^6 + 2^0
= 01000001 (binary)
# Python'da kontrol
>>> bin(65)
'0b1000001'
# "A" harfinin binary karşılığı
>>> ''.join(format(ord(c), '08b') for c in 'A')
'01000001'Yani binary bir "şifre" değil, sayma yöntemi. Bilgisayarın anladığı tek dil bu.
Machine Code (Makine Kodu)
Bilgisayarın anladığı tek dil hangisi?
Machine code, işlemcinin (CPU) doğrudan çalıştırabildiği komutlardır. Her komut çok basit bir şey yapar: "iki sayıyı topla", "bu veriyi belleğe yaz", "şuraya zıpla". Bunlar binary olarak yazılır.
Örnek: x86 işlemcisinde 10110000 01100001 komutu "97 sayısını AL register'ına yükle" demektir. Bir insanın bunu okuması neredeyse imkânsız, ama CPU saniyede milyarlarca komutu işler.
# Machine code örneği (x86 assembly karşılığı ile)
# Hex: B0 61 B0 64 04 01
# Binary: 10110000 10110000 00000100
# 01100001 01100010 00000001
# Anlamı: 97'yi AL'e 100'ü AL'e AL+bl yap
# yükle yükle (=198)
# Modern programcılar machine code yazmaz.
# Çünkü: CPU'ya özel, okunması imkânsız, taşınabilir değil.
# Bunun yerine yüksek seviye dil (Python, C, JS) yazıp
# compiler veya interpreter'a çevirtirsin.Sen ne yazıyorsun?
Machine code yazmak imkânsız olduğu için insanların anladığı diller var. Bunlar "kaynak kod" olarak başlıyor.
Source Code (Kaynak Kod)
Sen ne yazıyorsun?
Source code (kaynak kod), bir programlama dilinde yazdığın .py, .js, .java gibi dosyalardaki komutlardır. İnsanların okuyabildiği, anladığı, üzerinde tartışabildiği form.
# Bu bir source code (Python)
def selam(isim):
return f"Merhaba, {isim}!"
print(selam("Dünya"))
# Çıktı: Merhaba, Dünya!Source code düz metin dosyasıdır. Not Defteri'yle bile yazabilirsin (yazsan da çalışır, ama zor olur). Önemli olan: sen yazarsın, araç çalıştırır.
Syntax (Sözdizimi)
Neden her dilin kuralları farklı?
Syntax, programlama dilinin gramer kurallarıdır. Yanlış syntax = kod çalışmaz, "SyntaxError" hatası alırsın.
# ✅ Doğru Python syntax
if yas >= 18:
print("Reşit")
# ❌ Yanlış syntax (girinti eksik)
if yas >= 18:
print("Reşit") # IndentationError
# ❌ Yanlış syntax (iki nokta üst üste eksik)
if yas >= 18
print("Reşit") # SyntaxErrorHer dilin syntax'ı farklı: Python'da girinti önemli, JavaScript'te süslü parantez önemli, SQL'de noktalı virgül önemli. Syntax kuralı çiğnenirse hata alırsın, mantık hatası olmaz.
Araçlar ve ortam
Source code yazdın, şimdi bilgisayara nasıl anlatacaksın? İşte burada compiler, interpreter ve IDE devreye girer.
Compiler (Derleyici)
Kaynak kodu makine koduna kim çevirir?
Compiler, yazdığın source code'un tamamını okur, kontrol eder, makine koduna (veya ara bir form olan bytecode'a) çevirir ve çalıştırılabilir dosya üretir. Bu üretim bir kere olur; aynı dosyayı binlerce kişi çalıştırabilir.
# C dili örneği — derlenir
# Kaynak: selam.c
#include <stdio.h>
int main() {
printf("Merhaba Dünya\n");
return 0;
}
# Derleme
$ gcc selam.c -o selam
# → 'selam' adında çalıştırılabilir dosya üretildi
# Çalıştırma
$ ./selam
Merhaba Dünya
# Avantaj: Hızlı çalışır (zaten makine kodu)
# Dezavantaj: Her işletim sistemi için ayrı derleme gerekir
# (Windows'ta derlenen .exe Mac'te çalışmaz)Derlenen diller: C, C++, Rust, Go, Swift, Java (kısmen).
Interpreter (Yorumlayıcı)
Satır satır çalıştıran dil nedir?
Interpreter, source code'u satır satır okur ve anında çalıştırır. Önce çevirip saklama yok; her çalıştırmada yeniden yorumlar.
# Python yorumlayıcı örneği
# Kaynak: selam.py
def selam(isim):
return f"Merhaba, {isim}!"
print(selam("Dünya"))
# Çalıştırma
$ python selam.py
# Python interpreter:
# 1. satırı oku → fonksiyon tanımı, hafızaya al
# 2. satırı oku → fonksiyon tanımı, hafızaya al
# 3. satırı oku → fonksiyonu çağır, çalıştır
# 4. satırı oku → print çalıştır
# Çıktı: Merhaba, Dünya!
# Avantaj: Hızlı geliştirme (kaydet, çalıştır, gör)
# Dezavantaj: Yavaş çalışır (her seferinde yeniden yorumlar)Yorumlanan diller: Python, JavaScript (tarayıcıda), Ruby, PHP. Not: Modern motorlar hibrit çalışır (Python'da .pyc bytecode, JavaScript'te JIT), ama temel mantık aynıdır.
IDE (Tümleşik Geliştirme Ortamı)
Kod yazmak için ne kullanılır?
IDE, sadece metin yazma değil, kod yazma sürecinin tamamı için tasarlanmış bir programdır. Bir metin editörünün (Not Defteri) üstüne çok şey ekler:
- Sözdizimi renklendirme (syntax highlighting)
- Otomatik tamamlama (IntelliSense)
- Hata ayıklayıcı (debugger) — satır satır çalıştırma
- Terminal / komut satırı entegrasyonu
- Git versiyon kontrol entegrasyonu
- Eklenti sistemi (plugin)
Popüler IDE'ler: VS Code (ücretsiz, çok yönlü), PyCharm (Python'a özel), IntelliJ (Java'ya özel), Xcode (macOS/iOS), Android Studio (mobil).
Yeni başlayanlar için VS Code en iyi seçim: hafif, hızlı, binlerce eklenti, topluluk çok büyük. pythonmulakat.com üzerinde de tarayıcı tabanlı bir editör var — kurulum yok, anında başla.
Çalışma sırasında olanlar
Kodun çalışmaya başladı. Şimdi bilgisayar arka planda ne yapıyor? İşte program çalışırken olan şeyler.
Runtime (Çalışma Zamanı)
Program çalışırken neler oluyor?
Runtime, programın fiilen çalıştığı süre. Kod dosyada duruyorken runtime değil, çalıştırılıp sonuç ürettiği an runtime.
"Runtime error" dendiğinde, kodun syntax'ı doğru, derleme/parse aşamasını geçti ama çalışırken bir şey ters gitti demektir. Örneğin sıfıra bölme, olmayan dosyayı açma, olmayan indekse erişim.
# Syntax error — runtime'dan ÖNCE yakalanır
if x = 5: # = atama, == karşılaştırma olmalıydı
print(x)
# SyntaxError: invalid syntax
# Runtime error — program BAŞLAR, sonra hata verir
sayilar = [1, 2, 3]
print(sayilar[10])
# IndexError: list index out of range
# Bu satıra kadar program çalıştı, runtime'da patladı
# Runtime environment: Python yorumlayıcısı + sistem kütüphaneleri
# Tarayıcıda JavaScript çalıştırırken: V8 engine + DOM + Web APIs
# Hepsi "runtime environment"ı oluşturur.Memory (Bellek / RAM)
Değişkenler nereye kaydediliyor?
Memory (RAM), programın çalışırken kullandığı verilerin tutulduğu alan. Değişkenlerin, fonksiyon çağrılarının, ara sonuçların hepsi burada yaşar. Bilgisayarı kapatınca RAM'deki her şey silinir (geçici).
# Bellekte neler oluyor?
x = 10 # x adres 0x7fff5 sayısında 10 tutulur
y = "merhaba" # y adresinde "merhaba" string'i tutulur
liste = [1,2,3] # liste değişkeni de bir bellek adresine bağlanır
# Python'da id() ile adresi görebilirsin
x = 10
print(id(x)) # Örn: 140234567890432
# Bellek sızıntısı (memory leak):
# Sürekli yeni veri atayıp eskisini temizlemiyorsan
# RAM dolar, program yavaşlar, sonunda çöker.Bellek sınırlı bir kaynaktır. Yüzlerce MB RAM'in var; 1 GB'lık bir resmi açtığında hepsini tek seferde koyamıyorsun. Bu yüzden programcı belleği yönetir: "bu veri artık lazım değil, sil" der.
Stack ve Heap
Bellek nasıl bölünüyor?
Bellek iki ana bölgeye ayrılır: stack ve heap. Çoğu dilde bu ayrım programcıdan gizlidir ama neyin nereye gittiğini bilmek debug'ı kolaylaştırır.
def toplam(a, b):
sonuc = a + b # 'a', 'b', 'sonuc' → STACK'te
return sonuc
x = 10
y = 20
z = toplam(x, y) # 'z' → STACK'te (basit int)
# Stack: küçük, hızlı, LIFO (son giren ilk çıkar)
# Heap: büyük, esnek, karmaşık yapılar için
buyuk_liste = [1] * 1_000_000
# ↑ Bu liste HEAP'te durur (çok büyük)
# 'buyuk_liste' değişkeninin kendisi STACK'te,
# ama gösterdiği veri HEAP'teStack overflow (yığın taşması): Çok derin fonksiyon çağrısı yaparsan stack dolarsa Python RecursionError verir. Memory leak: Heap'teki objeler temizlenmezse bellek dolar.
Thread (İş Parçacığı)
Program aynı anda birden fazla iş yapabilir mi?
Thread, bir program içinde bağımsız çalışan yürütme birimi. Tek thread'li programda her şey sırayla yapılır. Çok thread'li programda işler paralel yürütülebilir.
Modern uygulamalar çoğunlukla çok thread'li: bir thread ekranı çizerken diğeri ağ üzerinden veri çeker, bir diğeri kullanıcı girdisini dinler.
JavaScript'in özel durumu: JavaScript tek thread'li (single-threaded) çalışır. Ama async/await ve Web Workers ile sanki paralel çalışıyormuş gibi yapar. Tarayıcıda UI donmasını engellemek için olmazsa olmaz.
# Python'da thread (basit)
import threading
def indir(url):
print(f"{url} indiriliyor...")
# ... indirme işlemi
t1 = threading.Thread(target=indir, args=("a.com",))
t2 = threading.Thread(target=indir, args=("b.com",))
t1.start() # paralel başla
t2.start()
t1.join() # bitmesini bekle
t2.join()Garbage Collector (Çöp Toplayıcı)
Kullanılmayan bellek ne zaman temizlenir?
Garbage collector (GC), programda kimsenin artık erişmediği objeleri bulur ve belleği serbest bırakır. Manuel temizlik derdi ortadan kalkar.
GC olan diller: Python, Java, JavaScript, C#, Go, Ruby. Programcı malloc/free ile uğraşmaz.
GC olmayan diller: C, C++ (Rust da otomatik ama farklı mekanizmayla). Belleği programcı yönetir. Yanlış yönetirsen: memory leak (sızıntı), use-after-free (serbest bırakılan belleğe erişim — güvenlik açığı).
# Python'da GC otomatik
def fonk():
a = [1, 2, 3, 4, 5] # heap'te liste oluşur
return a
sonuc = fonk()
# 'a' artık kimsenin erişemeyeceği yerde
# → GC tarafından toplanır (bir sonraki turda)
# Manuel bellek yönetimi (C örneği — Python'da yok)
# int* p = malloc(sizeof(int) * 100);
# ... kullan ...
# free(p); // UNUTSAN memory leak
# Python'da bu dert yok. Ama GC pause (duraklaması) olabilir
# büyük objelerde. Performans kritikse C/C++/Rust tercih edilir.Programcının günlük işleri
Günlük hayatta sürekli duyacağın terimler. Bunları bilmek artık seni "yazılımcı gibi" konuşturur.
API (Uygulama Programlama Arayüzü)
Programlar birbiriyle nasıl konuşur?
API (Application Programming Interface), iki yazılımın birbiriyle konuşma kuralları. Bir program başka bir programa "şunu yap" der, API üzerinden yapar.
# Bir API'yi çağırmak — örnek: hava durumu servisi
import requests
# OpenWeatherMap API'si
yanit = requests.get(
"https://api.openweathermap.org/data/2.5/weather",
params={"q": "Istanbul", "appid": "API_KEY"}
)
veri = yanit.json()
# {
# "sicaklik": 18,
# "nem": 65,
# "sehir": "Istanbul"
# }
# API'yi sen çağırıyorsun (müşteri)
# OpenWeatherMap servisi yanıtlıyor (aşçı)
# Aradaki kurallar = API (menü)Web API, OS API, kütüphane API'si gibi türleri var. Hep aynı mantık: "şu komutu ver, şu sonucu al."
Debug (Hata Ayıklama)
Hatalı kodu nasıl bulurum?
Debug (hata ayıklama), kodundaki hataları bulma ve düzeltme süreci. Bug = hata, debug = hatayı yakalama. Her programcının en çok zaman harcadığı iş.
Modern IDE'ler debugger (hata ayıklayıcı) içerir: kodunu satır satır çalıştırabilir, değişkenlerin o anki değerini görebilir, durma noktaları (breakpoint) koyabilirsin.
# Bug'lı kod
def ortalama(sayilar):
toplam = 0
for s in sayilar:
toplam = toplam + s
return toplam / len(sayilar) # ← sıfıra bölme hatası!
print(ortalama([]))
# ZeroDivisionError: division by zero
# Debug stratejileri:
# 1. print() ile ara değerleri yazdır
# 2. IDE debugger ile satır satır ilerle
# 3. Hata mesajını oku (Python genelde açık söyler)
# 4. Google'a hata mesajını yapıştır
# 5. Bir arkadaşına açıkla (rubber duck debugging — ördek)Soyut kavramlar
Bunlar elle tutulmaz ama programcılık mülakatlarının, mühendislik konuşmalarının temel taşları. Anladıysan seviye atlamışsın demektir.
Veri Yapısı (Data Structure)
Veriyi nasıl düzenleriz?
Veri yapısı, verileri belirli bir düzende saklama ve erişme yöntemi. Her veri yapısının avantajı ve dezavantajı var: biri hızlı arama yapar, diğeri hızlı ekleme.
Temel veri yapıları:
- List (dizi): sıralı erişim, yavaş arama, hızlı ekleme sona
- Dict (sözlük): anahtar-değer, çok hızlı arama
- Set (küme): tekrar yok, hızlı üyelik kontrolü
- Stack (yığın): LIFO, son giren ilk çıkar
- Queue (kuyruk): FIFO, ilk giren ilk çıkar
- Tree (ağaç): hiyerarşik, dosya sistemi, DOM
# Python'da temel veri yapıları
liste = [1, 2, 3] # list — sıralı, değiştirilebilir
sozluk = {"ad": "Ali", "yas": 30} # dict — anahtar-değer
kume = {1, 2, 3} # set — tekrar yok
demet = (1, 2) # tuple — değiştirilemez liste
# Hangisini ne zaman?
# Sıralı veri → list
# Hızlı arama → dict
# Tekrarsız → set
# Değişmeyen sabit → tupleAlgoritma (Algorithm)
Bir problemi nasıl çözeriz?
Algoritma, bir problemi çözmek için sonlu, net, uygulanabilir adımlar dizisi. Her program bir algoritmadır ama her algoritma program değildir (tarifler, yön tarifleri de algoritmadır).
Algoritma analizi (Big-O): Bir algoritmanın ne kadar hızlı çalıştığını ölçer. Veri büyüdükçe performans nasıl değişir?
- O(1): sabit süre — dizi[5]
- O(log n): logaritmik — binary search
- O(n): doğrusal — liste taraması
- O(n²): karesel — iç içe iki döngü
- O(2ⁿ): üstel — brute force recursion
# Algoritma örneği: listede en büyük sayıyı bul
def en_buyuk(liste):
en_b = liste[0] # O(1)
for sayi in liste: # n kere döner
if sayi > en_b: # O(1)
en_b = sayi
return en_b
# Bu algoritma O(n) — 1M elemanlı listede 1M karşılaştırma
# Sıralı listede O(1) — son elemana bak yeter
# Algoritma = problemi çözme yöntemi
# Veri yapısı = veriyi saklama yöntemi
# İkisi el ele çalışırSıkça Sorulan Sorular
Binary ile makine kodu aynı şey mi?
Hayır. Binary bir sayma yöntemi (0 ve 1); makine kodu bilgisayarın anladığı komutlar. Makine kodu binary ile yazılır ama tüm binary'ler makine kodu değildir. Bir fotoğraf da binary olarak saklanır ama makine kodu değildir.
Python yorumlayıcı mı derleyici mi?
Python yorumlayıcı (interpreter) kullanır — kodu satır satır çalıştırır. C, C++, Rust gibi diller ise derlenir — kod tamamen makine koduna çevrilir, sonra çalışır. Java ve C# ikisinin arasında: önce bytecode'a derlenir, sonra JVM/.NET üzerinde yorumlanır.
IDE ile metin editörü arasındaki fark nedir?
Metin editörü sadece yazı yazarsın (VS Code, Notepad++, Sublime). IDE ise yazma + çalıştırma + hata ayıklama + test etme + versiyon kontrol hepsi tek programda. Yeni başlayanlar için VS Code yeterli; ileri seviyede PyCharm / IntelliJ gibi tam IDE'lere geçilebilir.
Stack ve heap bellek ne demek?
Stack, küçük ve düzenli bellek alanıdır (yerel değişkenler, fonksiyon çağrıları, LIFO). Heap, büyük ve esnek alan (büyük objeler, diziler). Stack hızlıdır, heap yavaş ama geniş. Programcı doğrudan yönetmez ama hata ayıklamada bilmek işe yarar.
Programlamaya yeni başlayan biri hangi terimleri önce öğrenmeli?
Şu sırayla: 1) Source code (kaynak kodu) → 2) Syntax (sözdizimi) → 3) IDE → 4) Interpreter/Derleyici → 5) Runtime → 6) Memory (Stack/Heap) → 7) Debug → 8) Veri yapısı → 9) Algoritma. Bu sırayla öğrenirsen her terim bir sonrakine zemin hazırlar.
Garbage collector ne işe yarar?
Kullanılmayan belleği otomatik temizler. Python, Java, JavaScript'te var. C, C++'ta yok (programcı yönetir). Avantajı: programcı rahatlar, memory leak riski azalır. Dezavantajı: ara sıra duraklama yaratır (GC pause).
Thread ve process arasındaki fark nedir?
Process = bağımsız çalışan program (kendi bellek alanı var). Thread = bir process içinde paralel çalışan iş parçacığı (aynı belleği paylaşır). Chrome'da her sekme ayrı process; bir sekmedeki sekmeler (tab) thread olabilir. Process ağır, thread hafif.
Hangi terimi ne zaman öğrenmeli?
Sana özel 30 günlük plan
Hepsini aynı anda öğrenmeye çalışma. Aşağıdaki sırayla git, her hafta 1-2 kavram:
- Hafta 1: Source code, syntax, IDE — temel araç seti
- Hafta 2: Interpreter vs derleyici, runtime — nasıl çalışır
- Hafta 3: Memory, stack/heap — veri nereye gidiyor
- Hafta 4: Debug, API — günlük programcı işleri
- Hafta 5+: Thread, garbage collector, veri yapısı, algoritma — ileri konular
Bu terimleri gerçek projelerde kullanırken öğrenmek en iyisi. Sıfırdan Zirveye yazımızla başlayabilir, sonra Programlama Temelleri sorularıyla pratik yapabilirsin.
İlgili Yazılar
Terimleri öğrendin, şimdi pratiğe dök
Tarayıcıda Python ve JavaScript yaz, anlık sonuç al. AI destekli geri bildirim ile her soruda yeni bir şey öğren.