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). 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 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 keduanyatidak 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. 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 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. 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 berbagai 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 gamepad 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 sampai 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. Saya belajar ARM sejak memakai Symbian (dan tahun lalu menang CTF dengan hadiah ke Hongkong karena skill ini). Saya belajar AVR sejak belajar Arduino (terpakai untuk RHME sampai dapat training 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#. 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 saya pribadi) 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 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 sesuatu ketika belajar bahasa baru.

Membaca Buku Digital

Posting ini sekedar mengupdate bagaimana sekarang saya membaca buku elektronik. Tahun 2012 saya sudah mulai memakai Kindle dengan eink, dan mulai membeli konten dari Amazon. Sekarang sudah 7 tahun sejak Kindle pertama yang saya beli.

Kindle pertama sudah rusak (terinjak waktu menggendong Jonathan), lalu sudah beli lagi Kindle keyboard 3G dan Kindle paperwhite. Sekarang keduanya masih ada dan kadang masih dipakai untuk membaca jika ada cerita fiksi yang sedang saya sukai.

Kindle e-ink masih enak untuk membaca buku fiksi/non teknis yang tidak perlu dibaca acak. Untuk buku teknis yang harus bolak balik mengecek ke halaman lain, Kindle terasa sangat lambat dan layarnya kurang besar. Saya lebih suka membaca dengan kindle yang klasik, lebih terasa seperti kertas. Sayangnya yang klasik ini tidak bisa dibaca dalam gelap.

Selain masalah sifatnya yang seperti kertas, batere kindle cukup tahan lama. Asalkan kita tidak menyalakan fitur wirelessnya, baterenya masih cukup untuk beberapa minggu dengan pemakaian ringan (atau beberapa hari jika cukup berat). Dulu saya pikir kindle ini bakal jadi pegangan ketika liburan supaya tidak terlalu memikirkan batere, kenyataannya tetap saja saya lebih sering memegang HP.

Handphone memang lebih praktis karena selalu dibawa ke mana saja, sedangkan repot sekali membawa Kindle ke mana-mana jika tidak berniat secara khusus membaca sesuatu. Biasanya saya mulai dulu membeli dan membaca sebuah buku di HP, dan jika terasa menarik, saya download juga kontennya di kindle lalu saya teruskan baca di Kindle karena layar HP (yang sudah 6 inch) masih terasa terlalu kecil untuk membaca teks panjang.

Beberapa minggu terakhir ini saya memakai iPad untuk membaca dan sejauh ini cukup suka. iPad sangat cocok untuk membaca buku teknis, PDF readernya sangat cepat dan layarnya cukup besar untuk menampilkan semua informasi. Batere iPad juga cukup tahan lama dibandingkan HP.

Untuk konten, saya tetap membeli dari Amazon karena masih yang paling murah. Pernah saya menghabiskan pulsa Telkomsel hasil pentesting untuk membeli beberapa buku bahasa Indonesia dan pernah juga saya mendapatkan satu kupon dari Google Play Books dan membeli satu buku, tapi selain itu belum pernah membeli buku lain.

Sekarang saya juga sedang trial Scribd yang memiliki cukup banyak buku fiksi yang menarik (misalnya dari Stephen King, Agatha Christie dan Terry Pratchett) , tapi sayangnya belum punya cukup banyak waktu untuk membaca. Biasanya jika saya sudah mulai membaca cerita yang menarik jadi penasaran dan terus membaca, jadi kalau belum punya waktu sangat banyak, saya urungkan dulu membaca buku non teknis.

Konten teknis sekarang saya dapatkan dari Safari Books Online. Ini sangat praktis dan bisa diakses dari HP, web, dan juga dari iPad. Sesekali saya membeli juga buku dari humble bundle jika ada yang menarik (dan tidak ada di Safari Books). iPad juga memiliki fitur print to PDF, jadi berbagai blog teknis kadang saya save menjadi PDF untuk dibaca menggunakan software iBooks.

Seminggu terakhir ini saya juga mencoba menggunakan Apple Pencil untuk memberikan anotasi dan juga untuk mencatat. Sejauh ini Apple Pencil memang sangat nyaman dipakai, tapi saya belum optimal untuk tujuan utamanya: untuk membaca dan mencoret-coret berbagai paper.

Saya belum terbayang bagaimana saya akan membaca buku di masa depan. Mungkin di masa depan jika teknologi layar lipat sudah semakin murah dan bagus, sehingga tidak perlu lagi membawa-bawa tablet.

Tools untuk persoalan matematika

Sebenarnya tidak terlalu banyak persoalan matematika yang saya hadapi tiap hari, tapi jika ketemu biasanya saya akan menggunakan berbagai tool yang saya tahu. Untuk penjumlahan, perkalian biasa saya biasanya memakai Python karena sudah bisa langsung menangani big number.

Untuk persoalan tertentu, Wolfram Alpha di Raspberry Pi (versi gratis) atau Mathematica (desktop, saya tidak punya ini) bisa sangat membantu. Contohnya ketika ada yang mengirimkan teka-teki ini, saya memakai wolfram.

Terjemahan soalnya ke Wolfram sangat langsung

Beberapa kali saya juga menyelesaikan soal CTF dengan Wolfram, misalnya ini (persamaan linear), ini (persamaan modular) dan ini (visualisasi point 3d).

Ketika membaca buku murderous math, Jonathan sangat tertarik dengan bilangan prima. Beberapa kali dia bertanya apakah N bilangan prima? dia bahkan membuat daftar dengan metode Sieve of Erathosthenes, tapi karena tulisannya tidak rapi, kadang salah markingnya. Di command line Linux dari paket coreutils ada tool bernama factor. Ini bisa dipakai untuk memfaktorkan bilangan kecil

Magic Square, fungsi menghasilkan Magic Square ini tidak ada secara default di Wolfram, tapi saya tahu ini ada di Octave/Matlab.

Ada berbagai metode untuk menghaslikan magic square ini secara manual (misalnya staircase method). Berbagai contoh online juga ada, tapi jika ingin sekedar menunjukkan ke Jonathan Magic Square yang ditambah dengan konstanta N, memakai octave ini lebih gampang.

Dulu waktu SMU saya memakai software MathCad untuk komputasi simbolik matematika. Saya bisa menuliskan ekspresi matematika, dan melakukan diferensiasi/integrasi secara simbolik. Ini dulu sangat berguna untuk mengecek apakah “rumus cepat” dari bimbingan belajar memang benar dan apakah berlaku untuk semua kasus. Sekarang ada Wolfram Alpha yang bisa memberikan jawaban serupa (dan versi berbayar yang menyediakan langkah-langkahnya).

Seperti yang saya sebutkan di atas, persoalan matematika yang saya hadapi tidak banyak, jadi tool-tool yang saya pakai juga tidak banyak. Saya sekedar tahu permukaan berbagai tool tersebut, cukup untuk berbagai persoalan yang saya hadapi sehari-hari. Saya juga cukup senang tool-tool ini bisa dipakai untuk mengajari homeschool Jonathan.

Meninggalkan Flickr

Sebenarnya dari sekitar 5 tahun yang lalu kami sudah tidak mengupload lagi foto ke Flickr, tapi ada banyak foto di blog ini yang melink ke Flickr. Waktu itu kami masih berlangganan Flickr Pro (25 USD/tahun). Flickr kemudian menggratiskan foto sampai 1TB, dan kemudian merugi jadi akhirnya dijual ke perusahaan lain.

Sekarang jumlah foto pengguna gratis dibatasi (1000 foto saja) dan Flickr Pro sekarang 60 USD/tahun (jika dibayar per tahun, atau 6.99 jika dibayar bulanan). Jika kami beralih ke free, maka kami hanya bisa menyisakan 1000 foto (dan otomatis foto terlama yang dihapus), tapi rasanya kurang berguna juga langganan pro. Mereka memberi kesempatan untuk mendownload semua foto, tapi mensortir lagi semua foto tersebut akan butuh waktu. Jadi sekarang saya putuskan:

  • Langganan dulu pro selama beberapa bulan
  • Semua foto yang dilink dari semua blog kami akan didownload dan diupload kembali ke blog
  • Semua album yang banyak isinya diupload ulang ke Google Photos
  • Setelah selesai, hentikan langganan Flickr Pro

Hari ini sudah beres membersihkan blog ini dari link Flickr. Ketika bersih-bersih saya menemukan juga beberapa foto link eksternal (multiply dan beberapa layanan lain) yang sudah tutup jadi tidak bisa diakses lagi. Sepertinya cara yang paling aman melink sekarang ini:

  • Upload ulang fotonya di blog ini
  • Link ke sumber original

Jadi andaikan sumber aslinya sudah hilang pun, tetap ada arsipnya. Sebenarnya ini tidak penting bagi pengguna blog, karena jarang ada yang membaca posting lama, tapi ini penting bagi kami yang ingin punya arsip digital hidup ini.

Nama orang Indonesia

Sudah beberapa kali muncul di media massa dan juga media sosial mengenai berbagai nama unik yang ada di Indonesia (misalnya: TUHAN, SETAN, dsb). Saya penasaran dengan berbagai nama yang lain, dan ternyata KPU pernah mengupload data semua orang di Indonesia yang memiliki hak pilih. Sayangnya saya terlambat mendownload data karena pilkada DKI sudah lewat, jadi datanya hanya yang non DKI saja.

Sekarang saya buatkan situs ini untuk eksplorasi berbagai nama yang ada di Indonesia. Kita bisa mencari nama yang diawali, diakhiri, mengandung, atau tepat sama dengan kata tertentu. Kita juga bisa melihat berapa banyak total nama yang ditemukan.

https://nama.em.sg

Nama yang di website KPU tidak bersih, misalnya ada karakter “/”, “.” dsb. Untuk memudahkan: saya hapus semua selain A-Z dan spasi. Setelah data dibersihkan ada sekitar 45 juta nama unik yang berhasil saya kumpulkan. Total datanya: 774 Mb.

Ada banyak hal iseng yang bisa dilakukan, misalnya mencari tahu berapa yang nama depannya ASEP (karena ada Paguyuban Asep Dunia). Hasil pencarian bisa dishare langsung URL-nya.

Internet Cepat Untuk Programmer

Satu hal yang sangat membuang waktu sebagai programmer adalah: mengupdate software untuk development. Untuk programmer, biasanya ini berkaitan dengan SDK dan IDE yang baru. Biasa kita punya dua pilihan: mengupdate sekarang atau nanti.

Mengupdate sekarang berarti membuang waktu sekarang, dan artinya bisa menunda pekerjaan. Sementara menunda update juga kadang menimbulkan masalah: beberapa hal tidak berjalan lancar, dan kadang jika kita melompati update terlalu banyak, tiba-tiba jumlah masalah jadi meningkat atau bahkan project tidak lagi bisa berjalan.

Kebanyakan IDE hanya akan update jika kita buka. Ini sering mengesalkan buat saya: saya tidak sering memprogram satu topik untuk waktu yang cukup lama. Ketika ingin mulai membuat program: harus update dulu. Kadang hal seperti ini menghilangkan mood untuk membuat program kecil.

“Hanya” 422 Mb

Jika ingat, saya akan menjalankan IDE yang saya pakai hanya sekedar untuk mengupdate saja. Nanti kalau saya benar-benar butuh, setidaknya jumlah updatenya tidak terlalu banyak.

Ditambah lagi dengan 770 Mb

Salah satu alasan saya masih memakai Emacs dan mengcompile di command line (dengan CMake, Gradle, dsb) adalah: saya punya kontrol terhadap proses tersebut. Jika karena update IDE atau project jadi error, saya tetap bisa meneruskan kerja dengan editor dan compile dengan command line.

Ini bakal butuh waktu lama: 5.95 GB

Saya cukup suka dengan IntelliJ, ada ToolBox di toolbar yang memungkinkan kita mengupdate aplikasi cukup dengan satu klik saja. Andaikan ada yang membuatkan ini untuk semua IDE, maka hidup ini akan jauh lebih enak.

Saya beruntung Internet di sini cepat dan murah (saya ambil paket 1200 THB, 500Mbps/500Mbps). Sebelum pulang liburan ke Indonesia, saya mengupdate dulu semua software yang saya pakai, dan ketika di sana tidak mengupdate sama sekali. Saya tidak bisa membayangkan mereka yang harus mendownload bergiga-giga dengan Internet yang lambat.

Saya pake paket yang kanan

Windows Subsystem for Linux

Salah satu alasan saya dulu menyukai OS X adalah: ada terminal di mana kita bisa menjalankan berbagai utility command line yang sudah saya kenal bertahun-tahun. Sementara dulu di Windows kita perlu menginstall Cygwin atau MSys agar bisa memakai shell, dan perintah yang adapun sangat terbatas.

Tapi sejak beberapa tahun lalu Microsoft mendukung Windows Subsystem for Linux (WSL) atau kadang dikenal sebagai: bash on Windows. Begitu diumumkan, saya langsung mendaftar agar bisa langsung mencoba fiturnya. Awalnya saya tidak berharap banyak, tapi ternyata implementasinya memang bagus, dan ini sudah jadi sesuatu yang saya pakai setiap hari.

Teknologi yang dipakai WSL adalah menjalankan langsung syscall Linux di Windows. Jadi kita tidak perlu mengkompilasi ulang program kita di Linux, bisa langsung dicopy dan akan jalan di Windows. Tentunya ini hanya bisa jika semua library/dependency dicopy juga ke Windows. Microsoft hanya mendukung WSL ini di sistem 64 bit. Tidak 100% program Linux bisa jalan (apalagi jika mengakses hardware), tapi lebih dari 90% aplikasi yang saya butuhkan bisa jalan di WSL.

Setiap kali butuh perintah yang biasanya hanya ada di Linux (misalnya find), saya langsung mengetik “bash” untuk masuk ke shell bash di direktori saat ini, lalu menjalankan perintahnya. Microsoft tidak menyediakan XServer, tapi kita bisa memakai VcXsrv untuk menjalankan aplikasi X.

Gabungan berbagai program GUI Windows dan keampuhan command line Linux membuat saya jadi betah memakai Windows. Dulunya saya sempat ingin mendalami PowerShell, tapi baru tahu permukaannya saja sudah merasa bahwa bahasanya agak aneh. Sekarang sejak adanya WSL ini, saya jadi lebih jarang lagi memakai powershell.