Kode biasa saja
Biasa2 aja gaes
Gaes, sebagaimana yang saya tulis di tentang saya. Di situ saya resmi menyatakan ngefans dengan Symfony. Tapi sayangnya gak pernah tuh saya menggunakan Symfony untuk project resmi 🤣.
Lagi, saya-pun kepincut sama Remix, web framework yang punya cita2 luar biasa untuk meningkatkan pengalaman pengguna (UX) sekaligus kodinger-nya (DX). Remix juga belum pernah saya gunakan dalam project, eh ada sih, website ini 🤫.
Antara keduanya, saya mendapatkan pelajaran yang sama2 baik. Kebaikannya bukan berarti sama, tapi lebih ke saling mengisi. Dari Symfony saya mendapatkan kebaikan yang mendasar, dan dari Remix saya mendapatkan kebaikan optimalitas sederhana yang lebih menyeluruh.
Bahasa framework
Bisa dibilang, bahasa ibu saya dalam berkode adalah PHP. Sehingga mestinya saya lebih menguasai PHP dibandingkan bahasa lain. Tapi kenyataannya tidak begitu gaes, semua itu terjadi karena terlalu banyak mazhab yang sebenarnya menjauhkan saya dari PHP.
Siapakah kreator mazhab2 tersebut? Tidak lain dan tidak bukan, yaitu para pengembang library atau framework. Yang suka CodeIgniter, menolak YII. Yang ter-gila2 dengan Laravel, menolak Symfony. Ya gpp, bukan sepenuhnya salah mereka. Mereka cuma menggunakan, begitu juga dengan saya, hanya sebagai pengguna yang disesatkan 😶🌫️.
Namun, di berbagai kesempatan memahami framework2 tersebut akhirnya saya tersadar, apa yang saya pelajari sebenarnya tidak akan bertahan lama. Ada hal yang jauh lebih penting daripada menjadi ahli library atau framework.
Seperti kita tahu, suatu framework sangat mungkin merilis update mayor setiap tahun. Pada setiap update mayor, perubahannya-pun juga banyak dan besar kemungkinan merusak kode yang sudah kita buat sebelumnya. Dengan adanya fakta tersebut, sebenarnya keahlian kita dalam ber-framework tersebut otomatis gugur. Kita harus mempelajari dan memahami bagaimana framework tersebut pada versi terkini untuk dapat menjadi ahli kembali. Belum lagi ada kemungkinan desakan dari framework secara tidak langsung untuk project yang sedang berjalan, yang memaksa kita untuk migrasi ke versi terkini juga untuk dapat tetap bertahan. Belum lagi jika bahasa dasarnya yang berubah, dari PHP 7.4 ke 8 misalnya 🫠.
Nyok kita ambil contoh sederhana dari si Carbon.
$tomorrow = Carbon::tomorrow();
Bandingkan dengan bahasa dasarnya.
$tomorrow = new \DateTimeImmutable('tomorrow');
Kira2 kesan kalian terhadap kedua kode di atas apa gaes?
Enakan carbon yak, simpel… 🥹
Betul gaes, tapi coba apa lagi kesan yang kalian tangkap?
Kodenya beda jauh yak… 🤔
Nahhh kan…
Salah satu pelajaran yang saya dapat dari Symfony adalah itu. Sependek yang saya tahu, Symfony tidak pernah mengganti sesuatu yang mendasar seperti urusan datetime
. Symfony hanya meningkatkan sesuatu yang memang butuh ditingkatkan, membuat sesuatu yang pada dasarnya sulit dilakukan dengan bahasa dasar. Bahkan Symfony menyebut dirinya hanya kumpulan komponen dasar, yang bisa menjadi framework jika dibutuhkan.
Nyok kita ambil contoh di Remix, tapi kita sekalian mundur ke React-nya. Di bawah ini adalah contoh kode di Vue.
<button @click="">gaes</button>
Bandingkan dengan di React.
function Button() {
return <button onClick="">gaes</button>;
}
Yang paling mendekati bahasa dasarnya (HTML) yang mana gaes?
Yang React sih… Event onclick di Vue jadi @click
, sedangkan di React hanya jadi camelCase, onClick
🤔
Nah… Itu tingkat library-nya yak, nyok kita masuk ke Remix.
export async function loader({ request }) {
// cara mengambil header
const headers = request.headers;
}
Di bahasa dasarnya (Javascript) juga sama.
const request = new Request('https://yuhu.gaes/anu');
const headers = request.headers;
Gimana menurut kalian gaes?
Hmmm sudah terlanjur jauh mempelajari framework… 😵💫
Bukan bukan, itu bukan framework, itu mazhab. 😶🌫️
Kode untuk manusia
Setelah kita tersesat oleh framework, potensi ketersesatan selanjutnya adalah bersumber dari kita sendiri 😶🌫️.
Lho… 😰
Beberapa waktu yang lalu, kreator Bun mendapatkan banyak kritik karena telah mengunggah kode yang dia buat. Yang menurut kebanyakan, “kenapa membuat kode yang seperti itu?”, “kenapa tidak dibuat lebih sederhana?”, dll. Kira2 begini kasus kodenya, saya lupa2 ingat 😶🌫️.
switch ($number) {
case 1:
return exec1();
case 2:
return exec2();
case 3:
return exec3();
// sampai belasan case kalau gak salah
}
Gimana menurut kalian gaes? Bayangin kalau ada hingga exec100
?
Hhmmmm… 🤔
Bukan baru2 ini sebenarnya konsep kode seperti itu ada, sudah lama itu gaes. Jadi si kodinger menghindari penggunaan kode yang hanya bisa dimengerti oleh komputer. Karena sejatinya, selain dikonsumsi oleh komputer, kode yang kita buat juga dikonsumsi oleh kita sendiri.
Saya yakin kita bisa membuatnya lebih sederhana, tapi saya yakin juga kalau beberapa waktu kemudian kita lupa alur kodenya gimana 🤣. Maka sebisa mungkin yang kita terapkan dalam berkode adalah kode yang mudah diingat dan mudah dibaca. Apalagi jika kasusnya rumit, yang membutuhkan ribuan baris (diasumsikan 1 file). Yang paling aman adalah membuatnya apa adanya dan biasa2 saja. Ekstrimnya saya sebut sebagai kode bodoh 😶. Ya meskipun menurut kodinger lain, yang menganut aliran biasa2 saja, menyebutnya sebagai kode cerdas. Boleh juga lah ya, bodoh karena memang dikonsumsi untuk kita yang bodoh ini, cerdas karena langkah yang dipilih merupakan tujuan jangka panjang.
Kode yang baik?
Gak ada gaes! 🤣
Kalian kira kebaikan itu statis? Kalian kira kebenaran itu berhenti sampai di situ aja? Jangankan berkode dalam tim, berkode sendiri aja kita bisa ber-kali2 revisi kok. Banyak prinsip yang bisa kalian adopsi, tapi bukan berarti prinsip tersebut pasti dapat selalu diimplementasikan. Jadi gak perlu fanatik2 amat yak, berkode juga butuh woles.
Seperti yang kita tahu, dalam hidup, masalah gak perlu dicari juga pasti datang2 sendiri gaes. Pada saatnya nanti, kode yang sudah kita buat seoptimal mungkin, akan kita revisi demi tujuan yang lebih baik lagi. ☕️