Bahasa Assembly

Saya pernah meremodel permainan retro Mega Man 5 menjadi ‘permainan baru’, dengan saya beri judul Indonesian Artifact. Dan itu ternyata sudah sedekade lalu saat saya tuliskan artikel ini.

Bahasa pemrograman yang saya gunakan pada saat itu adalah NMOS 6502, atau singkatnya, salah satu bahasa Assembly.

Waktu itu saya mengoding benar-benar langsung dari angka-angka heksadesimal, tanpa ada sintaks apa pun.

bahasa assembly

Saya masih sedikit mengingat-ingat perintah per byte dari pemrograman assembly tersebut.

Misalnya, saat kita ingin mendeklarasikan sebuah variabel, kita meregister sebuah angka, kemudian kita masukkan ke dalam alamat RAM tertentu.

Begitu pun saat melakukan branching (if-else), dan subroutine (function), semuanya menggunakan heksadesimal.

Seluruh prilaku boss/raja benar-benar saya tulis ulang pada saat itu, semuanya langsung menggunakan heksadesimal. Sintaksnya langsung seperti A9 04 9D 0c 03 dst.

Sejujurnya, bisa mengetahui bahkan memprogram dengan bahasa assembly benar-benar berdampak dahsyat bagi saya selaku programmer.

Ada setidaknya lima dampak positif yang mengagumkan yang saya dapatkan dari memprogram dengan bahasa assembly. Apa saja itu?


Mengenal konsep programming

Bahasa assembly saya sebut sebagai ‘nenek moyang’ bahasa pemrograman apa pun, bahkan sebelum bahasa C lahir.

Karena bahasa C sudah memakai sintaks yang dapat dipahami oleh manusia, seperti IF, ELSE, FUNCTION, dst. Tidak seperti bahasa assembly yang masih dengan angka-angka seluruhnya.

Sintaks bahasa assembly bernama OPCODES, yang artinya setiap perintah diwakili dalam bentuk angka tertentu. Misalnya, A9 adalah LDA yang artinya kita meLoaD ke Accumulator sebuah angka yang nantinya akan kita simpan ke RAM, atau menjadi variabel, dll.

Bahasa assembly membuat saya memahami konsep dasar pemrograman apa pun. Itu membuat saya lebih mudah untuk mempelajari bahasa pemrograman ‘modern’ apa pun.

Pastinya, bahasa pemrograman apa pun mulai dari C, C++, C#, Java, Dart, Rust, Python, PHP, Javascript, R, Go, LUA, dst., semuanya memiliki muara konsep seperti yang telah saya pelajari di bahasa Assembly.

Jadi, setiap saya mempelajari sebuah bahasa pemrograman, saya hanya perlu mempelajari perilaku bahasa pemrograman tersebut itu saja.

Misalnya, Python tidak perlu titik koma dan skupnya memakai indentasi. Atau PHP benar-benar loose typing atau bebas menentukan tipe variabel, tidak seperti C# yang harus kita tentukan tipe variabel dari awal seperti int, String, bool, dll.

Contoh lainnya, ada bahasa yang memulai arraynya dari 1, bukan 0, dan behavior/prilaku itu harus saya kenalan dari awal.

Itu saja. Karena selebihnya pasti akan sama konsepnya.

Namun yang saya benci dari sebuah bahasa pemrograman adalah saat mereka menggunakan jargon ‘aneh’ untuk saya pahami. Seperti misalnya Kotlin, yang menggunakan istilah Unit yang berarti tidak memiliki nilai return.

Kenapa harus memakai istilah “Unit”? Kenapa tidak pakai “void” yang jauh lebih familiar?

Istilah-istilah atau jargon tersebutlah yang membuat saya lebih lama dalam mempelajari sebuah bahasa pemrograman, dan saya sangat membenci itu.


Manajemen memori

Beberapa orang takjub saat saya beberkan bahwa aplikasi yang saya buat, dengan user yang setiap detik aktif, dan memiliki lebih dari 3GB database serta 3TB file dokumen, ternyata masih bertahan di RAM yang hanya 4GB.

Saya juga menunjukkan, load sebagian besar data pun masih di bawah satu detik, hanya ratusan milisekon.

Mereka pikir, aplikasi yang seperti itu seharusnya sudah memiliki RAM 16 hingga 32GB.

Saya hanya tersenyum, sekaligus bersyukur. Sebab saya tiba-tiba menyadari bahwa mungkin ini adalah manfaat saya mempelajari bahasa assembly.

Manajemen memori adalah hal yang sangat krusial dalam pemrograman assembly. Saya menjadi paham apa itu pointer, mengapa array dimulai dari NOL, dan konsep garbage collecting.

Bayangkan, game-game kompleks Nintendo jadul (NES), kebanyakan memiliki ukuran file yang tidak lebih dari 512KB. Benar, kilobyte. Dan itu sudah termasuk grafik, data level, musik, dan pastinya pemrograman seluruh objeknya.

Bahkan ukuran RAM konsolnya saja hanya 64KB. Pastinya sangat terbatas untuk menampung variabel grafik, musik, dan data program dari game yang sedang berjalan.

Melihat keterbatasan itulah saya harus mencari cara agar bisa memampetkan seluruh objek yang saya inginkan agar dapat muncul di permainan retro itu.

Dari sana secara tidak langsung saya benar-benar peduli dengan memori dan efisiensi, yang secara tidak langsung membudayakan saya agar senantiasa melakukan proses benchmarking.

Saya benar-benar membuat SOP bahwa tidak boleh ada data yang diproses lebih dari satu detik.

Saya juga memastikan bahwa pilihan menambah resource seperti meningkatkan kapasitas RAM dan/atau CPU adalah pilihan terakhir setelah tidak ada lagi yang dapat saya optimasi.

Termasuk situs Anandastoon ini, saya benar-benar menekan resourcenya sehingga bukan hanya membuat halaman situs web termuat dengan cepat, melainkan juga agar situs Anandastoon ini tidak memboroskan kuota internet kalian. ๐Ÿ˜‰

Ini buktinya, Google yang nilai langsung.

bahasa assembly


Menghargai programming

Agak mengernyitkan dahi saat saya melihat banyak programmer yang bergontok-gontokkan masalah framework.

Bukan hanya sekali dua kali saya melihat programmer yang memaksakan dalam merekomendasikan sebuah framework, hingga berdebat mengenai framework mana yang terbaik.

Misalnya, saya melihat banyak programmer yang berdebat mengenai framework CI & Laravel. Saya yang hanya menggunakan PHP murni untuk mengembangkan aplikasi, tidak memiliki masalah itu.

Padahal framework diciptakan oleh orang-orang baik secara gratis untuk membantu proses pembuatan aplikasi. Yang sebenarnya tanpa framework sekali pun setiap developer dapat menciptakan aplikasi yang hebat.

Nyatanya, ternyata tidak sedikit dari para programmer yang tidak memahami bahasa asli si framework karena mereka sedari awal hanya ingin memakai framework.

Kasus lainnya lagi, banyak programmer Javascript yang tidak memahami Javascriptnya itu sendiri. Mereka lebih memahami jQuery, Angular, Vue, atau React.

Sehingga, tidak sedikit programmer yang saat menemukan kesulitan, mereka semerta-merta akan menambalnya dengan library lain daripada mencari solusinya terlebih dahulu.

Saya sendiri pun menggunakan library, namun seperlunya saya saja. Misalnya, saya menggunakan jQuery dan beberapa library pendukung seperti ChosenJS untuk meng-enhance elemen select HTML, atau yang lainnya.

Namun bukan berarti library tersebut saya pakai secara default. Jika hanya membuat aplikasi yang sangat ringan, saya hanya menggunakan Javascript murni. Saya hingga membuat library sendiri yang berisikan kumpulan ekstensi Javascript.

Sejujurnya saya sendiri belum pernah menggunakan framework Javascript seperti Angular, React, atau Vue.

Bahkan library yang sudah ada saya ekstensi lagi untuk mengakomodasi keperluan saya, seperti jQuery yang saya tambahkan beberapa fungsi untuk melakukan template animasi tanpa harus repot-repot memanggil fungsi animate dan mendeklarasikan parameternya lagi.

Saya hanya tidak ingin membuat aplikasi ringan yang memiliki ukuran bahkan hingga lebih dari 10MB.


Menghemat waktu

Mirip seperti poin pertama, saat seorang developer sudah mengenal konsep bahasa pemrograman, ia akan banyak menghemat waktu.

Seperti saya yang belajar Kotlin yang hanya kurang dari tiga hari dan langsung membuat aplikasi dengannya.

Belum lagi, sang developer akan secara naluriah membuat ekstensi atau library mereka sendiri dengan bahasa pemrograman itu.

Seperti, jika mereka menemukan perintah yang berkaitan dengan tanggal, mereka akan langsung membuat fungsi mereka sendiri sehingga mereka tidak semerta-merta melakukan kalkulasi tanggal dari awal setiap kali mereka berhadapan dengan tanggal.

Hal itu tentu saja akan jauh lebih mempersingkat waktu mereka dalam membangun sebuah aplikasi atau game.

Sama seperti waktu saya menekuni bahasa assembly, begitu banyak JSR atau subrutin yang saya buat sendiri demi memangkas waktu mengoding saya. Subrutin dapat saya artikan sebagai function, yang saya hanya tinggal panggil saja tanpa harus menulis dari awal lagi.

Yang menyenangkan, saya bisa membuat fungsi yang begitu ringan dan fleksibel. Sehingga sebuah fungsi dapat langsung menyediakan hasil yang bermacam-macam dari input yang juga bermacam-macam.

Contoh, saya mengekstensi fungsi JS untuk melakukan penjumlahan tanggal dari sebuah String, dan nilai kembaliannya juga tetap String. Formatnya saya hanya tinggal menulis untuk mem-parsenya dan me-returnnya. Itu pun masih bisa di-custom lagi.

Semua ekstensi homemade itu saya kumpulkan untuk dapat saya gunakan kembali di kesempatan lain.


Memiliki kebanggaan

Gengsi seorang programmer dapat diraih saat seorang developer membuat sebuah karya dengan programmingnya.

Tetapi gengsi itu tidak semerta-merta bertahan lama.

Sama seperti profesi lainnya seperti desainer atau fotografer. Saat seorang fotografer menghasilkan foto bagus, ia akan berbangga. Namun kebanggaannya itu akan jauh lebih berkesan dan bertahan lama apabila formula pemotretannya ia temukan sendiri.

Berbeda dengan fotografer yang hanya memotret lewat pengaturan template.

Begitu pula dengan programmer, saat ia dapat membuat aplikasi yang indah hanya dengan template, ia mungkin berbangga, namun itu tidak bertahan lama.

Terlalu bergantung dengan template akan membuat seseorang cepat bosan sebab ia tidak memahami esensi bidang yang ia tekuni.

Bahkan seorang programmer tidak akan memiliki standar sebab ia tidak mengenal konsep programming.

Tidak jarang saya temukan programmer yang memiliki portfolio aplikasi yang indah dan menakjubkan, namun ternyata tidak dapat terpakai dalam kasus real dan terpental.

Saat bertemu dunia nyata, seorang programmer yang tidak memiliki standar akan was-was, khawatir apabila aplikasinya lamban, sering cepat panas, terlalu banyak bug, dan dipakai secara brutal oleh para penggunanya.

Programmer yang memahami konsep akan meminimalisir rasa was-was itu. Bahkan mereka lebih berbangga saat mereka menemukan bahwa aplikasi/game mereka membuat para penggunanya berbahagia.

Dan jangan lupa, programmer yang memahami standar akan lebih sering diam karena rendah hati, menghindari perdebatan yang tidak perlu agar lebih fokus mengembangkan produk mereka.

Suka
Komentar
pos ke FB
pos ke Twitter
๐Ÿค— Selesai! ๐Ÿค—

  • Sebelumnya
    Salah Satu yang Terberat Bagi Programmer


  • 0 Jejak Manis yang Ditinggalkan

    Minta Komentarnya Dong...

    Silakan tulis komentar kalian di sini, yang ada bintangnya wajib diisi ya...
    Dan jangan khawatir, email kalian tetap dirahasiakan. ๐Ÿ˜‰

    Kembali
    Ke Atas

    Terima kasih telah membaca artikel Anandastoon!

    Apakah artikelnya mudah dimengerti?

    Mohon berikan bintang:

    Judul Rate

    Desk Rate

    Terima kasih telah membaca artikel Anandastoon!

    Dan terima kasih juga sudah berkontribusi menilai kemudahan bacaan Anandastoon!

    Ada saran lainnya untuk Anandastoon? Atau ingin request artikel juga boleh.

    Selamat datang di Polling Anandastoon.

    Kalian dapat iseng memberi polling seperti di Twitter, Facebook, atau Story Instagram. Pollingnya disediakan oleh Anandastoon.

    Kalian juga dapat melihat dan menikmati hasil polling-polling yang lain. ๐Ÿ˜Š


    Memuat Galeri Poll...

    Sebentar ya, Anandastoon muat seluruh galeri pollnya dulu.
    Pastikan internetmu tetap terhubung. ๐Ÿ˜‰

    Asik poll ditemukan!

    Silakan klik salah satu poll yang kamu suka untuk mulai polling!

    Galeri poll akan terus Anandastoon tambahkan secara berkala. ๐Ÿ˜‰

    Judul Poll Galeri

    Memuat poll...

    Sebentar ya, Anandastoon memuat poll yang kamu pilih.
    Pastikan internetmu tetap terhubung. ๐Ÿ˜‰

    Masih memuat ~

    Sebelum memulai poll,

    Anandastoon ingin memastikan bahwa kamu bukan robot.
    Mohon agar menjawab pertanyaan keamanan berikut dengan sepenuh hati.
    Poll yang 'janggal' berpotensi dihapus oleh Anandastoon.
    Sebab poll yang kamu isi mungkin akan bermanfaat bagi banyak orang. ๐Ÿค—

    Apakah nama hari sebelum hari Kamis?

    Mohon jawab pertanyaan keamanan ini. Jika jawaban benar, kamu langsung menuju pollnya.

    Senin
    Rabu
    Jumat
    Sabtu

    Atau, sedang tidak ingin mengisi poll?

     

    Wah, poll telah selesai. ๐Ÿค—

    Sebentar ya... poll kamu sedang di-submit.
    Pastikan internetmu terhubung agar dapat melihat hasilnya.

    Hasil poll ๐Ÿ‘‡

    Menunggu ~

    Ups, sepertinya fitur ini masih dikembangkan Anandastoon

    Di sini nantinya Anandastoon akan menebak rekomendasi artikel yang kamu inginkan ~

    Heihei maihei para pembaca...

    Selesai membaca artikel Anandastoon? Mari, saya coba sarankan artikel lainnya. ๐Ÿ”ฎ

     

    Ups, sepertinya fitur ini masih dikembangkan Anandastoon

    Di sini nantinya kamu bisa main game langsung di artikelnya.

    Permainan di Artikel

    Bermain dengan artikel yang baru saja kamu baca? ๐Ÿ˜ฑ Kek gimana tuh?
    Simpel kok, cuma cari kata dalam waktu yang ditentukan.

    Mempersiapkan game...

    Aturan Permainan

    1. Kamu akan diberikan sebuah kata.

    2. Kamu wajib mencari kata tersebut dalam artikel.

    3. Kata yang ditemukan harap diblok atau dipilih.
    Bisa dengan klik dua kali di laptop, atau di-tap dan tahan sampai kata terblok.

    4. Terus begitu sampai kuota habis. Biasanya jumlahnya 10 kuota.

    5. Kamu akan berhadapan dengan waktu yang terus berjalan.

    6. DILARANG Inspect Element, CTRL + F, atau find and replace. Juga DILARANG berpindah tab/windows.