Algoritma: Son Adımlar
Algoritmalar serisinin kapanışı: dokuz yazıda öğrendiğimiz her şeyi (değişken, koşul, döngü, liste, fonksiyon, sözlük) toparlıyor, tek bir programda birleştiriyor ve sıradaki adımı gösteriyoruz.
Seri · Algoritmalar
- 1. Algoritma Nedir? — Yazılıma Sıfırdan Başlangıç
- 2. Algoritma: Akış Şemaları
- 3. Algoritma: Sözde Kod
- 4. Algoritma: Değişkenler
- 5. Algoritma: Koşullar
- 6. Algoritma: Döngüler
- 7. Algoritma: Listeler
- 8. Algoritma: Fonksiyonlar
- 9. Algoritma: Sözlükler
- 10. Algoritma: Son Adımlar
Uzun bir yoldu, değil mi? Algoritma nedir diye sorarak başlamıştık; şimdi elinde değişkenler, koşullar, döngüler, listeler, fonksiyonlar, sözlükler… koca bir alet çantası var.
Bu, serinin son yazısı. Burada yeni bir konu öğretmeyeceğim. Bunun yerine geriye dönüp bakacağız: neler öğrendik, bu parçalar birbirine nasıl bağlanıyor? Sonra da hepsini tek bir küçük programda bir araya getirip seriyi kapatacağız. Rahat ol; bu yazı biraz da bir kutlama turu.
Aslında öğrendiğin şey birkaç fikirden ibaret
Dokuz konu deyince insanın gözü korkabilir. Ama işin güzel tarafı şu: hepsi birkaç basit fikrin etrafında dönüyor. Geriye bakınca öğrendiklerimiz kendiliğinden üç öbeğe ayrılıyor.
1. Bir bilgiyi bir yerde tutmak
Her program, önce bir şeyi bir yere koymak zorunda. Bir sayıyı, bir ismi, bir sürü notu… Biz bunu adım adım büyüttük.
Önce değişken vardı: tek bir şeyi koyduğun, üstüne isim yazdığın bir kutu. yaş ← 30 dedin, oldu. Sonra iş büyüdü ve liste geldi: tek kutu değil, yan yana dizilmiş bir sürü kutu, hepsinin ortak bir adı var. notlar[3] deyince üçüncü kutuya bakıyordun. Hani “kutunun kaçıncı sırada olduğu” ile “içinde ne olduğu” ayrı şeylerdi, şu posta kutusu örneği.
En son da sözlük: burada kutulara sıra numarasıyla değil, doğrudan isimle ulaşıyordun. notlar["Ada"]. Tıpkı telefon rehberi gibi; birinin numarasını bulmak için “kaçıncı kişiydi” diye saymıyorsun, adına bakıyorsun.
Tek bir şeyden, sıralı bir sürü şeye, oradan da isimle bulunan şeye. Hep aynı ihtiyacın (bir bilgiyi saklamak) giderek güçlenen üç hâli.
2. Programın karar vermesi ve tekrar etmesi
Bilgiyi tuttun, peki program bununla ne yapacak? Genelde iki şey: bazen bir karar verecek, bazen de aynı işi tekrar edecek.
Karar kısmı koşul idi. EĞER not ≥ 50 İSE ... DEĞİLSE .... Geçti mi, kaldı mı? Yol duruma göre ikiye ayrılıyordu. Tekrar kısmı da döngü. Aynı satırları elli kere kopyalamak yerine “şu iş bitene kadar tekrarla” diyordun. Aslında bir döngü, tekrar tekrar sorulan bir karardan başka bir şey değil; koşulla akraba olmalarının sebebi bu.
3. Dağınıklığı toplamak
Program büyüdükçe dağılmaya başlar. Fonksiyon tam burada işe yarıyordu: bir grup adıma bir isim verip onları tek bir parça hâline getirmek. ortalama(liste)’yi bir kere yazdık, sonra istediğimiz kadar çağırdık. İçinde tam olarak ne döndüğünü bilmemize bile gerek yoktu; listeyi ver, ortalamayı al. Kara kutu.
Peki bütün bunları nasıl yazıya döktük? İlk üç yazının derdi buydu: bir algoritmayı şemayla çizdik, sözde kodla yazdık. Hepsinin altında da şu basit fikir yatıyordu: bir işi net, sıralı adımlara bölmek. Hani en baştaki çay demleme örneği vardı ya, işte o.
| Ne için? | Konu | Tek cümlede |
|---|---|---|
| Yazıya dökmek | Algoritma, Şema, Sözde kod | Bir işi net adımlara bölüp çizmek/yazmak |
| Bilgiyi tutmak | Değişken, Liste, Sözlük | Tek şey, sıralı bir sürü şey, isimle bulunan şey |
| Karar ve tekrar | Koşul, Döngü | Duruma göre karar vermek ve tekrarlamak |
| Toplamak | Fonksiyon | İşleri isimli, tekrar kullanılabilir parçalara bölmek |
Hepsini bir araya getirelim
Şimdi eğlenceli kısma geldik. Öğrendiğimiz bütün parçaları alıp tek bir programda buluşturalım.
Küçük bir sınıf karnesi yapalım. Elimizde öğrenciler ve notları olsun; her birinin ortalamasını hesaplayalım, geçti mi kaldı mı diye bakalım, sonunda da kaç kişi geçmiş sayalım. Kulağa epey iş gibi geliyor ama artık bunların hepsini biliyorsun:
FONKSIYON ortalama(liste) toplam ← 0 i ← 1 ZAMAN i ≤ uzunluk(liste) DOĞRU İKEN toplam ← toplam + liste[i] i ← i + 1 DÖNGÜ SONU DÖNDÜR toplam / uzunluk(liste)FONKSIYON SONU
karne ← { "Ada": [90, 85, 100], "Can": [40, 35, 45], "Ece": [70, 65, 80] }geçenSayısı ← 0
karne İÇİNDEKİ HER öğrenci İÇİN ort ← ortalama(karne[öğrenci]) EĞER ort ≥ 50 İSE durum ← "Geçti" geçenSayısı ← geçenSayısı + 1 DEĞİLSE durum ← "Kaldı" BİTİREĞER YAZ öğrenci + ": ortalama " + ort + " → " + durumDÖNGÜ SONU
YAZ "Toplam geçen: " + geçenSayısıÇalıştırınca şunu yazar:
Ada: ortalama 91.67 → GeçtiCan: ortalama 40 → KaldıEce: ortalama 71.67 → GeçtiToplam geçen: 2Bir dakika durup şuna bak. Bu minik programda serinin dokuz konusu da var: bir fonksiyon (ortalama), bir sözlük (karne), değer olarak listeler, bir döngü (her öğrenci için), bir koşul (geçti/kaldı), değişkenler (ort, durum, geçenSayısı), bir biriktirici (geçenSayısı) ve baştan sona YAZ. Aynı programı bir de şema hâlinde görelim:
flowchart TD
A(["Başla: karne sözlüğü hazır, geçenSayısı ← 0"]) --> B{"Sırada bir<br/>öğrenci var mı?"}
B -- Evet --> C["ort ← ortalama(karne[öğrenci])"]
C --> D{"ort ≥ 50 mi?"}
D -- Evet --> E["durum ← Geçti<br/>geçenSayısı ← geçenSayısı + 1"]
D -- Hayır --> F["durum ← Kaldı"]
E --> G["YAZ öğrenci + durum"]
F --> G
G --> B
B -- Hayır --> H(["YAZ Toplam geçen<br/>Bitti"])Programlamak dediğimiz şey aslında bu. Küçük, basit parçalar; tek başlarına pek bir işe yaramıyorlar. Ama doğru şekilde bir araya getirdiğinde, birlikte koca bir işi hallediyorlar. Ve sen artık bunu yapabiliyorsun.
Bundan sonra nereye?
Bu seri boyunca bir bilgisayarın nasıl düşündüğünü kâğıt üstünde öğrendik. Sıradaki adım, aynı şeyi gerçek bir bilgisayara anlatmak. Merak etme, en zor kısmı geride kaldı bile.
flowchart LR
A["1–3<br/>Algoritma · Şema · Sözde kod"] --> B["4–6<br/>Değişken · Koşul · Döngü"]
B --> C["7–9<br/>Liste · Fonksiyon · Sözlük"]
C --> D["10<br/>Son Adımlar"]
D --> E["Gerçek bir dil<br/>Python / JavaScript"]- Bir dil seç. Yeni başlayanlara en çok tavsiye edilen Python. Okuması kolay, hatta sözde koda tıpatıp benziyor diyebilirim. Tarayıcıda, web sayfalarında bir şeyler yapmak istiyorsan JavaScript de gayet iyi. Açıkçası hangisiyle başladığın çok önemli değil; temel fikirler her dilde aynı ve o fikirleri artık biliyorsun.
- Sözde kodunu gerçek koda çevir. Bu sandığından kolay, çünkü iskeleti zaten kurdun. Çoğu zaman iş, sadece kelimeleri o dile uydurmaya kalıyor. Bizim
YAZ, Python’daprintoluyor, JavaScript’teconsole.log.←yerine=yazıyorsun.ZAMAN … DÖNGÜ SONUbirwhilebloğuna dönüşüyor. Mantık hiç değişmiyor, sadece yazılışı değişiyor. - Küçük şeyler yaz. Bir hesap makinesi, minik bir yapılacaklar listesi, bir sayı tahmin oyunu… Bitirebileceğin küçük projeler en iyi öğretmendir. Bir de: hata yapmaktan korkma. Kod bozulacak, hata verecek, sen bulup düzelteceksin. Zaten en çok bunu yaparak öğreniyorsun.
Küçük bir teşekkür
Son bir şey. Bu seride öğrendiğimiz her fikrin arkasında gerçek insanlar var; hepsi bir zamanlar bu şeyleri ilk kez düşünen kişilerdi. Kısaca analım:
- Bugün “algoritma” derken adını andığımız el-Harezmî, 9. yüzyılda yaşamış, aynı zamanda cebiri de kurmuş bir matematikçi.
- Koşulların doğru/yanlış mantığını George Boole kurdu.
- İlk programı 1843’te Ada Lovelace yazdı. Evet, ilk programcı bir kadındı.
- Listelerin arkasında Fortran dili ve “neden sıfırdan sayıyoruz?” diye soran Dijkstra var.
- Fonksiyon fikrini David Wheeler, “kütüphane” fikrini ve ilk derleyiciyi de Grace Hopper getirdi.
- Sözlüğün o hızlı arama numarası (hash) Hans Peter Luhn’un işi.
Özet
İlgili yazılar
Sıkça sorulan sorular
Bu algoritma serisinde ne öğrendik?
Bir bilgisayarın nasıl "düşündüğünü" kalem ve kâğıtla öğrendik. Algoritmanın ne olduğuyla başladık, sonra onu şemayla çizmeyi ve sözde kodla yazmayı gördük. Ardından bilgiyi değişkenlerde sakladık, koşullarla karar verdik, döngülerle tekrar ettik, listeler ve sözlüklerle veri tuttuk, fonksiyonlarla işlerimizi düzenli parçalara böldük. Tek satır gerçek kod yazmadan programlamanın temel fikirlerini kavradık.
Öğrendiğimiz konular birbirine nasıl bağlanıyor?
Üç ana grupta toplanıyorlar. Bilgiyi tutmak: değişken (tek şey), liste (sıralı bir sürü şey), sözlük (isimle bulunan şey). Programın davranışını yönetmek: koşul (karar) ve döngü (tekrar). Ve dağınıklığı toplamak: fonksiyon (işleri isimli, tekrar kullanılabilir parçalara bölmek). Şema ve sözde kod ise bütün bunları yazıya dökme araçlarımızdı. Gerçek programlar bu parçaların hepsini iç içe kullanır.
Bir problemi nasıl algoritmaya dökerim?
Önce problemi küçük ve net adımlara böl (ilk yazıdaki çay demleme örneği gibi). Hangi bilgiyi tutman gerektiğine karar ver: değişken mi, liste mi, sözlük mü? Karar gereken yerde koşul, tekrar gereken yerde döngü kullan. Tekrarlayan ya da bir isim verebileceğin işleri fonksiyona sar. Sonra adımları kâğıtta bir izleme tablosuyla dene. Bu seride yaptığımız şey tam olarak buydu.
Bu seriden sonra ne öğrenmeliyim?
Artık gerçek bir programlama diline geçme zamanı. Sözde kodda öğrendiğin her şeyin (değişken, koşul, döngü, liste, fonksiyon, sözlük) Python ya da JavaScript gibi dillerde neredeyse birebir karşılığı var. Küçük programlar yazarak pratik yap: bir hesap makinesi, bir yapılacaklar listesi, bir sayı tahmin oyunu. En iyi öğrenme yolu okumak değil, yazmaktır.
Hangi programlama dilini seçmeliyim?
Yeni başlayanlara en çok önerilen dil Python. Okuması kolay ve sözde koda çok benziyor. Tarayıcıda çalışan, web sayfalarında bir şeyler yapan işler ilgini çekiyorsa JavaScript de güzel bir başlangıç. Aslında ilk dilin hangisi olduğu çok da önemli değil; temel fikirler her dilde aynı ve o fikirleri zaten biliyorsun. Birini seç, ona sadık kal, gerisi gelir.
Sözde kodu gerçek koda nasıl çeviririm?
Sözde kod zaten bir programın iskeleti; onu gerçek koda çevirmek çoğu zaman sadece kelimeleri o dile uydurmaktır. Örneğin sözde koddaki YAZ, Python'da print, JavaScript'te console.log olur. ← yerine = yazarsın, ZAMAN … DÖNGÜ SONU bir while bloğuna dönüşür. Mantık hiç değişmez, sadece yazılışı değişir.
Ne zaman liste, ne zaman sözlük kullanmalıyım?
Veriyi baştan sona sırayla gezeceksen ya da sıranın kendisi önemliyse liste kullan; elemana konumuyla ulaşırsın (liste[3]). Bir isimden ya da kimlikten bir bilgiye hızlıca ulaşman gerekiyorsa sözlük kullan; değere anahtarıyla ulaşırsın (notlar["Ada"]). İkisi rakip değil; bir sözlüğün değeri bir liste, bir listenin elemanı bir sözlük olabilir.
Programlamayı gerçekten öğrenebilir miyim?
Evet. Programlama doğuştan gelen bir yetenek değil, öğrenilebilir bir beceri. En zor kısmını, yani algoritma gibi düşünmeyi, bu seride kalemle çözdüysen aslında en çetin engeli geçtin bile. Gerisi pratik meselesi. Küçük ve bitirebileceğin projeler yaz, hata yapmaktan korkma, her gün biraz uğraş. Birkaç ay sonra bugün zor görünen şeyler sana kolay gelecek.