AI untuk Programming dan Coding Cepat
AI sebagai Asisten, Bukan Pengganti Programmer
Cara Menggunakan Buku
AI untuk Programming dan Coding Cepat
Buku ini sebaiknya dipakai dengan cara langsung praktik, bukan hanya dibaca. Prinsip utamanya:
Baca sedikit, praktik banyak.
Langkah Menggunakan Buku
Baca tujuan bab terlebih dahulu
Pahami apa yang ingin dicapai pada setiap bab.
Ikuti contoh CLI dan kode secara langsung
Ketik ulang perintah dan kode di laptop, jangan hanya dibaca.
Gunakan AI sebagai asisten belajar
Pakai AI untuk:
menjelaskan kode,
menjelaskan error,
memberi contoh tambahan,
membantu memperbaiki kode.
Jangan langsung percaya kode dari AI
Setiap kode harus:
dibaca,
dijalankan,
diuji,
dipahami.
Coba input salah
Jangan hanya mencoba contoh yang benar. Uji juga input kosong, salah, atau tidak lengkap.
Simpan hasil latihan dengan Git
Setelah kode berjalan, simpan:
git add .
git commit -m "selesai latihan bab ini"
Baca tujuan bab terlebih dahulu
Pahami apa yang ingin dicapai pada setiap bab.
Ikuti contoh CLI dan kode secara langsung
Ketik ulang perintah dan kode di laptop, jangan hanya dibaca.
Gunakan AI sebagai asisten belajar
Pakai AI untuk:
menjelaskan kode,
menjelaskan error,
memberi contoh tambahan,
membantu memperbaiki kode.
Jangan langsung percaya kode dari AI
Setiap kode harus:
dibaca,
dijalankan,
diuji,
dipahami.
Coba input salah
Jangan hanya mencoba contoh yang benar. Uji juga input kosong, salah, atau tidak lengkap.
Simpan hasil latihan dengan Git
Setelah kode berjalan, simpan:
git add .
git commit -m "selesai latihan bab ini"
Pola Belajar Buku Ini
Prompt → Kode → Jalankan → Error → Perbaiki → Pahami → Simpan di Git
Aturan Utama
Jangan pernah menjalankan kode yang tidak dipahami.
Jika belum paham, gunakan prompt:
Jelaskan kode ini dengan bahasa sederhana untuk pemula. Tunjukkan bagian penting dan kemungkinan error.
Dengan cara ini, pembaca tidak hanya cepat membuat kode, tetapi juga belajar menjadi programmer yang mandiri, kritis, dan bertanggung jawab.
BAB 1. Mindset Coding Cepat dengan AI
AI sebagai Asisten, Bukan Pengganti Programmer
Cara paling sehat memakai AI untuk coding adalah menganggapnya sebagai teman kerja yang cepat, tetapi belum tentu benar. Ia bisa menulis kode dalam hitungan detik, menjelaskan konsep, memberi alternatif solusi, dan membantu membaca error. Namun ia tidak benar-benar memahami konteks hidup pengguna, kebutuhan organisasi, risiko keamanan, atau konsekuensi dari keputusan teknis yang salah.
Dalam praktik coding modern, AI dapat berperan sebagai pair programmer. Artinya, pembaca tidak bekerja sendirian. Pembaca bisa bertanya, meminta contoh, meminta penjelasan, dan meminta perbaikan. Aider, misalnya, mendeskripsikan dirinya sebagai AI pair programming di terminal dan dapat digunakan bersama repo Git lokal. (aider.chat)
Namun posisi AI harus jelas: AI membantu, manusia memimpin. AI boleh membuat draf kode, tetapi manusia harus membaca. AI boleh memberi solusi error, tetapi manusia harus menguji. AI boleh menyarankan arsitektur, tetapi manusia harus menilai apakah cocok, aman, dan bisa dirawat.
AI sangat berguna untuk membantu:
membuat contoh kode awal,
menjelaskan pesan error,
menulis komentar dan dokumentasi,
membuat unit test sederhana,
memberi alternatif pendekatan,
merapikan kode agar lebih mudah dibaca,
membantu memahami kode lama.
Referensi The AI-Powered Developer juga menekankan bahwa AI coding dapat membantu dalam siklus testing, debugging, menjelaskan kode, dan menjelaskan konsep. Tetapi buku tersebut juga menegaskan pentingnya memahami tool yang digunakan, bukan sekadar menerima hasilnya.
Yang tidak boleh diserahkan penuh kepada AI adalah:
desain sistem,
keamanan aplikasi,
logika bisnis,
validasi hasil,
keputusan akhir,
akses ke data sensitif,
kode produksi tanpa review.
Kesalahan besar pemula adalah merasa bahwa kode yang terlihat rapi pasti benar. Dalam coding, kode yang bisa jalan belum tentu benar, belum tentu aman, dan belum tentu layak dipakai jangka panjang. Kode harus diuji dengan input normal, input salah, input kosong, dan kondisi ekstrem.
Kalimat kunci:
AI boleh menulis kode pertama, tetapi programmer wajib menjadi pemeriksa terakhir.
Dari Vibe Coding ke Coding yang Bertanggung Jawab
Istilah vibe coding sering dipakai untuk menggambarkan cara membuat software dengan memberi instruksi natural kepada AI, lalu membiarkan AI menghasilkan kode. Cara ini sangat menarik karena terasa cepat: pengguna menjelaskan ide, AI membuat program, lalu program dicoba. Untuk prototipe, eksperimen, demo, atau belajar cepat, pola ini sangat berguna.
Tetapi ada bahaya besar: kode cepat sering terlihat meyakinkan sebelum benar-benar diuji. Pemula mudah terjebak karena AI bisa membuat kode yang tampak profesional, lengkap dengan komentar dan struktur folder. Padahal mungkin ada bug, library tidak cocok, validasi input lemah, atau logika salah.
Referensi Beyond Vibe Coding menekankan bahwa AI dapat mempercepat prototipe, tetapi tetap membutuhkan review, refinement, testing, verifikasi, dan ownership dari developer. Di dalam indeksnya, buku tersebut juga menyoroti risiko seperti package hallucination, vulnerability, kode yang sulit dirawat, dan pentingnya testing pada sistem yang dibuat dengan bantuan AI.
Bagi pemula, vibe coding boleh dipakai sebagai pintu masuk. Tetapi setelah program pertama jalan, proses harus naik kelas menjadi coding yang bertanggung jawab:
baca kode,
pahami fungsi setiap bagian,
jalankan program,
uji dengan beberapa input,
perbaiki error,
rapikan struktur,
tulis dokumentasi,
simpan perubahan dengan Git.
Git penting karena coding adalah proses eksperimen. Git adalah sistem version control yang mencatat perubahan file dari waktu ke waktu sehingga versi lama dapat dipanggil kembali jika terjadi kesalahan. (git-scm.com)
OWASP juga mengingatkan bahwa praktik secure coding sebaiknya masuk ke dalam siklus pengembangan, bukan ditempel di akhir. Panduan OWASP bersifat teknologi-agnostik dan berisi checklist umum seperti validasi input, autentikasi, manajemen session, akses kontrol, kriptografi, error handling, logging, dan perlindungan data. (owasp.org)
Perubahan mindset yang penting:
Mindset Salah
Mindset Benar
AI pasti benar
AI harus diverifikasi
Kode jalan berarti selesai
Kode harus diuji dan dipahami
Copy-paste lebih cepat
Paham kode lebih aman
Error itu gangguan
Error adalah bahan belajar
Dokumentasi nanti saja
Dokumentasi dibuat sejak awal
Security urusan akhir
Security harus dipikir sejak awal
Dengan cara ini, pembaca tidak menjadi operator prompt pasif, tetapi menjadi programmer yang belajar berpikir. Inilah inti buku ini: coding cepat, tetapi tetap sadar risiko.
Pola kerja yang dipakai dalam buku ini sederhana:
Ide → Prompt → Kode → Jalankan → Error → Debug → Test → Dokumentasi → Commit
Pola ini harus diulang terus sampai menjadi kebiasaan.
Ide adalah kebutuhan awal. Contohnya: “Saya ingin membuat kalkulator sederhana,” “Saya ingin membaca file CSV,” atau “Saya ingin membuat aplikasi Todo.”
Prompt adalah instruksi kepada AI. Prompt yang baik harus jelas: bahasa pemrograman apa, target pembaca siapa, batasan apa, input-output seperti apa, dan cara penjelasan yang diinginkan.
Kode adalah hasil awal, bukan hasil akhir. Kode dari AI harus dianggap sebagai draf pertama.
Jalankan berarti kode harus benar-benar dicoba di komputer. Jangan hanya dibaca.
Error adalah hal normal. Dalam coding, error bukan tanda gagal. Error adalah pesan dari mesin yang memberi tahu bagian mana yang perlu diperiksa.
Debug adalah proses mencari penyebab error. AI bisa membantu menjelaskan error, tetapi pembaca tetap harus memahami akar masalahnya.
Test memastikan kode bekerja pada beberapa kondisi. Jangan hanya menguji satu input.
Dokumentasi menjelaskan cara menjalankan, fungsi program, contoh penggunaan, dan catatan error umum.
Commit menyimpan perubahan ke Git. Ini penting agar pembaca bisa kembali ke versi sebelumnya jika eksperimen berikutnya gagal.
Dokumentasi resmi Python menyediakan tutorial, referensi library, dan panduan penggunaan Python yang dapat dijadikan sumber utama saat hasil AI perlu dicek ulang. (Python documentation)
Contoh pola kerja mini:
Langkah | Contoh |
Ide | Membuat kalkulator sederhana |
Prompt | Minta AI membuat kode Python tanpa library tambahan |
Kode | AI menghasilkan file kalkulator.py |
Jalankan | python3 kalkulator.py |
Error | Ada salah ketik atau input tidak valid |
Debug | Minta AI jelaskan error |
Test | Coba tambah, kurang, kali, bagi, dan pembagian nol |
Dokumentasi | Tulis cara menjalankan |
Commit | git add . && git commit -m "buat kalkulator awal" |
Golden rule:
Kode yang belum dijalankan belum boleh dipercaya. Kode yang belum diuji belum boleh dipakai.
Prompt dasar untuk bab ini:
Saya pemula Python. Buatkan program kalkulator sederhana. Jelaskan setiap baris kode.
Tambahkan contoh input dan output. Jangan gunakan library tambahan.
Prompt ini baik karena jelas. Ada empat elemen penting:
identitas pembaca: pemula Python,
tujuan: membuat kalkulator sederhana,
cara penjelasan: jelaskan setiap baris,
batasan: jangan gunakan library tambahan.
Prompt yang terlalu pendek biasanya menghasilkan jawaban yang terlalu umum. Prompt yang terlalu panjang bisa membuat AI kehilangan fokus. Untuk pemula, prompt terbaik adalah pendek, jelas, dan bertahap.
Contoh prompt yang lebih kuat:
Saya pemula Python.
Buatkan program kalkulator sederhana dengan fitur:
tambah
kurang
kali
bagi
Syarat:
jangan gunakan library tambahan
gunakan input dari keyboard
jika pembagian dengan nol, tampilkan pesan error yang mudah dipahami
jelaskan kode per bagian
berikan contoh input dan output
Prompt ini lebih baik karena ada fitur, batasan, validasi error, dan format penjelasan. Setelah AI memberi kode, jangan langsung percaya. Gunakan prompt lanjutan:
Periksa kode ini. Apakah ada bug?
Apakah ada kondisi input yang bisa membuat program error? Berikan perbaikan minimal saja.
Jangan ubah seluruh struktur kode.
Prompt lanjutan ini penting karena AI sering terlalu agresif mengubah kode. Untuk pemula, perubahan kecil lebih mudah dipahami daripada perubahan besar.
Tujuan hands-on ini sederhana: pembaca membuat program kalkulator, menjalankannya, membaca error, lalu memperbaikinya. Fokusnya bukan membuat program canggih, tetapi membangun kebiasaan kerja yang benar.
Langkah 1 — Buat Folder Proyek
Di terminal Linux:
mkdir latihan-ai-coding cd latihan-ai-coding
Buat file Python:
nano kalkulator.py
Langkah 2 — Minta AI Membuat Kode
Gunakan prompt:
Saya pemula Python. Buatkan program kalkulator sederhana.
Fitur: tambah, kurang, kali, bagi. Gunakan input dari keyboard.
Jangan gunakan library tambahan.
Jika pembagian dengan nol, tampilkan pesan error. Jelaskan kode per bagian.
Misalnya AI memberi kode seperti ini:
print("Kalkulator Sederhana") print("1. Tambah")
print("2. Kurang") print("3. Kali")
print("4. Bagi")
pilihan = input("Pilih operasi (1/2/3/4): ")
angka1 = float(input("Masukkan angka pertama: ")) angka2 = float(input("Masukkan angka kedua: "))
if pilihan == "1":
hasil = angka1 + angka2 print("Hasil:", hasil)
elif pilihan == "2":
hasil = angka1 - angka2 print("Hasil:", hasil)
elif pilihan == "3":
hasil = angka1 * angka2 print("Hasil:", hasil)
elif pilihan == "4": if angka2 == 0:
print("Error: pembagian dengan nol tidak
boleh.")
else:
hasil = angka1 / angka2 print("Hasil:", hasil)
else:
print("Pilihan tidak valid.")
Langkah 3 — Jalankan Kode
Simpan file, lalu jalankan:
python3 kalkulator.py
Coba input normal:
Pilih operasi (1/2/3/4): 1 Masukkan angka pertama: 10 Masukkan angka kedua: 5 Hasil: 15.0
Coba input pembagian nol:
Pilih operasi (1/2/3/4): 4 Masukkan angka pertama: 10 Masukkan angka kedua: 0
Error: pembagian dengan nol tidak boleh.
Sampai sini pembaca sudah membuat program pertama. Tetapi proses belum selesai. Program masih perlu diuji dengan input yang salah.
Langkah 4 — Uji Input Salah
Coba masukkan huruf pada angka:
Masukkan angka pertama: abc
Biasanya Python akan menampilkan error seperti:
ValueError: could not convert string to float: 'abc'
Ini momen belajar yang penting. Jangan panik. Copy error tersebut, lalu tanya ke AI:
Saya mendapat error ini:
ValueError: could not convert string to float: 'abc' Jelaskan artinya dengan bahasa sederhana.
Berikan perbaikan minimal agar program tidak langsung berhenti.
AI kemungkinan akan menyarankan try-except.
Langkah 5 — Perbaiki Kode dengan Error Handling
Versi yang lebih aman:
print("Kalkulator Sederhana") print("1. Tambah")
print("2. Kurang") print("3. Kali")
print("4. Bagi")
pilihan = input("Pilih operasi (1/2/3/4): ")
Langkah 6 — Buat Test Manual
Gunakan tabel sederhana:
No 1
Skenario: Tambah
Input: 10 dan 5
Hasil yang Diharapkan: 15
Status: ☐No 2
Skenario: Kurang
Input: 10 dan 5
Hasil yang Diharapkan: 5
Status: ☐No 3
Skenario: Kali
Input: 10 dan 5
Hasil yang Diharapkan: 50
Status: ☐No 4
Skenario: Bagi
Input: 10 dan 5
Hasil yang Diharapkan: 2
Status: ☐No 5
Skenario: Bagi nol
Input: 10 dan 0
Hasil yang Diharapkan: Pesan error
Status: ☐No 6
Skenario: Input huruf
Input: abc
Hasil yang Diharapkan: Pesan error
Status: ☐No 7
Skenario: Pilihan salah
Input: 9
Hasil yang Diharapkan: Pilihan tidak valid
Status: ☐
Di sinilah pembaca belajar bahwa testing bukan teori akademik, tetapi kebiasaan harian. Referensi Coding with AI juga menempatkan testing, debugging, dokumentasi, dan maintenance sebagai bagian penting dari penggunaan AI untuk coding, bukan hanya membuat kode cepat.
Langkah 7 — Dokumentasikan Program
Buat file:
nano README.md
Isi sederhana:
# Kalkulator Sederhana
Program Python untuk latihan AI coding. ## Fitur
Tambah
Kurang
Kali
Bagi
Validasi pembagian dengan nol
Validasi input huruf ## Cara Menjalankan
python3 kalkulator.py
Catatan
Program ini dibuat untuk belajar mindset coding cepat dengan AI. Kode tetap harus dibaca, dijalankan, diuji, dan diperbaiki oleh manusia.
Langkah 8 — Simpan dengan Git
git init
git add kalkulator.py README.md
git commit -m "buat kalkulator sederhana dengan validasi input"
Perintah ini membiasakan pembaca bekerja seperti programmer sungguhan. Setiap perubahan penting disimpan. Jika nanti kode rusak karena eksperimen, versi lama masih bisa dilacak.
Git sendiri adalah sistem version control bebas dan terbuka yang dirancang untuk menangani proyek kecil sampai sangat besar dengan cepat dan efisien.
Checklist Akhir Bab 1
Sebelum lanjut ke Bab 2, pembaca sebaiknya sudah bisa menjawab:
Pertanyaan
Ya/Tidak
Apakah saya paham bahwa AI hanya asisten?
☐
Apakah saya bisa membuat prompt sederhana untuk coding?
☐
Apakah saya bisa menjalankan file Python?
☐
Apakah saya bisa membaca error dasar?
☐
Apakah saya bisa meminta AI menjelaskan error?
☐
Apakah saya bisa memperbaiki kode sederhana?
☐
Apakah saya sudah mencoba input salah?
☐
Apakah saya sudah membuat README?
☐
Apakah saya sudah menyimpan kode dengan Git?
☐
Ringkasan Bab
AI membuat coding terasa lebih cepat, tetapi kecepatan tanpa pemahaman adalah risiko. Untuk pemula, AI harus dipakai sebagai guru sabar, teman diskusi, dan pembuat draf awal, bukan sebagai pengganti belajar. Pembaca perlu membiasakan pola kerja:
ide → prompt → kode → jalankan → error → debug → test → dokumentasi → commit.
Bab ini memberi fondasi penting: kode AI tidak boleh dipercaya sebelum dijalankan, diuji, dipahami, dan disimpan dengan rapi. Dengan mindset ini, pembaca siap masuk ke Bab 2 untuk menyiapkan ekosistem coding open-source yang lebih lengkap.
Golden rule Bab 1:
AI mempercepat coding, tetapi pemahaman, pengujian, keamanan, dan tanggung jawab tetap milik manusia.
BAB 2. Menyiapkan Ekosistem Coding Open-Source
Linux/Ubuntu cocok untuk belajar coding karena dekat dengan dunia server, mudah dipakai untuk Python, Git, Docker, database, API, dan eksperimen AI lokal. Banyak dokumentasi resmi pengembangan Python di Ubuntu juga langsung menggunakan terminal sebagai jalur utama instalasi dan kerja. (Dokumentasi Ubuntu)
Terminal penting karena programmer harus terbiasa memberi perintah langsung ke sistem. Untuk pemula, terminal bukan sesuatu yang menakutkan. Terminal adalah ruang kerja utama untuk menjalankan program, mengelola folder, menginstall package, membaca error, dan menjalankan tool AI.
Perintah dasar yang wajib dikuasai:
Perintah
Fungsi
pwd
melihat posisi folder saat ini
ls
melihat isi folder
cd
pindah folder
mkdir
membuat folder
nano
mengedit file teks dari terminal
python3
menjalankan Python
pip
menginstall package Python
Contoh latihan CLI:
pwd ls
mkdir latihan-coding cd latihan-coding nano catatan.txt
Isi file catatan.txt:
Hari ini saya mulai belajar coding cepat dengan AI.
Lihat kembali isi folder:
ls
Catatan penting: pemula tidak perlu langsung menghafal semua perintah Linux. Cukup kuasai perintah yang dipakai setiap hari.
Editor code adalah tempat membaca, menulis, dan merapikan program. Untuk ekosistem terbuka, gunakan editor seperti VSCodium, Geany, Kate, Neovim, atau editor lain yang nyaman. Yang penting bukan nama editornya, tetapi kemampuan pembaca untuk:
membuka folder proyek,
membaca file kode,
membuat file baru,
mencari teks,
melihat terminal,
memahami struktur proyek,
menyimpan perubahan.
Extension atau fitur dasar yang berguna:
Python untuk membaca dan menjalankan kode Python,
Markdown untuk menulis dokumentasi,
Git untuk melihat perubahan kode,
HTTP/REST client untuk menguji API sederhana.
Untuk buku 100 halaman, jangan terlalu banyak membahas editor. Cukup ajarkan pembaca membuat folder proyek, membuka file, menjalankan kode dari terminal, dan membaca error. Editor hanya alat bantu. Terminal tetap pusat praktik.
Contoh membuat file Python dari CLI:
mkdir bab2-latihan cd bab2-latihan nano hello.py
Isi:
print("Halo, saya siap belajar coding cepat dengan AI.")
Jalankan:
python3 hello.py
Python adalah bahasa utama buku ini karena mudah dibaca, banyak dipakai untuk AI, otomasi, API, data, dan scripting. Untuk memulai, install komponen dasar:
sudo apt update
sudo apt install python3 python3-pip python3-venv git curl ca-certificates -y
Cek versi:
python3 --version pip --version
git --version
Python menyediakan venv untuk membuat virtual environment, yaitu lingkungan Python terpisah agar package proyek tidak bercampur dengan sistem utama. Dokumentasi resmi Python menjelaskan bahwa venv membuat lingkungan ringan dan terisolasi dengan package sendiri. (Python documentation)
Buat folder proyek:
mkdir proyek-python-pertama cd proyek-python-pertama
Buat virtual environment:
python3 -m venv .venv source .venv/bin/activate
Cek Python yang aktif:
which python python --version
Buat program pertama:
nano main.py
Isi:
nama = input("Nama Anda: ")
print(f"Halo {nama}, selamat belajar coding cepat dengan AI!")
Jalankan:
python main.py
Mengenal Git
Git dipakai untuk menyimpan riwayat perubahan kode. Ini penting karena coding adalah proses coba, error, perbaikan, dan eksperimen. Perintah git init membuat repository Git kosong di folder proyek. (Git SCM)
Mulai Git:
git init git status
Tambahkan file ke staging area:
git add main.py
Perintah git add menambahkan file baru atau file yang berubah ke area persiapan commit. (Git SCM)
Commit pertama:
git commit -m "program Python pertama"
Perintah git commit membuat commit baru dari isi staging area dengan pesan perubahan. (Git SCM)
Golden rule Git:
Setiap fitur kecil yang sudah jalan sebaiknya langsung di-commit.
Untuk proyek sederhana, venv dan pip sudah cukup. Tetapi untuk proyek yang makin serius, dependency harus lebih rapi. Di sinilah uv berguna. uv adalah Python package and project manager yang sangat cepat dan ditulis dengan Rust. (docs.astral.sh)
Install uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
Tutup dan buka ulang terminal, atau jalankan:
source ~/.bashrc
Cek instalasi:
uv --version
Buat proyek Python modern:
mkdir proyek-uv cd proyek-uv
uv init
Tambahkan package:
uv add requests
Buat file:
nano main.py
Isi:
import requests
response = requests.get("https://httpbin.org/get") print(response.status_code) print(response.json()["url"])
Jalankan:
uv run python main.py
Mengapa uv menarik untuk buku ini?
lebih rapi untuk dependency,
cepat untuk install package,
cocok untuk proyek Python modern,
memudahkan pemula memahami struktur proyek,
Dalam outline buku, uv memang disarankan sebagai bagian dari ekosistem Python yang lebih rapi, bukan sebagai teori tambahan yang panjang.
AI lokal penting karena pembaca dapat belajar tanpa selalu bergantung pada layanan cloud. Dengan AI lokal, eksperimen menjadi lebih mandiri, lebih privat, dan lebih cocok untuk belajar coding berbasis laptop. Dokumentasi Ollama menyatakan bahwa Ollama dapat berjalan di Linux, dan API-nya memungkinkan aplikasi berinteraksi dengan model secara programatik. (docs.ollama.com)
Install Ollama di Linux:
curl -fsSL https://ollama.com/install.sh | sh
Jalankan service:
sudo systemctl start ollama sudo systemctl status ollama
Coba model kecil untuk coding atau percakapan teknis:
ollama run qwen2.5-coder:7b
Atau model kecil lain jika mesin terbatas:
ollama run deepseek-coder:6.7b
Cek daftar model lokal:
ollama list
Contoh bertanya ke model lokal:
Buatkan program Python hello world. Jelaskan setiap baris kode untuk pemula.
Ollama berjalan lokal, dan dokumentasi FAQ menjelaskan bahwa prompt dan data tidak dikirim ke pihak mereka saat model dijalankan secara lokal. (docs.ollama.com)
Catatan realistis: model lokal butuh RAM/VRAM. Jika laptop lemah, gunakan model kecil. Jangan memaksakan model besar hanya karena terlihat lebih canggih.
Ada dua pola utama memakai AI untuk coding:
melalui terminal,
melalui editor kode.
Untuk terminal, Aider menarik karena dirancang sebagai AI pair programming in your terminal dan dapat bekerja dengan proyek lokal. Dokumentasinya juga menekankan penggunaan Aider untuk mengedit kode di repo Git lokal. (GitHub)
Install Aider dengan uv:
uv tool install aider-chat
Masuk ke folder proyek:
cd proyek-python-pertama
Jalankan Aider:
aider
Contoh perintah di dalam Aider:
Baca file main.py. Tambahkan validasi agar nama kosong tidak diterima.
Jelaskan perubahan yang kamu lakukan.
Untuk editor kode, Continue dapat dipakai bersama model lokal melalui Ollama. Dokumentasi Continue menyediakan panduan penggunaan Ollama untuk local AI development dan offline coding assistance. (docs.continue.dev)
Namun ada prinsip penting: jangan masukkan seluruh proyek besar ke konteks AI tanpa seleksi. AI perlu konteks, tetapi terlalu banyak konteks bisa membuat jawaban melebar, lambat, atau salah fokus. Referensi AI-Assisted Coding juga menunjukkan bahwa Continue dapat memakai konteks seperti kode, perubahan Git, terminal, dan URL, tetapi konteks harus dipilih dengan sadar agar jawaban tetap relevan.
Praktik yang lebih aman:
kirim hanya file yang relevan,
jelaskan tujuan perubahan,
minta perubahan minimal,
minta AI menjelaskan alasannya,
jalankan test setelah perubahan,
commit jika sudah benar.
Contoh prompt yang baik:
Saya punya file main.py.
Tolong tambahkan validasi input kosong. Jangan ubah struktur utama.
Jelaskan perubahan singkat.
Setelah itu berikan contoh test manual.
Docker berguna untuk menjalankan aplikasi dalam container, sehingga lingkungan aplikasi lebih konsisten dan tidak mengotori sistem utama. Untuk belajar web, API, database, dan AI lokal, container sangat membantu karena service dapat dijalankan, dihentikan, dan dihapus dengan lebih rapi. Dokumentasi Docker menyediakan panduan resmi instalasi Docker Engine untuk Ubuntu, termasuk dukungan Ubuntu 24.04 LTS dan 26.04 LTS. (Docker Documentation)
Install Docker Engine mengikuti pola resmi:
sudo apt update
sudo apt install ca-certificates curl -y
Buat folder keyring:
sudo install -m 0755 -d /etc/apt/keyrings
Tambahkan repository Docker sesuai dokumentasi resmi terbaru, lalu install:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Tambahkan user ke grup Docker:
sudo usermod -aG docker $USER
Logout dan login kembali, lalu cek:
docker --version docker compose version docker run hello-world
Docker Compose berguna untuk menjalankan beberapa service sekaligus, misalnya backend API, database, dan tool pendukung. Dokumentasi Docker Compose menjelaskan beberapa skenario instalasi, termasuk plugin untuk Linux. (Docker Documentation)
Contoh file compose.yaml sederhana:
services: app:
image: python:3.12-slim working_dir: /app volumes:
- .:/app
command: python main.py
Buat main.py:
print("Halo dari container Python.")
Jalankan:
docker compose up
Catatan kritis: Docker bukan kewajiban di awal. Untuk Bab 2, cukup install dan uji. Penggunaan lebih serius akan muncul saat pembaca mulai membuat API, database, dan proyek akhir.
Hands-on ini merangkum seluruh Bab 2. Targetnya sederhana: laptop siap untuk latihan Python, Git, AI lokal, dan project kecil.
Langkah 1 — Install Paket Dasar
sudo apt update
sudo apt install python3 python3-pip python3-venv git curl ca-certificates nano -y
Cek:
python3 --version pip --version
git --version
Langkah 2 — Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh source ~/.bashrc
uv --version
Buat proyek:
mkdir latihan-bab2 cd latihan-bab2
uv init
Langkah 3 — Buat Program Python
nano main.py
Isi:
print("Ekosistem coding open-source siap.") nama = input("Nama: ")
print(f"Halo {nama}, sekarang kita siap coding cepat dengan AI.")
Jalankan:
uv run python main.py
Langkah 4 — Simpan dengan Git
git init git status git add .
git commit -m "setup proyek Python pertama"
Jika Git meminta identitas lokal, isi:
git config --global user.name "Nama Anda"
git config --global user.email "email@contoh.local"
Ulangi commit:
git commit -m "setup proyek Python pertama"
Langkah 5 — Install dan Coba Ollama
curl -fsSL https://ollama.com/install.sh | sh sudo systemctl start ollama
ollama --version
Jalankan model:
ollama run qwen2.5-coder:7b
Prompt uji:
Buatkan fungsi Python untuk mengecek apakah sebuah angka genap.
Jelaskan kode untuk pemula.
Langkah 6 — Install Aider
uv tool install aider-chat
Masuk ke proyek:
cd latihan-bab2 aider
Prompt di Aider:
Baca main.py. Tambahkan pengecekan agar nama kosong tidak diterima.
Jelaskan perubahan singkat.
Setelah Aider mengubah kode, jalankan:
uv run python main.py
git status git add .
git commit -m "tambah validasi nama kosong"
Langkah 7 — Uji Docker
docker --version docker compose version docker run hello-world
Jika belum bisa menjalankan Docker tanpa sudo, logout dan login kembali setelah menjalankan:
sudo usermod -aG docker $USER
Checklist Akhir Bab 2
Komponen
Status
Terminal bisa digunakan
☐
Python terinstall
☐
pip tersedia
☐
venv bisa dibuat
☐
Git terinstall
☐
git init, git add, git commit dipahami
☐
uv terinstall
☐
Proyek Python bisa dijalankan dengan uv run
☐
Ollama terinstall
☐
Model lokal bisa dijalankan
☐
Aider bisa dijalankan di repo Git lokal
☐
Docker bisa diuji
☐
Commit pertama sudah dibuat
☐
Ringkasan Bab
Ekosistem coding yang baik tidak harus mahal dan tidak harus rumit. Dengan Linux/Ubuntu, terminal, Python, Git, uv, Ollama, Aider, Continue, dan Docker, pembaca sudah memiliki fondasi yang cukup kuat untuk belajar coding cepat secara mandiri.
Bab ini sengaja tidak memperluas terlalu banyak teori. Targetnya praktis: laptop siap, terminal siap, Python siap, Git siap, AI lokal siap, dan proyek pertama sudah
di-commit. Ini sejalan dengan strategi buku: satu tahap, satu hasil nyata, lalu naik ke tahap berikutnya.
Golden rule Bab 2:
Ekosistem yang rapi membuat coding lebih cepat, debugging lebih mudah, dan belajar AI lebih aman.
BAB 3. Python Dasar dengan Bantuan AI
Python cocok untuk pemula karena bentuk kodenya ringkas dan mudah dibaca. Dalam banyak kasus, pembaca dapat langsung memahami maksud program hanya dengan membaca baris demi baris. Ini penting untuk buku yang targetnya cepat bisa coding, karena pembaca tidak perlu terlalu lama tenggelam dalam sintaks yang rumit.
Namun mudah bukan berarti boleh sembarangan. Kode Python tetap harus:
dibaca,
dijalankan,
diuji,
diperbaiki,
dipahami,
lalu disimpan dengan Git.
Dokumentasi resmi Python menjelaskan bahwa tutorial Python dirancang untuk mengenalkan konsep dan fitur dasar bahasa Python secara praktis, dan contoh-contohnya dapat dicoba sendiri. Ini cocok untuk pendekatan buku ini yang menekankan hands-on. (Python documentation)
Menjalankan File .py
Buat folder latihan:
mkdir bab3-python-dasar cd bab3-python-dasar
Buat file Python:
nano hello.py
Isi:
print("Halo, saya belajar Python dengan bantuan AI.")
Jalankan:
python3 hello.py
Output:
Halo, saya belajar Python dengan bantuan AI.
Inilah pola paling dasar: tulis file → jalankan → lihat hasil.
Cara Membaca Pesan Error
Error bukan musuh. Error adalah pesan yang memberi tahu bagian mana yang salah. Dokumentasi resmi Python menjelaskan bahwa pesan error sering menampilkan stack traceback, yaitu jejak baris program yang menyebabkan masalah. Bagian terakhir biasanya menunjukkan tipe error dan penyebabnya. (Python documentation)
Contoh file error:
nano error.py
Isi:
nama = "Budi" print(namaa)
Jalankan:
python3 error.py
Kemungkinan error:
NameError: name 'namaa' is not defined
Artinya Python tidak mengenal variabel namaa. Yang benar adalah nama. Gunakan prompt AI:
Saya mendapat error Python berikut: NameError: name 'namaa' is not defined
Jelaskan artinya dengan bahasa pemula. Tunjukkan kemungkinan baris yang salah. Berikan perbaikan minimal.
Catatan penting: jangan minta AI langsung menulis ulang semua program. Untuk pemula, minta perbaikan minimal agar proses belajar tetap terasa.
Bagian ini mengenalkan fondasi Python yang akan terus dipakai di bab berikutnya: variabel, tipe data, kondisi, perulangan, dan fungsi.
Variabel
Variabel adalah nama untuk menyimpan nilai.
nama = "Aisyah" umur = 20
print(nama) print(umur)
Jalankan:
nano variabel.py python3 variabel.py
Variabel membuat program lebih fleksibel. Daripada menulis nilai langsung berkali-kali, kita menyimpan nilai dalam nama yang mudah dipahami.
Tipe Data Dasar
Tipe data dasar yang perlu dikuasai pemula:
Tipe Data
Contoh
Kegunaan
str
"Budi"
teks
int
25
bilangan bulat
float
3.14
bilangan desimal
bool
True / False
logika benar/salah
Contoh:
nama = "Budi" umur = 21
tinggi = 170.5 aktif = True
print(type(nama)) print(type(umur)) print(type(tinggi)) print(type(aktif))
Jalankan:
nano tipe_data.py python3 tipe_data.py
Kondisi: if, elif, else
Kondisi membuat program bisa mengambil keputusan.
nilai = 75
if nilai >= 80: print("Sangat baik")
elif nilai >= 60: print("Lulus")
else:
print("Perlu belajar lagi")
Jalankan:
nano kondisi.py python3 kondisi.py
Kondisi akan sering dipakai untuk validasi input, login sederhana, filter data, dan logika aplikasi.
Perulangan: for dan while
Perulangan dipakai untuk menjalankan perintah berkali-kali. Contoh for:
for angka in range(1, 6):
print("Angka:", angka)
Contoh while:
hitung = 1
while hitung <= 5: print("Hitung:", hitung) hitung = hitung + 1
Jalankan:
nano perulangan.py python3 perulangan.py
Catatan kritis: hati-hati dengan while. Jika kondisi tidak pernah berubah, program bisa berjalan tanpa berhenti.
Fungsi: def, Parameter, dan return
Fungsi adalah blok kode yang diberi nama agar bisa dipakai ulang.
def sapa(nama):
return f"Halo {nama}, selamat belajar Python!"
pesan = sapa("Dina") print(pesan)
Jalankan:
nano fungsi.py python3 fungsi.py
Fungsi penting karena membuat kode lebih rapi. Referensi AI-Assisted Coding menunjukkan bahwa AI dapat membantu pembelajar menyusun struktur fungsi, parameter, dan alur data sebelum menulis kode lengkap. Ini lebih sehat daripada langsung meminta AI menulis seluruh program.
Prompt belajar fungsi:
Saya pemula Python.
Tolong jelaskan struktur fungsi berikut:
nama fungsi
parameter
isi fungsi
return value
Jangan buat kode baru dulu.
Struktur data dipakai untuk menyimpan banyak nilai. Untuk pemula, empat struktur dasar yang perlu dikuasai adalah list, dict, tuple, dan set.
Error Handling
Program yang baik bukan program yang tidak pernah error. Program yang baik adalah program yang bisa menangani error dengan jelas.
Python memakai try dan except untuk menangani kondisi yang berpotensi error. Dokumentasi resmi Python menjelaskan bahwa setelah error terjadi, bagian akhir pesan error menjelaskan tipe exception dan detail penyebabnya; Python juga menyediakan daftar built-in exceptions yang dapat dipakai untuk memahami jenis error. (Python documentation)
Contoh tanpa error handling:
angka = int(input("Masukkan angka: ")) print("Angka dikali dua:", angka * 2)
Jika pengguna memasukkan huruf, program akan berhenti. Versi lebih aman:
try:
angka = int(input("Masukkan angka: ")) print("Angka dikali dua:", angka * 2)
except ValueError:
print("Error: input harus berupa angka.")
Jalankan:
nano error_handling.py python3 error_handling.py
Membaca Traceback
Contoh error:
ValueError: invalid literal for int() with base 10: 'abc'
Cara membacanya:
ValueError = nilai yang diberikan tidak cocok.
int() mencoba mengubah teks menjadi angka.
'abc' tidak bisa diubah menjadi angka.
Prompt untuk AI:
Saya mendapat traceback Python berikut: [paste traceback]
Tolong jelaskan:
tipe error,
penyebab utama,
baris yang perlu diperiksa,
perbaikan minimal,
contoh test setelah diperbaiki.
Referensi Coding with AI menunjukkan contoh nyata bahwa program yang “secara teknis berjalan” belum tentu sesuai kebutuhan, sehingga developer tetap harus membaca output, memahami error, dan memperbaiki perilaku program.
AI untuk Belajar Python
AI sangat berguna sebagai tutor Python, asalkan prompt-nya jelas. Jangan hanya bertanya, “kode ini salah kenapa?” Lebih baik jelaskan konteks, tujuan, error, dan batasan.
Prompt dasar:
Jelaskan kode Python berikut baris demi baris. Tandai bagian yang sulit untuk pemula.
Berikan latihan kecil setelah penjelasan. [kode ditempel di sini]
Prompt untuk belajar, bukan copy-paste:
Saya ingin belajar, bukan hanya mendapatkan jawaban. Tolong bantu saya memahami cara berpikirnya.
Jangan langsung berikan solusi final. Berikan petunjuk bertahap.
Prompt untuk memperbaiki kode:
Perbaiki kode berikut secara minimal. Jangan ubah struktur besar.
Jelaskan bagian yang diubah.
Tambahkan satu contoh input dan output.
Prompt untuk latihan:
Buatkan 5 latihan Python dasar tentang list dan dict. Urutkan dari mudah ke sedang.
Jangan berikan jawaban dulu.
Berikan petunjuk singkat untuk setiap soal.
Ini sejalan dengan strategi buku: pembaca harus cepat menulis kode, cepat melihat hasil, cepat paham error, terbiasa testing, dan tidak menjadi tukang copy-paste kode AI.
Hands-on
Bagian ini adalah inti Bab 3. Semua latihan memakai CLI agar pembaca terbiasa bekerja seperti programmer.
Hands-on 1 — Program Kalkulator Sederhana
Buat file:
nano kalkulator.py
Isi:
print("Kalkulator Sederhana") print("1. Tambah")
print("2. Kurang") print("3. Kali")
print("4. Bagi")
pilihan = input("Pilih operasi (1/2/3/4): ")
try:
angka1 = float(input("Masukkan angka pertama: ")) angka2 = float(input("Masukkan angka kedua: "))
if pilihan == "1":
print("Hasil:", angka1 + angka2) elif pilihan == "2":
print("Hasil:", angka1 - angka2) elif pilihan == "3":
print("Hasil:", angka1 * angka2) elif pilihan == "4":
if angka2 == 0:
print("Error: pembagian dengan nol tidak
boleh.")
else:
print("Hasil:", angka1 / angka2)
else:
print("Pilihan tidak valid.")
except ValueError:
print("Error: input harus berupa angka.")
Jalankan:
python3 kalkulator.py
Test manual:
Skenario
Input
Harapan
Tambah
10 dan 5
15
Kurang
10 dan 5
5
Kali
10 dan 5
50
Bagi
10 dan 5
2
Bagi nol
10 dan 0
pesan error
Input huruf
abc
pesan error
Prompt AI untuk review:
Review kode kalkulator ini. Apakah ada bug?
Apakah validasi input sudah cukup untuk pemula? Berikan perbaikan minimal saja.
Hands-on 2 — Program Konversi Suhu
Buat file:
nano suhu.py
Isi:
Prompt AI:
Jelaskan rumus konversi suhu dalam kode ini.
Lalu tambahkan validasi sederhana tanpa membuat kode terlalu rumit.
Catatan kritis: jangan terlalu cepat menambahkan menu, GUI, atau fitur besar. Untuk pemula, satu program kecil yang dipahami lebih baik daripada program besar yang hanya disalin.
Hands-on 3 — Program Manajemen Catatan Berbasis Terminal
Buat file:
nano catatan.py
Isi:
catatan = [] while True:
print("\nMenu Catatan") print("1. Tambah catatan") print("2. Lihat catatan") print("3. Keluar")
pilihan = input("Pilih menu: ") if pilihan == "1":
teks = input("Tulis catatan: ") if teks.strip() == "":
print("Catatan tidak boleh kosong.") else:
catatan.append(teks) print("Catatan disimpan.")
elif pilihan == "2":
if len(catatan) == 0: print("Belum ada catatan.")
else:
for nomor, isi in enumerate(catatan,
start=1):
print(f"{nomor}. {isi}")
elif pilihan == "3": print("Selesai.") break
else:
print("Pilihan tidak valid.")
Jalankan:
python3 catatan.py
Konsep yang dipakai:
list,
while,
if,
append,
enumerate,
validasi input kosong.
Prompt AI:
Jelaskan program catatan ini untuk pemula. Fokus pada while, list, append, dan break. Berikan 3 latihan pengembangan kecil.
Hands-on 4 — Membaca dan Menulis File Teks
Versi catatan sebelumnya hilang saat program ditutup. Sekarang kita simpan ke file. Buat file:
nano file_teks.py
Isi:
nama_file = "catatan.txt"
teks = input("Tulis catatan baru: ")
with open(nama_file, "a", encoding="utf-8") as file: file.write(teks + "\n")
print("Catatan tersimpan.") print("\nIsi catatan:")
with open(nama_file, "r", encoding="utf-8") as file: isi = file.read()
print(isi)
Jalankan:
python3 file_teks.py
Cek isi file dari CLI:
cat catatan.txt
Penjelasan singkat:
"a" berarti append, menambah isi di akhir file.
"r" berarti read, membaca file.
with open(...) membantu membuka dan menutup file dengan aman.
Hands-on 5 — Membaca File CSV Sederhana
CSV adalah format sederhana untuk data tabel. Python memiliki modul bawaan csv untuk membaca dan menulis data tabular. Dokumentasi resmi Python menjelaskan bahwa modul csv memungkinkan programmer membaca dan menulis data CSV tanpa harus mengurus detail format CSV secara manual. (Python documentation)
Buat file CSV:
nano nilai.csv
Isi:
nama,nilai Ayu,85 Bima,70 Citra,95 Doni,60
Buat program:
nano baca_csv.py
import csv
with open("nilai.csv", "r", encoding="utf-8") as file: pembaca = csv.DictReader(file)
for baris in pembaca: nama = baris["nama"]
nilai = int(baris["nilai"])
if nilai >= 75: status = "Lulus"
else:
status = "Perlu belajar lagi" print(nama, nilai, status)
Jalankan:
python3 baca_csv.py
Output:
Ayu 85 Lulus
Bima 70 Perlu belajar lagi Citra 95 Lulus
Doni 60 Perlu belajar lagi
Prompt AI:
Jelaskan kode baca_csv.py baris demi baris. Mengapa csv.DictReader cocok untuk pemula? Tambahkan latihan kecil untuk menghitung rata-rata nilai.
Mini Proyek Bab 3 — Ringkasan Nilai Mahasiswa
Gabungkan konsep csv, list, dict, kondisi, fungsi, dan file output. Buat file:
nano ringkasan_nilai.py
Isi:
import csv
def tentukan_status(nilai): if nilai >= 75:
return "Lulus"
return "Perlu belajar lagi"
total = 0
jumlah = 0
with open("nilai.csv", "r", encoding="utf-8") as file_input:
pembaca = csv.DictReader(file_input)
with open("ringkasan.txt", "w", encoding="utf-8") as file_output:
for baris in pembaca: nama = baris["nama"]
nilai = int(baris["nilai"]) status = tentukan_status(nilai)
total = total + nilai jumlah = jumlah + 1
file_output.write(f"{nama}: {nilai} -
{status}\n")
rata_rata = total / jumlah file_output.write(f"\nRata-rata nilai:
{rata_rata}\n")
print("Ringkasan selesai dibuat: ringkasan.txt")
python3 ringkasan_nilai.py cat ringkasan.txt
Prompt AI untuk review:
Review kode ringkasan_nilai.py.
Apakah ada risiko error jika file CSV kosong? Berikan perbaikan minimal.
Jelaskan dengan bahasa pemula.
Pertanyaan ini penting karena kode di atas masih punya risiko: jika CSV kosong, jumlah bernilai 0 dan pembagian total / jumlah akan error. Inilah cara belajar yang benar: program jalan dulu, lalu diuji dengan kondisi tidak ideal.
Checklist Akhir Bab 3
Kemampuan
Status
Bisa membuat file .py dari CLI
☐
Bisa menjalankan program Python
☐
Bisa memakai variabel
☐
Bisa memakai str, int, float, bool
☐
Bisa memakai if, elif, else
☐
Bisa memakai for dan while
☐
Bisa membuat fungsi dengan def
☐
Bisa memakai list dan dict
☐
Bisa membaca error sederhana
☐
Bisa memakai try-except
☐
Bisa membaca dan menulis file teks
☐
Bisa membaca CSV sederhana
☐
Bisa meminta AI menjelaskan kode tanpa copy-paste buta
☐
Ringkasan Bab
Bab ini membangun dasar Python yang langsung bisa dipakai: variabel, tipe data, kondisi, perulangan, fungsi, struktur data, error handling, file teks, dan CSV. Semua latihan dibuat pendek agar sesuai dengan target buku 100 halaman dan tetap menjaga komposisi 70% praktik, 30% teori.
Yang paling penting bukan sekadar “bisa membuat kode”, tetapi bisa membaca, menjalankan, menguji, memperbaiki, dan memahami kode. AI membantu mempercepat proses belajar, tetapi hasil AI tetap harus diperiksa dengan dokumentasi resmi, dijalankan di terminal, dan diuji dengan input berbeda.
Golden rule Bab 3:
Belajar Python dengan AI bukan berarti melewati dasar; justru AI harus dipakai untuk mempercepat pemahaman dasar.
BAB 4. Python untuk Otomasi dan Data Sederhana
Python kuat untuk otomasi karena sintaksnya ringkas, mudah dibaca, dan memiliki banyak library untuk file, teks, data, API, dan sistem. Situs resmi Python menjelaskan Python sebagai bahasa yang membuat programmer dapat bekerja cepat dan mengintegrasikan sistem secara efektif. (Python.org)
Dalam pekerjaan nyata, banyak tugas yang sebenarnya berulang:
mengganti nama banyak file,
membaca banyak data dari CSV,
membuat laporan ringkas,
mengubah file teks menjadi format lain,
mengambil data dari API,
menyimpan hasil ke file,
membuat backup sederhana.
Tugas seperti ini sangat cocok untuk Python. AI dapat membantu membuat script awal, tetapi pembaca tetap harus memeriksa hasilnya.
Prinsip penting:
Otomasi yang baik bukan hanya cepat, tetapi juga aman, bisa diuji, dan tidak merusak data asli.
Sebelum membuat script otomasi, biasakan:
Data sederhana biasanya muncul dalam format CSV, JSON, list, dan dict.
CSV cocok untuk data tabel, misalnya daftar mahasiswa, nilai, transaksi, inventaris, atau log sederhana. Python memiliki modul bawaan csv untuk membaca dan menulis file CSV. Modul ini membantu programmer menangani data CSV tanpa harus memecah teks secara manual.
JSON cocok untuk data dari API. Format JSON mirip struktur dict dan list di Python, sehingga mudah dipahami oleh pemula.
Contoh data JSON:
{
"nama": "Ayu", "nilai": 85, "lulus": true
}
Di Python, bentuknya mirip dict:
data = {
"nama": "Ayu", "nilai": 85, "lulus": True
}
Untuk data yang lebih besar, pandas bisa membantu membaca CSV menjadi DataFrame. Dokumentasi resmi pandas.read_csv() menjelaskan bahwa fungsi ini membaca file CSV menjadi DataFrame dan juga mendukung pembacaan bertahap untuk file besar. (pandas.pydata.org)
Namun untuk pemula, jangan langsung semua hal memakai pandas. Gunakan urutan sehat:
pahami CSV dengan modul bawaan csv,
pahami list dan dict,
baru gunakan pandas untuk ringkasan data.
API adalah cara aplikasi berkomunikasi dengan aplikasi lain. Dalam konteks Python, API sering diakses melalui HTTP dan hasilnya biasanya berbentuk JSON.
Library requests memudahkan Python mengirim HTTP request. Dokumentasi resminya menyebut Requests sebagai library HTTP yang sederhana dan elegan untuk Python, dan mendukung Python 3.10+. (requests.readthedocs.io)
Install requests:
mkdir bab4-otomasi cd bab4-otomasi
python3 -m venv .venv source .venv/bin/activate pip install requests
Contoh mengambil data dari API publik:
nano ambil_api.py
Isi:
import requests
url = "https://httpbin.org/get"
response = requests.get(url, timeout=10)
print("Status:", response.status_code) print(response.json())
Jalankan:
python ambil_api.py
Parameter timeout=10 penting agar program tidak menggantung terlalu lama jika koneksi bermasalah.
Catatan kritis: API publik bisa berubah, lambat, atau tidak bisa diakses. Karena itu, selalu siapkan error handling.
AI sangat berguna untuk membuat script otomasi awal. Tetapi prompt harus spesifik agar hasilnya tidak terlalu kompleks.
Prompt contoh:
Buatkan script Python untuk membaca file CSV, menghitung total per kategori,
lalu menyimpan hasilnya ke file summary.csv. Gunakan kode sederhana untuk pemula.
Tambahkan komentar singkat.
Prompt yang lebih aman:
Saya pemula Python.
Buat script Python untuk membaca file transaksi.csv. Kolomnya: tanggal, kategori, jumlah.
Tugas:
hitung total jumlah per kategori,
simpan hasil ke summary.csv,
gunakan modul csv bawaan Python,
jangan gunakan library tambahan,
tambahkan komentar singkat,
berikan contoh isi transaksi.csv dan output summary.csv.
Prompt untuk review:
Periksa script ini.
Apakah ada resiko file tidak ditemukan? Apakah ada risiko nilai jumlah bukan angka? Berikan perbaikan minimal.
Jangan ubah seluruh struktur kode.
AI boleh membantu, tetapi pembaca harus tetap bertanya:
Apakah file input benar?
Apakah kolom CSV sesuai?
Apakah angka bisa dikonversi?
Apakah output bisa dicek manual?
Apakah script aman untuk data asli?
Referensi buku AI coding yang diunggah menekankan bahwa debugging, testing, dokumentasi, dan perbaikan kode adalah bagian penting dari penggunaan AI untuk pengembangan software, bukan sekadar menghasilkan kode cepat.
Bagian ini adalah inti bab. Semua contoh memakai CLI dan data lokal.
Hands-on 1 — Rename File Otomatis
Tujuan: mengganti nama banyak file agar rapi. Buat folder latihan:
mkdir rename-latihan cd rename-latihan
touch foto1.jpg foto2.jpg foto3.jpg ls
Buat script:
nano rename_file.py
Isi:
from pathlib import Path folder = Path(".")
nomor = 1
for file in folder.glob("*.jpg"):
nama_baru = f"foto_liburan_{nomor}.jpg" print(f"Rename: {file.name} -> {nama_baru}") file.rename(nama_baru)
nomor += 1
Jalankan:
python3 rename_file.py ls
Penting: script ini langsung mengganti nama file. Untuk data penting, buat mode simulasi dulu.
Versi simulasi:
from pathlib import Path folder = Path(".")
nomor = 1
for file in folder.glob("*.jpg"):
nama_baru = f"foto_liburan_{nomor}.jpg" print(f"SIMULASI: {file.name} akan menjadi
{nama_baru}")
nomor += 1
Golden rule otomasi file:
Jangan jalankan script massal pada data asli sebelum diuji di folder contoh.
Hands-on 2 — Membuat Laporan Ringkas dari CSV
Buat file CSV:
cd ..
mkdir laporan-csv cd laporan-csv nano transaksi.csv
Isi:
tanggal,kategori,jumlah 2026-01-01,makan,25000
2026-01-01,transport,15000 2026-01-02,makan,30000
2026-01-02,buku,75000
2026-01-03,transport,20000
Buat script:
nano laporan_csv.py
Isi:
import csv total_per_kategori = {}
with open("transaksi.csv", "r", encoding="utf-8") as file:
pembaca = csv.DictReader(file)
for baris in pembaca:
kategori = baris["kategori"] jumlah = int(baris["jumlah"])
if kategori not in total_per_kategori: total_per_kategori[kategori] = 0
total_per_kategori[kategori] += jumlah
with open("summary.csv", "w", encoding="utf-8", newline="") as file:
kolom = ["kategori", "total"]
penulis = csv.DictWriter(file, fieldnames=kolom) penulis.writeheader()
for kategori, total in total_per_kategori.items(): penulis.writerow({
"kategori": kategori, "total": total
})
print("Laporan selesai dibuat: summary.csv")
Jalankan:
python3 laporan_csv.py cat summary.csv
Output:
kategori,total makan,55000 transport,35000 buku,75000
csv.DictReader,
dict,
perulangan,
akumulasi total,
csv.DictWriter.
Prompt AI untuk belajar:
Jelaskan script laporan_csv.py baris demi baris.
Fokus pada csv.DictReader, dict, dan proses menghitung total per kategori.
Berikan 2 latihan pengembangan sederhana.
Hands-on 3 — Versi Ringkas dengan pandas
Untuk data tabel yang lebih besar, pandas sering lebih praktis. Dokumentasi
pandas menjelaskan bahwa groupby() digunakan untuk operasi
split-apply-combine, yaitu memecah data ke kelompok, melakukan operasi, lalu menggabungkan hasil. (pandas.pydata.org)
Install:
python3 -m venv .venv source .venv/bin/activate pip install pandas
Buat script:
nano laporan_pandas.py
Isi:
import pandas as pd
data = pd.read_csv("transaksi.csv") summary =
data.groupby("kategori")["jumlah"].sum().reset_index() summary.to_csv("summary_pandas.csv", index=False)
print("Laporan pandas selesai dibuat: summary_pandas.csv")
print(summary)
Jalankan:
python laporan_pandas.py
Kapan memakai csv bawaan?
data kecil,
ingin belajar dasar,
tidak ingin install library tambahan.
Kapan memakai pandas?
data tabel makin besar,
perlu filter, agregasi, sorting,
ingin membuat laporan lebih cepat.
Catatan: untuk pemula, pandas jangan dijadikan jalan pintas sebelum paham struktur list dan dict.
Hands-on 4 — Mengambil Data dari API Publik
Buat folder:
cd ..
mkdir api-latihan cd api-latihan
python3 -m venv .venv source .venv/bin/activate pip install requests
Buat script:
nano api_sederhana.py
Isi:
import json import requests
url = "https://httpbin.org/get"
try:
response = requests.get(url, timeout=10) response.raise_for_status()
data = response.json()
with open("hasil_api.json", "w", encoding="utf-8") as file: json.dump(data, file, indent=2)
print("Data API berhasil disimpan ke hasil_api.json")
except requests.exceptions.RequestException as error: print("Gagal mengambil data dari API.") print("Detail error:", error)
Jalankan:
python api_sederhana.py cat hasil_api.json
Dokumentasi Requests menjelaskan bahwa objek response dapat diproses sebagai teks atau JSON; penggunaan response.json() umum dipakai saat API mengembalikan data JSON. (requests.readthedocs.io)
Prompt AI:
Jelaskan script api_sederhana.py. Apa fungsi timeout?
Apa fungsi response.raise_for_status()?
Mengapa error handling penting saat mengambil data dari API?
Hands-on 5 — Script Backup Folder Sederhana
Tujuan: membuat backup folder kerja ke folder lain. Buat folder contoh:
cd ..
mkdir data-kerja
echo "catatan penting" > data-kerja/catatan.txt mkdir backup-latihan
Buat script:
nano backup_folder.py
Isi:
from pathlib import Path import shutil
from datetime import datetime
sumber = Path("data-kerja") folder_backup = Path("backup-latihan")
waktu = datetime.now().strftime("%Y%m%d-%H%M%S") tujuan = folder_backup / f"backup-{waktu}"
if not sumber.exists():
print("Folder sumber tidak ditemukan.") else:
shutil.copytree(sumber, tujuan) print(f"Backup selesai: {tujuan}")
Jalankan:
python3 backup_folder.py find backup-latihan -type f
Konsep yang dipakai:
Path,
shutil.copytree,
datetime,
pengecekan folder,
nama backup berbasis waktu.
Prompt AI untuk audit sederhana:
Review script backup_folder.py.
Apa risiko jika folder tujuan sudah ada? Apa risiko jika folder sumber sangat besar? Berikan perbaikan minimal untuk pemula.
Hands-on 6 — Meminta AI Memperbaiki Script yang Error
Buat script yang sengaja salah:
nano script_error.py
Isi:
import csv
with open("data_tidak_ada.csv", "r") as file: pembaca = csv.DictReader(file)
for baris in pembaca: print(baris["nama"])
Jalankan:
python3 script_error.py
Akan muncul error karena file tidak ada. Gunakan prompt:
Saya mendapat error Python saat menjalankan script ini: [paste error]
Ini kode saya:
[paste kode] Tolong:
jelaskan penyebab error,
tunjukkan baris bermasalah,
berikan perbaikan minimal,
jangan ubah seluruh kode,
tambahkan pesan error yang mudah dipahami pemula.
Perbaikan minimal:
import csv
from pathlib import Path
nama_file = Path("data_tidak_ada.csv") if not nama_file.exists():
print(f"File tidak ditemukan: {nama_file}") else:
with open(nama_file, "r", encoding="utf-8") as file: pembaca = csv.DictReader(file)
for baris in pembaca: print(baris["nama"])
Pelajaran penting: AI bukan hanya untuk membuat kode baru. AI sangat berguna untuk membaca error, menjelaskan penyebab, dan memberi perbaikan kecil.
Mini Proyek Bab 4 — Laporan Otomatis Pengeluaran
Gabungkan CSV, dict, file output, dan error handling. Buat file:
mkdir proyek-laporan cd proyek-laporan nano pengeluaran.csv
Isi:
tanggal,kategori,jumlah 2026-01-01,makan,25000
2026-01-01,transport,15000 2026-01-02,makan,30000
2026-01-02,buku,75000
2026-01-03,transport,20000
Buat script:
nano laporan_pengeluaran.py
Isi:
import csv
from pathlib import Path
file_input = Path("pengeluaran.csv") file_output = Path("laporan_pengeluaran.txt")
if not file_input.exists():
print("File pengeluaran.csv tidak ditemukan.") else:
total_per_kategori = {} total_semua = 0
with open(file_input, "r", encoding="utf-8") as file: pembaca = csv.DictReader(file)
for baris in pembaca: try:
kategori = baris["kategori"] jumlah = int(baris["jumlah"])
if kategori not in total_per_kategori: total_per_kategori[kategori] = 0
total_per_kategori[kategori] += jumlah
except ValueError:
print("Ada nilai jumlah yang bukan angka.
Baris dilewati.")
with open(file_output, "w", encoding="utf-8") as file: file.write("Laporan Pengeluaran\n") file.write("===================\n\n")
for kategori, total in total_per_kategori.items(): file.write(f"{kategori}: {total}\n")
file.write(f"\nTotal semua: {total_semua}\n") print(f"Laporan selesai dibuat: {file_output}")
Jalankan:
python3 laporan_pengeluaran.py cat laporan_pengeluaran.txt
Commit hasil:
git init git add .
git commit -m "buat laporan otomatis pengeluaran"
Checklist Akhir Bab 4
Kemampuan
Status
Bisa membuat script otomasi sederhana
☐
Bisa membaca dan menulis file teks
☐
Bisa mengganti nama file massal dengan aman
☐
Bisa membaca CSV dengan csv.DictReader
☐
Bisa membuat laporan ringkas dari CSV
☐
Bisa memahami JSON dasar
☐
Bisa mengambil data API dengan requests
☐
Bisa menyimpan hasil API ke file JSON
☐
Bisa membuat backup folder sederhana
☐
Bisa meminta AI menjelaskan dan memperbaiki error
☐
Bisa menyimpan hasil kerja dengan Git
☐
Ringkasan Bab
Bab ini menunjukkan bahwa Python bukan hanya bahasa latihan, tetapi alat kerja nyata. Dengan Python, pembaca dapat mengotomasi file, membaca CSV, membuat laporan, mengambil data API, menyimpan JSON, dan membuat backup sederhana. AI membantu mempercepat pembuatan script, tetapi hasilnya tetap harus diuji pada data contoh sebelum digunakan pada data asli.
Fokus bab ini adalah praktik langsung dari CLI. Pembaca belajar bahwa otomasi yang baik harus aman, bertahap, dan mudah dicek. Jangan mengejar script canggih jika script sederhana sudah menyelesaikan masalah.
Golden rule Bab 4:
Otomasi terbaik adalah otomasi yang kecil, jelas, aman diuji, dan benar-benar menghemat waktu.
BAB 5. Web Programming Cepat dengan Python dan FastAPI
Sebelum coding, pembaca perlu memahami istilah dasar.
Website adalah halaman web yang dibuka pengguna melalui browser. Isinya bisa berupa teks, gambar, formulir, tabel, atau halaman informasi.
Web app adalah aplikasi yang berjalan melalui web. Contohnya aplikasi Todo, dashboard, sistem input data, atau aplikasi administrasi sederhana.
API adalah pintu komunikasi antar aplikasi. API memungkinkan frontend, Android app, atau sistem lain meminta data ke backend.
Request adalah permintaan dari client ke server. Misalnya: “ambil daftar Todo” atau “simpan Todo baru”.
Response adalah jawaban dari server ke client. Biasanya berbentuk JSON.
JSON adalah format data ringan yang mudah dibaca manusia dan mudah diproses program. Contoh:
{
"id": 1,
"title": "Belajar FastAPI", "done": false
}
Backend adalah bagian aplikasi yang berjalan di server. Tugasnya mengatur logika, API, database, validasi, dan keamanan.
Frontend adalah bagian yang dilihat pengguna. Di buku ini, frontend akan dibahas lebih lanjut di Bab 6.
Pola sederhananya:
Browser / Android App
↓ request FastAPI Backend
↓ query SQLite Database
↑ data
↑ response JSON
Inti bab ini: pembaca membuat backend kecil, bukan sekadar memahami definisi.
FastAPI cocok untuk belajar web programming cepat karena:
berbasis Python,
struktur kode ringkas,
cocok untuk API modern,
mendukung validasi data,
otomatis membuat dokumentasi API,
mudah diuji dari browser dan CLI.
Dokumentasi resmi FastAPI menunjukkan langkah dasar: import FastAPI, membuat instance aplikasi, membuat path operation, mendefinisikan fungsi, lalu mengembalikan konten. (fastapi.tiangolo.com)
FastAPI juga membuat dokumentasi API interaktif berbasis OpenAPI. Ini membantu pemula karena endpoint bisa diuji langsung tanpa membuat frontend dulu. Dokumentasi FastAPI sendiri menyebut tutorialnya disusun bertahap dan dapat dipakai sebagai referensi ketika membutuhkan fitur tertentu. (fastapi.tiangolo.com)
Dalam buku ini, FastAPI dipakai untuk tujuan praktis:
membuat API Hello World,
membuat API Todo,
menyimpan data ke SQLite,
menguji endpoint,
membaca response JSON,
meminta AI membantu membuat endpoint baru,
debug error API.
Catatan kritis: FastAPI mempercepat pembuatan API, tetapi tidak otomatis membuat aplikasi aman. Validasi input, error handling, autentikasi, dan pembatasan akses tetap harus dipelajari bertahap.
Buat folder kerja dari CLI:
mkdir bab5-fastapi cd bab5-fastapi
python3 -m venv .venv source .venv/bin/activate
Install FastAPI dan server ASGI:
pip install fastapi uvicorn
Struktur proyek awal:
bab5-fastapi/
├── .venv/
└── main.py
Buat file:
nano main.py
Dalam FastAPI, beberapa istilah dasar yang perlu dipahami:
Istilah
Arti
main.py
file utama aplikasi
route
alamat endpoint API
model data
struktur data input/output
folder proyek
tempat file aplikasi disusun
virtual environment
lingkungan Python terpisah untuk proyek
Untuk buku 100 halaman, struktur jangan dibuat terlalu kompleks. Gunakan satu file dulu agar pemula paham alur kerja. Pemisahan folder bisa dilakukan di proyek lanjutan.
Routing menentukan alamat API dan operasi yang dijalankan. Empat operasi dasar yang dipakai dalam bab ini:
Method
Fungsi Praktis
GET
membaca data
POST
menambah data
PUT
mengubah data
DELETE
menghapus data
Buat API pertama:
from fastapi import FastAPI app = FastAPI() @app.get("/")
def home():
return {"message": "Halo, FastAPI siap dipakai"}
Jalankan:
uvicorn main:app --reload
Buka dari CLI lain:
Output:
{"message":"Halo, FastAPI siap dipakai"}
Penjelasan singkat:
from fastapi import FastAPI mengambil class utama FastAPI.
app = FastAPI() membuat aplikasi.
@app.get("/") membuat route untuk method GET.
return {"message": ...} mengembalikan JSON.
Golden rule awal API:
Jika endpoint belum bisa dites dengan curl, jangan buru-buru membuat frontend.
SQLite cocok untuk latihan karena ringan, tidak perlu server database terpisah, dan cukup untuk proyek kecil. Situs resmi SQLite menjelaskan SQLite sebagai library C kecil, cepat, mandiri, andal, dan penuh fitur untuk SQL database engine. (sqlite.org)
SQLite juga bersifat serverless dan zero-configuration, sehingga cocok untuk pemula yang ingin fokus memahami alur API dan data. (sqlite.org)
Python sudah memiliki modul bawaan sqlite3. Dokumentasi Python menjelaskan bahwa modul sqlite3 menyediakan antarmuka DB-API 2.0 untuk database SQLite, termasuk tutorial dan referensi penggunaan. (Python documentation)
Kita akan membuat database Todo sederhana:
Todo:
id
title
done
Buat file baru:
nano main.py
Isi versi SQLite:
import sqlite3
from fastapi import FastAPI from pydantic import BaseModel
app = FastAPI() DB_NAME = "todo.db"
class TodoInput(BaseModel): title: str
def get_connection():
return sqlite3.connect(DB_NAME)
def init_db():
conn = get_connection() cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS todos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
done INTEGER NOT NULL DEFAULT 0
) """)
conn.commit() conn.close()
init_db()
@app.get("/") def home():
return {"message": "Todo API siap dipakai"}
@app.get("/todos") def list_todos():
conn = get_connection() cursor = conn.cursor()
cursor.execute("SELECT id, title, done FROM todos") rows = cursor.fetchall()
conn.close() todos = []
for row in rows: todos.append({
"id": row[0],
"title": row[1],
"done": bool(row[2])
})
return todos
@app.post("/todos")
def create_todo(todo: TodoInput): conn = get_connection() cursor = conn.cursor()
cursor.execute(
"INSERT INTO todos (title, done) VALUES (?, ?)", (todo.title, 0)
)
conn.commit()
todo_id = cursor.lastrowid conn.close()
return {
"id": todo_id, "title": todo.title, "done": False
}
@app.put("/todos/{todo_id}") def update_todo(todo_id: int):
conn = get_connection() cursor = conn.cursor()
cursor.execute(
"UPDATE todos SET done = 1 WHERE id = ?", (todo_id,)
)
conn.commit() conn.close()
return {"message": "Todo ditandai selesai", "id": todo_id}
@app.delete("/todos/{todo_id}") def delete_todo(todo_id: int):
conn = get_connection() cursor = conn.cursor()
cursor.execute(
"DELETE FROM todos WHERE id = ?",
(todo_id,)
)
conn.commit() conn.close()
return {"message": "Todo dihapus", "id": todo_id}
Jalankan:
uvicorn main:app --reload
Script ini masih sederhana. Untuk produksi, perlu validasi lebih kuat, pengecekan data tidak ditemukan, autentikasi, logging, dan struktur proyek yang lebih rapi. Tetapi untuk pemula, versi ini cukup untuk memahami alur API dan database.
FastAPI membuat dokumentasi interaktif otomatis. Setelah server jalan, endpoint bisa diuji melalui:
atau dokumentasi alternatif:
Namun dalam buku ini, pembaca juga harus bisa menguji dari CLI menggunakan curl.
Test GET Home
Test Tambah Todo
curl -X POST http://127.0.0.1:8000/todos \
-H "Content-Type: application/json" \
-d '{"title":"Belajar FastAPI"}'
Test Lihat Todo
curl http://127.0.0.1:8000/todos
Test Update Todo
curl -X PUT http://127.0.0.1:8000/todos/1
Test Hapus Todo
curl -X DELETE http://127.0.0.1:8000/todos/1
Catatan penting: testing manual bukan formalitas. Setiap endpoint harus diuji dengan input benar, input kosong, ID tidak ada, dan data yang tidak sesuai.
Bagian ini adalah inti Bab 5. Semua latihan memakai CLI.
Hands-on 1 — API Hello World
Buat proyek:
mkdir fastapi-hello cd fastapi-hello python3 -m venv .venv
source .venv/bin/activate pip install fastapi uvicorn
Buat file:
nano main.py
Isi:
from fastapi import FastAPI app = FastAPI() @app.get("/")
def home():
return {"message": "Halo dari FastAPI"}
Jalankan:
uvicorn main:app --reload
Test:
Jika keluar JSON, API pertama berhasil.
Hands-on 2 — API Todo List Tanpa Database
Untuk memahami konsep endpoint, mulai dari data di memori.
mkdir fastapi-todo-memory cd fastapi-todo-memory python3 -m venv .venv source .venv/bin/activate pip install fastapi uvicorn nano main.py
Isi:
from fastapi import FastAPI from pydantic import BaseModel
app = FastAPI() todos = []
class TodoInput(BaseModel): title: str
@app.get("/todos") def list_todos():
return todos
@app.post("/todos")
def create_todo(todo: TodoInput): data = {
"id": len(todos) + 1, "title": todo.title, "done": False
Hands-on 3 — API Todo + SQLite
Buat proyek:
mkdir fastapi-todo-sqlite cd fastapi-todo-sqlite python3 -m venv .venv source .venv/bin/activate pip install fastapi uvicorn nano main.py
Gunakan kode Todo + SQLite dari bagian 5.5. Jalankan:
uvicorn main:app --reload
Test tambah data:
curl -X POST http://127.0.0.1:8000/todos \
-H "Content-Type: application/json" \
-d '{"title":"Simpan Todo ke SQLite"}'
Lihat data:
curl http://127.0.0.1:8000/todos
Cek file database:
ls
Seharusnya muncul:
main.py todo.db
Hands-on 4 — Prompt AI untuk Membuat Endpoint Baru
Contoh kebutuhan: menambahkan endpoint untuk mencari Todo berdasarkan ID. Gunakan prompt:
Saya punya aplikasi FastAPI Todo dengan SQLite. Tolong tambahkan endpoint GET /todos/{todo_id} untuk mengambil satu Todo berdasarkan ID.
Syarat:
gunakan sqlite3 bawaan Python,
jangan ubah struktur besar,
jika ID tidak ditemukan, kembalikan pesan error sederhana,
jelaskan perubahan singkat untuk pemula.
Contoh kode yang bisa ditambahkan: @app.get("/todos/{todo_id}") def get_todo(todo_id: int):
conn = get_connection() cursor = conn.cursor()
Hands-on 5 — Debug Error API
Buat error sengaja:
@app.get("/error") def error_demo():
return {"hasil": 10 / 0}
Jalankan:
curl http://127.0.0.1:8000/error Server akan menampilkan error ZeroDivisionError. Gunakan prompt:
Saya mendapat error FastAPI:
[paste traceback] Tolong jelaskan:
jenis error,
baris yang salah,
penyebab,
perbaikan minimal,
cara test ulang dengan curl.
Perbaikan sederhana:
@app.get("/error") def error_demo():
pembagi = 0
if pembagi == 0:
return {"error": "Pembagi tidak boleh nol"} return {"hasil": 10 / pembagi}
Pelajaran penting: API harus siap menghadapi input dan kondisi buruk, bukan
hanya kondisi ideal.
Mini Proyek Bab 5 — Todo API Sederhana
Target akhir Bab 5:
FastAPI + SQLite + endpoint CRUD sederhana + test curl Checklist endpoint:
Endpoint
Method
Fungsi
Status
/
GET
cek API hidup
☐
/todos
GET
lihat semua Todo
☐
/todos
POST
tambah Todo
☐
/todos/{id}
GET
lihat satu Todo
☐
/todos/{id}
PUT
tandai selesai
☐
/todos/{id}
DELETE
hapus Todo
☐
Commit hasil kerja:
git init git add .
git commit -m "buat Todo API dengan FastAPI dan SQLite"
Checklist Akhir Bab 5
Kemampuan
Status
Bisa menjelaskan website, web app, API, request, response
☐
Bisa membuat FastAPI Hello World
☐
Bisa menjalankan server dengan uvicorn
☐
Bisa menguji API dengan curl
☐
Bisa membuat endpoint GET
☐
Bisa membuat endpoint POST
☐
Bisa membuat endpoint PUT
☐
Bisa membuat endpoint DELETE
☐
Bisa menyimpan Todo ke SQLite
☐
Bisa membaca response JSON
☐
Bisa meminta AI membuat endpoint baru
☐
Bisa meminta AI menjelaskan error API
☐
Bisa commit proyek API ke Git
☐
Ringkasan Bab
Bab ini menunjukkan bahwa web programming tidak harus dimulai dari sistem besar. Dengan Python dan FastAPI, pembaca bisa membuat backend API sederhana dalam waktu singkat. FastAPI membantu mempercepat pembuatan endpoint, validasi input dasar, dan dokumentasi interaktif. SQLite membantu menyimpan data tanpa setup database yang rumit.
Yang paling penting adalah pola kerja: buat endpoint kecil, jalankan server, test dengan curl, baca JSON, debug error, lalu commit. AI boleh membantu membuat endpoint baru, tetapi pembaca tetap harus membaca kode, menjalankan test, dan memahami alurnya.
Golden rule Bab 5:
API yang baik bukan yang terlihat canggih, tetapi yang bisa diuji, dipahami, dan menyimpan data dengan benar.
BAB 6. Web Frontend Sederhana untuk Pemula
Frontend web minimal membutuhkan tiga komponen.
HTML dipakai untuk struktur halaman: judul, form, tombol, input, tabel, dan daftar.
CSS dipakai untuk tampilan: warna, jarak, ukuran, layout, dan kerapian.
JavaScript dipakai untuk interaksi: membaca input, menekan tombol, memanggil API, dan menampilkan data.
MDN Web Docs layak dijadikan rujukan utama karena menyediakan dokumentasi teknologi web terbuka, termasuk HTML, CSS, JavaScript, API browser, dan materi belajar web. (MDN Web Docs)
Untuk bab ini, pembaca cukup memahami pola dasar berikut:
HTML = struktur CSS = tampilan
JavaScript = interaksi FastAPI = backend
SQLite = penyimpanan data
Contoh HTML sangat sederhana:
<h1>Aplikasi Todo</h1>
<input id="todoInput" placeholder="Tulis todo baru">
<button>Tambah</button>
Contoh CSS sangat sederhana:
body {
font-family: sans-serif; margin: 40px;
}
Contoh JavaScript sangat sederhana:
console.log("Frontend siap");
Catatan penting: jangan mulai dari framework besar. Untuk pemula, HTML, CSS, dan JavaScript murni lebih baik agar hubungan frontend–backend terlihat jelas.
Frontend bertemu backend melalui HTTP request. Pada Bab 5, backend FastAPI sudah menyediakan endpoint seperti:
GET /todos
POST /todos
PUT /todos/{id} DELETE /todos/{id}
Frontend akan memanggil endpoint tersebut menggunakan fetch(). MDN menjelaskan bahwa Fetch API menyediakan antarmuka JavaScript untuk membuat HTTP request dan memproses response dari server. (MDN Web Docs)
Pola sederhananya:
User isi form
↓
JavaScript baca input
↓
fetch() kirim request ke FastAPI
↓
FastAPI proses data
↓
FastAPI kirim response JSON
↓
JavaScript tampilkan data ke halaman
Contoh fetch() untuk mengambil data:
const response = await fetch("http://127.0.0.1:8000/todos"); const data = await response.json();
console.log(data);
MDN juga menjelaskan bahwa window.fetch() mengembalikan Promise yang akan terpenuhi ketika response tersedia. (MDN Web Docs)
Masalah yang sering muncul saat frontend dan backend berbeda alamat adalah CORS. FastAPI menjelaskan bahwa Cross-Origin Resource Sharing terjadi ketika frontend di browser berkomunikasi dengan backend pada origin berbeda. (FastAPI)
Untuk latihan lokal, tambahkan CORS di backend FastAPI:
from fastapi.middleware.cors import CORSMiddleware app.add_middleware(
CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"],
)
Catatan kritis: allow_origins=["*"] boleh untuk latihan lokal. Untuk produksi, asal akses harus dibatasi.
AI dapat membantu membuat halaman awal lebih cepat, tetapi prompt harus membatasi kompleksitas. Jangan minta UI besar. Minta halaman kecil, mudah dibaca, dan tanpa library tambahan.
Prompt contoh:
Buatkan halaman HTML sederhana untuk aplikasi Todo. Ada form input, tombol tambah, dan tabel daftar todo. Gunakan HTML, CSS, dan JavaScript murni.
Kode harus mudah dibaca pemula.
Prompt yang lebih kuat:
Saya pemula web frontend.
Buatkan satu file index.html untuk aplikasi Todo sederhana. Syarat:
gunakan HTML, CSS, dan JavaScript murni
ada input todo
ada tombol tambah
ada tabel daftar todo
ambil data dari API FastAPI di http://127.0.0.1:8000/todos
gunakan fetch()
tambahkan komentar singkat
jangan gunakan framework
Prompt review:
Review kode index.html berikut. Apakah fetch() sudah benar?
Apakah ada kemungkinan error jika API mati? Berikan perbaikan minimal.
Jangan ubah seluruh struktur kode.
Referensi buku yang diunggah juga menekankan pola penting: AI membantu mempercepat pembuatan kode, tetapi developer tetap harus melakukan debugging, testing, dokumentasi, dan validasi hasil.
Bagian ini adalah inti Bab 6. Semua contoh memakai CLI.
Hands-on 1 — Siapkan Backend FastAPI
Gunakan backend Todo dari Bab 5. Jika belum ada, buat ulang secara ringkas.
mkdir bab6-frontend cd bab6-frontend
mkdir backend frontend cd backend
python3 -m venv .venv source .venv/bin/activate pip install fastapi uvicorn nano main.py
Isi main.py:
import sqlite3
from fastapi import FastAPI from pydantic import BaseModel
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI() DB_NAME = "todo.db"
app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"],
)
class TodoInput(BaseModel): title: str
def get_connection():
return sqlite3.connect(DB_NAME)
def init_db():
conn = get_connection() cursor = conn.cursor() cursor.execute("""
CREATE TABLE IF NOT EXISTS todos (
id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL,
done INTEGER NOT NULL DEFAULT 0
) """)
conn.commit() conn.close()
init_db()
@app.get("/") def home():
return {"message": "Todo API siap"}
@app.get("/todos") def list_todos():
conn = get_connection() cursor = conn.cursor()
cursor.execute("SELECT id, title, done FROM todos") rows = cursor.fetchall()
conn.close()
return [
{"id": row[0], "title": row[1], "done": bool(row[2])}
for row in rows
]
@app.post("/todos")
def create_todo(todo: TodoInput): conn = get_connection() cursor = conn.cursor() cursor.execute(
"INSERT INTO todos (title, done) VALUES (?, ?)", (todo.title, 0)
)
conn.commit()
todo_id = cursor.lastrowid conn.close()
return {"id": todo_id, "title": todo.title, "done": False}
Jalankan backend:
uvicorn main:app --reload
Test dari terminal lain:
curl http://127.0.0.1:8000/todos
Hands-on 2 — Membuat Halaman Todo
Masuk ke folder frontend:
cd ../frontend nano index.html
Isi:
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Aplikasi Todo</title>
<style> body {
font-family: sans-serif; margin: 40px;
max-width: 700px;
}
input { padding: 8px; width: 70%;
}
button {
padding: 8px 12px; cursor: pointer;
}
table {
border-collapse: collapse; width: 100%;
margin-top: 20px;
}
th, td {
border: 1px solid #ccc; padding: 8px;
text-align: left;
}
.error {
color: darkred; margin-top: 10px;
}
</style>
</head>
<body>
<h1>Aplikasi Todo</h1>
<input id="todoInput" placeholder="Tulis todo baru">
<button onclick="tambahTodo()">Tambah</button>
<p id="pesan" class="error"></p>
<table>
<thead>
<tr>
<th>ID</th>
<th>Todo</th>
<th>Status</th>
</tr>
</thead>
<tbody id="todoTable"></tbody>
</table>
<script>
const API_URL = "http://127.0.0.1:8000/todos";
async function ambilTodos() { try {
const response = await fetch(API_URL); const data = await response.json();
const table = document.getElementById("todoTable");
table.innerHTML = "";
data.forEach(todo => {
const row = document.createElement("tr");
row.innerHTML = `
<td>${todo.id}</td>
<td>${todo.title}</td>
<td>${todo.done ? "Selesai" : "Belum"}</td>
`;
table.appendChild(row);
});
} catch (error) { document.getElementById("pesan").textContent =
"Gagal mengambil data dari API."; console.log(error);
}
}
async function tambahTodo() { const input =
document.getElementById("todoInput"); const title = input.value.trim();
if (title === "") { document.getElementById("pesan").textContent =
"Todo tidak boleh kosong."; return;
}
try {
await fetch(API_URL, { method: "POST", headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({ title: title })
});
Hands-on 3 — Jalankan Frontend dari CLI
Jangan buka file langsung dengan klik ganda. Jalankan server lokal sederhana:
python3 -m http.server 8080
Buka di browser:
Coba:
isi Todo baru,
klik Tambah,
lihat tabel berubah,
refresh halaman,
pastikan data tetap ada karena tersimpan di SQLite.
Hands-on 4 — Test API dari CLI
Sebelum menyalahkan frontend, cek backend dengan curl. Tambah Todo:
curl -X POST http://127.0.0.1:8000/todos \
-H "Content-Type: application/json" \
-d '{"title":"Belajar frontend"}'
Lihat Todo:
curl http://127.0.0.1:8000/todos
Jika curl berhasil tetapi frontend gagal, masalah kemungkinan ada di JavaScript, CORS, atau URL API.
Hands-on 5 — Memperbaiki Tampilan dengan CSS
Tambahkan sedikit perapian tampilan:
h1 {
border-bottom: 2px solid #222; padding-bottom: 10px;
}
tr:nth-child(even) { background: #f2f2f2;
}
Catatan: jangan terlalu lama mempercantik tampilan. Pada bab ini, tujuan utama adalah menghubungkan frontend dan backend.
Hands-on 6 — Debug Error fetch()
Error yang sering muncul:
Kemungkinan penyebab: Backend belum jalan
Solusi: Jalankan
uvicorn main:app --reload
Kemungkinan penyebab: URL API salah
Solusi: Cek
API_URL
Kemungkinan penyebab: Backend beda origin dan belum izinkan CORS
Solusi: Tambahkan
CORSMiddleware
Kemungkinan penyebab: Response bukan JSON
Solusi: Cek endpoint dengan
curl
Prompt AI untuk debugging:
Saya mendapat error fetch() di browser. Ini pesan error:
[paste error]
Ini kode JavaScript saya:
[paste kode]
Backend FastAPI berjalan di http://127.0.0.1:8000
Tolong:
jelaskan penyebab kemungkinan,
berikan urutan pengecekan,
berikan perbaikan minimal,
jangan ubah seluruh kode.
Urutan debug yang sehat:
Cek backend hidup → cek endpoint dengan curl → cek CORS
→ cek API_URL → cek console browser
Untuk pemula, JavaScript kadang terasa terlalu cepat menjadi rumit. Salah satu alternatif ringan adalah HTMX. Dokumentasi HTMX menjelaskan bahwa HTMX memungkinkan penggunaan fitur browser modern langsung dari HTML, bukan banyak menulis JavaScript. (htmx.org)
HTMX dapat mengakses AJAX, transisi CSS, WebSocket, dan Server-Sent Events memakai atribut HTML. Situs resminya juga menyebut HTMX kecil, dependency-free, dan dirancang untuk membuat antarmuka modern dengan kekuatan hypertext. (htmx.org)
Contoh sederhana:
<button hx-get="http://127.0.0.1:8000/todos" hx-target="#hasil">
Ambil Todo
</button>
<pre id="hasil"></pre>
Namun untuk buku ini, HTMX cukup dikenalkan sebagai alternatif. Latihan utama tetap memakai HTML, CSS, JavaScript murni, dan fetch(), karena pembaca perlu memahami alur dasar web modern.
Kapan HTMX cocok?
ingin mengurangi JavaScript,
membuat UI interaktif sederhana,
backend lebih dominan,
pemula ingin cepat melihat hasil.
Kapan JavaScript murni tetap penting?
ingin memahami fetch(),
ingin membangun frontend yang lebih fleksibel,
ingin siap masuk ke Android/web client berikutnya,
ingin paham cara membaca response JSON.
Mini Proyek Bab 6 — Todo Web Client
Target akhir Bab 6:
Frontend HTML + CSS + JavaScript
↓ fetch() FastAPI Todo API
↓
SQLite
Checklist:
Komponen
Status
Backend FastAPI berjalan
☐
Endpoint /todos bisa dites dengan curl
☐
Frontend berjalan di python3 -m http.server
☐
Form input Todo tersedia
☐
Tombol Tambah bekerja
☐
Data muncul di tabel
☐
Error kosong ditangani
☐
Error fetch bisa dibaca
☐
Kode disimpan dengan Git
☐
Commit hasil kerja:
cd .. git init
git add .
git commit -m "buat frontend Todo terhubung ke FastAPI"
Ringkasan Bab
Bab ini menunjukkan hubungan nyata antara frontend dan backend. HTML menyusun halaman, CSS merapikan tampilan, JavaScript memanggil API dengan fetch(), FastAPI memproses request, SQLite menyimpan data, lalu response JSON ditampilkan kembali ke halaman.
Yang paling penting adalah pola kerja: buat halaman kecil, jalankan backend, test API dengan curl, jalankan frontend, debug fetch(), lalu commit. Jangan mulai dari framework besar sebelum memahami alur dasar ini.
Golden rule Bab 6:
Frontend yang baik bukan yang paling mewah, tetapi yang jelas alurnya: input pengguna → request API → response JSON → tampilan berubah.
BAB 7. Android Programming dengan AI
Android app adalah aplikasi yang berjalan di perangkat Android. Aplikasi dapat berupa catatan, Todo, kalkulator, dashboard, pemutar media, aplikasi IoT, atau client untuk API backend.
Beberapa istilah dasar yang perlu dipahami:
Istilah
Arti Praktis
Activity
layar/entry point utama aplikasi
UI
tampilan yang dilihat pengguna
State
data yang berubah dan mempengaruhi tampilan
Build
proses mengubah kode menjadi aplikasi yang bisa dijalankan
Emulator
perangkat Android virtual untuk testing
APK
file paket aplikasi Android
Dalam pengembangan modern, UI Android banyak dibuat dengan Jetpack Compose. Dokumentasi resmi Android menjelaskan Jetpack Compose sebagai toolkit modern untuk membangun UI Android dan menyederhanakan pengembangan aplikasi yang dapat menyesuaikan berbagai ukuran layar. (Android Developers)
Untuk pemula, konsep yang paling penting adalah state. Jika data berubah, tampilan harus ikut berubah. Dokumentasi Compose menjelaskan bahwa Compose membantu developer lebih eksplisit dalam menyimpan dan memakai state pada aplikasi Android. (Android Developers)
Contoh sederhana:
User mengetik Todo
↓
State berubah
↓
UI menampilkan Todo baru
Catatan kritis: jangan mulai dengan aplikasi besar. Mulai dari satu layar, satu input, satu tombol, dan satu daftar.
Kotlin dipakai luas dalam ekosistem Android modern. Dokumentasi Kotlin menjelaskan bahwa Jetpack Compose adalah toolkit modern yang direkomendasikan untuk membangun UI native Android dalam Kotlin. (Kotlin)
Untuk bab ini, pembaca cukup mengenal lima hal:
variabel,
fungsi,
class sederhana,
list,
lambda sederhana.
Jetpack Compose
Jetpack Compose adalah cara modern membangun UI Android dengan kode Kotlin. Dokumentasi Android menyebut Compose sebagai toolkit modern yang menyederhanakan dan mempercepat pengembangan UI dengan lebih sedikit kode dan API Kotlin yang intuitif. (Android Developers)
Perbedaan cara pikir yang penting:
Cara lama: menyusun tampilan terpisah dari logika Compose: tampilan ditulis sebagai fungsi Kotlin
Dalam Compose, UI dibuat dengan fungsi yang disebut composable. Contoh:
@Composable fun Halo() {
Text("Halo Android")
}
Compose bersifat declarative. Artinya, programmer mendeskripsikan tampilan berdasarkan data. Jika data berubah, Compose memperbarui tampilan. Dokumentasi Compose Basics menjelaskan bahwa Compose menggabungkan model pemrograman reaktif dengan ringkasnya Kotlin, dan ketika data berubah, UI diperbarui otomatis. (Android Developers)
Untuk pemula, cukup ingat:
@Composable = fungsi UI,
Text() = menampilkan teks,
Button() = tombol,
TextField() = input,
Column() = susun vertikal,
Row() = susun horizontal,
LazyColumn() = daftar panjang,
remember dan mutableStateOf = menyimpan state sederhana.
Komponen UI Dasar
Text
Fungsi: menampilkan teks
Fungsi: tombol aksi
TextField
Fungsi: input teks
Column
Fungsi: menyusun komponen vertikal
Row
Fungsi: menyusun komponen horizontal
LazyColumn
Fungsi: menampilkan daftar
Contoh sederhana:
@Composable
fun LayarSederhana() { Column {
Text("Aplikasi Todo") Button(onClick = {
println("Tombol ditekan")
Aplikasi yang cocok untuk pemula adalah catatan atau Todo lokal. Fitur minimal:
input data,
tombol tambah,
tampilkan list,
simpan sementara di memori aplikasi.
Versi awal tidak perlu database. Targetnya adalah memahami hubungan:
Input → State → List → UI berubah
Untuk aplikasi Todo lokal, data cukup disimpan dalam mutableStateListOf. Contoh pola data:
data class Todo(
val title: String,
val done: Boolean = false
)
Pola UI:
TextField untuk input Button untuk tambah LazyColumn untuk daftar
Catatan kritis: jangan langsung menambahkan login, database, notifikasi, cloud, atau sinkronisasi. Untuk pemula, terlalu banyak fitur akan membuat fokus hilang.
AI sangat membantu saat belajar Android karena error build sering panjang dan membingungkan. Tetapi prompt harus jelas dan bertahap.
Prompt dasar:
Saya pemula Android.
Buatkan contoh aplikasi Todo sederhana dengan Kotlin dan Jetpack Compose.
Gunakan satu file MainActivity dulu. Jelaskan bagian UI, state, dan event button.
Prompt yang lebih baik:
Saya pemula Android dan Kotlin.
Buatkan aplikasi Todo lokal dengan Jetpack Compose. Syarat:
gunakan satu file MainActivity.kt
ada TextField untuk input
ada Button untuk tambah Todo
tampilkan daftar Todo dengan LazyColumn
gunakan mutableStateListOf
jangan gunakan database dulu
jelaskan bagian state dan onClick
kode harus mudah dibaca pemula
Saya mendapat error build Android berikut: [paste error]
Ini potongan kode saya:
[paste kode] Tolong:
jelaskan arti error,
tunjukkan kemungkinan baris penyebab,
berikan perbaikan minimal,
jangan ubah seluruh struktur aplikasi,
jelaskan dengan bahasa pemula.
Prompt untuk merapikan UI:
Rapikan UI Compose berikut agar lebih mudah dibaca. Gunakan Column, Row, padding sederhana, dan LazyColumn. Jangan menambahkan fitur baru.
Jelaskan perubahan singkat.
Referensi buku AI coding yang diunggah menekankan bahwa AI berguna untuk menjelaskan error, membuat contoh kode, membuat dokumentasi, dan membantu debugging, tetapi developer tetap harus memahami dan menguji kode.
Bagian ini adalah inti Bab 7. Karena pembuatan proyek Android biasanya dilakukan dengan tool grafis, bagian CLI difokuskan pada build, cek file, dan menghasilkan APK dari terminal.
Hands-on 1 — Membuat Project Android
Buat project Android dengan template Empty Activity dan pilih:
Language: Kotlin UI: Jetpack Compose
Minimum SDK: sesuai kebutuhan latihan
Nama project:
TodoComposePemula
Setelah project dibuat, buka terminal di folder project. Cek struktur:
ls
Biasanya ada file seperti:
app/ gradle/
settings.gradle.kts build.gradle.kts gradlew
Cek apakah build tool bisa dijalankan:
./gradlew tasks
Jika perintah ini menampilkan daftar task, project siap di build.
Hands-on 2 — Membuat Tampilan Sederhana
Buka file:
nano app/src/main/java/com/example/todocomposepemula/MainActi vity.kt
Struktur paket bisa berbeda. Sesuaikan dengan folder project masing-masing. Isi contoh sederhana:
package com.example.todocomposepemula
import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material3.Text import androidx.compose.runtime.Composable
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)
setContent {
AplikasiTodo()
}
}
}
@Composable
fun AplikasiTodo() {
Text("Halo, ini aplikasi Todo pertama.")
}
Build dari CLI:
./gradlew assembleDebug
Jika berhasil, APK debug biasanya berada di:
app/build/outputs/apk/debug/
Cek:
ls app/build/outputs/apk/debug/
Hands-on 3 — Menambahkan Input dan Tombol
Ubah MainActivity.kt menjadi versi berikut:
package com.example.todocomposepemula import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.Button
import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)
setContent {
AplikasiTodo()
}
}
}
@Composable
fun AplikasiTodo() {
var teks by remember { mutableStateOf("") }
Column(
modifier = Modifier.padding(16.dp)
) {
Text("Aplikasi Todo")
OutlinedTextField( value = teks,
onValueChange = { teks = it }, label = { Text("Todo baru") }, modifier = Modifier.fillMaxWidth()
)
onClick = {
println("Todo: $teks")
}
) {
Text("Tambah")
}
}
}
Build:
./gradlew assembleDebug
Pelajaran penting:
teks adalah state,
OutlinedTextField membaca dan mengubah state,
Button menjalankan aksi saat diklik,
println() hanya untuk cek awal.
Hands-on 4 — Menampilkan List Todo
Ubah file menjadi aplikasi Todo lokal sederhana:
package com.example.todocomposepemula import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Button
import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp
data class Todo(
val title: String
)
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)
setContent {
AplikasiTodo()
}
}
}
@Composable
fun AplikasiTodo() {
var teks by remember { mutableStateOf("") }
val todos = remember { mutableStateListOf<Todo>() }
Column(
modifier = Modifier.padding(16.dp)
) {
Text("Aplikasi Todo")
OutlinedTextField( value = teks,
onValueChange = { teks = it }, label = { Text("Todo baru") }, modifier = Modifier.fillMaxWidth()
)
Button(
onClick = {
if (teks.isNotBlank()) { todos.add(Todo(teks)) teks = ""
}
}
) {
Text("Tambah")
}
Hands-on 5 — Meminta AI Menjelaskan Error Build
Contoh error yang sering muncul:
Unresolved reference: LazyColumn
Prompt:
Saya mendapat error Android:
Unresolved reference: LazyColumn Ini potongan import dan kode saya:
[paste kode]
Tolong jelaskan:
arti error,
import apa yang mungkin kurang,
perbaikan minimal,
jangan ubah seluruh file.
Kemungkinan solusi: import belum lengkap atau dependency Compose belum sesuai. Untuk pemula, mulai dari cek import:
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items
Jika error masih muncul, cek konfigurasi Compose di project.
Urutan debug yang sehat:
Baca error terakhir → cek nama komponen → cek import → cek dependency → build ulang
Hands-on 6 — Meminta AI Merapikan UI
Prompt:
Rapikan UI Compose berikut agar lebih enak dibaca pemula.
Syarat:
jangan tambah fitur baru
gunakan padding sederhana
beri jarak antar komponen
gunakan nama fungsi yang jelas
jelaskan perubahan singkat
Contoh perbaikan kecil: Column(
modifier = Modifier
.padding(16.dp)
) {
Text("Aplikasi Todo")
// komponen lain
}
Untuk bab ini, cukup rapi dan bisa dibaca. Jangan membuat UI terlalu kompleks.
Mini Proyek Bab 7 — Todo Android Lokal
Target akhir Bab 7:
Android Kotlin + Jetpack Compose
↓ TextField
↓
Button
↓
mutableStateListOf
↓ LazyColumn
Checklist:
Komponen
Status
Project Android berhasil dibuat
☐
MainActivity.kt bisa dibuka
☐
Aplikasi bisa menampilkan Text
☐
TextField bisa menerima input
☐
Button bisa menjalankan aksi
☐
Todo kosong tidak ditambahkan
☐
Todo tampil di LazyColumn
☐
Build debug berhasil
☐
APK debug ditemukan
☐
Error build bisa dibaca dan dijelaskan AI
☐
Commit hasil kerja:
git init git add .
git commit -m "buat aplikasi Todo Android lokal dengan Compose"
Ringkasan Bab
Bab ini mengenalkan Android programming secara cepat dan praktis. Pembaca belajar konsep dasar Android, Kotlin dasar, Jetpack Compose, state, komponen UI, dan pembuatan aplikasi Todo lokal. AI dipakai sebagai tutor dan asisten debugging, bukan pengganti pemahaman.
Yang paling penting adalah pola kerja: buat project kecil, edit MainActivity, build dari CLI, baca error, minta AI menjelaskan, perbaiki minimal, lalu commit. Dengan pola ini, pembaca tidak hanya menyalin kode Android, tetapi mulai memahami hubungan antara UI, state, dan aksi pengguna.
Golden rule Bab 7:
Aplikasi Android pertama tidak perlu besar; yang penting input masuk, state berubah, UI tampil, build berhasil, dan kode dipahami.
BAB 8. Proyek Akhir: Aplikasi Todo AI-Ready
Proyek akhir ini membuat aplikasi Todo AI-Ready. Disebut AI-Ready bukan karena aplikasinya harus langsung memakai model AI, tetapi karena cara kerjanya sudah siap dibantu AI:
kode disusun rapi,
API jelas,
data tersimpan,
frontend bisa memanggil backend,
Android client sederhana bisa membaca data,
README tersedia,
error utama sudah diuji,
semua perubahan disimpan di Git.
Target minimal:
Frontend Web + Backend FastAPI + SQLite + Android Client sederhana
FastAPI cocok dipakai karena mendukung pembuatan API Python modern berbasis type hints dan menyediakan dokumentasi interaktif otomatis untuk mencoba endpoint. (FastAPI)
Output akhir bab: pembaca punya proyek kecil yang bisa ditunjukkan sebagai portofolio awal.
Arsitektur proyek:
Browser / Android App
↓ FastAPI Backend
↓ SQLite Database
Penjelasan singkat:
Browser menjalankan frontend HTML, CSS, dan JavaScript.
Android App menjadi client sederhana yang membaca data dari API.
FastAPI Backend menerima request dan mengirim response JSON.
SQLite Database menyimpan data Todo secara lokal.
SQLite cocok untuk proyek pemula karena Python sudah menyediakan modul sqlite3
yang memberi antarmuka SQL sesuai DB-API 2.0. (Python documentation)
Untuk frontend, fetch() dipakai untuk mengirim request ke backend dan membaca response dari server. MDN menjelaskan Fetch API sebagai antarmuka JavaScript untuk membuat HTTP request dan memproses response. (MDN Web Docs)
Fitur aplikasi tidak perlu banyak. Yang penting lengkap dan berjalan.
Tambah Todo
Fungsi: memasukkan pekerjaan baruLihat daftar Todo
Fungsi: menampilkan semua dataUpdate status
Fungsi: menandai Todo selesaiHapus Todo
Fungsi: menghapus dataSimpan ke SQLite
Fungsi: data tidak hilang saat server matiAkses dari web
Fungsi: frontend browser bisa dipakaiAkses dari Android sederhana
Fungsi: Android client bisa membaca Todo
Catatan kritis: proyek pemula sering gagal karena terlalu ambisius. Jangan menambahkan login, dashboard, sinkronisasi, notifikasi, atau AI agent sebelum fitur minimal stabil.
AI dipakai sebagai asisten proyek, bukan pengganti programmer. Perannya:
membantu membuat skeleton kode,
membantu membuat endpoint,
membantu membuat UI,
membantu membaca error,
membantu membuat README,
membantu membuat test sederhana,
membantu memberi alternatif perbaikan.
Namun AI tidak boleh menggantikan:
pemahaman alur aplikasi,
validasi data,
keputusan desain,
pengecekan keamanan,
testing akhir,
tanggung jawab kode.
Prompt umum proyek:
Saya membuat aplikasi Todo dengan FastAPI, SQLite, frontend HTML/JavaScript,
dan Android client sederhana.
Tolong bantu secara bertahap. Jangan buat terlalu kompleks. Setiap perubahan harus dijelaskan. Kode harus mudah dipahami pemula.
Prompt review:
Review proyek Todo ini.
Cari bug dasar, endpoint yang belum diuji, dan bagian dokumentasi yang kurang.
Berikan daftar perbaikan prioritas. Jangan menulis ulang semua kode.
Golden rule:
AI boleh mempercepat proyek, tetapi testing dan keputusan akhir tetap milik manusia.
Bagian ini adalah inti Bab 8. Semua dimulai dari CLI.
Langkah 1 — Membuat Repo Git
Buat folder proyek:
mkdir todo-ai-ready cd todo-ai-ready git init
mkdir backend frontend android-docs screenshots
Struktur awal:
todo-ai-ready/
├── backend/
├── frontend/
├── android-docs/
├── screenshots/
└── README.md
Buat README awal:
nano README.md
Isi:
# Todo AI-Ready
Proyek akhir buku AI untuk Programming dan Coding Cepat. ## Komponen
Backend: FastAPI
Database: SQLite
Frontend: HTML, CSS, JavaScript
Android client: Kotlin + Jetpack Compose sederhana ## Status
Masih dalam pengembangan.
Commit awal:
git add .
git commit -m "inisialisasi proyek todo ai-ready"
Langkah 2 — Membuat Backend
Masuk ke folder backend:
cd backend
python3 -m venv .venv source .venv/bin/activate pip install fastapi uvicorn nano main.py
Isi main.py:
import sqlite3
from fastapi import FastAPI from pydantic import BaseModel
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI() DB_NAME = "todo.db"
app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"],
)
class TodoInput(BaseModel): title: str
def get_connection():
return sqlite3.connect(DB_NAME)
def init_db():
conn = get_connection() cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS todos (
id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL,
done INTEGER NOT NULL DEFAULT 0
) """)
conn.commit() conn.close()
init_db()
@app.get("/") def home():
return {"message": "Todo AI-Ready API berjalan"}
@app.get("/todos") def list_todos():
conn = get_connection() cursor = conn.cursor()
cursor.execute("SELECT id, title, done FROM todos") rows = cursor.fetchall()
conn.close() return [
{"id": row[0], "title": row[1], "done": bool(row[2])}
for row in rows
]
@app.post("/todos")
def create_todo(todo: TodoInput): if todo.title.strip() == "":
return {"error": "Todo tidak boleh kosong"}
conn = get_connection() cursor = conn.cursor()
cursor.execute(
"INSERT INTO todos (title, done) VALUES (?, ?)", (todo.title, 0)
)
conn.commit()
todo_id = cursor.lastrowid conn.close()
return {"id": todo_id, "title": todo.title, "done": False}
@app.put("/todos/{todo_id}") def update_todo(todo_id: int):
conn = get_connection() cursor = conn.cursor()
cursor.execute(
"UPDATE todos SET done = 1 WHERE id = ?", (todo_id,)
)
conn.commit() conn.close()
return {"message": "Todo ditandai selesai", "id": todo_id}
@app.delete("/todos/{todo_id}") def delete_todo(todo_id: int):
conn = get_connection() cursor = conn.cursor()
cursor.execute(
"DELETE FROM todos WHERE id = ?",
(todo_id,)
)
conn.commit() conn.close()
return {"message": "Todo dihapus", "id": todo_id}
Jalankan:
uvicorn main:app --reload
Test dari terminal lain:
curl http://127.0.0.1:8000/todos
Langkah 3 — Menguji Endpoint Backend
Tambah Todo:
curl -X POST http://127.0.0.1:8000/todos \
-H "Content-Type: application/json" \
-d '{"title":"Belajar proyek akhir"}'
Lihat Todo:
curl http://127.0.0.1:8000/todos
Update status:
curl -X PUT http://127.0.0.1:8000/todos/1
Hapus Todo:
curl -X DELETE http://127.0.0.1:8000/todos/1
Cek file database:
ls
Harus muncul:
main.py todo.db
Commit backend:
cd ..
git add .
git commit -m "buat backend FastAPI Todo dengan SQLite"
Langkah 4 — Membuat Frontend Web
Masuk folder frontend:
cd frontend nano index.html
Isi:
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Todo AI-Ready</title>
<style> body {
font-family: sans-serif; margin: 40px;
max-width: 720px;
}
input { padding: 8px; width: 70%;
}
button {
padding: 8px 12px; cursor: pointer;
}
table {
border-collapse: collapse; width: 100%;
margin-top: 20px;
}
th, td {
border: 1px solid #ccc; padding: 8px;
}
.error {
color: darkred; margin-top: 10px;
}
</style>
</head>
<body>
<h1>Todo AI-Ready</h1>
<input id="todoInput" placeholder="Tulis todo baru">
<button onclick="tambahTodo()">Tambah</button>
<p id="pesan" class="error"></p>
<table>
<thead>
<tr>
<th>ID</th>
<th>Todo</th>
<th>Status</th>
<th>Aksi</th>
</tr>
</thead>
<tbody id="todoTable"></tbody>
</table>
<script>
const API_URL = "http://127.0.0.1:8000/todos";
async function ambilTodos() { try {
const response = await fetch(API_URL); const data = await response.json();
const table = document.getElementById("todoTable"); table.innerHTML = "";
data.forEach(todo => {
const row = document.createElement("tr");
row.innerHTML = `
<td>${todo.id}</td>
<td>${todo.title}</td>
<td>${todo.done ? "Selesai" : "Belum"}</td>
<td>
<button onclick="selesaikanTodo(${todo.id})">Selesai</button>
<button onclick="hapusTodo(${todo.id})">Hapus</button>
</td>
`;
table.appendChild(row);
});
} catch (error) { document.getElementById("pesan").textContent =
"Gagal mengambil data dari API."; console.log(error);
}
}
async function tambahTodo() {
const input = document.getElementById("todoInput"); const title = input.value.trim();
if (title === "") { document.getElementById("pesan").textContent =
"Todo tidak boleh kosong."; return;
}
await fetch(API_URL, { method: "POST", headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({ title: title })
});
input.value = ""; document.getElementById("pesan").textContent = ""; ambilTodos();
}
async function selesaikanTodo(id) { await fetch(`${API_URL}/${id}`, {
method: "PUT"
});
ambilTodos();
}
async function hapusTodo(id) { await fetch(`${API_URL}/${id}`, {
method: "DELETE"
});
ambilTodos();
}
ambilTodos();
</script>
</body>
</html>
Jalankan frontend:
python3 -m http.server 8080
Buka:
Commit frontend:
cd ..
git add .
git commit -m "buat frontend Todo terhubung ke backend"
Langkah 5 — Android Client Sederhana
Untuk Bab 8, Android client cukup membaca data Todo dari API. Tidak perlu semua fitur CRUD dulu, karena halaman bab dibatasi 83–92 dan targetnya portofolio awal.
Konsep Compose yang dipakai:
Text untuk judul,
Button untuk ambil data,
LazyColumn untuk daftar,
state untuk menyimpan teks hasil API.
Dokumentasi Compose menjelaskan bahwa state menentukan apa yang ditampilkan UI, dan Compose memperbarui UI ketika state berubah. (Android Developers)
Contoh logika minimal di MainActivity.kt:
var hasil by remember { mutableStateOf("Belum ada data")
}
Column {
Text("Todo Android Client")
Button(onClick = {
hasil = "Ambil data dari API..."
nano android-docs/ANDROID_CLIENT.md
Isi:
# Android Client Sederhana Target awal:
menampilkan layar Todo
tombol ambil data
menampilkan hasil dari API
Build:
./gradlew assembleDebug
Catatan:
Pastikan backend berjalan di alamat yang dapat diakses oleh emulator/perangkat.
Commit:
git add .
git commit -m "tambah dokumentasi Android client sederhana"
Langkah 6 — Menulis Dokumentasi Proyek
Update README.md:
nano README.md
Isi ringkas:
# Todo AI-Ready
Aplikasi Todo sederhana sebagai proyek akhir buku AI untuk Programming dan Coding Cepat.
## Komponen
Backend: FastAPI
Database: SQLite
Frontend: HTML, CSS, JavaScript
Android client: Kotlin + Jetpack Compose sederhana
## Cara Menjalankan Backend cd backend
source .venv/bin/activate uvicorn main:app --reload
## Cara Test API
curl http://127.0.0.1:8000/todos
## Cara Menjalankan Frontend cd frontend
python3 -m http.server 8080
## Buka: http://127.0.0.1:8080
Endpoint
Method
Endpoint
Fungsi
GET
/todos
Lihat daftar Todo
POST
/todos
Tambah Todo
PUT
/todos/{id}
Tandai selesai
DELETE
/todos/{id}
Hapus Todo
git add README.md
git commit -m "lengkapi dokumentasi proyek"
Langkah 7 — Membuat Screenshot Hasil
Buat folder screenshot sudah ada:
ls screenshots
Simpan screenshot manual ke folder screenshots/, misalnya:
screenshots/frontend-todo.png screenshots/api-docs.png screenshots/android-client.png
Tambahkan ke Git:
git add screenshots
git commit -m "tambah screenshot hasil proyek"
Langkah 8 — Commit Final
Cek status:
git status
Jika masih ada perubahan:
git add .
git commit -m "finalisasi proyek Todo AI-Ready"
Lihat riwayat:
git log --oneline
Komponen
Status
Backend jalan
☐
Database tersimpan
☐
Endpoint GET /todos berjalan
☐
Endpoint POST /todos berjalan
☐
Endpoint PUT /todos/{id} berjalan
☐
Endpoint DELETE /todos/{id} berjalan
☐
Frontend bisa tambah data
☐
Frontend bisa menampilkan data
☐
Frontend bisa update status
☐
Frontend bisa hapus data
☐
Android bisa tampil data sederhana
☐
README tersedia
☐
Screenshot hasil tersedia
☐
Error utama sudah diperbaiki
☐
Kode sudah di-commit
☐
Prompt AI untuk Audit Proyek
Gunakan setelah proyek berjalan:
Saya membuat proyek Todo AI-Ready. Komponen:
FastAPI backend
SQLite database
frontend HTML/JavaScript
Android client sederhana
Tolong audit proyek ini:
endpoint apa saja yang harus diuji,
error umum apa yang mungkin muncul,
bagian README apa yang perlu dilengkapi,
perbaikan prioritas untuk pemula,
jangan menyarankan fitur besar dulu.
Prompt untuk debugging:
Saya mendapat error berikut saat menjalankan proyek Todo: [paste error]
Konteks:
backend FastAPI
database SQLite
frontend memakai fetch()
dijalankan lokal
Tolong jelaskan penyebab paling mungkin, berikan urutan pengecekan,
dan perbaikan minimal.
Ringkasan Bab
Bab ini menyatukan seluruh perjalanan buku menjadi satu proyek kecil tetapi lengkap. Pembaca membuat backend FastAPI, menyimpan data ke SQLite, membuat frontend web, menyiapkan Android client sederhana, menulis README, membuat screenshot, dan menyimpan semua perubahan dengan Git.
Hasil akhirnya bukan hanya aplikasi Todo, tetapi pola kerja programmer: membuat fitur kecil, menguji dari CLI, membaca JSON, memperbaiki error, mendokumentasikan hasil, dan melakukan commit. AI dipakai sebagai asisten, tetapi pembaca tetap menjadi pemilik keputusan.
Golden rule Bab 8:
Portofolio pertama tidak harus besar; yang penting selesai, berjalan, terdokumentasi, diuji, dan bisa dijelaskan.
BAB 9. Strategi Belajar, Debugging, Testing, dan Anti-Halusinasi Kode
Workflow harian yang dipakai dalam buku ini:
Rancang → Generate → Jalankan → Test → Pahami → Refactor → Commit
Penjelasan singkat:
Rancang: tulis dulu tujuan program, input, output, dan batasannya.
Generate: minta AI membuat draf kode.
Jalankan: coba kode dari CLI.
Test: uji input normal, salah, kosong, dan ekstrem.
Pahami: minta AI menjelaskan bagian yang belum dipahami.
Refactor: rapikan kode tanpa mengubah fungsi utama.
Commit: simpan perubahan dengan Git.
Perintah dasar harian:
git status python3 main.py pytest
git add .
git commit -m "perbaiki validasi input"
Git penting karena git commit membuat commit baru dari isi staging area dengan pesan perubahan. Dengan kata lain, commit adalah titik simpan resmi dalam riwayat proyek. (Git SCM)
Golden rule workflow:
Jangan generate kode baru sebelum kode lama dijalankan, diuji, dan dipahami.
Prompt coding yang baik harus jelas, pendek, dan punya batasan. Jangan hanya menulis: “buatkan aplikasi”. Itu terlalu kabur. AI akan menebak terlalu banyak.
Struktur prompt yang disarankan:
Tujuan:
Konteks:
Bahasa:
Batasan:
Input:
Output:
Style kode:
Cara penjelasan:
Contoh prompt:
Tujuan:
Buat program Python untuk menghitung total pengeluaran dari file CSV.
Konteks:
Saya pemula Python dan sedang belajar file CSV.
Bahasa:
Python 3.
Batasan:
Gunakan modul csv bawaan Python. Jangan gunakan library tambahan.
Input:
File pengeluaran.csv dengan kolom tanggal,kategori,jumlah.
Output:
File summary.csv berisi kategori,total.
Style kode:
Sederhana, mudah dibaca, komentar singkat.
Cara penjelasan:
Jelaskan kode per bagian untuk pemula.
Prompt untuk memperbaiki kode:
Perbaiki kode berikut secara minimal. Jangan ubah struktur besar.
Tunjukkan baris yang diubah. Jelaskan alasan perubahan.
Tambahkan satu contoh test manual.
Prompt seperti ini membuat AI bekerja sebagai asisten teknis, bukan sebagai mesin yang mengambil alih seluruh keputusan.
Debugging adalah proses mencari penyebab error. AI sangat membantu untuk membaca error panjang, tetapi pembaca tetap harus paham urutan pengecekannya.
Prompt debugging:
Saya mendapat error berikut. [paste error]
Jelaskan penyebabnya dalam bahasa sederhana. Berikan 3 kemungkinan solusi.
Jangan langsung ubah semua kode.
Tunjukkan bagian kode yang perlu diperiksa.
Contoh error Python:
ValueError: invalid literal for int() with base 10: 'abc'
Prompt ke AI:
Saya mendapat error Python:
ValueError: invalid literal for int() with base 10: 'abc' Jelaskan:
apa arti error ini,
mengapa terjadi,
baris seperti apa yang perlu diperiksa,
perbaikan minimal,
test apa yang harus saya lakukan setelah diperbaiki.
Urutan debugging yang sehat:
Baca error terakhir → cari baris penyebab → pahami tipe error
→ perbaiki kecil → jalankan ulang → test
Jangan langsung meminta AI menulis ulang seluruh program. Itu membuat pembaca kehilangan kesempatan belajar. Debugging yang baik memperbaiki akar masalah, bukan mengganti semua kode.
Kode AI harus diuji. Kode yang tampak rapi belum tentu benar. Testing adalah cara memastikan program bekerja sesuai harapan.
Untuk Python, pembaca bisa mulai dari unittest bawaan atau pytest. Dokumentasi Python menjelaskan unittest sebagai unit testing framework bawaan Python, sedangkan dokumentasi pytest menyebut framework ini memudahkan penulisan test kecil yang mudah dibaca dan dapat berkembang untuk testing aplikasi yang lebih kompleks. (Python documentation)
Contoh Unit Test Sederhana
Buat file:
mkdir bab9-testing cd bab9-testing nano kalkulator.py
Isi:
def tambah(a, b): return a + b
def bagi(a, b): if b == 0:
raise ValueError("Pembagi tidak boleh nol") return a / b
Buat test:
nano test_kalkulator.py
Isi:
from kalkulator import tambah, bagi def test_tambah():
assert tambah(2, 3) == 5
def test_bagi():
assert bagi(10, 2) == 5 def test_bagi_nol():
bagi(10, 0) assert False
except ValueError: assert True
Install dan jalankan pytest:
python3 -m venv .venv source .venv/bin/activate pip install pytest
pytest
Dokumentasi pytest menyediakan langkah getting started, termasuk membuat test pertama, menjalankan banyak test, dan menguji exception. (docs.pytest.org)
Jenis Test Minimal
Jenis Test
Tujuan
Unit test sederhana
memastikan fungsi kecil bekerja
Test manual
mencoba program dari CLI
Test endpoint API
menguji API dengan curl
Test input salah
melihat apakah program tahan error
Test data kosong
memastikan program tidak crash
Test data besar
melihat performa dasar
Contoh test endpoint:
curl http://127.0.0.1:8000/todos
curl -X POST http://127.0.0.1:8000/todos \
-H "Content-Type: application/json" \
-d '{"title":"Belajar testing"}'
Golden rule testing:
Jangan hanya test kondisi benar. Test juga kondisi salah, kosong, dan ekstrem.
Hallucination dalam AI coding terjadi ketika AI memberi jawaban yang terlihat meyakinkan tetapi salah. Bentuknya bisa bermacam-macam:
library yang sebenarnya tidak ada,
fungsi yang namanya salah,
parameter yang tidak didukung,
kode yang jalan tetapi logikanya keliru,
contoh API yang sudah tidak berlaku,
saran keamanan yang lemah,
solusi terlalu rumit untuk masalah sederhana.
Jangan percaya kode AI sebelum:
dijalankan,
dibaca,
diuji,
dibandingkan dengan dokumentasi resmi,
dipahami,
di-commit dengan catatan yang jelas.
Untuk keamanan, gunakan prinsip dari OWASP. OWASP Secure Coding Practices adalah panduan praktik coding aman yang bersifat teknologi-agnostik dan dapat diterjemahkan menjadi kebutuhan coding, meski developer belum mendalami semua detail eksploitasi keamanan. (owasp.org)
Checklist anti-halusinasi:
Apakah library yang disebut AI benar-benar ada?
☐ Ya / ☐ TidakApakah fungsi yang dipakai ada di dokumentasi resmi?
☐ Ya / ☐ TidakApakah kode sudah dijalankan?
☐ Ya / ☐ TidakApakah hasilnya sesuai kebutuhan?
☐ Ya / ☐ TidakApakah input salah sudah diuji?
☐ Ya / ☐ TidakApakah ada risiko data sensitif bocor?
☐ Ya / ☐ TidakApakah kode terlalu rumit untuk pemula?
☐ Ya / ☐ TidakApakah sudah di-commit?
☐ Ya / ☐ Tidak
Prompt anti-halusinasi:
Periksa kode ini dari sisi halusinasi AI. Tolong cek:
apakah ada library atau fungsi yang mencurigakan,
apakah ada asumsi yang tidak dijelaskan,
apakah ada risiko keamanan dasar,
apakah ada bagian yang perlu dicek ke dokumentasi resmi,
berikan perbaikan minimal.
Kesalahan Umum Pemula
Kesalahan pemula bukan hal memalukan. Yang berbahaya adalah mengulanginya tanpa sadar.
Copy-paste buta
Risiko: Tidak paham kode
Solusi: Minta AI jelaskan baris demi barisTidak pakai Git
Risiko: Sulit rollback
Solusi: Commit setiap fitur kecilTidak membaca error
Risiko: Debug lambat
Solusi: Baca pesan error dari bawah dan cari baris penyebabTerlalu banyak tool
Risiko: Bingung
Solusi: Fokus Python → Web → AndroidTidak testing
Risiko: Kode rapuh
Solusi: Buat test minimalTidak dokumentasi
Risiko: Sulit lanjut
Solusi: Buat README sejak awalLangsung membuat fitur besar
Risiko: Proyek tidak selesai
Solusi: Mulai dari fitur kecilTidak cek dokumentasi resmi
Risiko: Terkena halusinasi AI
Solusi: Verifikasi library dan API
Contoh commit kecil:
git add .
git commit -m "tambah validasi input kosong"
Lihat riwayat commit:
git log --oneline
Dokumentasi Git menjelaskan bahwa git log menampilkan daftar commit dalam urutan kronologis terbalik, sehingga commit terbaru muncul lebih dulu. (Git SCM)
Setelah menyelesaikan buku ini, pembaca sebaiknya tidak langsung mengejar teknologi paling rumit. Lanjutkan secara bertahap.
Tahap 1 — Perkuat Dasar
Python lanjut.
Struktur data.
Fungsi dan modul.
Error handling.
File, CSV, JSON.
Unit test.
Tahap 2 — Web dan Database
FastAPI lanjut.
Validasi input lebih rapi.
Database PostgreSQL/MariaDB.
Autentikasi sederhana.
Logging.
Testing endpoint API.
Tahap 3 — Lingkungan Produksi
Docker Compose.
Deployment ke VPS Linux.
Reverse proxy.
Backup database.
Monitoring sederhana.
Keamanan aplikasi.
Tahap 4 — Android Lanjut
Jetpack Compose lanjut.
Navigasi antar layar.
Konsumsi API.
Penyimpanan lokal.
Error handling jaringan.
Tahap 5 — AI Lokal dan RAG
Ollama untuk eksperimen lokal.
Prompt engineering lebih disiplin.
RAG sederhana untuk dokumen proyek.
Dokumentasi internal.
Evaluasi jawaban AI.
Tahap 6 — Keamanan dan Kualitas
Secure coding.
Validasi input.
Dependency review.
Test otomatis.
Code review.
Dokumentasi teknis.
Roadmap ini menjaga pembaca tetap fokus. Jangan melompat terlalu jauh sebelum dasar kuat. Kecepatan terbaik adalah kecepatan yang bisa dipertahankan.
Hands-on Penutup — Audit Proyek Todo
Gunakan proyek Todo dari Bab 8. Dari folder proyek:
git status
git log --oneline
Jalankan backend:
cd backend
source .venv/bin/activate uvicorn main:app --reload
Test API:
curl http://127.0.0.1:8000/todos
curl -X POST http://127.0.0.1:8000/todos \
-H "Content-Type: application/json" \
-d '{"title":"Audit proyek akhir"}'
Buat file checklist:
cd ..
nano CHECKLIST_FINAL.md
# Checklist Final Proyek Todo
[ ] Backend berjalan
[ ] Database tersimpan
[ ] Frontend bisa tambah data
[ ] Endpoint sudah dites dengan curl
[ ] Input kosong sudah diuji
[ ] README tersedia
[ ] Screenshot tersedia
[ ] Error utama sudah dicatat
[ ] Semua perubahan sudah di-commit
Commit:
git add .
git commit -m "tambah checklist final proyek"
Prompt AI untuk audit akhir:
Saya sudah membuat proyek Todo dengan FastAPI, SQLite, frontend web,
dan Android client sederhana.
Tolong audit proyek ini dari sisi:
bug dasar,
test yang belum dilakukan,
dokumentasi yang kurang,
risiko keamanan pemula,
perbaikan prioritas.
Jangan sarankan fitur besar dulu.
Ringkasan Bab
Bab ini menegaskan bahwa AI coding bukan sekadar membuat kode cepat. Programmer harus punya workflow: rancang, generate, jalankan, test, pahami, refactor, commit. Kode AI harus diuji dengan input benar, salah, kosong, dan ekstrem. Error harus dibaca.
Dokumentasi harus dibuat. Git harus dipakai sejak awal.
Setelah buku ini selesai, pembaca sudah memiliki fondasi untuk lanjut ke Python, FastAPI, database, Android, deployment, AI lokal, RAG, testing, dan keamanan aplikasi. Yang paling penting: pembaca tidak lagi menjadi pengguna AI pasif, tetapi mulai menjadi programmer yang memimpin AI.
Golden rule Bab 9:
AI mempercepat coding, tetapi disiplin testing, debugging, dokumentasi, keamanan, dan tanggung jawab tetap milik manusia.
Lampiran A. Template Prompt AI untuk Membuat Kode
Lampiran ini berisi template prompt praktis untuk membantu pembaca memakai AI sebagai asisten coding, bukan pengganti programmer. Gunakan template ini saat membuat kode baru, menambah fitur, belajar konsep, debugging, refactoring, dan dokumentasi.
Prinsip utama:
Prompt yang baik harus jelas: tujuan, bahasa, batasan, input, output, dan cara penjelasan.
Membuat kode baru
Template Prompt:
“Buatkan program [tujuan] dengan [bahasa]. Gunakan kode sederhana untuk pemula. Jelaskan langkahnya.”Membuat fitur
Template Prompt:
“Tambahkan fitur [fitur] pada kode berikut. Jangan mengubah struktur besar.”Belajar konsep
Template Prompt:
“Jelaskan konsep [konsep] dengan contoh kode kecil.”
Template Prompt Lengkap
Gunakan format ini jika ingin hasil yang lebih rapi.
Tujuan:
[Buat apa?]
Konteks:
[Saya pemula / mahasiswa / programmer awal. Jelaskan kebutuhan program.]
Bahasa:
[Python / JavaScript / Kotlin / lainnya]
Batasan:
[Gunakan kode sederhana. Jangan gunakan library tambahan. Jangan ubah struktur besar.]
Input:
[Data yang masuk ke program]
Output:
[Hasil yang diharapkan]
Style kode:
[Mudah dibaca, komentar singkat, cocok untuk pemula]
Cara penjelasan:
[Jelaskan langkah demi langkah / jelaskan per bagian / jelaskan baris penting]
Buatkan program Python untuk menghitung luas persegi panjang.
Syarat:
gunakan input dari keyboard
gunakan kode sederhana untuk pemula
jangan gunakan library tambahan
tampilkan contoh input dan output
jelaskan langkah program secara singkat
Contoh lain:
Buatkan program Python untuk membaca file CSV berisi kolom nama,nilai.
Tugas:
baca file nilai.csv
tampilkan nama dan nilai
jika nilai >= 75, tampilkan status Lulus
jika nilai < 75, tampilkan status Perlu Belajar
gunakan modul csv bawaan Python
jelaskan kode per bagian
Tambahkan fitur validasi input kosong pada kode berikut.
Syarat:
jangan mengubah struktur besar
berikan perubahan minimal
jelaskan bagian yang diubah
tambahkan contoh input dan output
Kode:
[paste kode di sini]
Contoh untuk API:
Tambahkan endpoint GET /todos/{id} pada aplikasi FastAPI berikut.
Syarat:
ambil data dari SQLite
jika data tidak ditemukan, tampilkan pesan sederhana
jangan mengubah struktur besar
jelaskan perubahan singkat
Kode:
[paste kode di sini]
Jelaskan konsep list dan dict di Python untuk pemula.
Syarat:
gunakan contoh kode kecil
berikan perbandingan sederhana
jelaskan kapan memakai list dan kapan memakai dict
berikan 3 latihan singkat
Contoh untuk web:
Jelaskan konsep request dan response pada API. Syarat:
gunakan bahasa sederhana
berikan contoh dengan FastAPI
tunjukkan contoh response JSON
jelaskan bagaimana frontend membaca response tersebut
Review kode berikut.
Tolong cek:
apakah ada bug dasar,
apakah ada input yang belum divalidasi,
apakah ada bagian yang terlalu rumit untuk pemula,
apakah ada risiko error,
berikan perbaikan minimal.
Jangan ubah seluruh struktur kode. Kode:
[paste kode di sini]
Periksa jawaban dan kode berikut dari kemungkinan halusinasi AI.
Tolong cek:
apakah library yang dipakai benar-benar umum/dikenal,
apakah fungsi yang dipakai masuk akal,
apakah ada asumsi yang belum dijelaskan,
apakah ada bagian yang perlu dicek ke dokumentasi resmi,
apakah kode bisa dijalankan oleh pemula.
Berikan catatan kritis dan perbaikan minimal.
Saya mendapat error berikut:
[paste error] Ini kode saya:
[paste kode]
Tolong:
jelaskan arti error dengan bahasa pemula,
tunjukkan kemungkinan baris penyebab,
berikan 3 kemungkinan solusi,
berikan perbaikan minimal,
jangan ubah seluruh kode.
Rapikan kode berikut agar lebih mudah dibaca.
Syarat:
jangan mengubah fungsi utama
jangan menambah fitur baru
pisahkan ke fungsi kecil jika perlu
gunakan nama variabel yang jelas
tambahkan komentar hanya jika membantu
jelaskan perubahan singkat
Kode:
[paste kode di sini]
Buatkan README.md untuk proyek berikut.
Isi README:
tujuan proyek
fitur utama
struktur folder
cara install
cara menjalankan
contoh penggunaan
cara test
masalah umum dan solusi
Konteks proyek:
[paste deskripsi proyek]
Pertanyaan
Ya/Tidak
Apakah tujuan program jelas?
☐
Apakah bahasa pemrograman disebutkan?
☐
Apakah input dijelaskan?
☐
Apakah output dijelaskan?
☐
Apakah batasan ditulis?
☐
Apakah diminta kode sederhana untuk pemula?
☐
Apakah diminta penjelasan?
☐
Apakah diminta perubahan minimal jika memperbaiki kode?
☐
Golden Rule Lampiran A
Prompt yang baik tidak hanya meminta kode, tetapi juga meminta batasan, penjelasan, contoh input-output, dan cara menguji hasilnya.
Lampiran B. Template Prompt Debugging
Lampiran ini berisi template prompt untuk membantu pembaca memakai AI saat menghadapi error, bug, atau perilaku program yang tidak sesuai harapan. Tujuannya bukan agar AI langsung menulis ulang seluruh kode, tetapi agar pembaca paham penyebab error dan bisa memperbaikinya secara bertahap.
Prinsip utama:
Debugging yang baik memperbaiki akar masalah, bukan mengganti semua kode.
Saya mendapat error berikut: [paste error]
Ini kode saya:
[paste kode] Tolong:
jelaskan penyebab error,
tunjukkan baris yang bermasalah,
berikan solusi minimal,
jangan ubah seluruh kode,
jelaskan agar pemula paham.
Gunakan template ini jika error cukup panjang atau program memiliki beberapa file.
Saya sedang belajar coding dan mendapat error berikut: [paste error lengkap]
Konteks:
Bahasa pemrograman: [Python / JavaScript / Kotlin / lainnya]
Sistem operasi: [Linux/Ubuntu/dll]
Cara menjalankan program: [contoh: python3 main.py]
Tujuan program: [jelaskan singkat]
File yang error: [nama file] Ini kode saya:
[paste kode]
Tolong bantu saya:
Saya mendapat error Python berikut:
[paste traceback lengkap] Ini kode saya:
[paste kode Python]
Tolong:
baca traceback dari bawah ke atas,
jelaskan tipe error,
tunjukkan baris yang menyebabkan error,
jelaskan penyebabnya untuk pemula,
berikan perbaikan minimal,
tambahkan contoh input-output setelah diperbaiki.
Contoh kasus:
Saya mendapat error Python berikut:
ValueError: invalid literal for int() with base 10: 'abc' Ini kode saya:
angka = int(input("Masukkan angka: ")) print(angka * 2)
Tolong:
jelaskan penyebab error,
tunjukkan baris yang bermasalah,
berikan solusi minimal,
jangan ubah seluruh kode,
jelaskan agar pemula paham.
Saya mendapat error saat menjalankan FastAPI: [paste error / traceback]
Konteks:
Backend: FastAPI
Database: [SQLite / lainnya]
Cara menjalankan: uvicorn main:app --reload
Endpoint yang diuji: [GET/POST/PUT/DELETE + URL]
Cara test: [curl atau browser] Ini kode endpoint saya:
[paste kode]
Tolong:
jelaskan penyebab error,
tunjukkan bagian kode yang perlu diperiksa,
berikan solusi minimal,
jangan ubah struktur aplikasi besar,
berikan perintah curl untuk test ulang.
Saya mendapat error fetch() di frontend: [paste error dari console browser]
Konteks:
Frontend: HTML, CSS, JavaScript murni
Backend: FastAPI
URL API: [contoh: http://127.0.0.1:8000/todos]
Cara menjalankan frontend: python3 -m http.server 8080 Ini kode JavaScript saya:
[paste kode]
Tolong:
Saya mendapat error build Android/Kotlin berikut: [paste error build]
Konteks:
Bahasa: Kotlin
UI: Jetpack Compose
File yang diubah: MainActivity.kt
Tujuan kode: [jelaskan singkat] Ini kode saya:
[paste kode]
Tolong:
jelaskan arti error,
tunjukkan kemungkinan baris penyebab,
cek apakah ada import yang kurang,
cek apakah ada salah penulisan fungsi/komponen,
berikan perbaikan minimal,
jangan ubah seluruh struktur aplikasi.
Kadang program tidak error, tetapi hasilnya salah. Ini disebut logic error.
Program saya bisa berjalan, tetapi hasilnya salah. Tujuan program:
[jelaskan tujuan program]
Hasil yang saya harapkan:
[jelaskan output yang benar]
Hasil yang muncul:
[jelaskan output yang salah] Ini kode saya:
[paste kode]
Tolong:
Program saya error ketika input kosong atau input salah.
Contoh input bermasalah:
[paste input]
Error / hasil yang muncul:
[paste error atau output] Ini kode saya:
[paste kode]
Tolong:
jelaskan mengapa input ini membuat program bermasalah,
tambahkan validasi input sederhana,
jangan ubah struktur besar,
berikan contoh input valid dan input tidak valid,
jelaskan agar pemula paham.
Sebelum menempelkan error ke AI, cek dulu:
Apakah error sudah disalin lengkap?
☐ Ya / ☐ TidakApakah kode yang relevan sudah disertakan?
☐ Ya / ☐ TidakApakah bahasa pemrograman disebutkan?
☐ Ya / ☐ TidakApakah cara menjalankan program dijelaskan?
☐ Ya / ☐ TidakApakah input yang menyebabkan error disertakan?
☐ Ya / ☐ TidakApakah output yang diharapkan dijelaskan?
☐ Ya / ☐ TidakApakah diminta solusi minimal?
☐ Ya / ☐ TidakApakah diminta agar struktur kode tidak diubah total?
☐ Ya / ☐ Tidak
Biasakan membaca error dengan urutan berikut:
Baca error terakhir
↓
Cari nama file
↓
Cari nomor baris
↓
Pahami tipe error
↓
Periksa input / variabel / fungsi
↓ Perbaiki kecil
↓ Jalankan ulang
↓ Test lagi
Contoh:
ValueError: invalid literal for int() with base 10: 'abc'
Maknanya:
ValueError = nilai tidak sesuai.
int() mencoba mengubah teks menjadi angka.
'abc' bukan angka.
Solusi minimal: gunakan try-except atau validasi input.
Saya mendapat error Python berikut:
ValueError: invalid literal for int() with base 10: 'abc' Ini kode saya:
angka = int(input("Masukkan angka: ")) print(angka * 2)
Tolong:
jelaskan penyebab error,
tunjukkan baris yang bermasalah,
berikan solusi minimal,
jangan ubah seluruh kode,
jelaskan agar pemula paham.
Kemungkinan perbaikan minimal:
try:
angka = int(input("Masukkan angka: ")) print(angka * 2)
except ValueError:
print("Error: input harus berupa angka.")
Golden Rule Lampiran B
Saat debugging dengan AI, jangan hanya minta jawaban. Minta penjelasan penyebab, baris bermasalah, solusi minimal, dan cara mengetes ulang.
Lampiran C. Template Prompt Refactoring
Lampiran ini berisi template prompt untuk membantu pembaca memakai AI dalam proses refactoring, yaitu merapikan kode agar lebih mudah dibaca, lebih mudah diuji, dan lebih mudah dikembangkan tanpa mengubah fungsi utamanya.
Prinsip utama:
Refactoring bukan menambah fitur. Refactoring adalah merapikan kode agar perilakunya tetap sama, tetapi strukturnya lebih sehat.
Rapikan kode berikut agar lebih mudah dibaca. Jangan mengubah fungsi utama.
Pisahkan ke fungsi kecil jika perlu. Tambahkan komentar hanya jika membantu pemula.
Kode:
[paste kode di sini]
Gunakan template ini jika kode sudah agak panjang.
Saya ingin melakukan refactoring kode berikut. Tujuan:
membuat kode lebih mudah dibaca
mengurangi pengulangan
memisahkan bagian yang terlalu panjang ke fungsi kecil
menjaga fungsi program tetap sama
Batasan:
jangan menambah fitur baru
jangan mengubah output program
jangan mengubah nama file
jangan memakai library tambahan
komentar hanya jika membantu pemula
Tolong:
jelaskan masalah utama pada kode,
berikan versi kode yang lebih rapi,
jelaskan perubahan yang dilakukan,
sebutkan bagian yang tidak diubah,
berikan test manual untuk memastikan hasil tetap sama.
Kode:
[paste kode di sini]
Refactor kode Python berikut agar lebih rapi.
Syarat:
jangan ubah fungsi utama program
pisahkan logika ke fungsi kecil
gunakan nama variabel yang lebih jelas
jangan gunakan library tambahan
tambahkan komentar hanya jika perlu
jelaskan perubahan untuk pemula
Kode:
[paste kode Python di sini]
Contoh kebutuhan:
Refactor kode kalkulator berikut.
Pisahkan operasi tambah, kurang, kali, dan bagi ke fungsi masing-masing.
Jangan ubah cara input dan output program.
Refactor kode FastAPI berikut agar lebih mudah dibaca.
Syarat:
jangan mengubah endpoint yang sudah ada
jangan mengubah format response JSON
pisahkan fungsi database jika perlu
jangan menambah fitur baru
jangan mengubah nama route
jelaskan perubahan singkat
Kode:
[paste kode FastAPI di sini]
Contoh permintaan:
Rapikan kode FastAPI Todo berikut.
Pisahkan koneksi database, inisialisasi tabel, dan query Todo ke fungsi kecil.
Endpoint tetap:
Refactor kode HTML, CSS, dan JavaScript berikut agar lebih mudah dibaca.
Syarat:
jangan mengubah tampilan utama
jangan mengubah URL API
jangan mengubah fungsi utama aplikasi
pisahkan fungsi JavaScript jika perlu
rapikan nama variabel
komentar hanya jika membantu pemula
Kode:
[paste kode frontend di sini]
Contoh permintaan:
Rapikan JavaScript berikut. Pisahkan fungsi untuk:
mengambil data Todo,
menampilkan data ke tabel,
menambah Todo,
menampilkan pesan error.
Jangan ubah struktur HTML terlalu banyak.
Refactor kode Kotlin Jetpack Compose berikut agar lebih rapi.
Syarat:
jangan menambah fitur baru
jangan mengubah fungsi utama aplikasi
pisahkan UI ke beberapa fungsi @Composable jika perlu
gunakan nama fungsi yang mudah dipahami
komentar hanya jika membantu pemula
jelaskan perubahan singkat
Kode:
[paste kode Kotlin di sini]
Contoh permintaan:
Rapikan MainActivity.kt berikut. Pisahkan menjadi:
TodoApp()
TodoInput()
TodoList()
Jangan ubah perilaku aplikasi.
Tetap gunakan state sederhana untuk pemula.
Kode awal:
print("Kalkulator")
a = float(input("Angka pertama: "))
b = float(input("Angka kedua: ")) op = input("Operasi (+/-): ")
if op == "+":
print(a + b) elif op == "-":
print(a - b) else:
print("Operasi tidak dikenal")
Rapikan kode berikut agar lebih mudah dibaca. Jangan mengubah fungsi utama.
Pisahkan ke fungsi kecil jika perlu.
Tambahkan komentar hanya jika membantu pemula.
Kode:
[paste kode]
Kemungkinan hasil refactoring:
def tambah(a, b): return a + b
def kurang(a, b): return a - b
def hitung(a, b, operasi): if operasi == "+":
return tambah(a, b) elif operasi == "-":
return kurang(a, b) else:
return "Operasi tidak dikenal"
print("Kalkulator")
angka_pertama = float(input("Angka pertama: ")) angka_kedua = float(input("Angka kedua: ")) operasi = input("Operasi (+/-): ")
hasil = hitung(angka_pertama, angka_kedua, operasi) print(hasil)
Perubahan utama:
nama variabel dibuat lebih jelas,
operasi dipisahkan ke fungsi,
logika hitung dipusatkan di fungsi hitung,
perilaku program tetap sama.
Apakah fungsi utama program tetap sama?
☐ Ya / ☐ TidakApakah output masih sama untuk input yang sama?
☐ Ya / ☐ TidakApakah kode lebih mudah dibaca?
☐ Ya / ☐ TidakApakah nama variabel lebih jelas?
☐ Ya / ☐ TidakApakah fungsi terlalu panjang sudah dipisah?
☐ Ya / ☐ TidakApakah komentar tidak berlebihan?
☐ Ya / ☐ TidakApakah tidak ada fitur baru yang tidak diminta?
☐ Ya / ☐ TidakApakah kode sudah dites ulang?
☐ Ya / ☐ TidakApakah perubahan sudah di-commit?
☐ Ya / ☐ Tidak
Bandingkan kode sebelum dan sesudah refactoring berikut.
Tolong cek:
apakah fungsi utama masih sama,
apakah ada output yang berubah,
apakah ada bug baru,
apakah kode sesudah refactoring lebih mudah dibaca,
test apa yang harus dilakukan untuk memastikan aman.
Kode sebelum: [paste kode lama]
Kode sesudah: [paste kode baru]
Gunakan jika kode sudah berjalan dan tidak ingin rusak. Kode berikut sudah berjalan.
Saya hanya ingin merapikan struktur.
Tolong refactor secara aman:
jangan tambah fitur baru
jangan ubah output
jangan ubah format input
jangan ganti library
buat perubahan sekecil mungkin
jelaskan setiap perubahan
berikan test manual setelah refactoring
Kode:
[paste kode]
Menambah fitur saat refactoring
Risiko: Sulit tahu sumber bug baru
Solusi: Pisahkan refactoring dan fitur baruMengubah terlalu banyak sekaligus
Risiko: Sulit debugging
Solusi: Refactor kecil-kecilTidak testing ulang
Risiko: Bug tidak terlihat
Solusi: Jalankan test setelah refactorKomentar terlalu banyak
Risiko: Kode jadi ramai
Solusi: Komentar hanya untuk bagian pentingNama fungsi tidak jelas
Risiko: Kode tetap sulit dibaca
Solusi: Gunakan nama sesuai tugas fungsiTidak commit sebelum refactor
Risiko: Sulit kembali ke versi lama
Solusi: Commit dulu sebelum perubahan besar
Sebelum refactoring:
git status git add .
git commit -m "simpan versi sebelum refactoring"
Setelah refactoring dan test berhasil:
git add .
git commit -m "refactor kode agar lebih mudah dibaca"
Jika hasil refactoring merusak program, pembaca masih punya versi lama yang aman.
Golden Rule Lampiran C
Refactoring yang baik membuat kode lebih mudah dipahami tanpa mengubah perilaku program. Jika perilaku berubah, itu bukan sekadar refactoring—itu sudah menjadi perubahan fitur.
Lampiran D. Template Prompt Dokumentasi
Lampiran ini berisi template prompt untuk membantu pembaca membuat dokumentasi proyek, terutama file README.md. Dokumentasi penting karena kode yang bagus tetapi tidak bisa dijalankan orang lain akan sulit dipakai, sulit diuji, dan sulit dikembangkan.
Prinsip utama:
Dokumentasi yang baik menjawab tiga pertanyaan: proyek ini untuk apa, cara menjalankannya bagaimana, dan apa yang harus dilakukan jika terjadi error.
Buatkan README.md untuk proyek berikut.
Isi:
tujuan proyek,
cara install,
cara menjalankan,
struktur folder,
contoh penggunaan,
masalah umum dan solusi.
Konteks proyek:
[paste deskripsi proyek di sini]
Gunakan template ini jika proyek sudah memiliki beberapa komponen, misalnya backend, frontend, database, dan Android client.
Buatkan README.md untuk proyek berikut.
Konteks:
[nama proyek]
[deskripsi singkat proyek]
Komponen:
Backend: [contoh: FastAPI]
Database: [contoh: SQLite]
Frontend: [contoh: HTML, CSS, JavaScript]
Android client: [jika ada]
Tolong buat README.md dengan isi:
judul proyek,
deskripsi singkat,
tujuan proyek,
fitur utama,
struktur folder,
kebutuhan sistem,
cara install,
cara menjalankan backend,
cara menjalankan frontend,
cara menjalankan test,
contoh penggunaan,
endpoint API jika ada,
masalah umum dan solusi,
catatan pengembangan berikutnya.
Syarat:
gunakan bahasa Indonesia,
mudah dipahami pemula,
gunakan format Markdown,
jangan terlalu panjang,
sertakan contoh perintah CLI.
Buatkan README.md untuk proyek Python berikut.
Nama proyek:
[nama proyek]
Tujuan:
[jelaskan tujuan proyek]
Fitur:
[fitur 1]
[fitur 2]
[fitur 3]
Cara menjalankan:
menggunakan Python 3
dijalankan dari terminal
Tolong isi README dengan:
deskripsi proyek,
struktur folder,
cara membuat virtual environment,
cara install dependency,
cara menjalankan program,
contoh input dan output,
masalah umum dan solusi.
Gunakan bahasa Indonesia dan format Markdown.
Contoh perintah yang sebaiknya masuk README: python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt python3 main.py
Buatkan README.md untuk proyek FastAPI berikut.
Konteks:
Aplikasi backend Todo sederhana dengan FastAPI dan SQLite.
Fitur:
tambah Todo,
lihat daftar Todo,
update status Todo,
hapus Todo,
simpan data ke SQLite.
Tolong buat README.md berisi:
deskripsi proyek,
teknologi yang digunakan,
struktur folder,
cara install,
cara menjalankan server,
cara test endpoint dengan curl,
daftar endpoint,
contoh request dan response JSON,
masalah umum dan solusi.
Gunakan bahasa Indonesia, format Markdown, dan contoh CLI.
Contoh bagian endpoint:
## Endpoint API
| Method | Endpoint | Fungsi |
| | | |
| GET | /todos | Melihat semua Todo |
| POST | /todos | Menambah Todo |
| PUT | /todos/{id} | Menandai Todo selesai |
| DELETE | /todos/{id} | Menghapus Todo |
Buatkan README.md untuk proyek frontend sederhana berikut.
Konteks:
Frontend Todo menggunakan HTML, CSS, dan JavaScript murni. Frontend mengambil data dari backend FastAPI memakai fetch().
Tolong buat README.md berisi:
tujuan proyek,
struktur folder,
cara menjalankan server lokal,
URL backend yang digunakan,
cara menambah Todo,
cara menampilkan data,
masalah umum fetch() dan solusinya.
Syarat:
gunakan bahasa Indonesia,
mudah dipahami pemula,
sertakan contoh perintah CLI,
jangan gunakan framework tambahan.
Contoh perintah:
python3 -m http.server 8080
Buatkan README.md untuk proyek Android sederhana berikut.
Konteks:
Aplikasi Todo lokal menggunakan Kotlin dan Jetpack Compose.
Tolong buat README.md berisi:
tujuan proyek,
fitur utama,
struktur project,
cara build dari CLI,
lokasi file APK debug,
cara menjalankan di emulator/perangkat,
masalah umum build dan solusi,
catatan untuk pengembangan berikutnya.
Gunakan bahasa Indonesia, format Markdown, dan contoh perintah CLI.
Contoh perintah:
./gradlew assembleDebug
ls app/build/outputs/apk/debug/
Buatkan README.md untuk proyek akhir Todo AI-Ready.
Komponen:
Backend: FastAPI
Database: SQLite
Frontend: HTML, CSS, JavaScript
Android client: Kotlin + Jetpack Compose sederhana
Fitur:
tambah Todo,
lihat daftar Todo,
update status Todo,
hapus Todo,
akses dari web,
akses sederhana dari Android.
Tolong buat README.md berisi:
judul proyek,
deskripsi singkat,
tujuan proyek,
arsitektur sederhana,
struktur folder,
cara menjalankan backend,
cara menjalankan frontend,
cara test API dengan curl,
endpoint API,
cara build Android client,
screenshot yang perlu disiapkan,
masalah umum dan solusi,
roadmap pengembangan berikutnya.
Gunakan bahasa Indonesia, format Markdown, narasi pendek, dan contoh CLI.
# Nama Proyek
Deskripsi singkat proyek. ## Tujuan
Proyek ini dibuat untuk:
tujuan 1,
tujuan 2,
tujuan 3. ## Fitur
Fitur 1
Fitur 2
Fitur 3
## Struktur Folder
```text
nama-proyek/
├── backend/
├── frontend/
├── README.md
└── screenshots/
Kebutuhan Sistem
Python 3
Git
Browser
Terminal Linux/Ubuntu
Cara Install
python3 -m venv .venv source .venv/bin/activate
pip install -r requirements.txt
Cara Menjalankan
python3 main.py
Contoh Penggunaan
python3 main.py
Output:
Program berjalan dengan baik.
Masalah Umum dan Solusi
Module tidak ditemukan
Penyebab: Dependency belum diinstall
Solusi: Jalankanpip install -r requirements.txtFile tidak ditemukan
Penyebab: Path salah
Solusi: Cek nama dan lokasi fileProgram tidak jalan
Penyebab: Virtual environment belum aktif
Solusi: Jalankan:
source .venv/bin/activate
Catatan
Proyek ini dibuat untuk latihan dan pembelajaran.
---
## **D.9 Checklist README yang Baik**
| **Pertanyaan** | **Ya/Tidak** |
|---|---|
| Apakah tujuan proyek jelas? | ☐ |
| Apakah fitur utama ditulis? | ☐ |
| Apakah struktur folder dijelaskan? | ☐ |
| Apakah cara install tersedia? | ☐ |
| Apakah cara menjalankan tersedia? | ☐ |
| Apakah contoh penggunaan tersedia? | ☐ |
| Apakah contoh CLI tersedia? | ☐ |
| Apakah masalah umum dan solusi ditulis? | ☐ |
| Apakah README cukup singkat dan mudah dibaca? | ☐ |
| Apakah README sudah diuji oleh orang lain atau dibaca ulang? | ☐ |
---
## **D.10 Prompt untuk Memperbaiki README**
Review README.md berikut.
Tolong cek:
apakah instruksi install jelas,
apakah cara menjalankan sudah lengkap,
apakah ada perintah CLI yang kurang,
apakah struktur folder mudah dipahami,
apakah masalah umum dan solusi sudah cukup,
apakah ada bagian yang terlalu panjang.
Berikan versi perbaikan yang lebih ringkas dan mudah dipahami pemula.
README:
[paste README di sini]
Buatkan dokumentasi singkat dari kode berikut.
Tolong jelaskan:
tujuan kode,
fungsi utama,
input yang dibutuhkan,
output yang dihasilkan,
cara menjalankan dari CLI,
contoh penggunaan,
error umum yang mungkin terjadi.
Kode:
[paste kode di sini]
Tidak ada cara install
Risiko: Orang lain tidak bisa mencoba
Solusi: Tulis langkah install dari awalTidak ada cara menjalankan
Risiko: Proyek sulit dipakai
Solusi: Sertakan perintah CLITerlalu banyak teori
Risiko: README sulit dibaca
Solusi: Fokus pada langkah praktisTidak ada contoh output
Risiko: Pembaca tidak tahu hasil benar
Solusi: Tambahkan contoh penggunaanTidak ada masalah umum
Risiko: Debugging lambat
Solusi: Buat tabel masalah dan solusiREADME tidak diperbarui
Risiko: Dokumentasi menyesatkan
Solusi: Update setelah perubahan besar
Golden Rule Lampiran D
README yang baik bukan yang panjang, tetapi yang membuat orang lain bisa menginstall, menjalankan, menguji, dan memahami proyek tanpa bertanya terlalu banyak.
Lampiran E. Checklist Setup Laptop Coding
Lampiran ini membantu pembaca memastikan laptop sudah siap untuk belajar AI untuk Programming dan Coding Cepat. Checklist ini sebaiknya diselesaikan sebelum masuk latihan Python, Web API, frontend, Android, dan proyek akhir.
Prinsip utama:
Laptop coding yang baik tidak harus mahal, tetapi harus rapi, bisa menjalankan terminal, Python, Git, AI lokal, dan tool pengembangan dasar.
Komponen
Status
Ubuntu/Linux siap
☐
Terminal bisa dipakai
☐
Python terinstall
☐
Git terinstall
☐
uv terinstall
☐
Editor kode siap
☐
Ollama terinstall
☐
Model AI lokal bisa jalan
☐
Docker terinstall
☐
Android Studio / tool Android siap
☐
Pastikan laptop memakai Linux/Ubuntu atau distro Linux lain yang nyaman digunakan. Cek versi sistem:
lsb_release -a
Alternatif:
cat /etc/os-release
Checklist:
Pemeriksaan
Status
Sistem operasi bisa boot normal
☐
Bisa login ke desktop
☐
Koneksi internet berjalan
☐
Update package bisa dilakukan
☐
Update awal:
sudo apt update sudo apt upgrade -y
Terminal adalah pusat kerja utama untuk coding. Cek perintah dasar:
pwd ls
mkdir test-terminal cd test-terminal nano catatan.txt
Isi catatan.txt:
Terminal siap untuk belajar coding.
Cek isi folder:
ls
cat catatan.txt
Checklist:
Kemampuan Terminal
Status
Bisa membuka terminal
☐
Bisa menjalankan pwd
☐
Bisa menjalankan ls
☐
Bisa membuat folder dengan mkdir
☐
Bisa pindah folder dengan cd
☐
Bisa membuat file dengan nano
☐
Bisa membaca file dengan cat
☐
Install Python dan tool dasar:
sudo apt install python3 python3-pip python3-venv -y
Cek versi:
python3 --version pip --version
Buat program uji:
nano hello.py
Isi:
print("Python siap dipakai.")
Jalankan:
python3 hello.py
Checklist:
Pemeriksaan Python
Status
python3 --version berhasil
☐
pip --version berhasil
☐
python3 -m venv tersedia
☐
File .py bisa dijalankan
☐
Output Python tampil di terminal
☐
Install Git:
sudo apt install git -y
Cek versi:
git --version
Konfigurasi awal:
git config --global user.name "Nama Anda"
git config --global user.email "email@contoh.local"
Buat repo uji:
mkdir test-git cd test-git git init
echo "Latihan Git" > README.md git add README.md
git commit -m "commit pertama" git log --oneline
Checklist:
Pemeriksaan Git
Status
Git terinstall
☐
git init berhasil
☐
git status bisa digunakan
☐
git add bisa digunakan
☐
git commit berhasil
☐
git log --oneline menampilkan commit
☐
Install uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
Aktifkan ulang shell:
source ~/.bashrc
Cek versi:
uv --version
Buat proyek uji:
mkdir test-uv cd test-uv
uv init
uv run python --version
Checklist:
Pemeriksaan uv
Status
uv --version berhasil
☐
uv init berhasil
☐
uv run python --version berhasil
☐
Proyek Python modern bisa dibuat
☐
Gunakan editor kode yang nyaman dan sesuai kebutuhan. Yang penting editor bisa membuka folder proyek, membaca file Python, Markdown, HTML, JavaScript, dan Kotlin.
Checklist:
Editor bisa membuka folder proyek
☐Editor bisa membuka file
.py
☐Editor bisa membuka file
.md
☐Editor bisa membuka file
.html
☐Editor bisa membuka file
.js
☐Editor bisa membuka terminal atau bekerja berdampingan dengan terminal
☐
Test sederhana:
mkdir test-editor cd test-editor nano main.py
Isi:
print("Editor dan terminal siap.")
Jalankan:
python3 main.py
Install Ollama:
curl -fsSL https://ollama.com/install.sh | sh
Cek service:
ollama --version
sudo systemctl status ollama
Jalankan model lokal kecil:
ollama run qwen2.5-coder:7b
Prompt uji:
Buatkan program Python hello world dan jelaskan untuk pemula.
Cek daftar model:
ollama list
Checklist:
Pemeriksaan Ollama
Status
Ollama terinstall
☐
Service Ollama berjalan
☐
Model lokal berhasil diunduh
☐
Model bisa menjawab prompt
☐
ollama list menampilkan model
☐
Install Docker Engine sesuai dokumentasi resmi untuk distro yang digunakan. Cek versi:
docker --version docker compose version
Test Docker:
docker run hello-world
Jika perlu menambahkan user ke grup Docker:
sudo usermod -aG docker $USER
Lalu logout dan login kembali. Checklist:
Pemeriksaan Docker
Status
Docker terinstall
☐
Docker service berjalan
☐
docker --version berhasil
☐
docker compose version berhasil
☐
docker run hello-world berhasil
☐
Docker bisa dijalankan tanpa error permission
☐
Untuk Android, pastikan tool pengembangan sudah bisa membuat project, melakukan build, dan menghasilkan APK debug.
Cek dari folder project Android:
./gradlew tasks
Build debug:
./gradlew assembleDebug
Cek APK:
ls app/build/outputs/apk/debug/
Checklist:
Pemeriksaan Android
Status
Tool Android siap
☐
Project Android bisa dibuat
☐
File gradlew tersedia
☐
./gradlew tasks berhasil
☐
./gradlew assembleDebug berhasil
☐
APK debug berhasil dibuat
☐
Emulator atau perangkat uji tersedia
☐
Komponen
Perintah Cek
Status
Ubuntu/Linux
cat /etc/os-release
☐
Terminal
pwd && ls
☐
Python
python3 --version
☐
pip
pip --version
☐
Git
git --version
☐
uv
uv --version
☐
Ollama
ollama --version
☐
Model lokal
ollama list
☐
Docker
docker --version
☐
Docker Compose
docker compose version
☐
Android build
./gradlew assembleDebug
☐
python3 tidak ditemukan
Kemungkinan Penyebab: Python belum terinstall
Solusi: Jalankansudo apt install python3 -ypip tidak ditemukan
Kemungkinan Penyebab: pip belum terinstall
Solusi: Jalankansudo apt install python3-pip -ygit commit gagal
Kemungkinan Penyebab: Nama/email Git belum diset
Solusi: Jalankangit config --global user.namedangit config --global user.emailuv tidak ditemukan
Kemungkinan Penyebab: PATH belum aktif
Solusi: Jalankansource ~/.bashrcatau buka terminal baruOllama tidak menjawab
Kemungkinan Penyebab: Service belum berjalan
Solusi: Jalankansudo systemctl start ollamaModel lokal berat
Kemungkinan Penyebab: RAM/VRAM kurang
Solusi: Gunakan model lebih kecilDocker permission denied
Kemungkinan Penyebab: User belum masuk grup docker
Solusi: Jalankansudo usermod -aG docker $USER, lalu login ulangAndroid build gagal
Kemungkinan Penyebab: Dependency atau konfigurasi belum siap
Solusi: Baca error terakhir, jalankan ulang:
./gradlew assembleDebug
Saya sedang menyiapkan laptop untuk belajar AI coding.
Kondisi saat ini:
OS: [isi OS]
Python: [hasil python3 --version]
Git: [hasil git --version]
uv: [hasil uv --version]
Ollama: [hasil ollama --version]
Docker: [hasil docker --version]
Android build: [hasil ./gradlew assembleDebug]
Tolong:
cek komponen mana yang sudah siap,
jelaskan komponen yang belum siap,
berikan langkah perbaikan minimal,
jangan menyarankan tool tambahan yang tidak perlu,
jelaskan dengan bahasa pemula.
Golden Rule Lampiran E
Sebelum belajar coding cepat dengan AI, pastikan lingkungan kerja bersih, terminal berjalan, Python siap, Git aktif, AI lokal bisa dicoba, dan semua hasil bisa diulang dari CLI.
Lampiran F. Checklist Review Kode dari AI
Lampiran ini membantu pembaca mengecek kode yang dibuat atau diperbaiki oleh AI. Tujuannya sederhana: jangan langsung percaya kode AI sebelum dibaca, dijalankan, diuji, dan dipahami.
Prinsip utama:
Kode AI adalah draf awal. Programmer tetap bertanggung jawab atas hasil akhir.
Pertanyaan
Ya/Tidak
Apakah saya paham fungsi kode ini?
☐
Apakah kode sudah dijalankan?
☐
Apakah ada error?
☐
Apakah sudah diuji dengan input salah?
☐
Apakah ada risiko keamanan?
☐
Apakah library yang dipakai benar-benar ada?
☐
Apakah kode terlalu kompleks untuk pemula?
☐
Apakah sudah masuk Git?
☐
Gunakan checklist ini setiap kali AI memberikan kode baru, memperbaiki error, menambahkan fitur, atau melakukan refactoring. Jangan lanjut ke fitur berikutnya sebelum kode saat ini benar-benar diperiksa.
Pola kerja yang disarankan:
Baca kode → Jalankan → Uji input benar → Uji input salah → Cek keamanan → Commit
Jika ada satu jawaban yang masih “Tidak”, berarti kode belum siap dianggap selesai.
Pemahaman
Pertanyaan Tambahan: Apakah saya bisa menjelaskan kode ini dengan kata-kata sendiri?
Status: ☐Input
Pertanyaan Tambahan: Apakah semua input penting sudah divalidasi?
Status: ☐Output
Pertanyaan Tambahan: Apakah output sesuai dengan kebutuhan awal?
Status: ☐Error
Pertanyaan Tambahan: Apakah pesan error mudah dipahami pengguna?
Status: ☐Library
Pertanyaan Tambahan: Apakah library yang digunakan memang tersedia dan terdokumentasi?
Status: ☐Keamanan
Pertanyaan Tambahan: Apakah ada data sensitif, token, password, atau API key di kode?
Status: ☐Kompleksitas
Pertanyaan Tambahan: Apakah kode bisa disederhanakan tanpa mengubah fungsi?
Status: ☐Testing
Pertanyaan Tambahan: Apakah sudah diuji dengan input normal, kosong, salah, dan ekstrem?
Status: ☐Git
Pertanyaan Tambahan: Apakah perubahan sudah di-commit dengan pesan jelas?
Status: ☐
Pertanyaan
Ya/Tidak
Apakah file .py bisa dijalankan dari CLI?
☐
Apakah semua variabel memiliki nama yang jelas?
☐
Apakah fungsi terlalu panjang sudah dipisah?
☐
Apakah input pengguna sudah divalidasi?
☐
Apakah try-except digunakan pada bagian yang rawan error?
☐
Apakah file yang dibaca benar-benar ada?
☐
Apakah output sudah dicek manual?
☐
Apakah ada test sederhana?
☐
Contoh perintah cek:
python3 main.py
Pertanyaan
Ya/Tidak
Apakah server bisa jalan dengan uvicorn?
☐
Apakah endpoint bisa dites dengan curl?
☐
Apakah response berbentuk JSON yang benar?
☐
Apakah input kosong ditangani?
☐
Apakah ID yang tidak ditemukan ditangani?
☐
Apakah database tersimpan dengan benar?
☐
Apakah error tidak membocorkan informasi sensitif?
☐
Apakah semua endpoint penting sudah dites?
☐
Contoh perintah cek:
uvicorn main:app --reload
curl http://127.0.0.1:8000/todos
Pertanyaan
Ya/Tidak
Apakah halaman bisa dibuka dari server lokal?
☐
Apakah tombol berfungsi?
☐
Apakah fetch() menuju URL API yang benar?
☐
Apakah data JSON berhasil ditampilkan?
☐
Apakah pesan error muncul jika backend mati?
☐
Apakah input kosong dicegah?
☐
Apakah kode JavaScript mudah dibaca?
☐
Apakah tampilan cukup jelas untuk pemula?
☐
Contoh menjalankan frontend:
python3 -m http.server 8080
Pertanyaan
Ya/Tidak
Apakah project bisa di-build dari CLI?
☐
Apakah MainActivity.kt mudah dibaca?
☐
Apakah state digunakan dengan benar?
☐
Apakah tombol menjalankan aksi yang benar?
☐
Apakah input kosong ditangani?
☐
Apakah UI tidak terlalu kompleks?
☐
Apakah error build sudah dipahami?
☐
Apakah APK debug berhasil dibuat?
☐
Contoh build:
./gradlew assembleDebug
Pertanyaan Keamanan
Ya/Tidak
Apakah tidak ada password di dalam kode?
☐
Apakah tidak ada API key di dalam kode?
☐
Apakah input pengguna divalidasi?
☐
Apakah error tidak menampilkan detail internal berlebihan?
☐
Apakah file penting tidak ikut ter-commit?
☐
Apakah dependency berasal dari sumber yang jelas?
☐
Apakah kode tidak menjalankan perintah berbahaya tanpa kontrol?
☐
Catatan penting: untuk pemula, keamanan dimulai dari hal sederhana: jangan simpan rahasia di kode, validasi input, dan jangan menjalankan kode yang tidak dipahami.
Gunakan prompt ini setiap kali menerima kode dari AI. Review kode berikut sebelum saya pakai.
Tolong cek:
apakah fungsi kode sesuai tujuan,
apakah ada bug dasar,
apakah input sudah divalidasi,
apakah ada risiko keamanan,
apakah library yang dipakai benar-benar ada,
apakah kode terlalu kompleks untuk pemula,
test apa yang harus saya lakukan,
perbaikan minimal apa yang disarankan.
Jangan menulis ulang seluruh kode kecuali benar-benar perlu. Kode:
[paste kode di sini]
Cek library yang dipakai dalam kode berikut.
Tolong jelaskan:
library apa saja yang digunakan,
apakah library tersebut umum dan terdokumentasi,
apakah ada alternatif bawaan Python yang lebih sederhana,
apakah library ini perlu diinstall,
perintah install yang benar,
risiko jika library tidak tersedia.
Kode:
[paste kode di sini]
Kode berikut terlalu kompleks untuk pemula.
Tolong sederhanakan dengan syarat:
fungsi utama tetap sama,
jangan tambah fitur baru,
jangan gunakan library tambahan,
gunakan nama variabel yang jelas,
jelaskan perubahan singkat,
berikan test manual setelah disederhanakan.
Kode:
[paste kode di sini]
Jika kode sudah dibaca, dijalankan, diuji, dan dipahami, simpan ke Git:
git status git add .
git commit -m "review dan simpan kode hasil bantuan AI"
Lihat riwayat:
git log --oneline
Golden Rule Lampiran F
Jangan pernah menganggap kode AI selesai sebelum paham fungsinya, menjalankannya, mengujinya, mengecek risikonya, dan menyimpannya dengan Git.
Glossary
| |
| |
Tidak ada komentar:
Posting Komentar