- 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
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
History of Computingadlı bir seçmeli ders vardı. Abaküsten başlayıp mainframe’lere ve ağ iletişimine kadar gidiyordu; ders notları hâlâ duruyorFiziksel 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
Her nesilde insanların bunu ilk kez kendilerinin keşfettiğini sanması, bu yeniden keşif döngüsünü ilginç kılıyor
Geçmişteki sorunları ve çözümleri öğrenmek asla zaman kaybı değil
işletim sistemi tarihi denemesidiye bir ödevimiz vardı ve ben OS X (Snow Leopard)’ı seçmiştimBu 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
Bir hata ayıklama dersi önerisi
Hataların kök nedenini bulmayı ve çeşitli araçları kullanmayı öğreten bir ders olsa iyi olurdu
Chesterton’s fence) düşünmeden yıkmamayı da öğrenmek gerekirprintile hata ayıklıyorEtkileş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ı
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
BASIC’in beklenmedik biçimde daha hızlı çıkmasına çok şaşırmıştım
Böylece Python’un yapay zekada neden yararlı olduğunu daha iyi hissedebildim
Doğrusal bellekte vektörleştirilmiş kod, heap’e dağılmış veriden çok daha hızlıdır
Ö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
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
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 baytfikrini bıraktıran bir dersYalnı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