DEV Community

Ai Code
Ai Code

Posted on • Originally published at savefilearchive.blogspot.com

Kenapa Vibe Coding Bisa Berbahaya Kalau Kamu Tidak Paham Kodenya

Kenapa Vibe Coding Bisa Berbahaya Kalau Kamu Tidak Paham Kodenya

Semua orang sedang membicarakan vibe coding. "Aku build startup dalam seminggu pakai AI!" "Aku tidak perlu belajar coding lagi, AI yang ngerjain!" Tapi ada sisi gelap yang jarang dibahas: kode yang kamu tidak pahami adalah kode yang tidak bisa kamu pertanggungjawabkan.

Artikel ini bukan anti-AI. Aku sendiri menggunakan AI setiap hari dalam pekerjaan. Tapi ada perbedaan besar antara menggunakan AI sebagai alat yang kamu kendalikan versus membiarkan AI mengendalikan kamu.


1. Masalah Nyata yang Terjadi di Lapangan

Kasus 1: Security Hole yang Tidak Terdeteksi

Seorang developer meminta AI membuat endpoint untuk mengambil data user. AI menghasilkan kode yang berfungsi sempurna — semua test pass. Tapi ada satu masalah kecil yang terlewat:

// Kode yang dihasilkan AI — terlihat normal
app.get('/api/users/:id/profile', authenticate, async (req, res) => {
  const user = await db.users.findById(req.params.id);
  return res.json(user);
});

// Masalahnya: tidak ada pengecekan apakah user yang login
// boleh mengakses profil user dengan id tersebut!
// User A bisa mengakses profil User B hanya dengan mengganti angka di URL.
// Ini adalah IDOR (Insecure Direct Object Reference) — masuk OWASP Top 10.

// Yang benar:
app.get('/api/users/:id/profile', authenticate, async (req, res) => {
  // Pastikan user hanya bisa akses profilnya sendiri (atau admin)
  if (req.user.id !== req.params.id && req.user.role !== 'admin') {
    return res.status(403).json({ error: 'Forbidden' });
  }
  const user = await db.users.findById(req.params.id);
  return res.json(user);
});

Enter fullscreen mode Exit fullscreen mode

Kalau developer tidak paham konsep authorization dan IDOR, bug ini bisa lolos ke production dan mengekspos data semua user.

Kasus 2: Race Condition yang Muncul di Production

// AI generate kode untuk deduct saldo — terlihat benar
async function deductBalance(userId, amount) {
  const user = await User.findById(userId);

  if (user.balance  {
    const user = await User.query(trx)
      .forUpdate()  // Row-level lock
      .findById(userId);

    if (user.balance  {
      this.process(data);
    });
  }

  process(data) {
    // ... processing
  }
}

// Setiap kali DataProcessor dibuat, listener baru ditambahkan.
// Kalau DataProcessor dibuat berkali-kali (misal per request),
// listener menumpuk → memory leak → server crash setelah beberapa jam.

// Yang benar:
class DataProcessor {
  constructor(eventEmitter) {
    this.eventEmitter = eventEmitter;
    this.handler = (data) => this.process(data);
    eventEmitter.on('data', this.handler);
  }

  destroy() {
    // Selalu cleanup listener saat object tidak dipakai
    this.eventEmitter.off('data', this.handler);
  }

  process(data) {
    // ... processing
  }
}

Enter fullscreen mode Exit fullscreen mode

2. Mengapa AI Menghasilkan Kode Bermasalah?

AI bukan bodoh — AI sangat pintar dalam menghasilkan kode yang terlihat benar. Masalahnya ada di beberapa hal:

  • AI tidak tahu konteks bisnis kamu — AI tidak tahu bahwa di aplikasimu, user bisa punya multiple role, atau bahwa transaksi finansial butuh audit trail
  • AI mengoptimalkan untuk "kode yang berjalan" — bukan "kode yang aman dan scalable"
  • AI tidak tahu production environment kamu — berapa concurrent user, pola traffic, infrastruktur yang dipakai
  • Training data AI mengandung kode buruk — internet penuh dengan tutorial yang mengabaikan security dan edge case

3. Tanda-tanda Kamu Terlalu Bergantung pada AI

Evaluasi dirimu sendiri:

  • Kamu tidak bisa menjelaskan cara kerja kode yang kamu submit ke PR
  • Ketika ada bug, kamu langsung tanya AI tanpa mencoba debug sendiri dulu
  • Kamu tidak tahu kenapa kode AI bekerja, hanya tahu bahwa ia bekerja
  • Kamu tidak bisa review kode AI — semua terlihat "masuk akal" bagimu
  • Kamu tidak bisa menulis kode tanpa AI, bahkan untuk hal sederhana

Kalau 3 atau lebih poin di atas berlaku untukmu, ini saatnya untuk memperlambat dan membangun pemahaman yang lebih dalam.


4. Cara Vibe Coding yang Bertanggung Jawab

Aturan 1: Pahami Sebelum Commit

// Sebelum commit kode yang dihasilkan AI, tanyakan ke dirimu:
// 1. Apa yang dilakukan setiap baris kode ini?
// 2. Apa yang terjadi kalau input-nya null/undefined/kosong?
// 3. Apa yang terjadi kalau database down?
// 4. Apakah ada data user yang bisa bocor?
// 5. Apakah ada resource yang tidak di-cleanup?

// Kalau tidak bisa jawab → minta AI jelaskan, jangan langsung commit

Enter fullscreen mode Exit fullscreen mode

Aturan 2: Gunakan AI untuk Belajar, Bukan Hanya Menghasilkan

// Setelah AI generate kode, tanyakan:
"Jelaskan kode ini line by line. Kenapa kamu pilih pendekatan ini?
Apa alternatif lain dan apa trade-off-nya?
Apa yang bisa salah dengan implementasi ini?"

// Ini mengubah AI dari "mesin kode" menjadi "guru"

Enter fullscreen mode Exit fullscreen mode

Aturan 3: Selalu Review dengan Checklist Keamanan

Sebelum merge kode yang dihasilkan AI, cek:

□ Apakah semua input divalidasi?
□ Apakah ada authorization check (bukan hanya authentication)?
□ Apakah error message tidak mengekspos informasi sensitif?
□ Apakah ada potensi SQL injection / XSS / CSRF?
□ Apakah semua resource (connection, file, listener) di-cleanup?
□ Apakah ada potensi race condition untuk operasi concurrent?
□ Apakah ada sensitive data yang di-log?

Enter fullscreen mode Exit fullscreen mode

Aturan 4: Test Edge Case Secara Manual

// AI sering lupa edge case. Selalu test:
- Input kosong / null / undefined
- Input dengan karakter spesial (<script>, ' OR 1=1, dll)
- Angka negatif dan nol untuk kalkulasi finansial
- File dengan ukuran 0 byte dan ukuran maksimal
- Request concurrent (buka 2 tab, submit bersamaan)
- Apa yang terjadi saat database/API eksternal down

Enter fullscreen mode Exit fullscreen mode

5. Keseimbangan yang Tepat

Bukan berarti kamu harus menulis semua kode sendiri. Keseimbangan yang tepat:

  Biarkan AI yang Kerjakan
  Kamu Harus Pahami dan Review




  Boilerplate dan scaffolding
  Logic autentikasi dan otorisasi


  CRUD operations standar
  Operasi finansial dan transaksi


  Formatting dan styling
  Kode yang menyentuh data sensitif


  Unit test untuk happy path
  Error handling dan edge case


  Dokumentasi dan komentar
  Arsitektur dan keputusan desain
Enter fullscreen mode Exit fullscreen mode

Kesimpulan

Vibe coding adalah alat yang luar biasa powerful — tapi seperti semua alat powerful, ia bisa berbahaya di tangan yang salah. Developer yang paling efektif menggunakan AI bukan yang paling malas berpikir, melainkan yang paling tahu kapan harus percaya AI dan kapan harus skeptis.

Bangun fondasi pemahaman yang kuat. Gunakan AI untuk mempercepat, bukan untuk menggantikan pemahaman. Karena ketika production down jam 3 pagi dan kamu harus debug, AI tidak akan bisa membantu kalau kamu sendiri tidak mengerti sistem yang kamu bangun.


Artikel ini pertama kali diterbitkan di SavefileArchive.

Top comments (0)