Pemilihan proyek

Alat CLI, inti interpreter, atau layanan API JSON.

Daftar isi

Proyek akhir dari jalur ini bukan sekadar tugas tambahan, melainkan tempat seluruh kebiasaan yang sudah dibangun bekerja bersama, yaitu tipe yang dirancang lebih dahulu, fungsi murni di inti, batas IO yang tipis, serta pengujian properti dan unit test. Pilihan proyek menentukan bagian mana dari kebiasaan itu yang paling banyak terlatih, dan tiga wujud paling cocok untuk pemula yang serius adalah alat baris perintah, inti interpreter, dan layanan API JSON. Topik ini membandingkan ketiganya sehingga pilihan dapat ditetapkan berdasarkan sasaran yang jelas.

Tiga wujud proyek yang cocok#

Tiga wujud tersebut dipilih karena skala latihannya tepat, yaitu masing-masing cukup kecil untuk selesai dalam hitungan pekan sambil menuntut keputusan desain yang nyata. Tabel berikut merangkum wujud, inti pekerjaannya, dan kebiasaan jalur ini yang paling banyak terlatih pada masing-masing.

Wujud proyekInti pekerjaanKebiasaan yang terlatih
Alat baris perintahmembaca masukan, mengolah, mencetakparsing, Text, IO tipis, keluaran yang rapi
Inti interpretermengevaluasi ekspresi bahasa keciltipe data aljabar, rekursi, pola, evaluasi
Layanan API JSONmenerima dan membalas data terstrukturaeson, tipe tervalidasi, async, peta

Alat baris perintah memberi hasil yang paling cepat dirasakan, karena programnya berjalan langsung pada terminal dan wilayah masalahnya dapat dipilih dari pekerjaan harian, misalnya penghitung kata, pengubah satuan, atau penyaring baris. Inti interpreter menyentuh sisi yang paling khas dari Haskell, yaitu tipe data aljabar yang mendeskripsikan ekspresi dan fungsi murni yang mengevaluasinya, wilayah yang menjadi fondasi bagi pembacaan bahasa pemrograman lain. Layanan API JSON paling dekat dengan pekerjaan industri sehari-hari, karena datanya tiba dari luar dan harus divalidasi sebelum digunakan.

Menimbang dari sisi data dan efek#

Perbedaan terpenting di antara ketiganya terletak pada bentuk data dan letak efeknya. Alat baris perintah bekerja dengan data yang kecil dan terbatas, sehingga fokusnya terletak pada kejelasan transformasi, yaitu bagaimana masukan dipetakan menjadi keluaran melalui rangkaian fungsi murni yang mudah diuji. Inti interpreter bahkan lebih murni lagi, karena hampir seluruh programnya berupa fungsi dari ekspresi ke nilai, dan IO hanya muncul di tepi untuk membaca masukan serta mencetak hasil, bentuk yang paling bersih untuk menguji kebiasaan pemisahan inti dan tepi.

Layanan API JSON menuntut kehati-hatian yang berbeda, karena data mentahnya datang dari luar dan bentuknya tidak dijamin. Kebiasaan validasi di batas yang diperkenalkan pada pola smart constructor serta pembacaan aeson menjadi inti pekerjaannya, dan kegagalan yang ditangani di batas itulah yang menjaga bagian dalam tetap bersih. Kebutuhan menanggung banyak permintaan juga muncul lebih awal di sini, yaitu wilayah pustaka async yang membantu pekerjaan yang menunggu berjalan secara bersamaan.

Memilih satu dan menetapkan lingkupnya#

Pemilihan wujud sebaiknya mengikuti sasaran latihan yang paling dirasakan kurang. Sasaran kenyamanan IO dan pemrosesan teks menunjuk alat baris perintah, sasaran pemahaman tipe data aljabar secara mendalam menunjuk inti interpreter, sedangkan sasaran kesiapan bekerja pada kode produksi menunjuk layanan API JSON. Apabila sasarannya belum pasti, inti interpreter menjadi pilihan yang paling sejalan dengan isi jalur ini, karena hampir setiap topiknya berkontribusi langsung.

Lingkup proyek ditetapkan sebelum menulis, karena proyek akhir paling sering gagal karena melebar, bukan karena sulit. Satu pernyataan singkat yang memuat masukan, keluaran, dan satu fungsi intinya sudah cukup sebagai lingkup, misalnya alat baris perintah yang menghitung statistik angka dari masukan terminal, atau interpreter untuk bahasa kalkulator dengan operasi dasar. Lingkup yang ditetapkan itu kemudian dijaga, dan ide tambahan dicatat untuk versi berikutnya alih-alih langsung dibangun.

Kesalahan umum#

Kesalahan pertama adalah memilih wujud yang paling mengesankan alih-alih yang paling mengajarkan, misalnya layanan web penuh dengan basis data ketika kebiasaan dasarnya belum terlatih. Proyek kecil yang tuntas memberi lebih banyak pelajaran daripada proyek besar yang tertunda di tengah jalan, karena yang mengajarkan adalah siklus rancang, bangun, dan uji yang selesai utuh.

Kesalahan kedua berupa menetapkan lingkup yang tidak dapat dinilai benar atau salahnya, misalnya membuat alat yang dinilai baik hanya secara subjektif. Lingkup yang baik menyebut keluaran yang dapat diperiksa, seperti teks tertentu untuk masukan tertentu, keadaan yang membuat properti dan pengujian pada proyek ini memiliki sasaran yang jelas. Kesalahan ketiga berupa memulai tanpa menetapkan batas IO, padahal pemisahan itu justru kebiasaan yang paling terlatih pada jalur ini, sehingga pembacaan masukan dan pencetakan keluaran dicatat sebagai tepi sejak hari pertama, sedangkan sisanya dirancang tetap murni.

Ringkasan#

  • Tiga wujud proyek yang cocok berupa alat baris perintah, inti interpreter, dan layanan API JSON, masing-masing melatih kebiasaan yang berbeda.
  • Perbedaan terpentingnya terletak pada bentuk data dan letak efek, dari transformasi teks yang kecil sampai validasi data luar yang ketat.
  • Wujud dipilih dari sasaran latihan yang kurang, dan inti interpreter paling sejalan dengan isi jalur ini apabila sasarannya belum pasti.
  • Lingkup yang menyebut masukan, keluaran, dan fungsi intinya ditetapkan sebelum menulis, lalu dijaga sampai proyek selesai.

Referensi#