Nand'den Tetris'e (2017)
(nand2tetris.org)- Nand2Tetris, bilgisayar sistemlerini en temelden anlamak isteyen öğrenenler için genel amaçlı bir bilgisayar sistemini ve modern yazılım katmanlarını bizzat inşa etmeye yönelik kaynaklar sunar
- Dersler, proje materyalleri ve araçlar tek bir yerde toplanmıştır; ticari olmayan ortamlarda ücretsiz açık kaynak olarak kullanılabilir
- Bu program, 400'den fazla üniversite, lise ve bootcamp tarafından kullanılmakta olup lise öğrencilerinden doktora öğrencilerine ve kıdemli mühendislere kadar geniş bir kitleye hitap eder
- Kendi kendine öğrenenler, web sitesindeki ders notlarını ve Projects bölümünü takip edebilir; Coursera üzerinden ise ücretli kayıt ve resmî sertifika almak mümkündür
- Hem bireysel öğrenime hem de eğitim kurumlarındaki derslere yönelik tasarlanmıştır; eğitmenler ek materyaller için ayrıca iletişime geçebilir
Sıfırdan bilgisayar yapmayı öğreten kaynaklar
- Nand to Tetris courses resmî web sitesi, genel amaçlı bir bilgisayar sistemini ve modern yazılım katmanlarını en baştan inşa etmek için gereken materyalleri bir arada sunar
- Materyaller dersler, proje içerikleri ve araçlardan oluşur; öğrenciler, eğitmenler ve kendi kendine öğrenenler için hazırlanmıştır
- İlgili kitap, Noam Nisan ve Shimon Schocken tarafından yazılan The Elements of Computing Systems'tir
- Programla ilgili CACM materyalleri metin ve video olarak sunulmaktadır
Katılım yolları ve eğitimde kullanım
- Nand to Tetris programı, 400'den fazla üniversite, lise ve bootcamp'te öğretilmektedir
- Katılımcılar lise öğrencilerinden doktora öğrencilerine ve kıdemli mühendislere kadar uzanır
- Tipik bir akademik sürüm dersinin genişletilmiş müfredatını inceleyebilirsiniz
- Serbest katılım için web sitesindeki ders notları ve Projects bölümü takip edilebilir
- Coursera dersi ücretlidir ve resmî sertifika sunar
- Eğitmenlere yönelik ek materyaller nand2tetris@gmail.com adresiyle iletişime geçilerek alınabilir
1 yorum
Hacker News yorumları
7 yıl önce üniversiteden mezun olduktan sonra ilk denediğimde sadece 2. bölüme kadar gelmiştim; çok tatmin ediciydi ama başka yan projeler yüzünden bıraktım.
3 ay önce tekrar başladım ve şimdi 8. bölüme geldim; mantık kapılarını, ALU’yu, CPU’yu, assembler’ı ve sanal makinenin yarısını bitirdim. Her bölümde “Bu nasıl oluyor yahu?” diye düşünüp, gerçekten çalıştığını görünce inanılmaz tatmin oluyorum.
Sırf öğrenme amaçlı yaptığım yan projeler içinde en tatmin edici olanıydı; sonuna kadar devam ettiğim için kendimle epey gurur duyuyorum, kesinlikle tavsiye ederim.
Geçen sonbahar/kış Ben Eater’ın breadboard üzerinde 8 bit bilgisayar yapmaya yönelik harika serisiyle birlikte ilerledim; birkaç ay boyunca Çin’den parça satın aldım ve kış boyunca parçalar geldikçe alt sistemleri kurdum.
Sırada bunu denemek iyi olur; çok tatmin edici, üstelik yanıp sönen LED’lere bakıp içeride neler olduğunu anladığın an gerçekten harika görünüyor.
Örneğin entegre devrelerin girdileri yararlı çıktılara dönüştürmesinin gerçek mekanizması gibi; TI SN7400 gibi gerçek dünyadaki en basit entegre devrelerin bile gerçekte nasıl çalıştığını düzgün açıklayan bir kaynak bulamadım.
Bu dersi gerçekten çok sevdim; düşük seviyeli bilgisayar bilimi dersi almadan bilgisayarlarla çalışan herkese şiddetle tavsiye ederim.
Bilgisayarların nasıl çalıştığının, üst seviye programları ve programlama dillerini etkileyen temel kısımlarını sezgisel olarak anlamanızı sağlıyor. Kişisel olarak en büyük aydınlanmam stack ile heap arasındaki farkı doğru düzgün anlamak oldu.
Basit devrelerin üst üste konarak kullandığımız karmaşık makineleri oluşturması da büyülü hissettiriyor; eğitmenler birkaç döneme yayılabilecek içeriği aşırı basitleştirmeden, assembly dili gibi konuların özünü hızlıca kavratıyor.
Zamanınız varsa gerçekten öneririm. NAND kapısından CPU yapımına kadar olan 1. kısım eğlenceli ve oldukça kolay; ama bilgisayardan tam bir işletim sistemine giden 2. kısım çok daha fazla iş gerektiriyor.
İkisinin de gerekli olup olmadığına, yoksa birinin yeterli olup olmadığına karar vermeye çalışıyorum.
Bu dersi/kitabı şiddetle tavsiye ederim.
Sonuna kadar yaparsanız getirisi çok büyük.
Ben Eater’ın harika 8 bit bilgisayar serisini (https://eater.net/8bit/) bitirdikten sonra nand2tetris’e geçmek çok doğal geldi.
Bilgisayar tasarımının temel kavramları içinde çoğu zaman üstünkörü geçilen şeyleri gerçekten anlamanızı sağlıyor; tatilde başlamak için tam uygun bir proje.
Videolarını seviyorum; özellikle döngülerin tanıtıldığı ve interrupt konusunun işlendiği bölümler hoşuma gitmişti.
Yazdığı kodun bu kavramlarla çok daha zarif şekilde yeniden yazıldığını görmek çok tatmin ediciydi.
Şimdi NAND to Tetris’e de bakmam gerekecek.
İkisi birbirini iyi tamamlıyordu.
Bu dersten ilham alan eğlenceli bir NAND oyunu var: https://nandgame.com/
İkisi de assembly benzeri bir dille yazma mantığında ve öğrenmesi çok keyifli.
Bilgisayarları daha düşük seviyede anlamaya çalışıyorsanız ETH Zürich’in Digital Design and Computer Architecture dersini de tavsiye ederim.
https://www.youtube.com/playlist?list=PL5Q2soXY2Zi-EImKxYYY1...
Bilgisayar mimarisine giriş dersi almıştım ama ne yazık ki çok ileri gitmemişti; modern CPU’ların yaptığı out-of-order execution gibi sihirli şeylere hiç değinilmemişti.
Bu tatilin konusu sanırım bu oynatma listesi olacak.
Bu kitapla ve kitabı elime aldığım dönemle ilgili güzel anılarım var.
Kız arkadaşımla kahve içerken, yalnızca NAND kullanarak tüm mantık kapılarının yapılabildiğini okuduğumu söyledim; merak edip birkaç peçeteye NAND yazarak hepsini gerçekten çıkarıp çıkaramayacağımızı kurcaladık.
Sonunda başardık ve çok eğlenceliydi.
Her kapıyı NAND ile oluşturdukça yeni kapının adını peçeteye yazdım; o peçeteleri ve o keyfi eve götürdüm, birkaç gün sonra da bu kapıları birleştirip sonunda tüm ALU’yu çıkarmaya çalıştım.
Bu sırada multiplexer ve başka pek çok ilginç şey ortaya çıktı; sonunda takıldım ama bu kitabı duymuştum, sipariş etmeye karar verdim.
Sonraki bölümler, yalnızca yazılım deneyimi olan benim için hep gizemli kalan düşük seviyeyi anlamama gerçekten yardımcı oldu.
Yine de gerçekten sonuna kadar inşa edemedim.
Düşük seviyeli yazılım tarafına geçince zaten yeterince anladığımı hissettim; işi bizzat yapmak daha az çekici gelmeye başladı, ama sadece okumak bile harikaydı.
george hotz’un şu deposu da var ve oldukça ilginç.
https://github.com/geohot/fromthetransistor
Materyal yok, yalnızca varsayımsal bir dersin kaba taslağı var; ilk commit’lere bakınca biraz daha netleşiyor.
“Birkaç yıl önce yazmıştım ve internete koymak istedim. İşe alım zor, modern bilgisayar bilimi eğitiminin önemli bir kısmı gerçekten berbat ve modern bilgisayar yığınını ilk ilkelerden anlayan insan bulmak çok zor. Bir gün yeniden 12 haftam boş kalırsa bunu evden takip edilebilecek bir ders olarak sunabilirim. Ben de birlikte oynamak istiyorum.”
Lisansımda CS değil bilgisayar mühendisliği okudum ve o listedeki konuların yaklaşık %80’ini gördük.
Birkaç Verilog ve işletim sistemleri dersi aldım; mikrodenetleyiciler/FPGAs ile de çok uğraştık.
Verilog ile CPU yapıp ardından assembler/compiler yazmak açık ara en önemli bölümdü.
Zor bir programdı ama mezun olurken tüm yığını oldukça iyi anladığımı hissediyordum.
Belki de bilgisayar mühendisliği tarafını pek bilmiyordur.
Ön bölüm sayılabilecek “sand2nand”ın da bir DIY projesi olarak mümkün olup olmadığını merak ediyorum.
Veri analisti olarak çalışırken bu dersi hafif bir merakla almıştım; kariyer değişikliğimin tetikleyicisi oldu.
Gerçekten harika bir ders, vaktiniz varsa mutlaka deneyin.
Daha düşük seviyeli programlama tarafına mı geçtiğini merak ediyorum.