Etiket: #Yapayzeka

  • Bilgisayar Mühendisliği Nedir, Ne Değildir?

    Bilgisayar Mühendisliği Nedir, Ne Değildir?

    “Bilgisayar mühendisi misin? O zaman şu laptopuma bir bakıversene.” Bu bölümü okuyan ya da bitiren hemen herkes bu cümleyi en az bir kez duymuştur. Bilgisayar mühendisliği popüler bir bölüm ama ne olduğu hakkında yanlış bilinen çok şey var. Tercih döneminde bu bölümü düşünen biri, başka bir alandan geçmek isteyen biri ya da sadece merak eden biri için bu yazıda bölümü biraz yakından anlatmak istiyorum.

    Bu konuyu videoda da anlattım. İzleyerek öğrenmeyi seviyorsan buradan başlayabilirsin 👇

    Kısa tanım

    Bilgisayar mühendisliği, bilgisayar sistemlerinin nasıl tasarlandığını, nasıl çalıştığını ve bu sistemler üzerinde çalışan yazılımların nasıl geliştirildiğini inceleyen mühendislik dalı. Bir yanında donanım (işlemci, bellek, devreler), öbür yanında yazılım (algoritmalar, programlama, veritabanları, ağlar) var. Ortada da ikisini birbirine bağlayan teori: matematik ve problem çözme.

    Ne değildir?

    Bilgisayar tamirciliği değildir. Bir bilgisayar mühendisi bozuk bir laptopu tamir edebilir de, edemeyebilir de. Okulda bilgisayarın içini söküp takmayı değil, işlemcinin bir komutu nasıl çalıştırdığını öğreniyorsun. Teknik servis başka bir uzmanlık.

    Sadece kod yazmak değildir. Kod yazmak işin önemli bir parçası ama tamamı değil. Bir problemi parçalara ayırmak, doğru algoritmayı seçmek, sistemi tasarlamak, başkalarıyla birlikte çalışmak, hatayı bulmak… Kodu yazmak çoğu zaman bu düşünme sürecinin son adımı.

    Matematik dehası olmayı gerektirmez. Matematik dersleri var ve kolay değil: kalkülüs, lineer cebir, ayrık matematik, olasılık. Ama amaç matematikçi olmak değil, mantıklı düşünmeyi ve problemi modellemeyi öğrenmek. Düzenli çalışan biri bu derslerden geçebilir.

    Oyun oynamayı sevmek yetmez. Oyunlar birçok kişinin bilgisayara ilgisini başlatan şey ama oyun oynamak ile oyun geliştirmek çok farklı işler. Oyun geliştirme de bu bölümün ana konusu değil; kariyer yollarından sadece biri.

    “Bilgisayarı iyi kullanıyorum” demek yeterli bir sebep değildir. Bir arabayı iyi kullanmak, motorun nasıl tasarlandığını bilmek demek değil. Bölüm, bilgisayarı kullanmaktan çok onun arkasındaki mantığı anlamakla ilgili.

    Dört yılda neler öğreniliyor?

    Ders programları üniversiteden üniversiteye değişiyor ama genel akış çoğu yerde benzer:

    DönemTipik dersler
    1. yılProgramlamaya giriş, kalkülüs, fizik, ayrık matematik
    2. yılVeri yapıları, nesne yönelimli programlama, mantık devreleri, lineer cebir, olasılık
    3. yılAlgoritma analizi, işletim sistemleri, veritabanları, bilgisayar ağları, bilgisayar mimarisi, yazılım mühendisliği
    4. yılSeçmeli dersler (yapay zekâ, görüntü işleme, siber güvenlik, mobil programlama gibi) ve bitirme projesi

    Ara dönemlerde çoğu üniversitede staj zorunluluğu var. Staj, okulda öğrendiklerinin iş dünyasında nasıl kullanıldığını görmenin ilk fırsatı.

    İlk iki yıl genelde en zorlayıcı dönem: Matematik ağırlıklı dersler ve programlamaya yeni başlamanın verdiği bocalama bir araya geliyor. Bu dönemi atlatanlar için 3. ve 4. yılda dersler daha uygulamalı ve daha “bilgisayar” hissettiren konulara geliyor.

    Yazılım mühendisliğinden farkı ne?

    Tercih döneminin en çok sorulan sorularından biri. Kısaca:

    • Bilgisayar mühendisliği daha geniş: Donanım tarafını (devreler, mimari) ve teoriyi de kapsar.
    • Yazılım mühendisliği yazılımın yaşam döngüsüne odaklanır: gereksinim analizi, tasarım, test, proje yönetimi.

    Ama pratikte iki bölümün ders programları büyük ölçüde örtüşüyor ve mezunları çoğu zaman aynı işlere başvuruyor. İkisi arasında kararsızsan, bölüm adından çok üniversitenin ders programına, laboratuvarlarına ve staj imkanlarına bakmak daha faydalı.

    Mezun olunca neler yapılır?

    Bilgisayar mühendisliğinin en güzel tarafı kapıların çok olması. Bazı yollar:

    • Yazılım geliştirme: web (ön yüz, arka yüz), mobil uygulama, masaüstü yazılımları.
    • Veri ve yapay zekâ: veri analisti, veri bilimci, makine öğrenmesi mühendisi.
    • Altyapı ve bulut: sistem yöneticisi, DevOps, bulut mühendisi.
    • Siber güvenlik: güvenlik analisti, sızma testi uzmanı.
    • Gömülü sistemler: otomotivden akıllı cihazlara kadar donanımla iç içe yazılım.
    • Oyun geliştirme.
    • Kamu: bakanlıkların ve kurumların bilişim birimleri.
    • Akademi: yüksek lisans, doktora ve araştırma.
    • Teknik olmayan ama teknik bilgi isteyen roller: ürün yöneticisi, iş analisti, danışmanlık.

    Bu yolların ikisini daha önce ayrı yazılarda anlattım: veri analisti olmak için yol haritası ve kamuya girmek isteyenler için KPSS rehberi.

    Bu bölüm kimler için uygun?

    Puanından çok şu sorulara verdiğin cevaplar önemli:

    • Bir şeyin nasıl çalıştığını merak eder misin?
    • Bir problemle saatlerce uğraşıp sonunda çözdüğünde keyif alır mısın, yoksa bu seni yorar mı?
    • Hata yapmayı kaldırabilir misin? Programlama, sürekli hata alıp düzeltmekten oluşan bir iş.
    • Ders bittikten sonra da öğrenmeye devam etmeye hazır mısın? Teknoloji çok hızlı değişiyor; okulda öğrendiklerin bir başlangıç.

    Bu sorulara çoğunlukla “evet” diyorsan, matematikten korksan bile bu bölümde mutlu olma ihtimalin yüksek.

    Başlamadan önce ne yapabilirsin?

    En iyi test, biraz kod yazmayı denemek. Bunun için bilgisayarına bir şey kurman bile gerekmiyor: Bu blogdaki Python dersleri tamamen tarayıcıda, Google Colab üzerinde ilerliyor. İlk birkaç dersi bitirdiğinde “bu bana keyif veriyor mu?” sorusunun cevabını büyük ölçüde almış olursun.

    Benim için bilgisayar mühendisliği

    Benim için bilgisayar mühendisliği, dijital dünyada her şeyi yapabilen ve üretebilen tarafta yer almak demek.

    Ama dürüst olayım, bu taraf aynı zamanda kaygısı bol bir taraf. Bilgiye herkesin ulaşabildiği, birkaç aylık bir kursla ya da bir yapay zekâ aracıyla herkesin “yazılımcı” olabildiği bir dünyada bazen insanın içi sıkılıyor. “Ben neden bu kadar uğraştım?” sorusunu düşünmeden devam edebilmek kimi zaman gerçekten zor.

    Ama devam edince karşına uçsuz bucaksız bir evren çıkıyor. Oyun yapmak istersen yaparsın, bir mobil uygulama geliştirmek istersen geliştirirsin, veriden hikâye çıkarmak istersen çıkarırsın. Bu blogdaki her yazı, her proje de o evrende atılmış küçük bir adım.

    Bu bölümü düşünen birine tek bir tavsiyem olsun: Kaygıları duy ama onların seni durdurmasına izin verme. Üretmeye başladığın an, bu alanın ne kadar geniş olduğunu kendin göreceksin.

  • Kod Kartı: Liste Üreteciyle Tek Satırda Filtre

    Kod Kartı: Liste Üreteciyle Tek Satırda Filtre

    Bir listeden şarta uyan elemanları seçip yeni bir liste yapmak için dört satır yazıyorduk: boş liste, for, if, append. Liste üreteci (list comprehension) aynı işi tek satırda yapıyor.

    İtiraf edeyim, Python öğrenirken bana en zor gelen konulardan biri buydu. İlk gördüğümde satırın nereden başlayıp nerede bittiğini çözemiyordum. Aşağıdaki okuma yöntemini öğrenince her şey yerine oturdu.

    Kod

    notlar = [70, 85, 40, 90, 45]
    # Dört satırlık hali
    gecenler = []
    for n in notlar:
    if n >= 50:
    gecenler.append(n)
    # Tek satırlık hali
    gecenler = [n for n in notlar if n >= 50]
    print(gecenler) # [70, 85, 90]

    Bu satır nasıl okunur?

    [n for n in notlar if n >= 50] satırını soldan sağa şöyle oku: “Listeye n‘yi koy, notlar içindeki her n için, eğer n 50 veya üstüyse.” Yani dört satırlık kodun parçaları aynı, sadece yerleri değişmiş: listeye eklenecek şey en başa, for ortaya, if sona geliyor. Köşeli parantezler de “sonuç bir liste” demek.

    Filtrelemenin yanında dönüştürme

    Baştaki kısımda sadece n yazmak zorunda değilsin; her elemanı değiştirebilirsin:

    print([n + 5 for n in notlar])
    # [75, 90, 45, 95, 50] herkese 5 puan
    print([n + 5 for n in notlar if n < 50])
    # [45, 50] sadece kalanlara 5 puan, sadece onları listele
    isimler = ["ayşe", "mert", "zeynep"]
    print([i.capitalize() for i in isimler])
    # ['Ayşe', 'Mert', 'Zeynep']

    _ ne demek?

    Matrix yağmuru yazısındaki şu satırı hatırla:

    damlalar = [random.randint(-yukseklik, 0) for _ in range(genislik)]

    Burada döngü değişkenini hiç kullanmıyoruz; sadece genislik kadar rastgele sayı üretmek istiyoruz. Python’da kullanılmayan değişkene genelde _ adı verilir. Bu, okuyana “bu değere ihtiyacım yok, sadece tekrar sayısı önemli” der.

    Dikkat

    Liste üreteci kısa ve okunaklı olduğunda güzel. Ama içine çok şey sıkıştırırsan okunmaz hale gelir:

    # Okuması zor
    [n * 2 if n > 60 else n for n in notlar if n % 5 == 0 and n != 45]

    Bir satırı okumak için birkaç kez durman gerekiyorsa dört satırlık for döngüsüne geri dön. Kodu kısa yazmak değil, anlaşılır yazmak amaç.

    Listeleri Python Dersi 7’de, for ve if‘i Python Dersi 5 ve 6’da anlattım.

  • Açık Kaynak Nedir?

    Açık Kaynak Nedir?

    Python derslerinde kullandığımız Python’un kendisi, telefonların çoğunda çalışan Android’in temelindeki Linux, Firefox tarayıcısı… Hepsinin ortak bir özelliği var: Kodlarını herkes okuyabilir. Bunlara açık kaynak yazılım deniyor.

    Kısa tanım

    Açık kaynak, bir yazılımın kaynak kodunun herkese açık olması ve bir lisansla insanlara bu kodu kullanma, inceleme, değiştirme ve paylaşma izni verilmesi demek. Kaynak kod, bir programın insanların okuyabildiği, programlama diliyle yazılmış hali.

    Karşıtı kapalı kaynak (ya da mülk) yazılım: Programı kullanırsın ama kodunu göremez, değiştiremezsin.

    Bir benzetme: yemek tarifi

    Bir restoranda harika bir yemek yedin. Kapalı kaynak, o yemeği sadece restoranda yiyebilmek gibi: Tadına bakarsın ama tarifi sır. Açık kaynak ise tarifin kapıya asılması gibi: İstersen evde yaparsın, tuzunu azaltırsın, kendi versiyonunu arkadaşına verirsin. Biri tarifte bir hata bulursa herkes düzeltmesinden faydalanır.

    Kendin dene: Python’un içine bak

    Python açık kaynak olduğu için, kullandığın hazır fonksiyonların kodunu bilgisayarından okuyabilirsin. Mesela medyanı (ortanca değeri) hesaplayan fonksiyonun içine bakalım:

    import inspect
    import statistics
    print(inspect.getsource(statistics.median))

    Çıktının son kısmı şöyle:

        data = sorted(data)
        n = len(data)
        if n == 0:
            raise StatisticsError("no median for empty data")
        if n % 2 == 1:
            return data[n // 2]
        else:
            i = n // 2
            return (data[i - 1] + data[i]) / 2

    Tanıdık geldi mi? sorted ve len Python Dersi 7’den, if/else Python Dersi 5’ten. Python’u yazan geliştiriciler de bizim derslerde öğrendiğimiz araçlarla kod yazıyor. Açık kaynağın en güzel tarafı bu: “Bu nasıl çalışıyor?” diye merak ettiğinde cevabı kendin okuyabiliyorsun.

    Açık kaynak bedava mı demek?

    Çoğu zaman evet ama asıl mesele bu değil. Açık kaynak dünyasında sık kullanılan bir söz var: “Bedava bira gibi değil, özgür konuşma gibi özgür.” Yani önemli olan fiyat değil, kodla ne yapabileceğin. Ücretsiz olup kodu kapalı olan birçok uygulama var; bunlar açık kaynak değil.

    Açık kaynak kod kullanan şirketler de para kazanabilir: destek hizmeti satarak, bulutta barındırarak ya da açık kaynak bir projenin üstüne kendi ürününü kurarak.

    Lisanslar: “Şu şartlarla kullanabilirsin”

    Kodun herkese görünür olması tek başına yetmez; neye izin verildiğini lisans belirler. En sık karşılaşacağın üç lisans:

    LisansKısaca
    MITÇok serbest. Kodu istediğin gibi kullan, sadece lisans metnini ve telif notunu koru.
    Apache 2.0MIT’e benzer serbestlik, ek olarak patent haklarıyla ilgili maddeler içerir.
    GPLKodu değiştirip dağıtırsan, senin sürümün de aynı şekilde açık kaynak olmak zorunda.

    GitHub’da bir projenin lisansını görmek için depodaki LICENSE dosyasına bakman yeterli. Lisansı olmayan bir kod, herkese açık görünse bile hukuken açık kaynak sayılmaz; sahibi izin vermedikçe kullanım hakları belirsiz kalır.

    Neden önemli?

    • Öğrenmek için: Gerçek projelerin kodunu okumak, ders kitabından sonra gelen en iyi okul.
    • Güven için: Kod herkese açık olduğu için başkaları da inceleyip hataları ve güvenlik açıklarını bulabiliyor.
    • Hız için: Herkes tekerleği yeniden icat etmiyor. Veri biliminde kullandığımız pandas, NumPy, scikit-learn gibi kütüphanelerin hepsi açık kaynak.
    • Kariyer için: Açık kaynak bir projeye yaptığın katkılar herkese açık bir portfolyo gibi çalışır.

    Nasıl katkı verilir?

    Açık kaynak projeye katkı vermek için usta bir yazılımcı olman gerekmiyor. Başlamak için birkaç kolay yol:

    • Kullandığın bir projede hata bulursan, projenin GitHub sayfasında “issue” açarak bildir.
    • Belgelerdeki yazım hatalarını düzelt ya da eksik bir örneği ekle.
    • Belgelerin Türkçe çevirisine yardım et.
    • GitHub’da “good first issue” etiketli işlere bak; bunlar yeni başlayanlar için ayrılmış küçük görevler.

    Bir cümlede

    Açık kaynak, bir yazılımın tarifini herkese açmak demek: Herkes okuyabilir, değiştirebilir, paylaşabilir; kuralları da lisans belirler.

  • Listeler (Python Dersi 7)

    Listeler (Python Dersi 7)

    Geçen derste listeleri “birden fazla değeri bir arada tutan kutu” diye geçip döngülerle gezdik. Ama o kutuyu hep hazır aldık: içine bir şey eklemedik, çıkarmadık, sıralamadık. Bu derste listelerle gerçekten çalışmayı öğreniyoruz. Sonunda, kullanıcı “bitti” diyene kadar not alan ve en yüksek, en düşük ve ortalamayı bulan bir program yazacağız.

    Bu dersin kodları ve alıştırmaları hazır bir not defterinde: Colab’da Aç.

    Liste oluşturmak

    Liste, köşeli parantez içinde virgülle ayrılmış değerlerden oluşur:

    notlar = [70, 85, 40, 90]
    bos = []
    karisik = ["Ayşe", 21, 1.68, True]
    print(len(notlar)) # 4
    print(len(bos)) # 0

    Bir listenin içinde farklı tipte değerler olabilir; karisik listesinde metin, tam sayı, ondalıklı sayı ve True bir arada. Ama günlük kullanımda listeler genelde aynı türden şeyleri tutar: notlar, isimler, ürünler. len geçen dersten tanıdık: listede kaç eleman olduğunu verir.

    İndeks: sıradaki elemana ulaşmak

    Listedeki her elemanın bir sıra numarası var. Buna indeks deniyor ve Python’da saymak 0’dan başlıyor:

    notlar = [70, 85, 40, 90]
    # indeks: 0 1 2 3
    print(notlar[0]) # 70 (ilk eleman)
    print(notlar[2]) # 40
    print(notlar[-1]) # 90 (son eleman)
    print(notlar[-2]) # 40 (sondan ikinci)

    Eksi işaretli indeksler sondan saymaya yarıyor. -1 her zaman son eleman; listenin kaç elemanlı olduğunu bilmesen bile işe yarar.

    Neden 0’dan? İndeksi “baştan kaç adım uzakta” diye düşün. İlk eleman baştan 0 adım uzakta. Geçen dersteki range(5)‘in 0’dan başlaması da aynı mantık.

    Dilimleme: listenin bir parçasını almak

    Tek bir eleman yerine bir aralık istersen iki nokta kullanırsın:

    alisveris = ["süt", "ekmek", "yumurta", "peynir", "çay"]
    print(alisveris[1:3]) # ['ekmek', 'yumurta']
    print(alisveris[:2]) # ['süt', 'ekmek']
    print(alisveris[2:]) # ['yumurta', 'peynir', 'çay']
    print(alisveris[::-1]) # ['çay', 'peynir', 'yumurta', 'ekmek', 'süt']

    Kural range ile aynı: başlangıç dahil, bitiş dahil değil. [1:3] 1 ve 2 numaralı elemanları verir. Başı yazmazsan en baştan, sonu yazmazsan en sona kadar alınır. [::-1] listeyi ters çevirir.

    Eleman değiştirmek

    Listeler değiştirilebilir. Bir indekse yeni değer atamak yeterli:

    notlar = [70, 85, 40, 90]
    notlar[2] = 55 # bütünlemeden sonra not değişti
    print(notlar) # [70, 85, 55, 90]

    Eklemek ve silmek

    Listelerin en çok kullanılan dört metodu (listeye ait fonksiyon) şunlar:

    liste = ["süt", "ekmek"]
    liste.append("çay") # sona ekle
    print(liste) # ['süt', 'ekmek', 'çay']
    liste.insert(0, "yumurta") # istediğin sıraya ekle
    print(liste) # ['yumurta', 'süt', 'ekmek', 'çay']
    liste.remove("ekmek") # değere göre sil
    print(liste) # ['yumurta', 'süt', 'çay']
    son = liste.pop() # sondakini çıkar ve geri ver
    print(son) # çay
    print(liste) # ['yumurta', 'süt']
    MetotNe yapar?
    append(x)x‘i listenin sonuna ekler
    insert(i, x)x‘i i numaralı yere ekler, diğerlerini bir kaydırır
    remove(x)x değerini bulup siler (ilk bulduğunu)
    pop()Son elemanı çıkarıp geri verir; pop(i) i numaralıyı çıkarır

    Metotlar listenin adından sonra nokta koyarak çağrılır: liste.append(...). Bu, “bu listeye şunu ekle” demek.

    Listede var mı?

    Bir değerin listede olup olmadığını in ile sorarsın; cevap True ya da False olur:

    liste = ["yumurta", "süt"]
    print("süt" in liste) # True
    print("ekmek" in liste) # False

    Sıralamak, en büyük, en küçük, toplam

    Listeyi sıralamanın iki yolu var ve aralarındaki fark önemli:

    notlar = [70, 85, 40, 90]
    print(sorted(notlar)) # [40, 70, 85, 90] yeni, sıralı bir liste verir
    print(notlar) # [70, 85, 40, 90] asıl liste değişmedi
    notlar.sort() # asıl listeyi sıralar
    print(notlar) # [40, 70, 85, 90]
    notlar.sort(reverse=True)
    print(notlar) # [90, 85, 70, 40] büyükten küçüğe
    • sorted(liste) asıl listeye dokunmaz, sıralı bir kopya verir.
    • liste.sort() asıl listeyi sıralar ve geriye bir şey döndürmez.

    Geçen derste toplamı döngüyle biriktirmiştik. Python’da bunun için hazır fonksiyonlar da var:

    notlar = [90, 85, 70, 40]
    print(min(notlar)) # 40
    print(max(notlar)) # 90
    print(sum(notlar)) # 285
    print(sum(notlar) / len(notlar)) # 71.25

    Döngüyle toplamayı boşuna öğrenmedin: sum da arka planda aynı işi yapıyor. Ama listede filtre, şart ya da hesap varsa hâlâ döngü gerekecek.

    Mini program: “bitti” diyene kadar not

    Geçen derste program önce kaç not girileceğini soruyordu. Bu sefer kullanıcı istediği kadar not girsin, “bitti” yazınca dursun. Notları bir listede biriktiriyoruz:

    notlar = []
    while True:
    giris = input("Not gir (bitirmek için 'bitti' yaz): ")
    if giris == "bitti":
    break
    notlar.append(float(giris))
    print(f"{len(notlar)} not girdin.")
    print(f"En yüksek: {max(notlar)}, en düşük: {min(notlar)}")
    print(f"Ortalama: {sum(notlar) / len(notlar):.1f}")
    gecenler = []
    for n in notlar:
    if n >= 50:
    gecenler.append(n)
    print("Geçen notlar:", gecenler)

    Örnek çalışma:

    Not gir (bitirmek için 'bitti' yaz): 70
    Not gir (bitirmek için 'bitti' yaz): 85
    Not gir (bitirmek için 'bitti' yaz): 40
    Not gir (bitirmek için 'bitti' yaz): bitti
    3 not girdin.
    En yüksek: 85.0, en düşük: 40.0
    Ortalama: 65.0
    Geçen notlar: [70.0, 85.0]

    İki yeni şey bir arada: boş listeyle başlayıp append ile doldurmak ve bir listeden koşula göre yeni bir liste üretmek. gecenler listesini kuran dört satırın tek satırlık hali de var; onu ileride bir kod kartında göreceksin.

    Sık karşılaşılan hatalar

    Olmayan indeksi istemek. Dört elemanlı listede son indeks 3’tir. notlar[4] yazarsan IndexError: list index out of range hatası alırsın. Son elemanı istiyorsan notlar[-1] en güvenli yol.

    sort’un sonucunu bir değişkene atamak. sirali = notlar.sort() yazarsan sirali değişkeninde None (hiçbir şey) olur, çünkü sort asıl listeyi sıralar ama bir şey geri vermez. Yeni bir sıralı liste istiyorsan sorted(notlar) kullan.

    Listeyi kopyaladığını sanmak. b = a yazmak yeni bir liste oluşturmaz; aynı kutuya ikinci bir isim verir. b‘ye eklenen her şey a‘da da görünür. Gerçek bir kopya için b = a.copy() yaz.

    a = [1, 2]
    b = a
    b.append(3)
    print(a) # [1, 2, 3] a da değişti!
    c = a.copy()
    c.append(4)
    print(a, c) # [1, 2, 3] [1, 2, 3, 4]

    Bu derste öğrendiklerin

    • Liste [ ] ile kurulur; len eleman sayısını verir.
    • İndeks 0’dan başlar; -1 son eleman.
    • Dilimleme [baş:son] başı dahil eder, sonu etmez.
    • append, insert, remove, pop ile eleman ekler ve silersin.
    • sorted yeni sıralı liste verir, sort asıl listeyi sıralar.
    • min, max, sum hazır hesaplar yapar.

    Alıştırmalar

    1. sayilar = [3, 8, 1, 9, 4] listesinin ortalamasını ve en büyükle en küçük arasındaki farkı yazdır.
    2. renkler = ["kırmızı", "mavi", "yeşil"] listesine “sarı” ekle, “mavi”yi sil ve listenin son halini ve uzunluğunu yazdır.
    3. harfler = ["p", "y", "t", "h", "o", "n"] listesinin ilk üç ve son üç elemanını dilimlemeyle yazdır.
    4. tekrar = [1, 2, 2, 3, 1, 4] listesindeki tekrar eden sayıları atıp [1, 2, 3, 4] listesini elde et. İpucu: boş bir liste aç, döngüyle gez ve not in ile kontrol et.

    Cevaplar

    1. print(sum(sayilar) / len(sayilar)) sonucu 5.0; print(max(sayilar) - min(sayilar)) sonucu 8.
    2. renkler.append("sarı"), renkler.remove("mavi"), ardından print(renkler, len(renkler)) sonucu ['kırmızı', 'yeşil', 'sarı'] 3.
    3. print(harfler[:3]) sonucu ['p', 'y', 't']; print(harfler[-3:]) sonucu ['h', 'o', 'n'].
    4. tekil = [], sonra for s in tekrar: içinde if s not in tekil: tekil.append(s). print(tekil) sonucu [1, 2, 3, 4].

    Sıradaki ders

    Listeler sıralı değerler için harika. Peki bir öğrencinin adını notuyla eşleştirmek istersen? Bir sonraki derste sözlükleri (dictionary) ve demetleri (tuple) öğreneceğiz.

  • Açı, Üçgen, Türev: Atatürk’ün Geometri Kitabı

    Açı, Üçgen, Türev: Atatürk’ün Geometri Kitabı

    Matematik dersinde “üçgenin iç açıları toplamı” derken bu kelimelerin ne kadar yeni olduğunu hiç düşündün mü? Cumhuriyet’in ilk yıllarında bir öğrenci aynı cümleyi “müsellesin zaviyeleri” diye kurardı. Bugün hepimizin ağzına yerleşmiş olan “açı”, “üçgen”, “artı”, “eksi” gibi kelimelerin bir kısmı, Atatürk’ün ölümünden kısa süre önce kendi eliyle yazdığı 44 sayfalık bir kitapla yerleşti.

    Cumhuriyet’in 103. yılında bu küçük kitabı anlatmak istiyorum. Çünkü bilimi bir ülkenin kendi dilinde konuşulabilir kılmak, en az bir okul ya da bir fabrika açmak kadar büyük bir iş.

    “En hakiki mürşit ilimdir”

    Atatürk’ün en çok bilinen sözlerinden biri 1924 yılına ait. Tam hali şöyle başlıyor: “Dünyada her şey için, maddiyat için, maneviyat için, hayat için, muvaffakiyet için en hakiki mürşit ilimdir, fendir.”

    Sözün devamı daha az bilinir ama bence asıl can alıcı kısım orada: Bilimin her an geliştiğini kavramak ve ilerlemelerini zamanında izlemek gerektiğini, binlerce yıl önceki kuralları bugün aynen uygulamaya kalkışmanın bilimin içinde olmak anlamına gelmediğini söylüyor. Yani bilim bir kere öğrenip rafa kaldıracağın bir şey değil; sürekli güncellenen bir yol gösterici.

    Teknolojiyle uğraşan biri için bu cümle hiç eskimiyor. Gelişmeleri takip etmeyen birinin elindeki bilgi birkaç yılda eskiyor.

    Geometri kitabının hikâyesi

    Yıl 1936. Atatürk Dolmabahçe’de. Sonbaharda Türk Dil Kurumu’ndan Agop Dilaçar ve Süreyya Anderiman Beyoğlu’ndaki bir kitapçıya gönderilip Fransızca geometri kitapları alınıyor. Atatürk bunları inceliyor, ardından 1936-1937 kışında Geometri adındaki kitabı kendi eliyle yazıyor.

    Kitabın bazı özellikleri:

    • 44 sayfa, üç bölüm ve 73 çizimden oluşuyor.
    • Kapakta yazar adı yok. Kitap, geometri öğretenlere ve bu alanda kitap yazacaklara kılavuz olsun diye Kültür Bakanlığı adına yayımlanıyor.
    • Atatürk kendisine önerilen terimleri de düzeltiyor. Örneğin “arta” ve “ekse” diye önerilen kelimeleri “artı” ve “eksi” olarak değiştiriyor.
    • 1937 Kasım’ında yeni geometri kitabının ve terim listesinin okullara ve öğretmenlere gönderilmesi isteniyor.

    Tek bir kitap gibi görünse de asıl etkisi sınıflarda oldu: Öğretmenler ve ders kitabı yazarları bu terimleri kullandıkça kelimeler yerleşti.

    Eski terimler, yeni terimler

    Eski terimKitapla yerleşen terim
    müsellesüçgen
    zaviyeaçı
    dılıkenar
    muvaziparalel
    zaitartı
    nakıseksi
    riyaziyematematik

    Kitapta geçen diğer terimlerden bazıları: boyut, yüzey, çap, yarıçap, çember, teğet, açıortay, köşegen, ikizkenar, paralelkenar, yatay, düşey, toplam, oran, orantı, türev, alan.

    “Çap”, “köşegen”, “açıortay” kelimelerine bir daha bak: kelimenin kendisi ne anlama geldiğini söylüyor. Köşeleri birleştiren doğru, açıyı ortadan bölen doğru. Bir öğrencinin tanımı ezberlemesine gerek kalmıyor.

    İsim vermek neden bu kadar zor?

    Yazılımcılar arasında yaygın bir şaka vardır: Bilgisayar biliminde iki zor şey vardır, önbelleği geçersiz kılmak ve bir şeye isim vermek.

    Kod yazarken bir değişkene x mi diyeceksin, ogrenci_notlari mı? İkisi de çalışır ama ikincisini okuyan herkes ne olduğunu hemen anlar. Python derslerinde değişken adlarını anlamlı seçmeye bu yüzden bu kadar önem veriyoruz.

    Geometri kitabı da aslında bir isimlendirme projesi. “Zaviye” ile “açı” aynı kavramı anlatıyor, ama birini öğrenmek için ayrı bir dil bilmen gerekiyor, diğerini ise günlük hayattan zaten tanıyorsun. Bilimin dilini sadeleştirmek, bilime giriş kapısını genişletmek demek.

    Python ile küçük bir çeviri deneyi

    Eski terimleri yenileriyle değiştiren bir program yazalım. Bunun için bir sözlük (dictionary) kullanıyoruz; sözlükleri Python Dersi 8’de ayrıntılı anlatacağım.

    from datetime import date
    eski_yeni = {
    "müselles": "üçgen",
    "zaviye": "açı",
    "dılı": "kenar",
    "muvazi": "paralel",
    "zait": "artı",
    "nakıs": "eksi",
    "riyaziye": "matematik",
    }
    cumle = "Her müselles üç dılıdan ve üç zaviyeden oluşur."
    for eski, yeni in eski_yeni.items():
    cumle = cumle.replace(eski, yeni)
    print(cumle)
    ilan = date(1923, 10, 29)
    bugun = date(2026, 10, 29)
    gun = (bugun - ilan).days
    print(f"Cumhuriyet {bugun.year - ilan.year} yaşında: {gun:,} gün".replace(",", "."))

    Çıktı:

    Her üçgen üç kenardan ve üç açıden oluşur.
    Cumhuriyet 103 yaşında: 37.621 gün

    “Açıden” kelimesini fark ettin mi? Program kelimeyi doğru değiştirdi ama Türkçenin ünlü uyumunu bilmediği için eki düzeltmedi; doğrusu “açıdan”. Bu küçük hata asıl büyük noktayı gösteriyor: Bir dili değiştirmek kelime değiştirmekten ibaret değil. Yeni terimlerin dilin kurallarına uyması, eklerle söylenebilmesi gerekiyor. Geometri kitabındaki terimlerin tutmasının bir sebebi de bu: “açıdan”, “üçgenin”, “kenarları” diye rahatça çekimlenebiliyorlar.

    Küçük bir alıştırma: Sözlüğe “zaviyeden”: “açıdan” gibi ekli halleri de ekleyerek çıktıyı düzelt. Hangi sırayla eklediğinin neden önemli olduğunu da düşün.

    Bilim için kurulan üniversite

    Aynı dönemin bir başka büyük adımı 1933 Üniversite Reformu. Darülfünun kapatıldı ve yerine Tıp, Hukuk, Edebiyat ve Fen fakülteleriyle İstanbul Üniversitesi kuruldu.

    Reformun en ilginç tarafı zamanlaması. Aynı yıl Almanya’da Naziler, Yahudi kökenli ya da rejime karşı olan bilim insanlarını üniversitelerden atmaya başlamıştı. Türkiye bu akım insanların bir kısmını davet etti. Tıptan matematik ve fen bilimlerine, hukuktan mimarlığa kadar pek çok alanda ders verdiler; matematikçi Richard von Mises ve mimar Bruno Taut bunlardan sadece ikisi. Yani zor bir dönemde hem bilim insanları güvenli bir yer buldu hem de genç Cumhuriyet’in üniversiteleri güçlendi.

    Bugün bize ne söylüyor?

    Bu yazıyı yazarken şunu düşündüm: Bugün yapay zekâ, veri bilimi, bulut bilişim gibi alanlarda kullandığımız terimlerin çoğu İngilizce. “Machine learning” mi diyeceğiz, “makine öğrenmesi” mi? “Prompt” mu, “istem” mi? Bu blogda yapmaya çalıştığım şeylerden biri de tam olarak bu: teknolojiyi Türkçe, sade ve herkesin anlayabileceği şekilde anlatmak.

    Geometri kitabı bana şunu hatırlattı: Bilim herkes için olacaksa, herkesin anlayacağı bir dilde konuşulmalı.

    Cumhuriyet Bayramımız kutlu olsun.

    Kaynaklar :

  • Bulut Bilişim Nedir? Günlük Hayattan Örneklerle

    Bulut Bilişim Nedir? Günlük Hayattan Örneklerle

    Fotoğrafların telefonda yer kaplamasın diye “buluta yedekle” seçeneğine bastıysan bulut bilişimi zaten kullanıyorsun. Gmail’e girdiğinde, Netflix’te dizi açtığında ya da Python derslerinde Google Colab’da kod çalıştırdığında da öyle. Peki bu “bulut” tam olarak nerede?

    Kısa tanım

    Bulut bilişim, bilgisayar gücünü (depolama alanı, işlemci, yazılım) kendi cihazına kurmak yerine internet üzerinden başka bir şirketin bilgisayarlarından kiralamak demek. Bulut gökyüzünde değil; dünyanın farklı yerlerindeki büyük veri merkezlerinde duran, binlerce sunucudan oluşan gerçek makineler.

    Bir benzetme: jeneratör mü, şebeke mi?

    Eskiden elektriğe ihtiyacı olan bir fabrika kendi jeneratörünü kurardı. Jeneratörü almak, bakımını yapmak, bozulunca tamir etmek fabrikanın işiydi. Sonra şehir şebekesi geldi: fişi takıyorsun, kullandığın kadar ödüyorsun, santralin nasıl çalıştığıyla ilgilenmiyorsun.

    Bulut bilişim, bilgisayarlar için şebeke gibi. Kendi sunucunu alıp bir odada çalıştırmak yerine bir bulut sağlayıcısından ihtiyacın kadar kiralıyorsun. İşin büyüyünce daha fazla kiralıyor, küçülünce azaltıyorsun.

    Günlük hayattan örnekler

    • Fotoğraf yedekleme (Google Fotoğraflar, iCloud): Fotoğrafların telefonundan çok bir veri merkezindeki disklerde duruyor; telefonunu kaybetsen de gitmiyor.
    • E-posta (Gmail, Outlook): Mailler bilgisayarına değil, sağlayıcının sunucularına kaydediliyor. Bu yüzden hangi cihazdan girersen gir aynı kutuyu görüyorsun.
    • Ortak belgeler (Google Dokümanlar): Aynı dosyayı üç kişi aynı anda düzenleyebiliyor, çünkü dosya kimsenin bilgisayarında değil, ortak bir sunucuda.
    • Google Colab: Python derslerinde kodu kendi bilgisayarında değil, Google’ın sunucusunda çalıştırıyorsun. Bilgisayarına Python kurmana gerek kalmamasının sebebi bu.

    Kendin dene: kod nerede çalışıyor?

    Aşağıdaki kodu önce Colab’da, sonra (Python kuruluysa) kendi bilgisayarında çalıştır:

    import platform
    import os
    print("Makine adı:", platform.node())
    print("İşletim sistemi:", platform.system())
    print("İşlemci çekirdeği:", os.cpu_count())

    Colab’da gördüğün makine adı ve işletim sistemi seninkinden farklı çıkacak; Colab’da işletim sistemi olarak Linux görürsün. Çünkü kod gerçekten başka bir bilgisayarda, bir veri merkezinde çalışıyor. Ekranda gördüğün sadece o makinenin sana gönderdiği sonuç.

    Bulut hizmetinin üç türü

    Bulut hizmetleri, işin ne kadarını sağlayıcıya bıraktığına göre üçe ayrılıyor. En kolay anlatımı pizza benzetmesi:

    • IaaS (Altyapı hizmeti): Mutfağı kiralıyorsun; malzemeyi alıp pizzayı kendin yapıyorsun. Sana boş bir sanal sunucu veriliyor, üstüne ne kuracağın senin işin. Örnek: Amazon EC2, Google Compute Engine.
    • PaaS (Platform hizmeti): Hamur ve fırın hazır, sen sadece malzemeyi seçiyorsun. Kodunu yüklüyorsun, sunucuyu ayakta tutmak sağlayıcının işi. Örnek: Google App Engine, Heroku.
    • SaaS (Yazılım hizmeti): Pizzayı hazır sipariş ediyorsun. Programı kullanıyorsun, gerisiyle hiç uğraşmıyorsun. Örnek: Gmail, Google Dokümanlar, Canva.

    Günlük hayatta en çok SaaS kullanıyoruz. Veri bilimi ve yazılım tarafında ise IaaS ve PaaS da sık karşına çıkacak.

    Büyük bulut sağlayıcıları

    En bilinen üç sağlayıcı Amazon Web Services (AWS), Microsoft Azure ve Google Cloud. Üçü de yeni başlayanlar için sınırlı ücretsiz kullanım seçenekleri sunuyor; veri ve yazılım iş ilanlarında da bu isimleri sık görürsün.

    Artıları ve eksileri

    Artıları

    • Pahalı donanım almadan güçlü bilgisayarlara erişirsin.
    • Kullandığın kadar ödersin; ihtiyacın artınca hızlıca büyütürsün.
    • Verine her yerden, her cihazdan ulaşırsın.
    • Yedekleme ve donanım bakımı sağlayıcının işidir.

    Eksileri

    • İnternet yoksa erişim de yok.
    • Verin başka bir şirketin sunucusunda duruyor; gizlilik ve güvenlik ayarlarına dikkat etmen gerekir.
    • Kullanımı takip etmezsen fatura sürpriz yapabilir; açık unutulan bir sunucu çalıştığı sürece ücretlendirilir.
    • Bir sağlayıcıya çok bağlanınca başka birine geçmek zorlaşabilir.

    Bir cümlede

    Bulut bilişim, bilgisayar gücünü kendin sahip olmak yerine internet üzerinden kiralamaktır; fotoğraf yedeğinden Colab’a kadar her gün kullandığın birçok şey bu sayede çalışıyor.

  • Algoritma Nedir? Günlük Hayattan Örneklerle

    Algoritma Nedir? Günlük Hayattan Örneklerle

    “Algoritma” kelimesini sosyal medya haberlerinden duymuşsundur: “Instagram algoritması değişti”, “algoritma bunu öne çıkarıyor”. Kulağa gizemli geliyor ama aslında her gün kullandığın bir şey: bir işi yapmak için sırası belli, açık adımlar.

    Kısa tanım

    Algoritma, bir problemi çözmek ya da bir işi tamamlamak için izlenen, sırası belli ve sonunda biten adımlar dizisidir. Bilgisayar programları algoritmaların bir programlama diliyle yazılmış hâlidir.

    Bir yemek tarifi gibi

    Bir çay demleme tarifini düşün:

    1. Çaydanlığa su koy ve kaynat.
    2. Demliğe iki tatlı kaşığı çay koy.
    3. Kaynayan suyu demliğe dök.
    4. Demliği çaydanlığın üstüne koy, 10-15 dakika demlenmeye bırak.

    Bu bir algoritma. Adımların sırası önemli (suyu kaynatmadan demliğe dökemezsin), her adım açık ve sonunda bitiyor. Bilgisayar için yazılan bir algoritmanın tek farkı, adımların çok daha kesin olması gerektiği: “biraz çay koy” bir insana yeter, bilgisayara yetmez.

    İyi bir algoritmanın özellikleri

    • Açık: Her adım tek bir şekilde anlaşılır.
    • Sıralı: Hangi adımın önce geldiği bellidir.
    • Sonlu: Bir noktada biter; sonsuza kadar dönmez.
    • Doğru: Her olası girdi için istenen sonucu verir.
    • Verimli: İşi gereksiz adımlarla uzatmaz.

    Python’da küçük bir algoritma: en yüksek not

    Bir listedeki en yüksek notu bulmak için adımları önce Türkçe yazalım:

    1. İlk notu “şimdiye kadarki en yüksek” kabul et.
    2. Geri kalan her notu tek tek kontrol et.
    3. Daha büyük bir not görürsen “en yüksek”i onunla değiştir.
    4. Liste bitince elindeki “en yüksek” cevaptır.

    Aynı adımlar Python’da:

    notlar = [70, 85, 40, 90, 65]
    en_yuksek = notlar[0] # 1. adım
    for n in notlar: # 2. adım
    if n > en_yuksek: # 3. adım
    en_yuksek = n
    print(en_yuksek) # 4. adım: 90

    Python’da bu iş için hazır bir fonksiyon var: max(notlar). Ama hazır fonksiyonun arkasında da tam olarak bu adımları izleyen bir algoritma çalışıyor. Buradaki for ve if‘i Python Dersi 5 ve 6’da anlattım.

    Aynı iş, farklı algoritmalar: sayı tahmin oyunu

    Bir arkadaşın 1 ile 100 arasında bir sayı tuttu. Her tahmininde sana sadece “daha büyük” ya da “daha küçük” diyor. Nasıl tahmin edersin?

    Birinci yol: sırayla dene. 1 mi? 2 mi? 3 mü? Sayı 73’se 73 tahmin yaparsın. Buna doğrusal arama deniyor.

    İkinci yol: her seferinde ikiye böl. Önce 50 de. “Daha büyük” derse 51 ile 100 arasının ortasını (75) söyle. “Daha küçük” derse 51 ile 74’ün ortasını söyle. Her tahmin, kalan aralığı yarıya indiriyor. Buna ikili arama (binary search) deniyor.

    Bu iki yöntem Python’da yazılıp tahminler sayıldığında sonuç şöyle:

    AralıkTutulan sayıSırayla denemeİkiye bölme
    1 – 1007373 tahmin6 tahmin
    1 – 1.000.000999.999999.999 tahmin19 tahmin

    Aralık 10.000 kat büyüdü, ikili aramanın tahmin sayısı 6’dan sadece 19’a çıktı. Bir milyonluk aralıkta bile 20 tahmin her zaman yetiyor. Algoritma seçimi işte bu yüzden önemli: ikisi de doğru cevabı buluyor, ama biri saniyede, diğeri saatlerce sonra.

    Tek bir şartı var: ikili arama ancak sıralı bir listede çalışır. Telefon rehberinde bir ismi bulurken ortadan açıp “daha ileride mi, geride mi?” diye bakman da aynı fikir; rehber alfabetik olduğu için işe yarıyor.

    Günlük hayattaki algoritmalar

    • Harita uygulamaları iki nokta arasındaki en kısa ya da en hızlı yolu bir algoritmayla hesaplıyor.
    • Sosyal medya akışı hangi gönderiyi önce göstereceğine bir sıralama algoritmasıyla karar veriyor. “Algoritma değişti” denince kast edilen bu sıralama kuralları.
    • Öneri sistemleri (Netflix, Spotify, YouTube), geçmişte izlediklerine ya da dinlediklerine bakarak sana ne önereceğini seçiyor.
    • Arama motorları milyonlarca sayfa arasından aramana en uygun olanları sıralıyor.

    Bir cümlede

    Algoritma, bir işi yapmanın sırası belli, açık adımlarıdır; aynı bilgisayarda bir işin saniyeler mi saatler mi süreceğini çoğu zaman seçilen algoritma belirler.