Bisa bahasa pemrograman apa?

Sering ada yang bertanya ke saya: pak, bisa bahasa pemrograman apa aja sih? Biasanya hanya saya jawab: banyak (karena memang banyak). Tapi di posting ini saya ingin cerita lebih lengkap tentang bahasa-bahasa yang pernah saya pakai. Karena sudah lebih dari 25 tahun sejak saya belajar bahasa pemrograman pertama sudah banyak yang saya coba.

Sumber: TIOBE Index

Saya pertama kali belajar sendiri bahasa BASIC di IBM PC dan juga di Apple II/e ketika masih SMP. Karena belajar sendiri jadinya kurang terstruktur, tapi BASIC sangat berkesan buat saya. Saya sekarang tetap ingat bagaimana memprogram dalam BASIC (dan sempat mengajari juga dasar-dasarnya ke Jonathan). Beberapa tahun lalu saya pernah iseng membuat interpreter BASIC dalam JavaScript, dan sampai saat ini masih berfungsi. Saya bahkan sempat membeli AppGameKit, sebuah tool untuk membuat game dengan bahasa BASIC modern

Program iseng dalam BASIC/App Game Kit yang hampir seribu baris

Ketika SMU, saya belajar Pascal juga ototidak (contoh berbagai program hasil otodidak bisa dilihat di posting ini). Waktu kuliah di ITB, bahasa Pascal juga diajarkan jadi saya lebih paham lagi, termasuk juga untuk membuat berbagai struktur data. Saya sempat belajar Visual Basic, dan sempat membuat beberapa aplikasi tapi ketika kenal Delphi, ini jadi bahasa favorit saya karena bahasanya memang sangat dekat dengan Pascal tapi visual.

Bahasa yang masih saya pakai sehari-hari sampai saat ini adalah C dan juga C++. Beberapa contoh aplikasi yang saya buat: Alkitab untuk OS Symbian dan Blackberry 10. Beberapa karya saya dalam C bisa dilihat di Github saya. Saya merasa cukup paham C, karena bisa membayangkan translasinya ke assembly. Walaupun sudah memakai C++, saya sering merasa ada hal-hal mengejutkan yang saya temui.

Pengetahuan saya mengenai bahasa R sangat terbatas. Saya mengenal bahasa ini hanya karena pernah membimbing anak buah di kantor untuk integrasi C++ dengan R. Jadi saya sekedar bisa membaca dan membuat skrip kecil sekedar testing integrasi, tapi tidak pernah menulis skrip besar dalam R.

Di kampus dulu kami juga diajari Lisp, ini masih saya pakai untuk konfigurasi editor Emacs. Di kampus juga diperkenalkan bahasa Prolog dan Fortran, tapi keduanya tidak pernah saya pakai lagi sejak lulus. Walau tidak memprogram dalam Fortran, ada beberapa library Fortran yang dipakai di kode C++, jadi secara tidak langsung pengetahuan Fortran masih berguna.

Bahasa pemrograman untuk web yang pertama kali saya pelajari adalah Perl. Tentunya Perl ini tidak hanya untuk memprogram web, tapi bisa dipakai untuk membuat berbagai aplikasi command line. Saya pernah menulis seri artikel belajar Perl dulu di majalah Master Web.

Sekarang saya tidak pernah lagi memprogram dalam Perl dan lebih sering memakai Python untuk berbagai skrip yang saya tulis (di github saya juga ada beberapa project yang memakai Python). Berbagai aplikasi web kecil untuk keperluan internal kantor juga saya buat dalam Python. Ketika belajar Machine Learning, ada lebih banyak library dalam Python.

Dalam pelajaran Machine Learning dari Coursera, MATLAB juga dipakai (tepatnya saya memakai Octave, software open source yang cukup kompatibel dengan MATLAB). Dari dulu saya sering membantu berbagai program kecil MATLAB teman-teman di ITB, tapi tidak pernah benar-benar mendalami bahasanya.

Di kampus dulu saya sempat bekerja di ITB untuk mengolah data ITB. Untuk konektivitas hardware (Scanner dan Printer) bahasa yang dipakai adalah Java. Java merupakan bahasa dinamik yang saya pahami sampai internalnya (level byte codenya). Saya juga cukup hapal semua API dasarnya (maklum dulu belum ada Stack Overflow jadi baca dokumentasi JDK hampir tiap hari sampai hapal). Sampai sekarang saya masih cukup fasih memakai Java karena masih sering berhadapan dengan ini. Di repository Github saya juga ada beberapa project dalam Java. Di jaman Blackberry saya juga membuat berbagai aplikasi dalam Java.

Meskipun sudah belajar dasar-dasar Kotlin, tapi saya belum merasa mahir memakai ini. Di kepala saya, saya bisa membayangkan tiap kode Java akan seperti apa bytecodenya, tapi untuk Kotlin saya tidak selalu bisa memetakan hal tersebut. Padahal Kotlin ini seharusnya kompatibel dengan Java, tapi karena belum paham internalnya, saya merasa kurang nyaman.

Groovy adalah bahasa lain yang masih berhubungan dengan Java. Saya hanya mengenal ini karena ini dipakai oleh Gradle. Sejauh ini saya merasa kurang nyaman dengan Syntax ekstranya dan lebih memilih Java saja jika memang menargetkan JVM.

Di tahun 2000an PHP mulai sangat populer dan beberapa aplikasi mulai dibuatkan versi webnya. Ketika saya bekerja di kampus, PHP juga dipakai untuk menampilkan berbagai data ke publik. Saya mulai memakai PHP sejak versi 3. Pengetahuan PHP ini juga sangat berguna untuk pentesting.

Saya belajar Javascript sejak jaman awal memakai web dulu. Dulu saya hanya membuat skrip-skrip kecil untuk menambah interaktivitas web (dan interpreter BASIC yang saya sebutkan sebelumnya). Saya sempat meninggalkan bahasa ini, tapi sejak ES6 mulai mengikuti lagi. Saya sempat mendalami JS ketika membuatkan sebuah aplikasi berbasis AngularJS untuk organisasi teman yang butuh aplikasi mendadak. Sampai saat ini saya tidak pernah membuat aplikasi serius di sisi server dengan nodejs (menurut saya PHP atau Python lebih praktis untuk kebanyakan aplikasi sisi server). Saat ini yang Javascript saya pakai untuk membuat browser extension untuk dipakai sendiri.

Saya kenal bahasa Ruby dan bisa memakainya. Saya bahkan pernah menyelesaikan CTF yang memakai bytecode Ruby. Tapi saya tidak pernah mahir dalam Ruby karena sejujurnya: saya tidak pernah menemukan kasus di mana saya memilih Ruby. Untuk website saya lebih suka memakai Python (Django atau Flask tergantung sebesar apa webnya), sedangkan untuk scripting ada lebih banyak library Python yang tersedia. Secara umum Python juga lebih cepat.

Saya belajar bahasa Lua ketika memprogram dengan game framework Marmalade. Dulu saya bisa dapat gratis dua gamepad bluetooth dari Blackberry jika mengirimkan game dengan framework tersebut. Ketika memakai ESP8266 saya juga kadang memilih Lua untuk berbagai aplikasi sederhana.

Selagi membuat game untuk Jonathan dulu saya sangat tertarik dengan bahasa Haxe. Saya suka dengan bahasa ini karena cukup dekat dengan ActionScript 3 (saya hanya tahu AS3 ini, tapi tidak bisa Action Script 2). Haxe bisa dikompilasi menjadi kode C++, ActionScript 3, Javascript dsb.

Saat ini saya memahami beberapa bahasa assembly untuk beberapa platform: x86 (16 bit, 32 bit dan 64 bit), ARM (thumb, ARM32, dan ARM64), MIPS (MIPS32), AVR, dan 6502. Saya kenal berbagai bahasa ini dalam rentang waktu lama. Contohnya: saya belajar assembly x86 16 bit di jaman DOS, belajar assembly 32 bit di Windows, dan belajar assembly 64 bit di Linux. Saya belajar ARM sejak memakai Symbian (dan tahun lalu menang CTF dengan hadiah ke Hongkong karena skill assembly ARM ini). Saya belajar assembly AVR sejak belajar Arduino (terpakai untuk RHME sampai dapat training gratis ke Belanda), belajar MIPS ketika memakai router dengan prosessor MIPS dan belajar 6502 karena tertarik dengan game lama.

Saya sempat tertarik juga memprogram dalam bahasa Forth (pernah saya tuliskan di sini), tapi tidak ketemu akan diaplikasikan di mana. Sekarang berbagai board murah (misalnya ESP8266 dan ESP32) bisa diprogram dengan C/C++ dan hasilnya sudah sangat cepat sedangkan jika butuh eksplorasi Javascript, Micropython dan Lua juga tersedia.

Untuk shell scripting, saya hanya fasih menggunakan bash. Shell lain juga bisa tapi saya sering kali harus membaca dulu manual pagenya. Biasanya saya mengkombinasikan bash shell ini dengan GNU Awk. Di Windows saya bisa memakai batch file (batch versi Windows saat ini hanya berbeda sedikit dari jaman DOS dulu). Saya mengerti Powershell dan ketika mengikuti Flare on ada beberapa persoalan membongkar skrip Powershell, tapi saya kurang mahir memakai ini.

Meskipun sudah banyak membaca mengenai Go, tapi saya belum pernah membuat program serius. Jika sekedar ingin membuat skrip kecil, Python masih lebih enak (contoh: membaca file per baris di Go lebih ribet daripada di Python), sedangkan jika butuh performance lebih tinggi: C++ masih lebih bagus dan sekarang dengan C++11 ke atas, syntax C++jadi semakin mudah dibaca. Go sepertinya lebih cocok jika butuh sesuatu yang konkuren, tapi tergantung jenis konkurensi yang diinginkan, ini pun bisa dilakukan dengan mudah di C++ (threading sudah jadi standar di C++11).

Dalam Index TIOBE, SQL termasuk dalam bahasa pemrograman. Saya paham SQL standar, dan saya juga tahu dialek Mysql, SQLite dan PostgresSQL. Untuk DBMS lain seperti MS SQL dan Oracle, saya belum pernah menulis sendiri Stored Procedure (walau sering membaca topik ini karena masalah SQL Injection).

Dalam dunia .NET saya hanya paham C# (sudah mengerjakan beberapa proyek memakai C#). Saya juga bisa membaca Visual Basic .NET karena sangat dekat syntaxnya dengan C# tapi saya akan kesulitan jika harus menulis kode baru dengan Visual Basic .NET. Pengetahuan saya mengenai C# dan teknologi .NET secara umum tidak sedalam pengetahuan saya mengenai Java.

Meskipun belum pernah membuat aplikasi besar, saya cukup mengenal Objective C. Ini saya pelajari dulu waktu beli iBook pertama yang masih memakai Power PC. Saya sempat belajar Swift versi pertama, tapi kemudian Apple beberapa kali mengubah bahasanya, dan sampai sekarang saya belum berusaha mengikuti lagi.

Sekarang bahasa yang berusaha saya dalami adalah Rust. Dulu saya mengikuti bahasa ini, tapi kemudian ada beberapa perubahan dan kemudian saya menunggu lagi sampai bahasanya stabil. Sekarang ini sepertinya sudah cukup stabil, walau masih ada beberapa fitur yang masih akan diperkenalkan untuk mempermudah pemakaian bahasa ini.

Rust ini didengungkan sebagai bahasa yang type safe, dan ini mengingatkan saya pada Ada yang dulu diajarkan di kuliah. Saya melupakan bahasa Ada ini cukup lama sampai Bos menyebutkan bahwa ada rekannya di Jerman yang mulai memakai lagi Ada, setelah itu saya sempat melihat-lihat lagi. Andaikan ada cukup banyak library untuk Ada, sepertinya saya ingin lagi mencoba membuat program dalam Ada.

Untuk mengajari Jonathan saya jadi belajar Scratch (bahasa visual untuk anak anak). Selain itu saya jadi belajar bahasa pemrograman Logo karena Jonathan membaca seri buku Secret Coders.

Meskipun saya sudah belajar banyak bahasa dan memakai di aplikasi nyata, ada banyak bahasa lain yang saya mulai tapi tidak saya teruskan.

  • Bahasa D: keuntungannya dibandingkan C tidak terlalu banyak, IDE yang support bahasa ini juga sedikit
  • Erlang dan Elixir: sebenarnya ini menarik dan sempat tertarik karena dipakai oleh ejabberd dan RabbitMQ, tapi saya tidak menemukan kasus (untuk kasus yang saya temui) di mana bahasa ini cocok
  • Haskell: ini menarik, tapi menurut saya kurang praktis
  • COBOL: sempat baca-baca dan coba-coba karena kenal dengan developer di bank yang sedang belajar ini. Tujuannya teman saya itu mau menggantikan seniornya, sedangkan saya hanya iseng jadi tidak diteruskan
  • Dart: tadinya tertarik, tapi pemakaiannya terbatas. Sekarang dengan adanya flutter saya jadi ingin coba lagi
  • Scala: bahasanya ribet banget

Lalu ada bahasa-bahasa yang belum pernah saya sentuh sama sekali misalnya: SAS, LabView, Ladder Logic, dsb. Ini biasanya memang hanya untuk dipakai di tempat tertentu saja dan kebetulan saya belum pernah butuh itu.

Penutup

Perlu ditekankan bahwa sejak belajar bahasa pertama (BASIC) hingga saat ini sudah lebih dari 25 tahun. Sepertinya saat ini saya tahu kurang dari 25 bahasa, dan hanya benar-benar menguasai sekitar 10 saja (dalam arti cukup percaya diri untuk membuat produk dalam bahasa tersebut).

Rata-rata saya butuh waktu beberapa tahun memakai satu bahasa sampai merasa nyaman dengan bahasa itu. Jadi jangan merasa harus belajar banyak bahasa sekaligus dalam waktu singkat. Saya dulu mempelajari tiap bahasa ini biasanya diawali oleh suatu alasan:

  • Minat sendiri: waktu belajar BASIC dan Pascal
  • Memang wajib di kuliah: Prolog, Fortran, Lisp
  • Diperlukan dalam pekerjaan: waktu belajar PHP dan Java
  • Coba-coba tren: Ruby (karena Ruby On Rails)

Biasanya jika ada tujuan khusus membuat sesuatu maka saya lebih cepat bisa menguasai bahasa itu. Jika tidak ada tujuan khusus, maka saya sekedar tahu, lalu lupa lagi.

Jika sudah memiliki dasar yang kuat di satu bahasa, beberapa bahasa lain akan mudah dipelajari. Contoh: secara konsep C# dan Visual Basic .NET tidak jauh berbeda hanya Syntaxnya yang beda. Jika sudah memiliki dasar Java, beberapa bahasa lain turunannya seperti Kotlin dan Groovy mudah dipelajari. Bahasa dengan paradigma fungsional memang sangat bebeda dengan bahasa prosedural, tapi jika sudah menguasai salah satunya, mempelajari yang lain juga tidak terlalu sulit.

Saya menuliskan ini jadi bernostalgia dengan masa-masa belajar tiap bahasa di atas. Untuk para pemula: santai saja, belajarlah setahap demi setahap dan buatlah sebuah proyek kecil ketika belajar bahasa baru.

Tinggalkan Balasan

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.