Apa itu Stanford CS146S?

Stanford CS146S adalah CS146S: The Modern Software Developer, mata kuliah yang diajar oleh Mihail Eric dan pertama kali ditawarkan pada Fall 2025. Untuk gambaran resmi, overview mata kuliah, dan detail syllabus, rujukan utamanya adalah themodernsoftware.dev.

Untuk melihat assignments dan materi praktiknya, repositori resminya adalah mihail911/modern-software-dev-assignments. Repositori itu dipublikasikan oleh mihail911 — akun GitHub Mihail Eric — dan dideskripsikan sebagai “Assignments for CS146S: The Modern Software Dev (Stanford University Fall 2025)”.

Konteks ini penting karena menunjukkan posisi dasar tulisan ini: Stanford tepat ketika mengakui AI coding sebagai bagian dari pekerjaan software modern. Kritik saya bukan pada premis itu. Kritik saya adalah bahwa percakapan ini masih membutuhkan disiplin arsitektur dan replaceability yang jauh lebih eksplisit agar sistem hasil AI tetap bisa diganti.

Stanford sedang memformalkan sesuatu yang nyata

Fakta bahwa Stanford meluncurkan mata kuliah seperti ini saja sudah memberi sinyal.

Selama bertahun-tahun, posisi yang dianggap terhormat adalah memperlakukan AI coding sebagai mainan, jalan pintas, atau lapisan produktivitas tipis di atas “engineering yang sesungguhnya”. Posisi itu sekarang sudah mulai menua dengan cepat.

Dari deskripsi publik mata kuliah dan urutan tugasnya, CS146S mencakup prompting, alur kerja Cursor dan Warp, server MCP, autonomous coding agents, security scanning, AI code review, dan multi-stack app generation. Ini bukan seminar yang sekadar mengejar kebaruan. Ini adalah pengakuan bahwa software development itu sendiri sedang diatur ulang di sekitar model.

Stanford benar soal ini. Software developer modern memang perlu paham cara menulis prompt dengan baik, bekerja dengan agents, menghubungkan tools, memeriksa output, dan mengirim lebih cepat dengan AI di dalam alur kerja. Berpura-pura itu belum menjadi bagian dari pekerjaan hanya berarti tertinggal dari pasar.

Versi pertama tidak pernah jadi masalah utama

Di titik inilah menurut saya percakapan AI development saat ini masih meremehkan masalahnya: AI coding jarang gagal di versi pertama.

Versi pertama adalah bagian yang mudah.

Login screen bekerja. Dashboard muncul. CRUD flow berhasil dikirim. Demo dapat tepuk tangan. Masalah mulai muncul di perubahan keempat, kelima, dan keenam, saat tim perlu mengganti auth provider, mengganti analytics, mengurai keputusan styling awal, atau menambah satu feature tanpa ikut merusak tiga sistem lain yang tidak terkait.

Di situlah kebanyakan AI-generated codebases menunjukkan jati dirinya: cepat dibuat, mahal diubah.

Mode kegagalan utamanya bukan karena model menulis omong kosong. Mode kegagalan utamanya adalah sistem yang dihasilkan punya boundaries yang lemah, sehingga setiap perubahan berikutnya membawa radius dampak yang tidak terlihat.

Fasih memakai alat tidak sama dengan aman secara struktural

Sebuah mata kuliah bisa mengajarkan prompting, alur kerja AI IDE, MCP, agent automation, Semgrep, Graphite, dan multi-stack generation. Semua itu penting. Tidak satu pun dari itu menjamin codebase yang dihasilkan tetap sehat setelah satu bulan iterasi.

Sebuah tim bisa sangat mahir dalam AI-native workflow dan tetap membangun sistem di mana:

  • screens mengimpor implementation details secara langsung
  • generated modules membocorkan vendor APIs ke dalam app code
  • optional services diinisialisasi seperti hard dependencies
  • LLM review kedua diperlakukan sebagai verifikasi
  • setiap refactor berubah menjadi kerja arkeologi

Karena itu saya tidak percaya keunggulan penentu dalam AI-native development akan datang hanya dari penggunaan alat.

Keunggulan itu akan datang dari arsitektur yang bisa bertahan dari perubahan berulang.

Topik yang hilang adalah replaceability

Setiap AI-generated subsystem seharusnya diperlakukan sebagai replaceable secara default.

Artinya auth berada di balik interface. Analytics berada di balik interface. Storage berada di balik interface. Styling berada di balik contract. Dependency construction dikumpulkan dalam satu composition root. Validation ditempatkan di system edges. Deterministic checks berjalan di setiap commit.

Kalau module yang buruk bisa dihapus dan diimplementasikan ulang di balik contract yang sama, kecepatan AI akan terakumulasi. Kalau setiap bagian yang dihasilkan menjangkau semua bagian lain, tim pada akhirnya akan melambat tidak peduli seberapa bagus prompts-nya.

Inilah topik yang saya ingin lihat jauh lebih eksplisit dalam percakapan AI development.

Pertanyaan kuncinya bukan cuma “Bisakah AI membantu kita mengirim versi pertama lebih cepat?”

Pertanyaan kuncinya adalah “Seberapa murah kita bisa mengganti versi yang salah ketika realitas produk akhirnya muncul?”

Software developer modern tetap membutuhkan guardrails

Banyak nasihat AI saat ini masih terlalu bertumpu pada selera:

  • tulis prompt yang lebih baik
  • review lebih teliti
  • bandingkan beberapa model outputs
  • beri agent lebih banyak konteks
  • tambahkan AI reviewer lagi

Itu membantu. Tapi itu tidak bisa menjadi fondasi yang berskala.

Review manusia itu inkonsisten. Review model bahkan lebih inkonsisten. Satu-satunya pola yang saya percaya pada skala besar adalah:

  • biarkan AI generate
  • biarkan deterministic rules melakukan enforcement
  • biarkan manusia menilai specification dan tradeoffs

Karena itulah saya terus kembali ke hal yang sama: contracts, boundary rules, composition roots, contract tests, dan checks cepat yang tidak bisa ditawar. Tujuannya bukan membuat model berperilaku sempurna. Tujuannya adalah membuat sistem secara struktural lebih sulit dirusak.

Stanford benar. Langkah berikutnya lebih sulit.

CS146S penting karena ia memformalkan satu kebenaran yang tidak bisa lagi diabaikan industri: AI-native development sekarang sudah menjadi bagian dari keahlian ini.

Tapi saya tidak percaya software developer modern didefinisikan hanya oleh kefasihan memakai AI tools.

Standar berikutnya lebih tinggi.

Software developer modern juga perlu tahu cara membangun codebase di mana bagian-bagian yang dihasilkan AI bisa dibatasi, diverifikasi, dan diganti tanpa menyeret seluruh sistem ke dalam rewrite.

Stanford sedang mengajarkan software developer modern.

Bagus.

Ada satu kelas yang masih hilang: disiplin arsitektur yang mencegah codebase AI-native runtuh karena kecepatannya sendiri.