Satuan 3 / 12

Pengodean dan Memasangkan Pemrograman dengan AI

Keuntungan:

  • Kemampuan untuk menulis fungsi, kelas, dan modul ke AI dengan input-output dan definisi batasan yang jelas
  • Kemampuan untuk menggunakan AI sebagai mitra pemrograman berpasangan dan maju selangkah demi selangkah, dalam bagian kecil yang dapat diverifikasi
  • Kemampuan untuk menangkap logika dan kesalahan kasus tepi dengan mengkompilasi kode yang dihasilkan oleh AI dan menjalankannya dengan contoh-contoh kecil

Pemrograman berpasangan adalah ketika dua pengembang mengerjakan masalah yang sama, dengan satu menulis dan yang lainnya merevisi. Pengkodean dengan AI adalah versi digital dari hubungan ini: Anda menetapkan arah, batasan, dan kriteria penerimaan; AI menghasilkan draf cepat; Anda memverifikasi setiap langkah dengan mengkompilasi dan mengujinya. Jebakan terbesar di sini adalah memberi tahu AI “tuliskan aplikasi ini untuk saya dari awal sampai akhir” dan secara membabi buta menerima blok 200 baris. Pemrograman berpasangan yang baik dimulai dari langkah-langkah kecil: setiap langkah harus dapat dimengerti, dapat diuji, dan dapat dibalik.

Pada unit ini Anda akan mempelajari cara mencetak fungsi, kelas, dan modul dengan kontrak input-output yang jelas; Cara memandu AI langkah demi langkah; dan kita akan melihat cara menangkap kesalahan logika dan kasus tepi dengan menjalankan kode yang dihasilkannya dengan contoh kecil. Tujuannya bukan kecepatan, tapi kecepatan terverifikasi.

Konsep: Kontrak input-output: Definisi yang jelas tentang input apa yang dibutuhkan suatu fungsi dan output serta perilaku kesalahan yang dijanjikannya. Edge case: Input yang tidak biasa namun sebenarnya bisa terjadi (kosong, nol, negatif, sangat besar, null). Pengembangan bertahap: Melanjutkan dengan benda kerja kecil dan memvalidasi setiap langkah.

Mencetak Kode dengan Kontrak Bersih

Dasar dari kode kualitas adalah mendefinisikan dengan tepat "apa yang Anda inginkan" sebelum mulai bekerja. Saat menulis suatu fungsi ke AI, berikan lima hal: bahasa dan versi, jenis masukan dan makna, keluaran, kondisi kesalahan, dan batasan (kinerja, larangan perpustakaan eksternal, gaya). Ini mencegah AI menebak-nebak.

  1. Tulis kontraknya. Masukan, keluaran, kesalahan, kendala.
  2. Minta satuan kecil. Suatu fungsi dengan satu tanggung jawab; Ini bukan modul yang besar.
  3. Minta blok uji. Tambahkan beberapa contoh proses/pengujian di samping kode.
  4. Kompilasi dan jalankan. Cobalah dengan edge case, verifikasi hasilnya dengan mata.
  5. Lanjutkan ke langkah berikutnya. Setelah suatu bagian dikonfirmasi, kembangkanlah.

Perintah fungsi terkontrak: "Tulis fungsi untuk TypeScript 5. Tujuan: menghitung jumlah total item dalam keranjang belanja. Masukan: { harga: nomor, kuantitas: nomor }[] array. Output: nomor (total). Aturan: melempar Kesalahan jika kuantitas atau harga negatif; mengembalikan 0 untuk array kosong; membulatkan jumlah hingga 2 tempat desimal untuk kesalahan desimal. Jangan gunakan perpustakaan eksternal. Tambahkan 5 kasus uji di bawah fungsi (normal, kosong, kuantitas negatif, harga desimal, item tunggal).”

Memandu AI sebagai Pasangan

Kemajuan yang baik dalam pemrograman berpasangan adalah dialog, bukan satu permintaan besar. Pertama, minta kerangkanya dan jalankan; lalu tambahkan keadaan tepi; lalu perbaiki bugnya. Pendekatan ini membuat kode tetap dapat dimengerti dan memberi Anda kendali di setiap langkah.

Perintah kemajuan tambahan: "Kami akan menulis pembaca yang membaca file CSV dan mengubah baris menjadi objek. Mari lanjutkan LANGKAH DEMI LANGKAH, lanjutkan ke langkah berikutnya tanpa saya mengonfirmasi setiap langkah. Langkah 1: tulis saja kerangka yang membagi file menjadi beberapa baris dan pisahkan baris header. Jangan tambahkan konversi jenis atau penanganan kesalahan dulu. Singkat saja, jelaskan."

Jelaskan dan benarkan perintah kode: "Jelaskan fungsi yang baru saja Anda tulis, bukan baris demi baris, tetapi keputusan demi keputusan: keputusan desain mana yang Anda buat dan alasannya, kasus tepi mana yang Anda tangani dan bagaimana caranya, kasus mana yang sengaja Anda kecualikan? Cantumkan 3 asumsi dalam kode yang tidak boleh saya lewatkan."

Tip: Jangan menerima kode yang dihasilkan AI tanpa memahaminya. “Jelaskan ini padaku, asumsi apa yang kamu buat?” Pertanyaan tersebut mengungkap kesalahan tersembunyi dan memungkinkan Anda mempertahankan kode tersebut, karena kode tersebut tetap menjadi tanggung jawab Anda. Memasukkan kode yang tidak Anda pahami ke dalam produksi seperti mengirimkan kontrak tanpa menandatanganinya.

Prompt Lemah / Prompt Kuat

LEMAH:"Tulis fungsi penyortiran."(Hasil: bahasa apa, apa yang diurutkan, apakah stabil, apa batasan kinerjanya, kode yang tidak jelas dan mungkin tidak sesuai dengan persyaratan.)KUAT:"Untuk Java 17, tulis metode yang mengurutkan objek List<Employee> terlebih dahulu berdasarkan departemen (menurut abjad), kemudian berdasarkan gaji (menurun). JANGAN GANTI daftar asli, kembalikan daftar baru. Biarkan departemen nol berada di urutan terakhir. Jelaskan kompleksitas metode di baris komentar. tentukan tambahkan blok pengujian utama dengan 4 sampel."

Perintah yang kuat; Termasuk kriteria penyortiran (dua tingkat), aturan efek samping (mengganti yang asli), perilaku nol, dan ekspektasi pengujian. Tanpa rincian ini, AI menghasilkan solusi yang masuk akal namun salah; misalnya hal ini dapat merusak daftar asli dan ini akan menyebabkan kesalahan diam di tempat lain.

Validasi dengan Kasus Tepi dan Sampel Kecil

Kode yang berfungsi dalam skenario bahagia bukanlah kode yang benar. Secara sadar memaksa setiap fungsi yang dihasilkan:

Jenis casing tepi

masukan sampel

perilaku yang diharapkan

masukan kosong

Array/string kosong

Bukan kesalahan, hasil kosong yang logis

Nol/negatif

0, -1

Perilaku yang jelas dan benar

nilai yang besar

Jutaan catatan

Kontrol luapan/kinerja

batal/tidak terdefinisi

ruang yang hilang

Kesalahan terkontrol atau default

Duplikat/tidak biasa

berulang-ulang, urutan terbalik

hasil yang benar

Kasus Mini

Kasus 1 — Kesalahan pembulatan senyap. AI menulis fungsi yang mengumpulkan uang dengan tipe desimal (float); 0,1 + 0,2 menghasilkan 0,30000000000000004. Kesalahan teratasi ketika insinyur menambahkan aturan "Bulatkan menjadi 2 digit dan gunakan seluruh sen". Aturan 3 baris mencegah perbedaan ribuan sen dalam rekonsiliasi bulanan.

Kasus 2 — Perangkap efek samping. AI menulis metode yang “mengurutkan” daftar, tetapi mengubah daftar asli di tempatnya. Perilaku tak terduga terjadi karena modul lain menggunakan daftar yang sama. Jika batasan "ubah yang asli" ada di prompt, kesalahan tidak akan pernah terjadi; terjebak dalam peninjauan kode dan mencegah 2 jam debugging.

Kasus 3 — Penghasilan selangkah demi selangkah. Pengembang mencetak modul impor 150 baris sekaligus; Ketika dia menemukan kesalahan, dia tidak dapat menemukan dari mana kesalahan itu berasal. Pengembang lain membagi pekerjaan yang sama menjadi 5 langkah kecil, menguji setiap langkah dalam 2 menit dan segera mengetahui kesalahannya pada langkah ke-3.

Kesalahan umum

  • Mencetak blok besar dalam satu permintaan. Lahirlah kode berisiko yang sulit dipahami dan di-debug.
  • Meminta kode tanpa memberikan kontrak. Jika kesalahan input-output bersifat ambigu, AI akan menebak dan salah.
  • Hanya menguji skenario bahagia. Jika input kosong, null, negatif, dan besar tidak dicoba, kesalahan diserahkan pada produksi.
  • Menerima tanpa memahami. Kode yang tidak Anda ungkapkan adalah hutang yang tidak dapat Anda pertahankan.
  • Mengabaikan jenis sensitif seperti efek samping dan uang/tanggal. Uang mengambang dengan sejarah abadi adalah sumber kesalahan klasik.

Singkatnya

Menulis kode dengan AI adalah pemrograman berpasangan yang disiplin: kontrak yang jelas, langkah-langkah kecil, pembuatan dan pengujian di setiap langkah. Memberikan kuartet input-output-error-constraint sejak awal menentukan kualitas kode. Menjelaskan kode yang dihasilkannya dan memaksanya dengan kasus tepi memunculkan kesalahan yang tersembunyi di bawah skenario bahagia. Sumber kecepatan bukanlah penerimaan secara membabi buta; adalah draf cepat ditambah verifikasi cepat.

Tugas aplikasi

Pilih fungsi yang kecil namun nyata (misalnya total keranjang, perbedaan tanggal, penguraian teks). Cetak menggunakan perintah fungsi yang dikontrak; Tambahkan setidaknya 5 skenario pengujian di sebelahnya. Jalankan kode dan coba 5 kasus tepi secara sadar, menggunakan tabel sebagai panduan. Temukan bug di setidaknya satu kasus edge (jika tidak, rancang input baru untuk memaksakan fungsi tersebut), perbaiki dengan AI, dan verifikasi dengan menguji ulang bahwa perbaikan tersebut berhasil.

daftar periksa

  • [] Saya menulis kontrak yang mencakup input, output, kesalahan, dan batasan.
  • [] Saya membuat kode dalam langkah-langkah kecil, bukan satu blok besar.
  • [] Saya menambahkan blok uji/sampel di sebelah kode.
  • [] Saya secara sadar telah menguji setidaknya 5 kasus Edge.
  • [ ] Saya menjelaskan kode tersebut kepada AI dan meninjau asumsinya.
  • [ ] Saya memperbaiki kesalahan yang ditemukan dan mengonfirmasi perbaikan dengan menguji ulang.