Pemilihan proyek

Menimbang pilihan proyek pamungkas: alat CLI, layanan web JSON, atau aplikasi browser.

Daftar isi

Modul pamungkas jalur ini mengerjakan satu proyek Nim secara utuh, dan langkah pertamanya bukan menulis kode, melainkan memilih proyek yang tepat. Topik ini menimbang tiga kandidat, yaitu alat baris perintah, layanan web JSON, dan aplikasi browser, dengan kriteria yang dinyatakan secara eksplisit. Salah satu kandidat kemudian dipilih dan diberi lingkup yang jelas, karena proyek yang sama akan dikerjakan bertahap pada sisa modul ini, mulai dari perancangan, pembangunan dengan titik pemeriksaan, hingga rilis. Pada akhir topik, pilihan proyek sudah final beserta prototipe kecil yang membuktikan bahwa ide dasarnya bekerja.

Tiga kandidat proyek#

Kandidat pertama adalah alat baris perintah (command line tool), yaitu program yang menerima argumen dan berkas lewat terminal, lalu menampilkan hasilnya sebagai teks. Pada Nim, program semacam ini dikompilasi dengan nim c menjadi satu berkas biner native yang dijalankan tanpa memasang Nim pada mesin tujuan. Pustaka standar menyediakan pembacaan argumen lewat modul std/os, pembacaan berkas, dan penguraian teks, sehingga kebutuhan sederhana tidak menuntut dependensi eksternal. Contohnya adalah penghitung statistik atas berkas data, pengonversi format teks, atau alat pencarian pada berkas log.

Kandidat kedua adalah layanan web JSON, yaitu program server yang menerima permintaan (request) HTTP dan menjawabnya dengan data berformat JSON. Nim menyediakan modul std/asynchttpserver untuk server HTTP asinkron dan std/json untuk penguraian serta pembentukan JSON. Layanan semacam ini diuji dengan mengirim permintaan lewat alat seperti curl, sehingga pengujian otomatis menuntut pengelolaan siklus hidup server, yakni memulai server, mengirim permintaan, lalu menghentikannya. Kerumitan tambahan ini wajar untuk proyek backend, tetapi menambah beban di luar logika inti.

Kandidat ketiga adalah aplikasi browser yang dikompilasi dengan nim js menjadi berkas JavaScript dan dijalankan bersama halaman HTML. Bagian yang berinteraksi dengan pengguna ditulis terhadap DOM (Document Object Model), yaitu representasi pohon dari elemen halaman web. Logika yang tidak menyentuh DOM masih dapat diuji seperti program biasa, sedangkan bagian antarmukanya memerlukan browser, sehingga otomatisasinya berada di luar jangkauan pengujian baris perintah sederhana.

Kriteria penimbangan#

Pemilihan proyek tidak diambil dari selera, melainkan dari kriteria yang dinyatakan lebih dahulu. Empat kriteria berikut mencerminkan tujuan proyek pamungkas pada jalur ini, yaitu melatih disiplin pengerjaan perangkat lunak dari desain sampai rilis:

KriteriaAlat CLILayanan web JSONAplikasi browser
Distribusi hasilsatu biner nativebiner ditambah port jaringanHTML, JavaScript, dan hosting
Pengujian otomatisunittest tanpa infrastrukturserver berjalan ditambah curlbrowser atau lingkungan node
Ketergantungan lingkunganterminal sajaport dan alat HTTPbrowser beserta DOM
Cakupan materi jalurtipe, modul, ORC, nimbleasync, JSON, jaringanbackend js dan DOM

Dari tabel di atas, alat CLI menonjol pada dua kriteria yang paling menentukan keberhasilan proyek kecil, yaitu pengujian otomatis dan distribusi. Seluruh logikanya dapat diuji dengan unittest tanpa infrastruktur tambahan, dan hasil akhirnya berupa satu biner yang mudah dibagikan. Layanan web dan aplikasi browser tetap kandidat yang sah, tetapi keduanya menuntut perhatian pada infrastruktur di luar logika inti, yakni siklus hidup server dan antarmuka DOM. Proyek yang dipilih adalah alat CLI bernama suhu, yaitu penghitung statistik deskriptif untuk berkas CSV catatan suhu.

Prototipe pembanding#

Keyakinan atas kandidat yang dipilih diuji dengan prototipe, yaitu program kecil yang ditulis cepat untuk membuktikan satu ide dasar. Prototipe tidak mengurus penanganan error maupun struktur modul, karena tugasnya hanya menjawab satu pertanyaan teknis, apakah membaca berkas CSV lalu menghitung statistiknya berjalan lancar dengan pustaka standar. Berkas data yang menjadi masukan prototipe diberi nama suhu.csv dan berisi catatan suhu harian selama sepuluh hari:

text suhu.csv
tanggal,suhu
2026-01-02,21.5
2026-01-03,22.1
2026-01-04,20.8
2026-01-05,23.4
2026-01-06,24.0
2026-01-07,22.6
2026-01-08,21.9
2026-01-09,23.1
2026-01-10,22.3
2026-01-11,20.5

Berkas tersebut berformat CSV dua kolom dengan baris header tanggal,suhu diikuti satu catatan per baris. Prototipe berikut membacanya, menjumlahkan kolom suhu, lalu menampilkan rata-ratanya:

nim prototipe.nim
## Prototipe cepat: membaca suhu.csv lalu menghitung rata-ratanya.
import std/strutils

var
  total = 0.0
  banyak = 0

for baris in readFile("suhu.csv").splitLines():
  let kolom = baris.split(',')
  if kolom.len == 2 and kolom[0] != "tanggal" and baris.strip() != "":
    total += parseFloat(kolom[1])
    banyak += 1

echo "banyak data : ", banyak
echo "rata-rata   : ", formatFloat(total / banyak.float, ffDecimal, 2)

Kompilasi dan eksekusi dilakukan dalam satu perintah dari direktori tempat suhu.csv berada:

bash
# mengompilasi sekaligus menjalankan prototipe
nim c -r --hints:off prototipe.nim
text Keluaran
banyak data : 10
rata-rata   : 22.22

Angka pada keluaran dapat diperiksa ulang dengan mudah. Penjumlahan sepuluh nilai suhu adalah 222.2, sehingga rata-ratanya 22.22, dan banyak baris data adalah 10 setelah header serta baris kosong terabaikan. Prototipe juga menunjukkan bahwa format angka dua desimal menghasilkan tampilan yang rapi, sebuah detail yang nantinya masuk ke dalam desain laporan.

Lingkup proyek yang dipilih#

Proyek suhu diberi lingkup yang sengaja sempit agar setiap bagiannya selesai dengan baik. Masukannya adalah satu berkas CSV dua kolom dengan baris header tanggal,suhu, dan keluarannya adalah laporan enam baris berisi nama berkas, banyak data, suhu minimum, suhu maksimum, rata-rata, serta median. Baris yang cacat, misalnya kolomnya kurang dari dua atau suhunya bukan angka, memunculkan pesan error ke standard error (stderr) dan membuat program berakhir dengan kode keluar bukan nol. Hal yang sengaja berada di luar lingkup adalah CSV dengan kolom lain, pemilihan kolom lewat argumen, dan antarmuka grafis.

Lingkup semacam ini tetap menyentuh hampir semua materi jalur. Definisi tipe dan penguraiannya melatih objek serta string, perhitungan statistiknya melatih seq dan perulangan, strategi memorinya melatih ORC, penguraiannya diuji dengan unittest, dan pengemasannya menggunakan nimble. Fitur yang ditunda, seperti dukungan kolom pilihan, dapat ditambahkan setelah inti proyek selesai tanpa mengubah desain dasarnya. Dengan lingkup yang tertulis, pengerjaan pada tahap-tahap berikutnya dapat diperiksa terhadap daftar yang sama, bukan terhadap kesan keberhasilan yang berubah-ubah.

Kesalahan umum#

  • Memilih proyek terlalu besar. Semangat awal sering mendorong lingkup yang luas, misalnya layanan web lengkap dengan basis data, padahal waktu modul ini terbatas. Perbaikannya adalah memilih satu fitur inti yang bisa diselesaikan hingga rilis, karena satu fitur yang utuh lebih berharga daripada lima fitur yang setengah jadi, dan sisa ide disimpan sebagai catatan pengembangan berikutnya.
  • Menilai opsi tanpa kriteria tertulis. Tanpa kriteria, pemilihan berbalik menjadi selera dan sulit dipertahankan saat lingkup ditinjau ulang. Perbaikannya adalah menuliskan kriteria dalam bentuk tabel sebelum membandingkan kandidat, sebagaimana dilakukan di atas, sehingga tabel itu juga menjadi catatan yang bisa dibuka ulang.
  • Memperlakukan prototipe sebagai kode final. Prototipe sengaja mengabaikan penanganan error dan pemisahan modul, sehingga memaksanya jadi kode utama akan menumpuk utang teknis. Perbaikannya adalah menganggap prototipe bukti konsep yang digantikan implementasi terstruktur setelah desain ditulis, dan berkasnya diberi nama prototipe.nim agar tidak tertukar.

Ringkasan#

  • Tiga kandidat proyek ditimbang dengan empat kriteria, yaitu distribusi hasil, pengujian otomatis, ketergantungan lingkungan, dan cakupan materi jalur.
  • Alat CLI dipilih karena hasilnya satu biner native, seluruh logikanya dapat diuji dengan unittest, dan tidak menuntut infrastruktur tambahan.
  • Proyek yang dipilih bernama suhu, yaitu penghitung statistik deskriptif untuk CSV catatan suhu dengan laporan enam baris.
  • Prototipe prototipe.nim membuktikan ide dasarnya bekerja, dengan rata-rata 22.22 atas sepuluh catatan pada suhu.csv.

Referensi#