author-pic

Ferry S

An ISTJ, Type 5, Engineer, Gamer, and Thriller-Movies-Lover
Jenis Bahasa Dalam Software Engineering
Saturday Oct 28th, 2023 10:29 pm6 mins read
Jenis Bahasa Dalam Software Engineering
Source: Complete Connection - 6 Tips for Success in Computer Science Courses

“Bahasa” dalam software engineering adalah perantara antara manusia dengan mesin agar dapat berkomunikasi mengirimkan instruksi yang diinginkan terhadap program yang dibuat. Dalam software engineering, pemilihan penggunaan bahasa cukup penting saat memulai project. Pilihan bahasa yang ingin digunakan perlu disesuaikan dengan produk yang ingin dikembangkan. Right tools for the right jobs. Ibaratnya kalau dari Jakarta mau ke Bandung paling enak ya naik mobil. Kalau dari Jakarta mau ke Bali enaknya ya naik pesawat. Dari Jakarta ke Bandung naik pesawat juga bisa, tapi terlalu berlebihan. Dari Jakarta ke Bali naik mobil juga bisa, tapi ga worth it. Masing-masing bahasa punya keunikan dan keunggulan tersendiri. Bahasa tersebut dibagi ke dalam beberapa kategori seperti level, paradigma, dan cara eksekusi.

Level

Kategori pertama adalah berdasarkan level interaksi pemrograman antara manusia dengan mesin. Setidaknya ada tiga level interaksi, yaitu Low-Level, High-Level, dan Intermediary.

Low-Level Languages

Bahasa Low-Level adalah bahasa yang dieksekusi langsung oleh mesin. Jadi, orang yang melakukan development menggunakan bahasa ini langsung melakukan coding dalam bentuk instruksi bahasa mesin. Ini adalah jenis bahasa pemrograman paling cepat dibanding jenis bahasa pemrograman lainnya karena bahasanya tidak perlu di-translate, melainkan instruksinya langsung dimengerti oleh mesin. Tapi bahasa Low-Level adalah bahasa yang paling kompleks, sulit di-maintain, sulit dibaca, semuanya dikendalikan serba manual, termasuk memory management yang juga manual, dan sulit untuk dikembangkan. Makanya bahasa Low-Level ini jarang kita temukan dalam industri komersil. Bahasa seperti ini biasanya digunakan untuk mengembangkan aplikasi yang super cepat di mana performa adalah hal yang sangat kiritikal. Contohnya pada software driver yang mengkoneksikan antara hardware dengan software. Contoh bahasa Low-Level adalah Assembly dan Machine Code.

High-Level Languages

Bahasa High-Level adalah bahasa yang didesain agar mudah dimengerti manusia. Ini kebalikan dari bahasa Low-Level. Interfacenya dibikin agar lebih user-friendly, maintainable, dan gampang dipelajari. Memory management sudah di-handle otomatis oleh fitur bahasa pemrogramannya. Pola bahasanya lebih mudah dipahami manusia dibanding bahasa mesin. Dari bahasa tersebut nanti akan di-translate ke dalam bahasa mesin untuk digunakan. Ini adalah jenis bahasa yang paling sering kita jumpai di industri. Contoh bahasa High-Level adalah Java, Go, Javascript, PHP, Python, dan hampir semua bahasa pemrograman yang kita kenal.

Intermediary Languages

Bahasa Intermediary adalah bahasa yang berada di tengah-tengah High-Level dan Low-Level. Bahasa ini pendekatannya paling mirip dengan bahasa mesin, namun instruksinya masih dimengerti manusia. Secara performa bahasa ini juga hampir sama cepatnya dengan bahasa Low-Level. Namun jenis bahasa ini masih perlu di-translate ke dalam bahasa mesin seperti High-Level. Walaupun dapat dimengerti manusia, tapi bahasa tersebut memang didesain mendekati bahasa mesin sehingga implementasinya cukup kompleks dibanding bahasa High-Level lainnya. Memory management-nya juga harus di-handle manual. Bahasa seperti ini biasanya digunakan untuk mengembangkan aplikasi di mana performa sangat kritikal dan syntax codenya juga harus dapat dipahami manusia. Contoh yang paling umum adalah sistem database dan sistem operasi. Contoh bahasa Intermediary adalah C dan C++.

Paradigm

Paradigma adalah kategori berdasarkan pendekatan struktur dari sebuah code. Masing-masing bahasa juga memiliki paradigma tersendiri. Paradigma bahasa terdiri dari Procedural Programming, Object Oriented Programming, Functional Programming, Multi-Paradigm Programming, dan Domain Specific Language.

Procedural Programming

Procedural Programming adalah bahasa yang dieksekusi secara step-by-step. Konsepnya seperti stack atau tumpukan instruksi yang dieksekusi satu persatu dari atas sampai bawah. Ini adalah paradigma tertua saat pemrograman pertama kali ditemukan. Contoh bahasa yang menggunakan paradigma ini adalah C, Cobol, PHP versi 5 ke bawah, Assembly, dan bahasa-bahasa Low-Level lainnya umumnya Procedural.

Obejct Oriented Programming (OOP)

Object Oriented Programming (OOP) adalah bahasa pemrograman yang strukturnya menggunakan konsep object. Semua komponen dalam bahasa tersebut dibungkus dalam bentuk object yang nantinya bisa di-reuse oleh komponen object lainnya. Selain itu OOP juga memiliki konsep seperti Encapsulation, Inheritance, Polymorphism, dan Abstraction. Contoh bahasa yang menggunakan paradigma OOP adalah C++, Java, C#, dan lain-lain.

Functional Programming (FP)

Functional Programming (FP) adalah bahasa pemrograman yang strukturnya menggunakan konsep function. Berbeda dengan OOP, di sini semua komponen dalam bahasa tersebut dibungkus ke dalam bentuk function yang nantinya dapat digunakan oleh komponen function lainnya. Contoh bahasa yang menggunakan paradigma FP yang paling terkenal adalah Haskell dan Lisp.

Multi-Paradigm Programming

Ini adalah bahasa pemrograman yang memiliki paradigma lebih dari satu. Jadi kita bisa bebas menggunakan paradigma OOP maupun FP atau bahkan gabungan keduanya. Beberapa bahasa pemrograman modern jaman sekarang menggunakan Multi-Paradigm karena lebih variatif, ada beberapa hal yang enak di-handle menggunakan OOP, dan ada sebagian lagi yang enaknya di-handle menggunakan FP. Contoh bahasa yang menggunakan Multi-Paradigm adalah Javascript, Go, Java sejak versi 8 ke atas, dan beberapa bahasa modern lainnya.

Domain Specific Language (DSL)

Domain Specific Language (DSL) adalah paradigma bahasa spesifik untuk domain tertentu saja. Jadi ini tidak bisa digunakan untuk domain lain. DSL konsepnya bukan sebagai bahasa pemrograman, tapi hanya untuk melakukan task tertentu yang mendukung aktivitas pemrograman. Contohnya adalah SQL yang hanya bisa digunakan untuk Database, HTML yang hanya bisa digunakan untuk komponen web, dan CSS yang hanya bisa digunakan untuk desain web.

Execution

Kategori selanjutnya adalah berdasarkan cara code tersebut dieksekusi. Seperti penjelasan sebelumnya, bahasa High Level & Intermediary tidak langsung dimengerti oleh mesin, melainkan harus di-translate ke bahasa mesin. Terdapat 2 jenis cara code Intermediary & High-Level dieksekusi, yaitu Compiled dan Interpreted.

Compiled Language

Compiled Language adalah bahasa Intermediary & High-Level yang instruksinya di-translate ke dalam bahasa mesin secara keseluruhan. Jadi di sini bahasa tersebut tidak bisa langsung dijalankan, melainkan ada proses compile terlebih dahulu. Setelah di-compile barulah hasil compile tersebut bisa dimengerti oleh mesin. Walaupun hasil akhirnya adalah bahasa mesin sepenuhnya, tapi tetap saja bahasa tersebut tidak secepat bahasa Low-Level karena terdapat beberapa fitur dari bahasa tersebut yang bisa membatasi kinerja aplikasi seperti cara handle memori dan beberapa level abstraksi. Berbeda dengan Low-Level atau Intermediary di mana developer bebas menentukan algoritma paling optimal pada mesin dan dapat mengendalikan efisiensi memori secara manual. Tapi diantara bahasa High-Level lainnya, Compiled Language masih cenderung lebih cepat dibanding Interpreted Language secara performa karena hasil akhirnya dalam bentuk bahasa mesin. Sehingga banyak perusahaan komersil yang membutuhkan produk dengan performa tinggi dan tingkat maintainable yang juga tinggi menggunakan Compiled Language seperti e-commerce, aplikasi trading, dan sebagainya. Contoh Compiled Language adalah C, C++, C#, Java, Go, Rust, dan masih banyak lagi.

Interpreted Language

Interpreted Language adalah bahasa High-Level yang instruksinya di-translate ke dalam bahasa mesin line-by-line. Interpreted Language itu seperti menerjemahkan kalimat satu-satu secara bertahap, bukan secara keseluruhan seperti Compiled Language. Makanya secara performa Interpreted Language itu tidak secepat Compiled Language karena setiap code tersebut dieksekusi maka akan di-translate line-by-line. Beda dengan Compiled Language yang setelah compiled jadi aplikasi dengan bahasa mesin seutuhnya. Tapi bukan berarti Interpreted Language ini merupakan bahasa yang jelek. Kelebihan Interpreted Language adalah bisa dijalankan langsung tanpa compile terlebih dahulu. Jadi misalkan setelah coding langsung run aja, tanpa perlu proses compile sehingga proses menjalankan aplikasinya lebih cepat dibanding Compiled Language. Begitu juga saat ada perubahan ketika develop aplikasi yang sedang dijalankan, perubahan tersebut bisa langsung dieksekusi tanpa perlu restart aplikasi. Berbeda dengan Compiled Language yang ketika terjadi perubahan code maka harus di-compile ulang dan dijalankan kembali. Kelebihan lainnya, Interpreted Language biasanya didesain sesederhana mungkin, karena fokus utamanya adalah proses development yang cepat sehingga tidak butuh abstraksi yang rumit. Seperti PHP yang menggunakan “$” untuk bikin variabel atau Python yang ga perlu tanda kurung block scope “{}”. Sedangkan Compiled Language didesain agar siap pakai oleh mesin. Interpreted Language biasanya digunakan oleh produk yang kebutuhan performa eksekusinya tidak terlalu kritikal namun butuh proses develop yang cepat dan mudah dipelajari seperti Sistem Informasi Sekolah, Blog, Data Modelling, dan sebagainya. Contoh Interpreted Language adalah PHP, Javascript, Python, Perl, Ruby, dan semacamnya.

Verdict

Itulah kumpulan jenis bahasa pemrograman berdasarkan Level, Paradigm, dan Execution. Secara level bahasa dibedakan jadi High-Level, Low-Level, dan Intermediary. High-Level adalah bahasa yang paling umum digunakan karena codenya gampang dimengerti manusia. Low-Level adalah bahasa yang paling cepat secara performa namun tidak mudah dibaca codenya. Intermediary adalah bahasa yang berada di tengah-tengah High-Level dan Low-Level, bisa dibaca manusia, cepat secara performa, namun lebih rumit untuk di-maintain. Secara paradigm bahasa dibedakan menjadi Procedural, OOP, FP, Multi-Paradigm, dan DSL. Procedural adalah paradigm tertua saat pemrograman pertama kali ditemukan yang dieksekusi seperti tumpukan. OOP adalah paradigm yang membungkus komponen menjadi object. FP adalah paradigm yang membungkus komponen menjadi function. Multi-Paradigm adalah paradigm yang menggabungkan lebih dari satu paradigm dan paling sering digunakan jaman sekarang. Sedangkan DSL adalah paradigm pemrograman khusus untuk domain tertentu. Secara eksekusi bahasa dibedakan jadi Compiled & Interpreted Language. Compiled Language cenderung lebih cepat saat eksekusi karena di-translate menjadi bahasa mesin seutuhnya saat compile. Sedangkan Interpreted Language tidak perlu compile, melainkan langsung dijalankan karena di-translate line-by-line saat eksekusi. Namun bahasa Interpreted didesain lebih berfokus pada kemudahan development dan gampang dipelajari. Jadi sebelum memilih bahasa pemrograman perlu dipertimbangkan beberapa hal teknis di atas. Ga jarang beberapa perusahaan yang sebelumnya menggunakan Interpreted Language di backend migrasi ke Compiled Language karena alasan performa eksekusi yang menjadi kritikal. Seperti Facebook yang dulunya pakai PHP migrasi dengan cara menciptakan bahasa pemrograman sendiri, yaitu Hack dengan syntax mirip PHP agar backward-compatible dengan metode eksekusi compile. Slack dulunya juga PHP, lalu migrasi ke Hack. Twitter dulu menggunakan Ruby, lalu migrasi ke Scala. Shopify dari Ruby saat masih monolith, lalu migrasi ke Rust saat jadi microservices. Shopee dulu Python pada legacy codenya lalu migrasi ke Go. Perusahaan di Indonesia juga sama, dulu ada e-commerce yang menggunakan Perl, sekarang migrasi ke Go. Ada juga unicorn lainnya yang dulu menggunakan Ruby, kemudian juga migrasi ke Go. Tapi beberapa perusahaan besar yang menggunakan microservices biasanya memiliki lebih dari satu bahasa yang digunakan tergantung spesifik kebutuhannya.