Empat ratus baris. Itu panjang diff yang saya setujui dua minggu lalu, hasil refactor satu service class besar yang saya pecah jadi beberapa kelas kecil bersama Claude Code. Saya baca dari atas ke bawah, cukup cepat, karena strukturnya rapi dan tidak ada yang mencurigakan. Tes hijau. Saya tekan approve.
Dua hari kemudian saya balik ke area yang sama untuk urusan lain, dan ada yang janggal. Salah satu method yang saya "rapikan" kehilangan pengecekan null. Bukan jalur yang sering dilewati, jadi tidak ada yang meledak di produksi. Tapi pengecekannya benar-benar hilang. Padahal saya yang me-review diff itu. Padahal tesnya lulus.
Saya menulis kode sejak lama. Versi saya tahun 2020 akan melihat potongan itu dalam dua belas detik.
Yang membuat saya duduk lama bukan bugnya. Bug itu biasa. Yang membuat saya diam adalah cara bug itu bisa lolos.
Kekhawatiran yang salah alamat
Percakapan yang ramai sekarang adalah soal penggantian. Apakah AI akan menggantikan programmer, kapan, berapa banyak. Setiap judul yang kamu lihat hampir selalu versi lain dari pertanyaan itu, dan kolom komentarnya terbagi dua: yang yakin manusia tidak akan tergantikan, dan yang menyuruh kamu belajar keahlian lain.
Saya tidak tertarik menghabiskan banyak ruang untuk perdebatan itu. Saya sudah mengirim kode nyata dengan bantuan AI, di pekerjaan yang salah sedikit saja ada uang orang yang ikut bergeser. Saya tidak melihat programmer akan habis dalam waktu dekat. Menjadi sombong soal itu juga tidak menarik.
Kekhawatiran yang lebih layak diperhatikan suaranya lebih pelan, dan sudah terjadi sekarang. Bukan di masa depan, bukan di perusahaan lain. Di hari kerja biasa, pada setiap programmer yang memakai alat ini dengan serius.
Deformasi, bukan penghapusan
AI tidak menghapus programmer. Dia mengubah bentuknya.
Saya memakai kata itu apa adanya. Deformasi: perubahan bentuk karena tekanan yang terus diberikan, sering tanpa benda yang berubah menyadarinya. Programmernya tidak lenyap. Yang berubah adalah kemampuannya menimbang, refleks tangannya, dan kebiasaan membaca kode sampai merasa ada yang salah sebelum bisa menjelaskan kenapa.
Kemampuan itu tidak hilang dalam satu kejadian besar. Dia menipis pelan-pelan, selama berbulan-bulan, sementara di sekelilingmu orang bilang produktivitasmu sedang di titik tertinggi.
Pengecekan null yang saya lewatkan itu bukan tanda saya tidak tahu. Saya tahu apa itu null check, sudah menulisnya ribuan kali. Yang gagal adalah otot yang dipakai setiap hari: kemampuan memindai diff seperti detektif dan menyadari ada sesuatu yang seharusnya ada tapi tidak ada.
Contohnya seperti ini. Kode lama:
public function namaKontak(?Kontak $kontak): ?string
{
if ($kontak === null) {
return null;
}
return $kontak->nama;
}
Hasil "pembersihan":
public function namaKontak(?Kontak $kontak): ?string
{
return $kontak->nama;
}
Secara tipe, keduanya sama-sama mengembalikan ?string. Yang hilang cuma satu cabang, dan cabang itu baru terasa di jalur yang jarang dilewati. Diff-nya bersih. Karena bersihnya itulah mata saya tidak berhenti di situ.
Tiga lapisan yang kena, dengan masalah berbeda
Tekanan yang sama bekerja pada tiga kelompok, tapi akibatnya tidak sama. Menyamakan ketiganya akan menghasilkan solusi yang salah sasaran.
| Lapisan | Yang dulu membentuk | Yang sekarang hilang | Tandanya |
|---|---|---|---|
| Junior (0–5 tahun) | Kode yang gagal jalan, kode orang lain yang tidak dimengerti, debug jam 11 malam | Waktu untuk duduk lama bersama satu pertanyaan | Bisa menjawab hampir semua pertanyaan, tapi tidak pernah menyimpan pertanyaan |
| Menengah (5–8 tahun) | Jalur hati-hati menuju senior, dibangun dengan repetisi | Rasa bahwa cara lambat itu sah | Ditekan jadi cepat, atau menyerah dan ikut arus |
| Senior | Bertahun-tahun membaca dan men-debug tanpa jalan pintas | Ketajaman yang tidak terasa menurun sampai ada yang lolos | Menyetujui diff yang versi lima tahun lalu dari dirinya akan tangkap |
Untuk junior, masalahnya paling berat karena waktunya paling sempit. Tiga sampai lima tahun pertama biasanya diisi perdebatan panjang dengan mesin. Kamu menulis kode yang tidak jalan, membaca kode orang yang tidak kamu pahami, dan memperbaiki sesuatu tengah malam sambil mempertanyakan pilihan karier. Bagian menyiksa itu bukan gangguan pada proses belajar, itu proses belajarnya. Model bahasa menghapus bagian itu tepat di tahap ketika bagian itu seharusnya jadi kurikulum.
Untuk lapisan menengah, yang terjadi adalah devaluasi. Mereka naik lewat jalur yang benar. Sekarang jalur itu disebut lambat, dan alat baru menjanjikan jalan pintas melewati bagian yang baru saja mereka selesaikan.
Untuk senior, ceritanya paling sunyi karena tidak ada yang perlu dibuktikan lagi. Kemampuannya masih ada, tapi repetisinya berhenti. Dua tahun hampir semua kode lewat agent, dan jumlah diff yang kamu baca dengan serius turun banyak. Tidak nol. Turun.
Gesekan itu isi pelajarannya
Hampir semua yang dulu disebut bagian sulit dari programming adalah gesekan. Mencari dokumentasi API. Membaca codebase untuk menangkap pola yang sudah dipakai. Menulis tes sebelum tahu persis apa yang diuji. Duduk dengan satu bug cukup lama sampai kamu mengenalinya sebagai anggota keluarga bug yang akan kamu temui seratus kali lagi.
Gesekan adalah tempat pemahaman tinggal. Bukan sebagai kiasan. Menulis sesuatu dengan tangan sendiri yang membentuk model mental sistemnya. Men-debug pelan-pelan yang mengajari bentuk kesalahan yang akan menggigitmu lagi lima tahun kemudian. Membaca kode orang lain dengan teliti yang mengkalibrasi rasa kamu soal kode bagus dan kode buruk.
Alat ini tidak memperlambat programmer, memang itu tujuan pembuatannya. Yang terjadi, gesekan dihapus tepat di titik-titik yang dulu mengajari sesuatu.
Kamu tidak kehilangan yang sudah dipelajari. Kamu berhenti menambah. Dan bagian yang berhenti dipakai mulai meredup tanpa suara.
Cara mengenali di diri sendiri
Ini yang paling sulit, karena tidak ada notifikasi saat kemampuan menipis. Beberapa pertanyaan yang bisa kamu jawab apa adanya untuk diri sendiri, bukan untuk dibagikan:
- Bulan ini, berapa diff yang kamu baca baris per baris sampai selesai?
- Kapan terakhir kamu men-debug tanpa menempelkan stack trace ke model?
- Kapan terakhir kamu menulis satu fungsi dari nol, tanpa potongan dari mana pun?
- Berapa pull request rekan yang kamu review sendiri sebelum bertanya ke alat?
Review yang kamu setujui adalah tanda tanganmu. Kalau nanti ada yang salah di jalur itu, yang ditanya bukan model yang menulisnya, tapi kamu yang bilang "sudah saya cek".
Yang bisa dikerjakan minggu ini
Bukan berhenti memakai AI. Saya sendiri masih memakainya setiap hari. Yang perlu dijaga adalah porsi kerja yang membentuk kemampuan, dan itu bisa diatur tanpa harus kembali ke kebiasaan lama sepenuhnya.
- Untuk perubahan di bawah seratus baris, baca seluruh diff lebih dulu sebelum minta ringkasan dari model. Ringkasan yang datang sebelum pemahaman membuat pemahaman tidak pernah terbentuk.
- Sisipkan satu fungsi per hari yang kamu tulis sendiri, dan pilih yang menempel langsung pada bug yang sedang kamu tangani.
- Ambil satu bug per minggu untuk ditelusuri sendiri sampai akar. Bandingkan hasilnya dengan jawaban model setelah kamu selesai, bukan sebelum.
- Review satu pull request rekan tanpa bantuan, tulis temuannya, baru kemudian minta model mencari yang terlewat. Selisih antara dua daftar itu adalah ukuran ototmu hari ini.
- Simpan catatan tiga keputusan desain yang kamu ambil sendiri tiap minggu, lengkap dengan alasan yang kamu tolak.
Kalau mau melihat sisi lain dari masalah yang sama, ada tulisan soal pekerjaan yang tersisa saat AI yang menulis kode dan cara menjalankan Claude Code seperti tech lead.
Yang menanggung biayanya
Saya tidak menulis ini untuk bilang berhenti memakai AI. Saya mengirim aplikasi iOS nyata dengan alat ini kuartal lalu, dan besok saya tetap memakainya.
Saya menulis ini karena kondisi yang dulu menghasilkan programmer yang kamu percayai sedang berubah. Orang yang bisa membaca stack trace dan menebak apa yang terjadi tiga service di hulu, orang yang berani mengambil keputusan di jam tiga pagi. Jalur yang mengubah anak dua puluh dua tahun yang bingung menjadi orang yang layak kamu rekrut sedang diubah tanpa pengumuman.
Alat ini punya kemampuan nyata dan biaya nyata. Yang tidak wajar adalah anggapan bahwa biayanya ditanggung oleh alat.
Biaya itu dibayar oleh yang memakainya, sedikit demi sedikit, dalam bentuk kemampuan yang berhenti bertambah.
Langkah pertamanya sederhana: menyebutnya dengan nama yang benar. Bukan soal digantikan atau tidak. Soal bentukmu berubah, dan kamu yang memutuskan seberapa banyak yang boleh berubah.







