Prompt Engineering untuk Software Developer

4 jam10 min baca
Tujuan

Praktik prompt engineering khusus konteks software development. Materi setara dengan modul Dicoding 16 jam (kita ringkas, kelas akan perdalam).

03 — Prompt Engineering untuk Software Developer

Estimasi: 4 jam Tujuan: Praktik prompt engineering khusus konteks software development. Materi setara dengan modul Dicoding 16 jam (kita ringkas, kelas akan perdalam).


Pembukaan

Programmer modern wajib bisa pakai LLM untuk:

  • Generate code
  • Debug error
  • Refactor
  • Explain code
  • Write tests
  • Review code

Yang membedakan junior pakai AI dengan senior pakai AI: kualitas prompt + kemampuan verifikasi output.


Bagian 1 — Code Generation

Prompt yang Buruk

Bikinkan saya function untuk validasi email

Output mungkin:

  • Pakai bahasa apa? Asumsi: Python (mungkin)
  • Validasi seberapa ketat? Regex sederhana atau RFC compliant?
  • Return apa? Bool atau exception?
  • Library boleh? Atau pure?

Prompt yang Baik

Bikin function Python untuk validasi email.

Requirement:
- Input: string email
- Output: tuple (is_valid: bool, reason: str | None)
- Validasi: format dasar (local@domain.tld)
- Tanpa external library
- Pakai regex compiled
- Type hints lengkap
- Docstring dengan example

Test cases yang harus lulus:
- "user@example.com" → (True, None)
- "user@example" → (False, "missing TLD")
- "@example.com" → (False, "missing local part")
- "" → (False, "empty input")

Kasih juga example usage di akhir.

Output sekarang predictable.

Pattern Code Generation

[BAHASA & VERSI]
[FUNCTION/CLASS NAME]
[INPUT/OUTPUT SPEC]
[REQUIREMENTS]
[CONSTRAINTS]
[EXAMPLES atau TEST CASES]
[STYLE PREFERENCES]

Tips Pro

  • Spesifikasi versi library — "pandas 2.x", "Python 3.11"
  • Convention — "PEP 8", "Google docstring style"
  • Edge cases — sebut yang harus di-handle
  • Don'ts — list anti-pattern yang harus dihindari

Bagian 2 — Debugging

Anti-pattern

Gimana fix error ini?
[paste error]

Pro-pattern

Saya dapat error berikut saat menjalankan code Python:

[paste full traceback]

Code yang menyebabkan error:
```python
[paste relevant code]

Konteks:

  • Python 3.11
  • pandas 2.0
  • Tujuan code: load CSV dan filter rows berdasarkan tanggal
  • Sudah cek: file ada di folder yang benar
  • Sebelumnya code ini jalan, mulai error setelah saya update pandas

Tolong:

  1. Identifikasi root cause
  2. Jelaskan kenapa terjadi
  3. Berikan fix
  4. Tips supaya tidak terjadi lagi

### Information yang Wajib Disertakan

1. **Error message lengkap + traceback**
2. **Code yang relevan** (bukan seluruh project)
3. **Versi tools** yang dipakai
4. **Apa yang sudah dicoba**
5. **Expected behavior**

---

## Bagian 3 — Refactoring

### Pattern

Refactor code berikut.

[paste code]

Tujuan refactor:

  • Lebih readable
  • Pakai pattern Pythonic (comprehension, etc.)
  • Kurangi duplication
  • Add type hints
  • Better naming

Constraints:

  • Tidak boleh ubah API public (function signature)
  • Backward compatible
  • Tidak boleh tambah dependency

Output: code refactored + changelog (apa yang berubah dan kenapa).


### Common Refactoring Asks

- "Convert to OOP"
- "Convert callbacks to async/await"
- "Pakai pattern builder"
- "Pisahkan concern (single responsibility)"
- "Extract function dari kode panjang"

---

## Bagian 4 — Code Explanation

Untuk mengerti code orang lain (open source, codebase baru di kerjaan).

### Pattern

Jelaskan code Python ini secara detail:

[paste code]

Berikan:

  1. High-level overview (1 paragraf)
  2. Walkthrough line-by-line untuk bagian non-obvious
  3. Pattern atau idiom Python yang dipakai
  4. Potential edge cases atau bugs
  5. Suggestion untuk improvement (kalau ada)

Audience: Python intermediate developer.


### Tips

- **Tentukan audience level**  beginner/intermediate/advanced
- **Minta analogi** untuk konsep abstract
- **Minta diagram** kalau perlu (bisa ASCII art atau Mermaid)

---

## Bagian 5 — Test Writing

### Generate Unit Tests

Bikin unit tests pytest untuk function berikut:

def calculate_tax(income: float, marital_status: str = "single") -> float:
    if income < 0:
        raise ValueError("Income cannot be negative")
    
    if marital_status == "single":
        if income <= 50_000:
            return income * 0.10
        else:
            return income * 0.20
    elif marital_status == "married":
        if income <= 80_000:
            return income * 0.08
        else:
            return income * 0.15
    else:
        raise ValueError(f"Unknown status: {marital_status}")

Coverage requirement:

  • Happy path untuk single & married
  • Boundary value (income = 50_000, 80_000)
  • Edge cases (income = 0)
  • Error cases (income < 0, invalid status)
  • Use parametrize untuk efisiensi

Output: test file lengkap dengan import dan organization.


### Property-Based Testing

Bikin property-based tests pakai Hypothesis untuk function di atas. Tentukan invariants:

  • Tax tidak boleh negatif
  • Tax tidak boleh > income
  • ...

---

## Bagian 6 — Code Review

LLM bisa jadi reviewer pertama sebelum tim humans.

### Pattern

Lakukan code review pada PR berikut:

[paste code]

Konteks:

  • Project: web app e-commerce
  • Author: junior dev (2 tahun pengalaman)
  • Goal: function untuk apply diskon

Review:

  1. Correctness — bug atau logic error?
  2. Style — sesuai convention?
  3. Performance — bottleneck?
  4. Security — input validation, SQL injection, etc?
  5. Maintainability — readable, testable?
  6. Pythonic — pakai idiom yang tepat?

Untuk tiap finding:

  • Severity (critical/major/minor/nit)
  • Penjelasan
  • Suggested fix

Output: list issues, sorted by severity.


### Checklist Self-Review (Sebelum Push)

Aku sering pakai prompt ini:

Review code saya. Hanya komentari yang penting (skip yang nit).

[paste]

Cek terutama:

  • Off-by-one errors
  • Null/empty handling
  • Race conditions (kalau async)
  • Resource leak (file/connection tidak di-close)
  • Magic numbers

---

## Bagian 7 — Documentation

### Generate Docstring

Tambahkan docstring Google-style ke function ini:

[paste]

Include:

  • One-line summary
  • Args dengan tipe dan deskripsi
  • Returns
  • Raises
  • Example usage

### README Generator

Bikin README.md untuk project Python berikut.

Struktur folder: [paste tree]

main.py: [paste]

Tujuan project: [...] Audience: developer yang mau pakai library ini

Format:

Title

Description

Installation

Usage (dengan example code)

API Reference

Contributing

License


---

## Bagian 8 — Migration & Modernization

### Migrasi Code Lama

Modernisasi code Python 2 ini ke Python 3.11:

[old code]

Update:

  • print statement → function
  • urllib2 → urllib3 atau requests
  • dict.iteritems() → .items()
  • xrange → range
  • Tambah type hints

Tunjukkan diff format (- old, + new).


### Framework Migration

Convert code Flask ini ke FastAPI:

[Flask code]

Pertahankan logic. Pakai feature FastAPI yang relevan:

  • Pydantic untuk validation
  • Async kalau IO-bound
  • Type hints

---

## Bagian 9 — Architecture & Design

### Design Discussion

Saya bikin sistem chat real-time. 100k concurrent users. User kirim message, semua user di room sama dapat update.

Stack saya saat ini:

  • Backend: Python (FastAPI)
  • DB: PostgreSQL
  • Frontend: React

Pertanyaan:

  1. Pakai apa untuk real-time? WebSocket vs SSE vs polling?
  2. Bagaimana scale untuk 100k concurrent?
  3. Apakah perlu message queue (Redis pub/sub, RabbitMQ)?
  4. Apa concerns architect saya yang mungkin saya lewatkan?

Berikan rekomendasi dengan reasoning + alternative dengan tradeoff.


### LLM sebagai Sparring Partner

LLM TIDAK pengganti senior architect. Tapi bisa:
- Brainstorm partner
- Cek blind spot
- Explore tradeoff

**Selalu validate** dengan riset + experiment + senior input.

---

## Bagian 10 — AI-Assisted Development Workflow

Cara pro pakai AI di daily coding:

### 1. Top-Down

Step 1: Sketsa solution dengan AI (high-level design) Step 2: Write tests dulu (TDD style) — bisa dengan AI Step 3: Implement function-by-function — AI assist Step 4: Review semua dengan AI Step 5: Refactor & polish


### 2. Pair Programming

VS Code + GitHub Copilot atau Cursor:
- AI suggest as you type
- Tab to accept
- Iterate naturally

### 3. AI sebagai Rubber Duck

Stuck? Jelaskan masalah ke AI seakan ke kolega:
- Sering, jawaban muncul saat kamu menjelaskan ("rubber duck debugging")
- AI kadang kasih perspektif baru

### 4. Gunakan AI untuk Boring Stuff

- Generate boilerplate (CRUD)
- Convert format (CSV ↔ JSON ↔ XML)
- Write regex
- SQL query yang ribet
- Convert language A ke B

---

## Bagian 11 — Limitasi yang Harus Diingat

### LLM Tidak Selalu Benar

Kasus nyata:
1. **Outdated info** — kalau library/framework update setelah cutoff
2. **Imaginary functions** — nyebut function yang tidak ada di library
3. **Wrong syntax** — sintaks 2 versi berbeda dicampur
4. **Not actually testing** — kasih test yang lulus tapi tidak meaningful

### Workflow Defensive

1. **Selalu test** code generated, jangan trust buta
2. **Cek dokumentasi resmi** untuk library penting
3. **Run actual tests** — pytest, mypy, lint
4. **Code review** sendiri sebelum commit
5. **Kalau output panjang**, baca dengan teliti, kadang ada placeholder TODO

### Cost Awareness

- API call ada biaya per token
- Untuk task simple, model kecil/cepat (Haiku, Flash, GPT-mini) cukup
- Untuk task kompleks, baru model besar
- Cache hasil yang tidak perlu re-generate

---

## Cek Pemahaman

- [ ] Bisa nulis prompt code generation yang spesifik?
- [ ] Tahu informasi wajib saat tanya debug?
- [ ] Bisa minta refactor dengan constraint jelas?
- [ ] Bisa generate unit test dengan coverage requirement?
- [ ] Bisa pakai LLM untuk code review?
- [ ] Tahu kapan TIDAK trust LLM?

---

## Challenge 3.3

### Challenge 1 — Bug Squashing

Cari 3 bug Python di internet (Stack Overflow, Reddit, GitHub issue). Untuk setiap:
1. Reproduce di laptopmu
2. Tulis prompt debugging dengan format pro
3. Apply fix yang disarankan AI
4. Verifikasi
5. Catat: berapa attempt sampai dapat fix yang benar?

### Challenge 2 — Refactor Marathon

Ambil 1 mini project Fase 2 kamu yang masih jelek. Lakukan refactor session bareng AI:
1. Minta AI identify 5 hal yang bisa di-improve
2. Refactor satu per satu
3. Untuk tiap refactor, tanya AI verifikasi
4. Run tests setelah tiap perubahan

Bandingkan code awal vs akhir. Tulis di jurnal.

### Challenge 3 — Test Coverage

Untuk salah satu function di project kamu:
1. Tulis spec lengkap (input, output, edge cases)
2. Minta AI generate pytest tests
3. Run tests
4. Cek coverage (`pytest --cov`)
5. Tambahkan test untuk yang missing

Target: 90%+ coverage.

### Challenge 4 — Algorithm Generation

Pakai LLM untuk generate solusi 5 problem dari LeetCode (Easy):
1. Tulis problem statement ke LLM
2. Minta solusi dengan complexity analysis
3. Run di LeetCode
4. Kalau gagal, debug bareng LLM
5. Pelajari pattern yang dipakai

### Challenge 5 — Design Discussion

Pilih problem yang menantang:
- "Bikin URL shortener seperti bit.ly"
- "Bikin sistem rate limiting"
- "Bikin notification system"

Diskusi dengan AI:
1. Architecture overview
2. Data model
3. API design
4. Scaling considerations
5. Pitfalls

Catat insight dalam blog/jurnal.

### Challenge 6 — Code Documentation

Ambil 1 file Python kamu yang minim dokumentasi. Pakai AI untuk:
1. Generate docstring untuk semua function
2. Generate README
3. Bikin diagram (ASCII atau Mermaid) untuk flow utama
4. Bikin example usage

### Challenge 7 — Build Coding Prompt Library

Tambah ke `prompts/` folder kamu:

prompts/coding/ ├── debug-template.md ├── refactor-template.md ├── code-review-template.md ├── test-generator.md ├── docstring-generator.md └── architecture-discussion.md


Tiap template: contoh penggunaan + tips.

### Challenge 8 — Compare AI Tools

Test 3 AI coding tools:
- Claude (chat)
- ChatGPT
- GitHub Copilot di VS Code

Lakukan task yang sama di ketiganya:
- Generate function
- Debug code
- Refactor

Mana yang paling sesuai untuk kamu? Tulis di jurnal.

---

**Selanjutnya:** [04-linear-algebra.md](04-linear-algebra.md)  math intuition mulai dari aljabar linear. Fondasi semua deep learning.