Proyek akhir menyatukan materi seluruh jalur menjadi satu karya yang berjalan dari persiapan hingga pengujian. Topik ini membahas tiga bentuk proyek yang lazim untuk penutup jalur, yaitu simulasi, studi data, dan alat numerik, beserta kriteria yang memisahkan proyek yang tuntas dari proyek yang menggantung. Pembahasan diakhiri dengan contoh deklarasi cakupan dan struktur folder yang siap diisi kode.
Tiga bentuk proyek akhir#
Setiap bentuk proyek melatih kombinasi materi yang berbeda, sehingga pilihan bentuk sebaiknya mengikuti materi yang ingin diperkuat. Simulasi memperbarui keadaan pada setiap langkah waktu, misalnya model populasi sederhana dengan laju pertumbuhan tetap atau antrean loket yang kedatangan dan pelayanannya dibangkitkan dari bilangan acak berbenih (seed). Studi data meringkas data yang sudah ada, misalnya nilai ujian beberapa kelas atau catatan suhu harian, menjadi rata-rata, nilai terendah, dan nilai tertinggi. Alat numerik menghitung besaran matematis, misalnya penyelesaian sistem persamaan linear atau interpolasi, dan keluarannya berupa fungsi yang perilakunya teruji.
Tabel berikut membandingkan ketiga bentuk dari sisi fokus, materi yang dilatih, dan keluaran akhirnya.
| Bentuk | Fokus | Materi yang dilatih | Keluaran akhir |
|---|---|---|---|
| Simulasi | Memperbarui keadaan per langkah waktu | struct untuk keadaan, perulangan, bilangan acak berbenih | deret keadaan beserta ringkasan perilakunya |
| Studi data | Meringkas data yang sudah tersedia | array, Dict, comprehension, fungsi ringkasan | tabel ringkasan statistik per kelompok |
| Alat numerik | Menghitung besaran matematis | LinearAlgebra, multiple dispatch, benchmark | fungsi teruji beserta angka pengukurannya |
Ketiga bentuk sama-sama dapat dirancang agar menyentuh tipe, dispatch, dan pengujian. Simulasi memerlukan struct untuk keadaan dan fungsi langkah yang diuji terhadap kasus kecil yang dihitung tangan. Studi data memerlukan fungsi ringkasan yang dikontrak dengan jelas agar dapat diuji. Alat numerik paling menonjolkan dispatch dan pengukuran, karena satu nama fungsi melayani beberapa tipe masukan dan kecepatannya menjadi bagian dari hasil. Dengan demikian, pemilihan bentuk bukan soal selera semata, melainkan penentuan materi yang mendapat porsi latihan terbesar.
Kriteria pemilihan#
Tiga kriteria memisahkan proyek yang dapat dituntaskan dari proyek yang berhenti di tengah jalan. Kriteria pertama adalah sumber data yang dapat disediakan sendiri. Data sintetis yang dibangkitkan dari bilangan acak berbenih maupun catatan pribadi seperti log suhu memenuhi kriteria ini, sedangkan data yang harus diunduh dari layanan luar membuat pengerjaan bergantung pada ketersediaan layanan tersebut. Data yang bisa dibangkitkan ulang juga membuat hasil dan pengujian dapat direproduksi.
Kriteria kedua adalah cakupan yang dapat diakhiri. Proyek akhir sebaiknya memiliki titik selesai yang tegas berupa daftar fitur inti yang pendek. Versi pertama dinyatakan selesai apabila seluruh fitur itu lulus pengujian. Fitur tambahan tetap dimungkinkan, tetapi ditempatkan setelah titik selesai, sehingga proyek tidak berhenti karena sasarannya terus bergeser.
Kriteria ketiga adalah bahasan yang menyentuh tipe, dispatch, dan pengujian. Ketiganya adalah inti jalur ini, sehingga sebagian latihan menggantung apabila proyek tidak melibatkan salah satunya. Proyek simulasi menyentuh ketiganya melalui struct keadaan, fungsi langkah, dan ujian propertinya, sedangkan alat numerik menyentuhnya melalui metode per tipe masukan dan pengujian numeriknya. Apabila sebuah ide proyek tidak menyentuh salah satu dari ketiganya, cakupannya diperluas atau ide lain yang dipilih.
Mendeklarasikan cakupan proyek#
Cakupan proyek dinyatakan dalam satu kalimat sebelum kode pertama ditulis. Kalimat itu menyebut apa yang dihitung, batas ukuran atau durasinya, dan bagian yang sengaja ditinggalkan. Tiga contoh berikut masing-masing sesuai dengan satu bentuk proyek pada tabel di atas.
- Simulasi: “Simulasi ini menghitung pertumbuhan populasi diskrit selama seratus langkah waktu dengan laju pertumbuhan tetap, tanpa interaksi antarpopulasi dan tanpa peristiwa acak.”
- Studi data: “Studi ini meringkas nilai ujian tiga kelas berupa rata-rata, nilai terendah, dan nilai tertinggi, tanpa membandingkan antarkelas.”
- Alat numerik: “Alat ini menyelesaikan sistem linear dengan eliminasi Gauss untuk matriks berukuran hingga seribu kali seribu, tanpa memanfaatkan struktur matriks yang jarang.”
Setiap kalimat memuat tiga bagian yang sama, yaitu fitur inti, batas yang dapat dicek, dan larangan yang menutup celah perluasan. Deklarasi seperti ini menjadi pembanding yang murah ketika godaan menambah fitur muncul di tengah pengerjaan, karena fitur baru cukup diperiksa terhadap kalimat tersebut. Apabila fitur baru bertentangan dengan bagian yang dinyatakan ditinggalkan, fitur itu dicatat sebagai pekerjaan setelah versi pertama selesai.
Struktur folder sejak hari pertama#
Struktur folder proyek kecil ditetapkan sejak hari pertama agar seluruh tahap pengerjaan berjalan di tempat yang sama. Struktur itu terdiri atas Project.toml yang mencatat identitas proyek, folder src/ untuk kode sumber, dan folder test/ dengan berkas runtests.jl sebagai titik masuk pengujian. Susunan ini sama dengan konvensi package yang dibahas pada modul Lingkungan Proyek, sehingga proyek kecil dapat tumbuh menjadi package tanpa pemindahan berkas.
Blok berikut membuat struktur tersebut pada folder sementara melalui mktempdir, mencetak pohonnya dengan readdir, dan menghapusnya otomatis ketika blok selesai.
mktempdir() do akar
mkdir(joinpath(akar, "src"))
mkdir(joinpath(akar, "test"))
write(joinpath(akar, "Project.toml"), "name = \"Alat\"\nversion = \"0.1.0\"\n")
write(joinpath(akar, "src", "Alat.jl"), "module Alat\n\nend\n")
write(joinpath(akar, "test", "runtests.jl"), "using Test\n")
for nama in sort(readdir(akar))
jalur = joinpath(akar, nama)
println(nama, isdir(jalur) ? "/" : "")
if isdir(jalur)
for isi in sort(readdir(jalur))
println(" ", isi)
end
end
end
endProject.toml
src/
Alat.jl
test/
runtests.jlKeluaran di atas menampilkan struktur tingkat atas berupa Project.toml, folder src/ yang memuat modul Alat.jl, dan folder test/ yang memuat runtests.jl. Pada proyek nyata, struktur yang sama dibuat satu kali pada folder kerja, sedangkan contoh di sini menggunakan folder sementara agar demonstrasi tidak meninggalkan berkas. Folder test/ yang sudah ada sejak hari pertama memberi tempat bagi ujian pertama, sehingga kebiasaan menguji tidak menunggu kode menumpuk.
Kesalahan umum#
Kesalahan pertama adalah memilih cakupan yang terlalu luas, misalnya model populasi dengan interaksi antarspesies, visualisasi, dan ekspor laporan sekaligus. Proyek semacam itu jarang mencapai titik selesai karena setiap bagian menarik untuk disempurnakan. Perbaikannya adalah memangkas cakupan ke satu fitur inti yang dapat diakhiri, lalu menempatkan sisanya setelah versi pertama lulus pengujian.
Kesalahan kedua adalah bergantung pada data dari layanan luar. Apabila unduhan gagal atau formatnya berubah, pengerjaan berhenti tanpa ada yang bisa diperbaiki dari sisi kode. Data sintetis berbenih atau catatan yang disediakan sendiri menghilangkan ketergantungan itu. Kesalahan ketiga adalah menunda struktur folder dan pengujian hingga akhir, sehingga seluruh kode menumpuk pada satu berkas yang sulit diuji. Struktur src/ dan test/ dibuat sejak blok kode pertama, dan setiap fungsi baru langsung disertai ujiannya.
Ringkasan#
- Tiga bentuk proyek akhir yang lazim adalah simulasi, studi data, dan alat numerik, dengan fokus, materi yang dilatih, dan keluaran akhir yang berbeda.
- Kriteria pemilihannya adalah sumber data yang dapat disediakan sendiri, cakupan yang dapat diakhiri, dan bahasan yang menyentuh tipe, dispatch, serta pengujian.
- Cakupan dinyatakan dalam satu kalimat sebelum kode ditulis, dan struktur Project.toml,
src/, sertatest/runtests.jldibuat sejak hari pertama.
Referensi#
- Workflow Tips — Julia Documentation — Alur kerja pengembangan Julia dari skrip kecil hingga package.
- Creating Packages — Pkg.jl
— Konvensi struktur folder package beserta folder
srcdantest.