Mengapa memakai bahasa pemrograman tertentu?

Mengapa seseorang memilih suatu bahasa tertentu untuk menyelesaikan suatu masalah atau membuat aplikasi tertentu? Ternyata jawabannya bisa banyak.  Kebanyakan pilihan intinya adalah keterpaksaan dan terakhir baru faktor kenyamanan.

Keterpaksaan pertama dari non teknis, misalnya dari permintaan atasan atau permintaan client. Hal ini sering kali tidak bisa ditawar lagi, terutama jika sudah melibatkan kontrak legal. Paksaan ini sering menghasilkan kode yang aneh atau tidak menggunakan fitur yang tepat dari sebuah bahasa, karena programmer dipaksa menggunakan bahasa lain, dan karena harus buru-buru mereka akan menggunakan gaya bahasa X di bahasa Y.

Sebuah teknologi tertentu kadang hanya bisa diprogram dengan satu bahasa. Misalnya dulu ponsel cuma bisa diprogram dengan Java (J2ME) jadi ya terpaksa harus memakai bahasa Java. Microcontroller tertentu perlu memakai assembly karena ukuran ROMnya sangat kecil dan tidak ada compiler C yang bisa menghasilkan kode sekecil itu.

Sekarang ini jumlah memori dan kecepatan berbagai device sudah sangat tinggi, sehingga memungkinkan interpreter berjalan di platform apa saja. Ini memberi kebebasan memilih bahasa. Contohnya: dulu microcontroller CPU dan RAMnya sangat kecil sehingga tidak cukup untuk menjalankan interpreter Python. Sekarang sudah banyak microcontroller yang bisa menjalankan MicroPython.

Bahasa tertentu dipilih karena masalah kinerja (performance). Meskipun Python bisa berjalan di microcontroller, tapi kecepatannya jauh lebih lambat dibandingkan C/C++ (karena interpreted). Faktor kecepatan ini sangat terasa untuk keperluan tertentu, misalnya untuk membuat animasi lampu yang jumlahnya banyak. Di dalam konteks lain juga sama: bahasa tertentu dipilih karena masalah performance.

Berbagai bahasa memiliki tingkat strictness yang berbeda, dan mulai masalah sintaks sampai tipe data. Sebagian bahasa memungkinkan kecerobohan yang sulit dilakukan di bahasa lain. Contoh sederhana, dalam JavaScript kita bisa membuat kode seperti ini dan akan berjalan, walau hasilnya mungkin tidak seperti yang diharapkan.

Tipe a adalah Number dan b adalah String, tapi keduanya bisa dioperasikan

Pemula Ruby yang beralih dari bahasa tertentu (misalnya C) mungkin akan bingung dengan sifat Ruby di mana 0 dianggap true. Alasannya: 0 adalah object yang valid, dan nilainya dianggap true.

Untuk bahasa yang sangat dinamik, dibutuhkan banyak test case untuk banyak hal sederhana, sedangkan di bahasa yang tipenya dicek oleh compiler, jumlah test bisa dikurangi. Ada bahasa yang lebih strict lagi, misalnya bahasa ADA yang sempat jadi bahasa wajib oleh Department of Defense Amerika. Secara umum: bahasa tertentu mengurangi kesalahan programmer (baik dari syntax, dari compiler), sehingga bahasa tersebut dipilih untuk tujuan tertentu.

Beberapa masalah mudah diselesaikan menggunakan library yang sudah ada. Ketersediaan library ini menjadi alasan kenapa memilih sebuah bahasa. Misalnya sudah ada library OpenCV (Open computer vision) untuk memproses video secara realtime (misalnya face recognition). OpenCV ditulis dalam C++ dan  ada banyak binding sehingga fungsi-fungsi C++ ini bisa diakses dari bahasa lain (misalnya Python, Java, C#, NodeJS) tapi tidak semua binding ini sempurna, dan sebagian ketinggalan versinya. Misalnya saat tulisan ini dibuat, binding OpenCV untuk JavaScript/NodeJS versi 3 belum ada.

Jika tidak ada batasan keterpaksaan, maka alasan berikutnya adalah kenyamanan. Beberapa aplikasi bisa ditulis dalam bahasa apapun karena tidak tidak keterpaksaan tertentu. Dalam kasus seperti ini, orang bisa memilih bahasa sesuai dengan familiaritas dengan bahasa tersebut. Sebagian programmer yang menguasai banyak bahasa akan memilih bahasa yang ternyaman (dan kalau bisa yang terbaik) untuk menyelesaikan suatu masalah.

Jangan heran kalau dalam sebagian masalah, C bisa lebih nyaman dari Java atau bahasa lain.  Contoh kecil: sering kali dalam memprogram hardware kita membutuhkan array of bytes (misalnya Protocol Data Unit pada NFC). Inisialisasi array of byte di Java jika nilainya kurang dari 127 bisa dilakukan seperit ini:

byte b [] = new byte[] {1, 127};

Tapi jika nilainya lebih dari 127 tiba-tiba kodenya tidak bisa dicompile:

byte b [] = new byte[] {1, 128};

Dengan error:

incompatible types: possible lossy conversion from int to byte

Cara yang benar adalah dengan menggunakan casting ke byte:

byte b [] = new byte[] {1, (byte)128};

Sedangkan di C, dengan tipe uint8_t (dari header stdint.h) kita tidak perlu memperdulikan hal kecil seperti itu. C juga mendukung bit fields yang bisa membuat manipulasi bit tidak diperlukan (karena dilakukan oleh compiler).

Di sisi lain: membuat aplikasi web lebih sulit dilakukan dengan C. Bereksperimen dengan bilangan integer yang besar (ratusan digit, misalnya untuk operasi RSA) jauh lebih mudah dilakukan di Python dibandingkan Javascript (big integer sudah built in di Python).

Perlu dicatat bahwa bahasa pemrograman yang populer juga masih terus berkembang. Dulu untuk melakukan iterasi list di Java butuh kode yang cukup panjang, tapi kemudian syntax for ditambahkan yang memudahkan ini. Ini hanyalah syntactic sugar alias pemanis saja, di dalamnya implementasinya masih sama. Sebagian bahasa memiliki sintaks yang sudah manis dari sejak dirancang sehingga kadang seseorang lebih memilih bahasa lain.

Kadang tool yang tersedia untuk sebuah bahasa juga menjadi faktor penting dalam memilih sebuah bahasa. Tools ini bisa berupa: compiler, debugger, IDE, dll. Compiler yang lambat bisa membuat frustrasi, jika debugger tidak tersedia akan membuat development lebih lama, IDE yang jelek bisa memperlama coding (apalagi jika sering error/hang) tapi IDE yang bagus bisa mempercepat coding.

Semoga sekarang cukup jelas kenapa ada banyak bahasa, kenapa seseorang perlu mempelajari banyak bahasa, dan kenapa bahasa tertentu dipilih untuk menyelesaikan masalah tertentu.

Leave a Reply

Your email address will not be published. Required fields are marked *