Categories
desktop

Jadi Kaya Lewat Pemrograman Desktop

Di Indonesia pemrograman desktop sudah ditinggalkan orang-orang. Dulu masih banyak orang-orang yang membuat aplikasi desktop dengan Visual Basic, Borland Delphi, atau Java Swing. Saya pernah membuat aplikasi manajemen stok di gudang dengan Java Swing kira-kira 15 tahun yang lalu. Kini siapa yang masih membuat aplikasi desktop?

Lima belas tahun yang lalu itu, hidup masih berjalan dengan lambat. Internet sudah ada. Tapi yang menikmati masih sedikit. Belum ada AWS. Mau bikin aplikasi web, pilihan kebanyakan cuma PHP saja. Belum ada ponsel pintar seperti iPhone atau Android. Yang ada hanyalah ponsel Nokia yang cuma bisa SMS (mungkin MMS juga). Saat itu aplikasi desktop masih berjaya karena belum ada aplikasi seluler (mobile app) dan internet masih belum menjangkau banyak penduduk Indonesia.

Kemudian ponsel pintar lahir (tahun 2007, iPhone lahir). Beberapa waktu berselang, Android banting setir mengikut jejak iPhone. Beberapa tahun kemudian ponsel pintar merajalela di Indonesia. Dengan alat yang revolusioner ini, orang-orang bisa mengakses internet. Orang tidak perlu laptop atau komputer untuk berhubungan dengan internet. Mereka cukup membeli ponsel pintar Android yang sangat murah, sekitar beberapa juta Rupiah.

Saat itu AWS mulai menjadi populer sehingga mengembangkan aplikasi web yang kompleks menjadi lebih mudah. Teknologi web juga menjadi lebih matang di ponsel. Desain responsif (responsive design) muncul untuk mengatasi ukuran perambah yang bisa berbeda-beda di desktop dan ponsel.

Kemudian lahirlah calon yunikon-yunikon seperti Tokopedia, Bukalapak, Gojek, dan Traveloka. Mereka menyediakan jasa dalam bentuk aplikasi web yang bisa diakses oleh ponsel pintar. Perusahaan-perusahaan ini bertumbuh pesat. Sangat pesat. Mereka menjadi raksasa. Semua orang pun tergiur untuk membuat perusahaan dan aplikasi yang serupa yang memanfaatkan internet.

Dengan semua alasan itu, masih adakah motivasi yang tersisa untuk membuat aplikasi desktop? Untuk aplikasi baru, perusahaan pun memutuskan lebih hemat jika aplikasi itu dibuat sebagai aplikasi web. Bahkan jika yang memakai itu 1 orang, sekalian saja buat aplikasi web. Peladen webnya beralamatkan localhost yah tidak apa-apa. Aplikasi web tapi berperilaku seperti aplikasi desktop.

Pemrograman itu kompleks dan luas. Mencari pemrogram yang bagus itu susah. Membutuhkan biaya dan komitmen untuk membuat aplikasi desktop dan aplikasi web sekaligus karena mereka adalah dua platform yang jauh berbeda. Untuk membuat masalah lebih kompleks, membuat aplikasi desktop membutuhkan pertimbangan terhadap 3 platform desktop seperti Windows, Mac, Linux. Iya, ada platform pemrograman yang multiplatform seperti Java Swing. Tapi tidak semua orang suka terhadap Java Swing karena satu dan lain hal, misalnya kulit (skin) aplikasi tidak terlihat asli. Betul, membuat aplikasi web juga memaksa kita untuk mempertimbangkan perbedaan antara perambah (browser) dalam menafsirkan HTML, CSS, dan JavaScript. Tapi perbedaan antara platform desktop itu jauh lebih besar daripada perbedaan antara perambah.

Terlepas dari perbedaan antara perambah, aplikasi web bisa dinikmati oleh semua platform desktop (Windows, Mac, dan Linux). Perusahaan berpikir adalah lebih hemat untuk membuat aplikasi web. Aplikasi web bisa melakukan “apa saja” yang dilakukan oleh aplikasi desktop. Tapi ada “sesuatu” yang dilakukan oleh aplikasi web tapi tidak dapat dilakukan oleh aplikasi desktop. Aplikasi web tidak perlu dipasang (install) oleh pengguna. Lebih praktis.

Saya belum membicarakan aplikasi seluler (mobile app). Di Indonesia, lebih banyak orang memiliki ponsel pintar ketimbang laptop atau komputer. Perusahaan berpikir membuat aplikasi seluler lebih berfaedah ketimbang membuat aplikasi desktop karena mereka bisa lebih menjangkau banyak orang. Saya pernah mengakses situs dari sebuah perintis di desktop. Saya mengeluhkan kenapa situsnya tampilannya tetap ala seluler di desktop saya. Wakil Teknik (VP of Engineering) dari perintis itu bilang yang pakai desktop cuma 10%, sisanya lewat ponsel. Mereka bilang ingin fokus ke tampilan ala seluler. Tampilan situs di desktop saja “tidak terlalu” diperhatikan. Hal ini masih dalam ranah aplikasi web. Bayangkan seberapa kecil kemungkinan sebuah perusahaan mau membuat aplikasi desktop?

Makanya pemrograman desktop sudah ditinggalkan banyak orang di Indonesia. Masih adakah alasan untuk membuat aplikasi desktop? Masih adakah uang yang bisa didapatkan dari membuat aplikasi desktop? Mungkin sudah saatnya kita membuat eulogi atas pemrograman desktop.

“Pemrograman desktop, kalian sudah mengisi relung hati kita paling dalam dengan Visual Basic, kalian sudah memberi terang dengan Java Swing, kalian sudah menjadi teman dengan Borland Delphi, tapi saatnya kalian beristirahat dengan damai sampai akhir jaman.”

Tapi mari kita memberi kesempatan sekali lagi ke pemrograman desktop. Bagi kalian yang masih menggunakan desktop, apakah kalian menggunakan aplikasi desktop selain perambah (Firefox / Chrome / Safari / Edge) dan pengeksplorasi berkas (Windows Explorer / Nautilus / Finder)? Kemungkinan besar ya. Saya menggunakan aplikasi Android Studio, XCode, Vim, Visual Studio Code, Spotify, Adobe Photoshop, Adobe Illustrator, Virtual Box, iTerm, StarCraft 2, Fork (klien Git).

Apakah aplikasi-aplikasi desktop ini ada padanannya dengan aplikasi web atau aplikasi seluler? Saat ini belum ada aplikasi web/seluler pengganti Android Studio / XCode. Bagaimana dengan aplikasi penggubah teks seperti Vim atau Visual Studio Code? Sudah ada aplikasi web/seluler penggubah teks tapi orang masih lebih produktif dengan aplikasi seperti Vim atau Visual Studio Code. Spotify? Iya, mungkin ini aplikasi yang nilai tambahannya cukup kecil dibandingkan dengan aplikasi Spotify versi web/seluler. Adobe Photoshop dan Adobe Illustrator? Versi web belum ada. Versi seluler fiturnya masih belum lengkap. Lagipula menggubah gambar dengan jari di ponsel agak ribet. Virtual Box dan iTerm? Belum ada versi webnya dan aplikasi ini berhubungan langsung dengan performansi komputer dan membutuhkan akses langsung ke sumber daya di komputer. StarCraft 2 adalah permainan video yang belum ada versi web atau seluler. Fork adalah aplikasi yang membantu pengaturan Git di lokal. GitHub atau GitLab tidak dapat membantu banyak dalam hal ini.

Seperti yang kita lihat, dunia belum kiamat bagi pemrograman desktop. Jika Anda ingin mencari uang dengan membuat aplikasi desktop, peluang-peluangnya masih ada. Tapi Anda harus mengambil sudut yang tepat. Jika Anda membuat aplikasi pengaturan penjualan, pembelian, stok barang di sebuah perusahaan yang dipakai lebih dari satu pengguna (dengan kata lain aplikasi CRUD), nilai yang bisa dikasih oleh aplikasi desktop itu kecil. Mending bikin aplikasi web. Lebih praktis. Aplikasi pengaturan Sumber Daya Manusia (HRD)? Sudah ada beberapa aplikasi SDM yang dibuat oleh perusahaan-perusahaan Indonesia. Dari yang saya lihat, semuanya berbentuk aplikasi web. Menurut saya, strategi mereka tepat. Tidak ada faedahnya membuat aplikasi desktop. Mereka harus memikirkan instalasi di Mac, Windows, dan Linux yang bisa bikin sakit kepala.

Tapi ada situasi di mana aplikasi desktop lebih cocok atau disukai oleh pengguna. Aplikasi yang butuh akses ke berkas komputer itu cocok berbentuk aplikasi desktop. Misalnya Anda ingin menganalisa berkas-berkas apakah yang mengambil penyimpanan yang paling banyak. Ini kan tidak cocok berbentuk aplikasi web. Masakan Anda mengunggah semua berkas di komputer Anda ke peladen di awan? Bagaimana dengan plikasi web dengan peladen beralamatkan di localhost di komputer pengguna? Bisa saja. Tapi meminta pengguna untuk memasang peladen Nginx di komputer mereka itu merusak pengalaman pengguna. Lebih baik bikin pemasang (installer) yang lebih bersahabat. Keunggulan aplikasi desktop di situasi ini ada satu lagi, yaitu privasi.

Aplikasi yang butuh eksekusi cepat lebih bagus berbentuk desktop, misalnya Android Studio / XCode / Vim / Visual Studio Code. Memang ada aplikasi pengembang yang terintegrasi berbentuk web, yaitu Cloud9. Ada juga penggubah teks dalam bentuk aplikasi web seperti CKEditor 5. Tapi mereka memiliki masalah latensi dan performansi. Aplikasi desktop bisa menggunakan API di komputer seperti mmap yang bisa memanipulasi ruang alamat virtual (virtual address space) untuk meningkatkan performansi.

Aplikasi yang butuh akselerasi dan akses ke kartu grafis lebih bagus berbentuk aplikasi desktop, seperti Adobe Photoshop atau Adobe Illustrator. Memang ada aplikasi penggubah gambar dalam bentuk aplikasi web. Tapi keterbatasan perambah dalam mengakses sumber daya di komputer membuat aplikasi web penggubah gambar terbatas fitur dan performansinya.

Aplikasi desktop juga memiliki akses ke penyimpanan tanpa batas sementara perambah biasanya dibatasi sampai 2 GB atau 10% dari kapasitas total. Ini adalah salah satu alasan kenapa kita tidak dapat membuat Android Studio versi web. https://stackoverflow.com/questions/10988569/storage-limits-on-chrome-browser/55483549#55483549

Apakah Anda sudah terbakar semangatnya untuk mencari uang dengan membuat aplikasi desktop? Mari kita lihat contoh beberapa aplikasi desktop dan tantangannya.

John Skinner, adalah seorang pemrogram yang meninggalkan pekerjaannya di Google pada tahu 2007 untuk mengembangkan aplikasi penggubah teks. Dia punya visi penggubah teks yang bagus itu seperti apa. Padahal dia sudah tahu cara memakai Vim. Tapi dia mendirikan perusahaan yang akan berkutat terhadap pengembangan aplikasi penggubah teks.

Pada awal tahun 2008, versi 1.0 dari Sublime Text keluar. Fitur-fiturnya masih sederhana. Penggubah teks tidak terpolusi oleh dialog yang tidak penting. Aplikasinya bisa menjadi penuh layar di beberapa monitor. Penyorotan sintaksis ekspresi regular.

Pada pertengahan tahun 2009, versi 1.2 dari Sublime Text keluar. Fitur-fiturnya seperti: sistem proyek, dukungan terhadap format TextMate, Python API yang sudah ditingkatkan.

Pada awal tahun 2010, versi 1.3 dari Sublime Text diluncurkan. Fitur-fiturnya semakin banyak: simbol goto, dukungan penyorotan sintaksis terhadap lebih banyak bahasa, dll.

Pada awal tahun 2011, Sublime Text dengan versi 2 pun keluar. Peranti lunaknya lebih sepadan dengan distribusi Linux selain Ubuntu. Tambahan jalur singkat di Mac untuk mengganti tab. Dukungan penyorotan sintaksis terhadap bahasa Go.

Pada tahun 2017, setelah melalui proses versi Beta bertahun-tahun, Sublime Text 3 keluar. Ada segudang fitur-fitur yang diluncurkan seperti pengindeksan simbol, manajemen panel, peningkatan kecepatan, penggunaan Python versi 3 ke atas untuk API-nya, peningkatan performansi Retina, dll.

Ada satu hal yang selalu dibanggakan oleh pemrogram pembuat Sublime Text atas peluncuran Sublime Text 3, yaitu peningkatan kecepatan. Seperti yang dikutip di blognya: “One of the areas I’m especially proud of in Sublime Text 3 is performance: it’s significantly faster than Sublime Text 2 along every axis. Startup is faster, opening files is faster, and scrolling is more efficient. While it’s a much larger application than 2, it feels leaner.”

Performansi ini susah dicapai jika Sublime Text 3 adalah aplikasi web. Perambah tidak bisa sembarang membiarkan halaman web mengakses memori komputer. Dengan menulis aplikasi desktop, pembuat aplikasi bisa mengakses API yang sangat berkuasa.

John Skinner atau perusahaannya Sublime HQ Pty Ltd (dia sudah mempekerjakan beberapa orang) mengeluarkan aplikasi desktop selain aplikasi penggubah teks. Namanya Sublime Merge. Aplikasi desktop ini adalah klien Git.

Saking besar komitmennya terhadap performansi dan kecepatan, mereka menggunakan mmap ketika membaca berkas objek git. mmap adalah pemetaan memori. Teknik ini berguna ketika kita ingin menangani berkas yang ukurannya besar, lebih besar daripada memori yang kita punya. Misalnya membuka berkas dengan ukuran 5 GB ketika memori kita cuma 4 GB. Ketika kita “membaca” sebagian berkas raksasa ini, aplikasi akan melihat apakah sebagian berkas ini sudah ada di memori atau tidak. Jika tidak sebagian berkas itu akan ditaruh di memori. Terus akibat penggunaan mmap ini, mereka bertemu dengan masalah seperti SIGBUS, dukungan 32 bit, dll. https://www.sublimetext.com/blog/articles/use-mmap-with-care

Saya menceritakan kisah pengembangan Sublime Text dan Sublime Merge ini karena mengembangkan aplikasi desktop yang sukses bukan cuma masalah “menghafal” API tampak muka grafikal. Anda menghafal 320 kelas atau fungsi untuk memanipulasi tampak muka grafikal seperti membuat jendela (window), mengubah warna tombol, membuat baris alat (toolbar), dll, itu bagus ๐Ÿ‘. Tapi Anda juga kadang-kadang harus memberikan upaya ekstra seperti yang dilakukan pengembang Sublime Text dan Sublime Merge ini. Upaya ekstra inilah yang akan membuat aplikasi web tidak dapat menyaingi aplikasi desktop.

Aplikasi desktop apa lagi yang dicintai banyak orang? Sketch. Aplikasi desktop ini banyak dipakai oleh desainer tampak muka atau pengembang aplikasi web atau aplikasi seluler. Percaya tidak percaya, orang umumnya membuat aplikasi web atau aplikasi seluler dengan aplikasi desktop. Tapi aplikasi desktop ini ada kekurangannya yaitu cuma tersedia di platform Mac. Kompetitornya, yaitu Figma, berbentuk aplikasi web. Bagaimanapun saya harus mengakui, aplikasi desktop itu bukan solusi paripurna terhadap semua permasalahan di dunia.

Kalau Anda ingin mengembangkan aplikasi desktop, Anda harus eling bahwa aplikasi ini harus memberi banyak keunggulan daripada aplikasi web: performansi, fitur yang lebih kaya, kecepatan, integrasi yang lebih baik terhadap sistem operasi, akses ke penyimpanan yang lebih murah hati.

Aplikasi desktop apakah yang dapat membantu banyak pengguna desktop? Itu yang harus ada di pikiran Anda. Oh ya, jangan membatasi diri Anda terhadap pengguna-pengguna desktop di Indonesia. Ada banyak pengguna desktop di seluruh dunia. Untuk mendapat inspirasi, Anda dapat melihat-lihat aplikasi yang dijual di App Store atau Windows App – Microsoft Store atau Snapcraft.

Oke, Anda sudah mendapat ide. Jadi saatnya mengembangkan aplikasi desktop. Teknologi apakah yang Anda akan gunakan? Saya bisa menulis satu buku untuk menjawab pertanyaan ini. Tapi saya akan memberi jawaban singkat.

Electron adalah teknologi yang paling populer. Slack, Visual Studio Code, Spotify menggunakan Electron untuk aplikasi desktop mereka. Jika Anda punya keahlian JavaScript atau TypeScript, ini adalah pilihan yang terbaik. Satu kali mengembangkan, Anda dapat 3 platform sekaligus. Sekali mendayung, tiga pulau terlampaui. Tapi banyak pembencinya karena setiap aplikasi Electron menggunakan mesin Chrome tersendiri. Boros memori.

Jika Anda cinta Java atau Kotlin, Anda dapat memakai JavaFX. Banyak pustaka yang tersedia untuk mengembangkan aplikasi desktop. Platform pustaka pihak ketiga Java Virtual Machine itu sangat matang, tidak sekacau NPM-nya Node.js.

Anda juga dapat menggunakan Qt, tapi lisensinya LGPL. Anda tidak dapat menggabungkan pustaka dengan aplikasi Anda secara statik karena pengguna aplikasi Anda berhak untuk mengganti pustaka Qt yang disambungkan ke aplikasi Anda. Kecuali Anda bayar lisensinya atau Anda membuat aplikasi sumber terbuka (open source). Qt menggunakan C++ tapi ada ikatan (binding) dalam bahasa Python, yaitu PySide2.

Setelah itu, Anda juga dapat menggunakan platform asli di sistem operasi, misalnya GTK+ di Linux, Cocoa di Mac, Universal Windows Platform di Windows. Platform asli sangat disukai oleh pengguna karena terintegrasi paling baik terhaap sistem operasi. Tapi kerjanya banyak. Kalau Anda mengembangkan aplikasi desktop ini di 3 platform, berarti Anda harus kerja 3x. Ini yang dilakukan oleh pengembang Sublime Text. Going the extra mile… ๐Ÿƒ

Dilemanya sama dengan mengembangkan aplikasi seluler di Android dan iOS dengan pendekatan asli (Android – Kotlin/Java dan iOS – Swift/Obj-C) atau pendekatan multi-platform seperti React Native atau Flutter.

Ada juga WxWidgets yang menggunakan C++ tapi mereka memiliki ikatan terhadap bahasa-bahasa lain. Flutter juga mulai meluncurkan dukungan terhadap desktop tapi hari masih awal.

Jika Anda ingin mendapat pengetahuan holistik tentang menjadi kaya lewat pemrograman, silahkan beli buku saya: Pemrogram Rp 100 Juta: Panduan Pemrogram Untuk Menggapai ๐Ÿ’ฐ Harta, ๐Ÿ‘‘ Tahta, dan โญ Kemasyhuran.

Semoga Anda berhasil menjadi ๐Ÿ’ต๐Ÿ’ถ๐Ÿ’ฐ kaya lewat pemrograman desktop! ๐Ÿ™

Categories
salary

Pemrogram Rp 100 Juta Per Bulan

Saya mendapat kabar dari teman saya bahwa ada pemrogram (non-manajerial) yang gajinya di atas Rp 100 juta per bulan (belum potong pajak). Bagaimana dia tahu hal ini? Pacarnya bekerja di perusahaan yang sedang memproses aplikasi dari pemrogram ini. Entah pemrogram ini yang melamar atau dia yang didekati perusahaan tempat pacar teman saya bekerja. Pada saat pemrosesan itulah (mungkin perusahaannya meminta pemrogram itu menunjukkan slip gajinya), gaji pemrogram ini diketahui oleh pacar teman saya yang menceritakan ke teman saya, yang kemudian menceritakan kepada saya. Perusahaan tempat pemrogram bekerja itu ada di Jakarta. Jadi dia tidak kerja jarak jauh (remote) ke perusahaan di Silicon Valley misalnya.

Terus ada lagi teman saya yang lain yang menceritakan ada teman kantornya yang mendapat gaji di atas Rp 100 juta per bulan. Dia tahu karena teman kantornya yang menceritakan gajinya kepada dia. Perusahaan ini juga ada di Indonesia waktu teman kantornya mendapat gaji di atas Rp 100 juta per bulan. Pemrogram ini juga bukan manajer.

Jadi ada 2 teman berbeda yang menceritakan fenomena pemrogram Rp 100 juta per bulan (di atas) di perusahaan yang berbeda. Kalau cuma satu teman yang bercerita, mungkin saya agak skeptis. Tapi ini 2 orang. Maksud saya, saya menggunakan probabilitas untuk mencerna hal ini. Peluang muncul kepala dari lempar koin adalah 0,5. Peluang muncul 2 kepala berturut-turut dari 2 kali lempar koin adalah 0,25 (0,5 * 0,5). Peluang teman saya berbohong kepada saya harusnya lebih rendah daripada peluang kepala muncul di lempar koin. Bohong kepada saya itu jahat, sejahat menendang anak kucing. Saya asumsikan teman-teman saya itu pada dasarnya jujur. Jadi taruhlah peluang mereka berbohong kepada saya itu 0,1 (10%). Peluang 2 orang berbeda berbohong kepada saya itu 0,01 (1%).

Hal ini membuat saya bergembira karena keahlian pemrograman (akhirnya) bisa dihargai mahal. Selama ini di Indonesia, jika Anda ingin mendapat gaji tinggi, Anda harus menjadi manajer dan menguasai keahlian memanajemen orang.

Di Indonesia ini, tanah air tercinta, keahlian teknis (termasuk di dalamnya kemampuan rekaya peranti lunak) masih kurang dihargai. Kemampuan manajemen orang jauh lebih dihargai.

Saya pernah bertemu dengan pebisnis yang bilang kira-kira seperti ini, โ€œKenapa aku harus mempekerjakan 1 pemrogram Rp 15 juta per bulan jika aku bisa mempekerjakan 2 pemrogram Rp 6 juta per bulan?โ€ Jadi banyak pebisnis atau pengusaha yang berpikir pemrogram itu seperti blok lego. Bisa dipertukarkan (fungible). Semakin banyak pemrogram, semakin bagus.

Saya pernah menangkap beberapa pebisnis atau pengusaha yang menggunakan analogi, membangun pasukan tentara untuk membangun perintis. โ€œSaya mau mempekerjakan 100 pemrogram / perekayasa peranti lunak tahun ini.โ€

Saya bisa bayangkan jika pebisnis ini bertemu dengan pemrogram Rp 100 juta per bulan ini, dia bakal bilang, โ€œMending saya dapat satu lusin pemrogram Rp 6 juta per bulan daripada bayar gaji kamu.โ€

Ada juga yang sinis terhadap fenomena pemrogram Rp 100 juta per bulan, โ€œIni pasti strategi perusahaan besar untuk merusak harga pasar.โ€ Secara tersirat, dia berpikir pemrogram non-manajerial tidak berhak mendapat Rp 100 juta per bulan.

Saya sendiri sudah pernah melihat surat penawaran gaji mendekati Rp 100 juta per bulan. Q4 (Rp 75 juta โ€“ Rp 99 juta). Tapi perannya manajerial di departmen teknik (engineering).

Jadi menurut saya, perekaya peranti lunak / pemrogram itu yang gajinya di atas Rp 100 juta per bulan kemungkinan besar ada di Indonesia. Tidak banyak. Tapi ada.