3 poin oleh GN⁺ 2024-03-04 | 1 komentar | Bagikan ke WhatsApp
  • CS 6120, mata kuliah tingkat doktoral dari Cornell CS, disusun sebagai kurikulum mandiri yang menggabungkan video kuliah, catatan, bacaan makalah, dan tugas implementasi agar bisa diikuti secara online
  • Mencakup topik inti compiler seperti intermediate representation, data flow, dan optimisasi “klasik”, hingga paralelisasi, kompilasi JIT, dan garbage collection
  • Praktikum menggunakan LLVM dan IR pendidikan Bril, lalu berlanjut ke tugas hacking open source untuk mengimplementasikan sendiri konsep-konsep abstrak tersebut
  • Versi mandiri ini memungkinkan peserta mengabaikan tenggat tugas, tetapi tidak bisa ikut diskusi Zulip kelas asli maupun proyek akhir semester
  • Materinya dibuka sebagai open source di GitHub, sehingga masalah bisa dilaporkan, dan setelah selesai peserta dapat mengisi formulir umpan balik

Cara mengikuti kursus dan cakupan materi

  • CS 6120 adalah mata kuliah implementasi bahasa pemrograman yang dibuat oleh Adrian Sampson dari Cornell CS
  • Cakupan kursus mencakup fondasi umum implementasi compiler sekaligus topik yang berorientasi riset
    • intermediate representation
    • data flow
    • optimisasi “klasik”
    • paralelisasi
    • kompilasi JIT
    • garbage collection
  • Pembelajaran berlangsung melalui membaca makalah dan tugas hacking open source
    • Untuk praktik digunakan LLVM dan IR pendidikan untuk kelas, Bril
  • Kurikulum mandiri ini disusun seperti mengambil mata kuliah 4 SKS tanpa penilaian di “universitas imajiner”
    • Kuliah disusun dalam urutan linear
    • Setiap pelajaran memiliki video dan catatan tertulis
    • Beberapa pelajaran menyertakan tugas implementasi
    • Urutan yang direkomendasikan dirancang agar memadukan menonton video dan membaca makalah

Perbedaan dari kelas aslinya

  • Peserta mandiri dapat mengabaikan tenggat tugas
  • Tidak dapat berpartisipasi dalam diskusi Zulip kelas asli
  • CS 6120 versi asli memiliki proyek akhir semester
    • Tugas akhir semester untuk versi mandiri adalah “mengubah dunia dengan sihir compiler”
  • Kualitas produksi kuliah mungkin rendah, terutama pada pelajaran awal
  • Materi CS 6120 tersedia sebagai open source di GitHub, dan jika menemukan masalah Anda dapat melaporkan bug
  • Setelah selesai, Anda dapat mengisi formulir umpan balik

Pelajaran dan bahan bacaan

1 komentar

 
GN⁺ 2024-03-04
Komentar Hacker News
  • Saat lulus S1 dan mencari pekerjaan penuh waktu pertama, berkat kuliah ini saya bisa lolos wawancara tim compiler engineering di MANGA (Meta, Apple, NVIDIA, Google, Amazon)
    Kurikulum sistem komputasi tingkat rendah di University of Waterloo juga bagus, dan saya juga sedang berkontribusi ke proyek compiler open source, tetapi kuliah ini benar-benar sangat membantu untuk menjawab pertanyaan-pertanyaan tersulit dalam wawancara

    • Bukan “par excellent”, melainkan par excellence, dan struktur kalimatnya juga terdengar janggal
      Kalau ingin lebih alami, mungkin lebih baik ditulis kira-kira “my university has the low level computing systems curriculum par excellence”
  • Menurut saya, sebelum menulis compiler, yang perlu dilakukan lebih dulu adalah memahami arsitektur komputer dan mengetahui apa yang harus dihasilkan compiler agar bisa membuat kode mesin paling efisien
    Namun dari pengalaman saya, sekolah dan universitas tampaknya makin menurunkan prioritas arsitektur komputer, bahkan pemrograman sistem, mungkin karena dianggap terlalu teknis
    Meski begitu, pengetahuan itu sangat penting untuk mendapatkan pekerjaan yang bagus di industri

    • Benar bahwa universitas menurunkan prioritas pemrograman sistem, tetapi alasannya bukan karena “terlalu teknis”
      Masalah mendasar yang saya rasakan saat bekerja dengan universitas adalah terlalu banyaknya materi potensial yang harus dibahas dalam jam kuliah yang terbatas
      Jumlah informasi yang perlu diketahui di bidang kita terus meningkat secara eksponensial seiring waktu dan sudah melewati batas, jadi berkurangnya jam kuliah pemrograman sistem di jalur umum terjadi karena materi itu makin kurang relevan bagi semakin banyak mahasiswa setiap tahun, dan itu masuk akal
    • Bisa jelaskan lebih lanjut apa yang dimaksud pekerjaan bagus di industri, dan mengapa Anda melihatnya begitu?
    • Menurut saya, salah satu kemajuan besar di industri adalah kita bisa menggunakan compiler tanpa detail tingkat rendah seperti ini
      Masih banyak pekerjaan yang harus dilakukan di level compiler, tetapi sebagian besar di antaranya seharusnya tidak perlu sampai memikirkan level mikroarsitektur komputer
    • Pekerjaan terkait GPU masih sangat membutuhkan kemampuan arsitektur komputer dan compiler
      Meski tidak perlu mempelajari x86 atau MIPS, CUDA memperlihatkan arsitektur yang lebih aneh daripada keduanya
    • Dari pengalaman saya, rasanya tidak ada yang menganggap detail tingkat rendah “terlalu teknis”
      Alasan umum mengapa materi tingkat rendah tidak ditekankan adalah karena bergantung pada implementasi, cepat usang, dan sulit digeneralisasi
      Selain itu, saya cenderung kurang cocok dengan tipe “programmer sistem”, karena mereka cenderung menjadikan pengetahuan trivia yang sangat spesifik seperti ini sebagai seluruh identitas profesionalnya, sehingga ada orang yang bisa menulis assembly tetapi tidak tahu apa itu functor
  • Sepertinya tidak ada materi akademis yang bagus yang membahas optimisasi compiler tingkat lanjut secara mendalam
    Saya sudah banyak mencari, tetapi sebagian besar kuliah hanya di level pengantar, dan saya cukup terkejut karena teknik yang benar-benar menarik harus digali jauh ke dalam source code compiler open source populer

    • Sebagian besar kuliah akademis terlalu berfokus pada parsing, dan sisanya tampak hanya diajarkan di permukaan
  • Menurut saya, compiler adalah salah satu bidang yang tidak banyak berkembang selama sekitar 30 tahun
    Saat saya mengajar di Perugia University pada 2004–2006, materi berusia 15–25 tahun masih bisa dipakai tanpa banyak masalah
    Belakangan ini tampaknya situasinya berubah

    • Itu tidak benar
      Sekadar contoh hal-hal yang pada 2004–2006 sudah bisa diajarkan sebagai materi baru tetapi mungkin tidak dibahas: konstruksi SSA, vektorisasi SLP, dan superoptimisasi peephole otomatis; itu hanya yang langsung terlintas
      Yang tidak berubah adalah buku teks compiler. Terlalu fokus pada cara membuat parser generator dan hampir tidak membahas bagaimana sebenarnya merancang compiler, apalagi desain arsitektur komputer modern. Keluhan ini sudah ada selama puluhan tahun
    • Saya tidak setuju
      Dalam 10 tahun terakhir, lanskapnya banyak berevolusi ke arah teknik kompilasi inkremental
      Kemajuan teoretis memang terutama terkurung di parser, tetapi implementasi nyata diterapkan di seluruh pipeline sampai optimisasi program global dan code generation
    • Sejak saat itu, pengujian compiler telah banyak berubah, dan pengujian acak berskala besar menjadi populer
    • Saya tidak terlalu menguasai desain atau implementasi compiler, tetapi kode mesin dan assembly yang menjadi target compiler tampaknya telah banyak berubah seiring waktu
      Setiap generasi prosesor baru menambahkan instruksi dan opsi, sehingga tampaknya muncul optimisasi atau kombinasi baru yang bisa dimanfaatkan compiler
    • Mungkin karena sebagian besar bahasa pemrograman tidak banyak berubah dalam hal imperatif, loop, dan efek samping yang luas
      Untuk menulis compiler bagi bahasa fungsional murni, jelas diperlukan materi baru
  • Senang ada kuliah seperti ini
    Sekarang saya bisa mengikuti topik-topik tingkat lanjut dengan panduan dan sesuai tempo sendiri
    Saya selalu ingin berkarier sebagai compiler engineer, tetapi tempat saya tinggal tidak punya banyak peluang pendidikan dan pekerjaan
    Kalau melihat AS, persaingan pasar kerja sangat ketat, dan sejujurnya saya tidak tahu bagaimana cara masuk ke bidang ini
    Pengalaman yang saya punya hanya satu kuliah saat S1, tetapi prosesnya benar-benar menyenangkan semuanya

    • Bidang ini punya kurva belajar yang keras yang tidak berhasil dilewati banyak orang
      Saya rasa karena kita harus menulis kode yang memanipulasi kode lain, dan biasanya semantik serta tujuan perilakunya cukup berbeda. Selain itu, ada banyak pengetahuan lisan dan noise
      Karena itu, tim compiler sangat menyukai orang yang sudah lama membuat compiler. Namun tentu ada masalah bootstrapping, jadi tim besar juga merekrut lulusan yang tampak berpotensi melewati kurva itu, dan kira-kira begitulah saya masuk
      Jika Anda punya pengalaman karier secara umum tetapi belum punya pengalaman compiler, strategi yang jelas adalah masuk ke perusahaan yang mengerjakan hal yang sudah Anda kenal dan juga punya tim compiler—kurang lebih “perusahaan software yang cukup besar”—lalu mengincar perpindahan lateral
  • Senang “A Unified Theory of Garbage Collection” juga disertakan
    Setidaknya mahasiswa ini akan benar-benar memahami perbedaan antara reference counting dan tracing garbage collection

  • Kalau “CS 6120 adalah kuliah tingkat PhD Cornell CS oleh Adrian Sampson tentang implementasi bahasa pemrograman”, berarti ini kuliah yang cukup tingkat lanjut?
    Rasanya saya belum berada di level PhD dalam ilmu komputer

    • Sebaiknya jangan mengukur kesiapan dengan jenjang gelar tradisional
      Coba saja; kalau bisa berarti sudah siap, kalau tidak berarti belum
    • Disebut program doktor bukan berarti lebih sulit daripada S1
      Coba saja dulu
  • Masih tampak cukup mirip dengan materi yang dibahas dalam kuliah umum konstruksi compiler oleh Gerhard Goos 20 tahun lalu
    Ada juga tautan ke paper yang lebih baru, jadi mungkin layak dilihat
    Saya dulu suka buku Advanced Compiler Design and Implementation karya Steven Muchnick
    Sudah 18 tahun saya tidak melihat source code compiler, jadi terutama untuk profiling dan optimisasi berbasis path saya merasa tertinggal, dan melihat machine learning saat ini, sepertinya juga ada banyak hal SIMD yang lebih tingkat lanjut

  • Beberapa tahun lalu pada musim panas saya mengikuti kuliah online ini dan benar-benar banyak belajar
    Mengajukan PR untuk issue kecil di Bril IR dan memperbaikinya bersama profesor adalah pengalaman yang sangat mendalam

  • Saya penasaran apakah ada kuliah prasyarat untuk kuliah ini