4 puan yazan GN⁺ 2025-10-25 | 1 yorum | WhatsApp'ta paylaş
  • Bu yazı gerçekte var olmayan, ancak yazılım geliştiricilerin öğrenmesi gereken gerçekçi ve hicivli bilgisayar bilimi derslerini öneriyor
  • Her ders, modern geliştirme kültüründeki sorunları veya önyargılı düşünme biçimlerini eleştirel biçimde ortaya koyuyor
  • Örneğin nesne yönelimli paradigma inancı, komut satırı araçlarında UX’in göz ardı edilmesi ve yavaş dillerin performansına dair yanlış algılar ele alınıyor
  • Ayrıca geliştiricilerin psikolojik saplantıları ve verimsiz alışkanlıklarını konu alan dersler de yer alıyor
  • Genel olarak, bilgisayar bilimi eğitiminin sınırlarını ve geliştirme kültürünün öz değerlendirme ihtiyacını mizahi bir dille sunuyor

CSCI 2100: Nesne Yönelimli Programlamayı Unutmak

  • Bu ders, nesne hiyerarşilerine ait olmayan değişkenler ve fonksiyonlar kavramını öğrenme süreci
    • Nesne yönelimli merkezli düşünceden uzaklaşıp, fonksiyonel programlamanın esnekliğini ve sadeliğini inceliyor
    • “Fonksiyon(function)” kavramını, “metot(method)” kavramından daha genel ve yeniden kullanılabilir bir kavram olarak tanıtıyor
  • Ön koşul olarak, “abstract base class” terimini kullanmış herhangi bir ders sayılıyor
  • Amaç, nesne yönelimli paradigmanın aşırı bağımlılığını çözümlemek ve programlamanın özündeki düşünce biçimini yeniden kurmak

CSCI 3300: Klasik Yazılım İncelemeleri

  • Tarihsel olarak önemli yazılım ürünlerini analiz edip tartışan bir ders
    • Ele alınan örnekler arasında VisiCalc, AppleWorks, Robot Odyssey, Zork, MacPaint bulunuyor
  • Odak, kullanıcı arayüzü (UI) ile donanım kısıtlarının yaratıcılık üzerindeki etkisine yöneliyor
  • Geçmişin kısıtları içinde doğan yenilikler üzerinden, modern yazılım tasarımının temel ilkelerini yeniden düşündürüyor

CSCI 4020: Yavaş Dillerle Hızlı Kod Yazmak

  • Yorumlanan dillerle (Python vb.) da yüksek performanslı kod yazma yöntemlerini ele alıyor
    • Yüksek seviyede performans analizi yapıp C++ düzeyinde verimlilik elde etme stratejilerini inceliyor
  • Aynı anda hem kodun kırılganlığını azaltmayı hem de geliştirme keyfini korumayı hedefliyor
  • “Yavaş diller yavaştır” şeklindeki kanıyı kırarak, dil tasarımı ile çalışma ortamının optimizasyon potansiyelini gösteren bir ders

CSCI 2170: Komut Satırı Araçlarının Kullanıcı Deneyimi (UX)

  • Komut satırı tabanlı programların kullanıcı deneyimi tasarım ilkelerini ele alan giriş dersi
    • Çıktının ilgili olması, okunabilirliği ve sadeleştirilmesi temel konular arasında
  • UNIX’in ls komutu üzerinden, aşırı seçenek ve karmaşık arayüz sorunlarını inceliyor
  • Komut satırı araçlarının da grafik arayüzler gibi kullanıcı merkezli tasarıma ihtiyaç duyduğunu vurguluyor

PSYC 4410: Programcı Saplantılarının Psikolojisi

  • Yazılım geliştiricilerin sıkça kapıldığı verimsiz takıntıları ve zorlayıcı düşünce kalıplarını inceliyor
    • Örn: kod biçimlendirme, sınıflandırma sistemleri (taxonomy), tip sistemleri, dosyaları aşırı bölme
  • Yabancı bir sistemle karşılaşıldığında ortaya çıkan anlık eleştiri refleksini (knee-jerk criticism) psikolojik açıdan analiz ediyor
  • Geliştiricilerin bilişsel önyargılarını ve mükemmeliyetçi eğilimlerini anlayıp iş birliği ile yaratıcılık arasındaki dengeyi arayan bir ders

Genel Bağlam

  • Bu liste gerçek bir ders planı değil; bilgisayar bilimi eğitimi ve geliştirme kültürüne yönelik hicivli bir eleştiriden oluşuyor
  • Her ders, teknoloji merkezli düşünmenin kör noktalarını görünür kılarken geliştiricileri düşünsel esnekliğe ve öz farkındalığa çağırıyor
  • 2015’te yayımlanmış olsa da, bugün de hâlâ geçerliliğini koruyan meseleler barındırıyor

1 yorum

 
GN⁺ 2025-10-25
Hacker News görüşleri
  • CSCI 3300: Klasik Yazılım Çalışmaları
    Alan Kay’in onlarca yıldır vurguladığı şey, bizim aslında 70’lerin sonlarında zaten yerleşmiş kavramları sürekli yeniden icat ediyor olmamız
    Sanatçıların sanat tarihi öğrenmesi gibi, programcıların da bilgisayar bilimi tarihini öğrenmesi gerektiği yönündeki hayal kırıklığına katılıyorum

    • RIT’te okurken History of Computing adlı bir seçmeli ders vardı. Abaküsten başlayıp mainframe’lere ve ağ iletişimine kadar gidiyordu; ders notları hâlâ duruyor
    • Sanat ya da felsefe tarihi binlerce yıla yayılıyor, ama bilişimin tarihi yalnızca bir nesil ya da iki-üç nesil kadar
      Fiziksel donanım performansına bu kadar bağımlı olan bilişimi sanatla kıyaslamak bana pek uygun gelmiyor
      1970’teki problem çözme yaklaşımının 2025’te aynen geçerli olduğunu düşünmek gerçekliği kaçırmak olur
    • GitHub’da “Bu Ansible’dan nasıl farklı?” sorusuna “Ansible’ın ne olduğunu ilk kez duyuyorum” diye cevap verildiğini görmüştüm
      Her nesilde insanların bunu ilk kez kendilerinin keşfettiğini sanması, bu yeniden keşif döngüsünü ilginç kılıyor
    • Kurucularla çalışırken, zaten var olan fikirleri sanki yeni icat etmişler gibi sunduklarına sıkça rastlanıyor
      Geçmişteki sorunları ve çözümleri öğrenmek asla zaman kaybı değil
    • Üniversitede işletim sistemi tarihi denemesi diye bir ödevimiz vardı ve ben OS X (Snow Leopard)’ı seçmiştim
      Bu süreç sayesinde Unix’in ve ticari yazılımın evrimini daha derin anladım; Alan Kay’e tamamen katılıyorum
  • CSCI 3240: Hype’ı Görmezden Gelmek
    En yeni platformların ya da kütüphanelerin modasına kapılmamayı öğreten bir ders
    Bunun devamı olarak CSCI 3120: Yenilik Odaklı Geliştirme ise tam tersine modayı takip ederek ilgiyi canlı tutmayı ele alıyor
    Bu iki ders aynı anda alınamıyor
    Diğer ders önerileri arasında toplantı becerileri (PSYC 4870), kurumsal sürtüşmeyi kabullenme (PSYC 5630) gibi,
    iş yerindeki iletişim ve motivasyonun gerçek taraflarını ele alan dersler de var

  • CSCI 4810: Ret Laboratuvarı
    Etik dışı ürün taleplerini ve son tarih baskısını simüle eden, bunları mesleki standartlara dayanarak reddetmeyi başaramazsanız geçemeyeceğiniz bir laboratuvar dersi

    • CSCI 4812: Kariyer Laboratuvarı ise iş arkadaşlarınız etik dışı talepleri kabul edip ayrıldıktan sonra geride kalan işi toparlama gerçeğini ele alıyor
    • Gerçekte birçok diploma programında etikle ilgili dersler zaten bulunuyor
    • Ama üniversiteler sonuçta mezunlarının istihdam edilebilirliğini önceliyor
  • Bir hata ayıklama dersi önerisi
    Hataların kök nedenini bulmayı ve çeşitli araçları kullanmayı öğreten bir ders olsa iyi olurdu

    • Kimya laboratuvarı gibi, öğrencilere hatalarla dolu bir legacy kod tabanı verilip tüm testleri geçtiklerinde dersin bitmesi güzel olurdu
    • Başkasının kodunu okumayı ve mevcut yapıları (Chesterton’s fence) düşünmeden yıkmamayı da öğrenmek gerekir
    • Pek çok kıdemli mühendis bile hâlâ print ile hata ayıklıyor
      Etkileşimli hata ayıklamanın kurtarıcı niteliği üzerine konuşmaya zaman ayırmak lazım
  • CSCI 0001: Fonksiyonel programlama ve tip teorisi
    Akademinin kapalı dili ve formülleri, fonksiyonel programlamanın yaygınlaşmasının önünde uzun süre engel oldu
    Artık monadların neden endofunctor kategorisinde bir monoid olduğunu bizzat öğrenme zamanı

    • Saf fonksiyonlar bir context window içinde de son derece doğal çalışıyor
  • CSCI 4020: Yavaş Dillerde Hızlı Kod Yazmak
    Algoritmik karmaşıklığı yavaş dillerle (VB, Ruby vb.) öğreten ve Ruby’deki O(N)’in C++’taki O(N²)’yi yenebileceğini gösteren bir ders

    • Küçükken okuduğum bir kitapta FORTRAN’daki bubble sort ile BASIC’teki quicksort karşılaştırılıyordu;
      BASIC’in beklenmedik biçimde daha hızlı çıkmasına çok şaşırmıştım
    • Python döngülerini numpy vektör işlemlerine ve tensorflow işlemlerine çevirip hız farkını ölçtüğümüz uygulamalar yapmıştık
      Böylece Python’un yapay zekada neden yararlı olduğunu daha iyi hissedebildim
    • Her gün Python kullanan mühendislerin kodun neden yavaş olduğunu anlaması gerçekten harika olurdu
    • Çoğu zaman farkı yaratan şey algoritmik karmaşıklıktan çok donanımı kullanma biçimi oluyor
      Doğrusal bellekte vektörleştirilmiş kod, heap’e dağılmış veriden çok daha hızlıdır
    • Başvuru kitabı: Visual Basic Algorithms Ready-to-Run
  • Önceki seri derlemeleri
    “Computer science courses that don't exist, but should” serisi
    2015 sürümü (247 yorum),
    2017 sürümü,
    2018 sürümü ile devam ediyor

  • Üniversitede aldığım Software Archaeology dersini hatırlattı
    1970’lerden derleyici alıştırmalarını yeniden uyguladığımız bir dersti;
    o zamanlar gereksiz gelmişti ama sonradan sistem tasarımını anlamamda çok yardımcı oldu

    • Gerçekten de dijital dedektiflik işi, büyük kod tabanlarında son derece önemlidir
      Eski hataları, wikileri, sürüm geçmişini ve ekip geçmişini izleme becerisi şarttır
  • Günümüzde birçok bilgisayar bilimi programı fiilen birer kodlama meslek okuluna dönüşmüş durumda
    Öğrenciler framework kullanmayı biliyor ama dil tasarımı felsefesini ya da sistemlerin nasıl evrildiğini anlamıyor
    Bilişimin yalnızca uygulamadan ibaret değil, aynı zamanda düşünceler ve fikirler disiplini olduğunu unutmamak gerek

    • Yine de bazı büyük devlet üniversiteleri 25 yıl öncekiyle neredeyse aynı çekirdek ders yapısını koruyor
      Akreditasyon ölçütleri yüzünden müfredatın çok fazla sapması kolay değil
  • CSCI 3210: Modern metin kodlama ve işleme
    Unicode ve UTF-8’i öğreten, 1 karakter = 1 bayt fikrini bıraktıran bir ders
    Yalnızca kodlamayı değil, arama, sıralama, font rendering ve emoji işleme konularını da kapsıyor
    Temel bir konu olmasına rağmen bunu gerçekten anlayan insan sayısı az