Categories
javascript wealth

Mendulang Emas di Dunia JavaScript yang Edan

JavaScript adalah salah satu bahasa pemrograman yang paling populer di dunia. Salah satu alasannya karena dulu JavaScript adalah satu-satunya bahasa yang Anda bisa pakai di tampak-muka web. Sekarang sudah ada bahasa lain yang bisa digunakan selain JavaScript, yaitu TypeScript, Elm, Dart. Tapi JavaScript tetap memegang tombak kepemimpinan di dunia tampak muka karena JavaScript sudah memegang manfaat gerakan-pertama (first-move advantage). Di samping itu JavaScript juga tidak membutuhkan proses yang ribet, seperti kompilasi (kecuali Anda menggunakan versi terbaru JavaScript).

Google mengeluarkan mesin JavaScript V8 yang akhirnya digunakan oleh seorang pemrogram untuk membuat Node.js. JavaScript pun berekspansi ke dunia peladen juga selain dunia tampak-muka. Orang-orang mulai menggunakan JavaScript sebagai bahasa pemrograman peladen. Artinya apa? Orang tidak perlu belajar dua bahasa lagi untuk membuat aplikasi web. Dengan satu bahasa utama, yaitu JavaScript, orang bisa menjadi pemrogram seluruh tumpukan (fullstack engineer). Dulu orang harus belajar bahasa lain untuk mengerjakan bagian peladen, misalnya PHP, Ruby, Perl, Java, atau Python.

Kemudian JavaScript pun menempati pangkalan aplikasi desktop. Electron adalah kerangka pengembangan yang popular dalam membuat aplikasi desktop. Alasannya adalah dengan menggunakan bahasa pemrograman yang populer, yaitu JavaScript, Anda dapat membuat aplikasi multiplatform, aplikasi yang bisa digunakan di platform Windows, Mac, dan Linux. Tidak perlu lagi bikin aplikasi 3 kali. Banyak aplikasi populer yang menggunakan Electron, seperti Visual Studio Code, Slack, Spotify, dan lain-lain.

Kemudian JavaScript masuk ke bahasa pemrograman yang digunakan untuk membuat aplikasi seluler. React Native adalah kerangka pengembangan yang sangat populer untuk membuat aplikasi seluler multiplatform, aplikasi seluler di atas platform Android dan iOS. Tidak perlu aplikasi seluler 2 kali.

Bahkan JavaScript ikut-ikutan masuk menjadi bahasa pemrograman di Pembelajaran Dalam (Deep Learning) dengan Tensorflow.js. Tapi untuk yang satu ini, JavaScript masih kalah populer dibandingkan Python. ๐Ÿ˜€

Tapi di balik kejayaan JavaScript, ada banyak masalah yang tertimbun. Masalah-masalah ini ada yang sampai membuat pemrogram-pemrogram menjadi letih untuk mengerjakan pemrograman tampak-muka. Ada yang meninggalkan dunia pemrograman tampak-muka untuk bekerja di dunia pemrograman lain seperti pemrograman peladen atau pemrograman aplikasi seluler. Dunia pemrograman tampak-muka menjadi sangat kompleks. Perkembangan teknologinya begitu pesat sehingga dibutuhkan penulis penuh-waktu untuk mengikuti perkembangan teknologi di dunia JavaScript.

Berlalu sudah dunia JavaScript yang sederhana di mana Anda cukup menggunakan jQuery untuk membantu Anda dalam membuat aplikasi web antar-muka yang dinamis. Sekarang sudah lazim orang menggunakan kerangka pengembangan JavaScript yang super kompleks misalnya React, Vue, Angular, Ember, dan masih banyak lagi lainnya. Setiap tahun sepertinya muncul kerangka pengembangan JavaScript yang baru.

NPM adalah tempat di mana pustaka Node.js hidup. NPM mirip dengan PyPi (Python), Maven Repository (Java), RubyGems (Ruby). Untuk memasang pustaka JavaScript dari NPM, orang tinggal melakukan perintah ini:

$ npm install pustakayangmaudipasang

Masalahnya ada orang jahat yang sempat berhasil mengunggah pustaka di NPM yang mencoba untuk mencuri kunci privat (private key) Bitcoin. Ada pustaka yang namanya Event-Stream yang digunakan oleh aplikasi dompet Copay. Pemelihara pustaka ini kehilangan minat dan tidak punya waktu lagi untuk memelihara pustaka Event-Stream dan menyerahalihkan kepemilikan pustaka Event-Stream ke seorang pemrogram lain. Pemelihara baru ini kemudian memasang kode jahat yang mencoba untuk mencuri kunci privat Bitcoin.

Selain itu entah kenapa NPM menarik banyak pemrogram yang membuat pustaka sangat pendek, misalnya modul dengan fungsi 1 baris. Banyak pustaka atau aplikasi yang tergantung dari modul seperti ini sehingga ketika terjadi masalah, ada efek dominonya. Misalnya, modul 1 baris membuat pustaka create-react-app menjadi rusak. Masalah ini bukan kali pertama terjadi. Pada tahun 2016, seorang pemelihara modul di NPM menarik semua modulnya. Salah satu modulnya bernama left-pad yang digunakan oleh banyak modul lainnya. Akhirnya ribuan modul JavaScript menjadi rusak (termasuk pustaka populer Babel).

Tapi ada masalah, ada peluang. Di tengah kekacauan di dunia JavaScript, ada peluang untuk mendulang emas. Masalah-masalah terjadi karena banyaknya orang / energi / duit yang dilemparkan di dunia JavaScript. Sejelek-jeleknya JavaScript lebih baik daripada bahasa pemrograman yang sepi masalah karena hampir tidak dipergunakan oleh orang lain, seperti <disensor>.

Bagaimana cara mendulang emas di dunia JavaScript yang edan? Ah, saya senang Anda menanyakan pertanyaan itu.

๐Ÿ‘ฉโ€๐Ÿ’ผ Mencari Kerja sebagai Pemrogram JavaScript

Ada banyak lowongan pekerjaan sebagai pemrogram JavaScript. Ini adalah salah satu dari sekian dikit bahasa pemrograman yang memberi keamanan pekerjaan. Hampir semua perusahaan membutuhkan aplikasi web. Sebagian besar aplikasi web menggunakan tampak-muka yang sebagian besar ditulis dengan JavaScript. Memang ada aplikasi web yang cuma menggunakan aplikasi seluler sebagai klien. Peladen mereka hanya mengeluarkan JSON saja.

Ada banyak lowongan pekerjaan pemrogram JavaScript di Indonesia. Saya cuma melihat bagian “Web Development” belum “Mobile Development”. Seperti yang kita tahu, React Native adalah kerangka pengembangan JavaScript yang populer dalam membuat aplikasi seluler.

Ada banyak juga lowongan pekerjaan jarak jauh sebagai pemrogram JavaScript.

๐Ÿซ Mendirikan Bootcamp JavaScript

Permintaan atas pemrogram JavaScript naik tapi persediaannya terbatas sehingga diciptakanlah bisnis bootcamp. Orang-orang diajari pemrograman JavaScript selama beberapa bulan sebelum dilepas ke perusahaan-perusahaan yang membutuhkan pemrogram JavaScript.

Bootcamp yang terkenal di Indonesia adalah bootcamp Hacktiv8. Perintis ini baru mendapatkan modal dari pemodal ventura sebesar 3 juta USD. Mereka sudah membangun cabang di tempat lain di luar markas mereka yang terletak di Pondok Indah. Badan-badan tertentu memproyeksikan bahwa jumlah lowongan-lowongan pekerjaan pemrogram akan menjadi tinggi beberapa tahun ke depan sementara talentanya masih sedikit.

๐Ÿ—๏ธ Mengembangkan Kerangka Pengembangan JavaScript

Evan Yue mengembangkan kerangka pengembangan JavaScript yang bernama Vue. Dia didukung oleh sistem donasi Patreon.

Pada tahun 2013, Evan Yue masih bekerja di Google. Dia menciptakan pustaka Vue. Dia mengerjakan semuanya di waktu luang. Jadi ada waktu di mana dia berminggu-minggu tidak menyentuh Vue karena kesibukannya.

Pada tahun 2015, Evan Yue menghabiskan seluruh waktu liburannya untuk mengerjakan improvisasi terhadap Vue. Vue dengan versi 1.0 keluar.

Pada tahun 2016, Evan Yue memutuskan untuk bekerja penuh waktu untuk mengembangkan pustaka Vue. Dia hidup dari tabungan pada awal-awalnya. Rencana dia adalah kalau uang dia sudah habis, dia akan mencari pekerjaan baru. Dia berusaha mencari sokongan dari perusahaan-perusahaan. Jika perusahaan itu menyumbang uang sekian, perusahaan itu bisa memasang logonya di situs Vue.

Pada tahun 2017, Evan Yue menembus angka donasi 10 ribu USD per bulan. Pada tahun 2018, Evan Yue mempekerjakan orang untuk membantu dia dalam mengembangkan pustaka Vue.

Dari sisi kompetitor Vue, yaitu React, ceritanya sedikit berbeda.

Pada tahun 2014, pustaka React.js diluncurkan ke publik. Dan Abramov, seorang pemrogram yang tinggal di Rusia, berkontribusi ke React.js. Dia juga memberi presentasi tentang React.js di temu jumpa BerlinJS. Kemudian pada tahun 2015 dia menciptakan pustaka Redux. Pada tahun itu juga dia pergi ke konferensi teknikal di Paris. Dia bertemu dengan Jing Chen yang bekerja di Facebook. Mereka sudah sering berdialog di saluran React di IRC. Sebelumnya Dan Abramov sudah dikontak oleh perekrut Facebook cuma perbincangannya menjadi stagnan karena Dan Abramov tidak memiliki ijazah S1 (dia tidak menyelesaikan pendidikan kuliah). Dan Abramov bilang dia tidak bisa mendapatkan visa Amerika Serikat. Kemudian Jing Chen menawari pekerjaan di London. Dan Abramov diwawancarai di tempat di mana konferensi teknikal itu diselenggarakan juga. Akhirnya Dan Abramov mendapatkan pekerjaan di Facebook.

โœ๏ธ Menulis Buku tentang JavaScript

JavaScript mungkin adalah bahasa pemrograman yang sederhana bagi pemrogram tertentu tapi ekosistemnya sangat rumit. Dunia JavaScript (termasuk pustaka, ekosistem, perambah, dan lain-lain) itu seperti labirin yang membuat banyak orang tersesat. Maka dibutuhkanlah panduan untuk memahami JavaScript termasuk kerangka pengembangannya.

Menulis buku tentang JavaScript adalah prospek yang menggiurkan karena jumlah potensial pembaca (dan pembeli) buku-buku JavaScript itu sangat besar. Misalnya buku tentang kerangka pengembangan Angular bisa mendapat 400 ribu USD per tahun (penghasilan kotor) untuk 2 tahun pertama. Itu adalah penjualan dari penerbit. Royaltinya sekitar 50% untuk pengarang yang menggunakan penerbit itu.

Dokumentasi resmi di situs proyek kode terbuka saja kadang tidak cukup untuk memahami kegilaan JavaScript. Makanya penulis buku tentang JavaScript bisa memberi nilai lebih untuk menyelesaikan titik sakit ini.

๐Ÿ“บ Membuat Video Pelatihan JavaScript

Ada sebagian orang yang lebih suka belajar tentang JavaScript dari video ketimbang tulisan. Bermuncullah video-video tutorial tentang JavaScript. Orang sering pergi ke Udemy untuk membeli video-video tentang JavaScript. Instruktur yang sangat populer adalah Maximilian Schwarzmรผller. Penghasilan dari penjualan video di Udemy yang bakal masuk ke kantong instruktur adalah 50% (untuk pemasaran organik). Salah satu kursus Maximilian yaitu React – The Complete Guide (incl Hooks, React Router, Redux), dibeli sebanyak hampir 250 ribu. Harga video tutorial di Udemy bervariasi. Tapi jika Anda sabar, biasanya harga bisa turun menjadi sekitar 10 USD atau sekitar Rp 140 ribu. Anda bisa hitung sendiri berapa yang didapat oleh Maximilian.

Ada juga yang menerapkan sistem langganan, jadi bukan bayar lepas seperti Udemy. Misalnya Vue School. Pelanggan membayar 25 USD per bulan. Bayar per tahun lebih murah. Ada juga opsi bayar sekali untuk akses seumur hidup. Mereka mengaku punya 60.000 pengguna. Tidak jelas apakah pengguna ini adalah pengguna premium saja atau termasuk pengguna gratisan saja.

Ada juga yang lebih luas daripada sekadar pelatihan Vue dan menggunakan sistem langganan, yaitu egghead.io. Untuk berlangganan orang harus membayar 350 USD per tahun. Sebagian dari biaya langganan ini akan diteruskan ke proyek kode terbuka. Kursus mereka meliputi Angular, Vue, React, GraphQL, bahkan hingga Git.

๐Ÿฆ„ Membangun Perintis

Anda bisa membangun perintis berdasarkan teknologi JavaScript. Bukan, yang saya maksud bukanlah membangun perintis dengan teknologi JavaScript. Misalnya Anda membangun perintis pencucian baju berdasarkan permintaan (on-demand laundry). Anda menggunakan Node.js dan kerangka pengembangan web Express.js untuk membuat aplikasi web. Bukan itu maksud saya. Tidak ada yang salah sih menggunakan JavaScript untuk membuat aplikasi web di perintis.

Yang saya maksudkan adalah membangun perintis berdasarkan teknologi JavaScript.

Pada suatu hari seorang pemrogram yang bernama Kyle Matthews membuat kerangka pengembangan aplikasi web statis dengan kerangka pengembangan JavaScript React. Namanya Gatsby. Dengan Gatsby Anda dapat membuat aplikasi web statis dengan fleksibilitas aplikasi web dinamis. Gatsby memberi beberapa kelebihan kepada Anda dibandingkan jika Anda menulis aplikasi web dengan HTML + CSS + JavaScript secara manual. Anda bisa menggunakan sumber data seperti MarkDown, REST, WordPress. Anda dapat juga mengemulasi aplikasi web dinamis (sampai tahap tertentu). Karena web Anda adalah statis berarti untuk pemasangan web Anda membutuhkan harga yang lebih murah karena Anda tidak membutuhkan aplikasi peladen seperti PHP, atau Ruby. Untuk sebagian besar situs web statis, Anda bisa menaruhnya secara cuma-cuma di GitHub Pages atau Netlify.

Kemudian Gatsby mendapat pendanaan dari pemodal ventura. Model bisnis mereka ada di awan. Jadi aplikasi web statis itu berisikan halaman-halaman statis. Tapi untuk mendapatkan halaman-halaman statis itu Anda mesti melakukan langkah bangun (build). Setelah itu halaman-halaman statisnya ditaruhlah di awan. Untuk situs yang cuma punya 5 halaman dan diubah sekali setahun, Anda tidak membutuhkan layanan premium dari Gatsby. Tapi ketika situs Anda sudah memiliki ribuan halaman, langkah bangun itu akan menjadi lama sekali. Gatsby menawarkan layanan bangun tambahan di awan jika Anda mau berpisah dengan sebagian uang Anda.

Saya jelaskan sekali lagi model bisnis Gatsby sehingga Anda bisa menghayati apa yang ditawarkan oleh perintis Gatsby. Ketika Anda menggunakan situs aplikasi web dinamis dengan bahasa PHP misalnya, harus ada aplikasi peladen yang mengeksekusi kode PHP (biasanya Apache Httpd atau Nginx dengan pengaya pengeksekusi PHP). Misalnya Anda punya 5 halaman yang memiliki bagian kepala (header) berisikan kode PHP yang sama, bagian kepala itu akan dieksekusi sehingga kita mendapat hasil dalam bentuk HTML.

<?php
// Berkas bagian kepala, header.php
echo "Bagian Kepala";
?>
<?php
// Berkas halaman 1, halaman1.php
include 'header.php';
echo "Halaman 1";
?>

Jika Anda mengubah berkas bagian kepala, semua 5 halaman itu akan mendapatkan perubahannya.

Bandingkan dengan Gatsby. Hal yang serupa terjadi juga. Tapi Anda mesti bangun (build) semua berkas itu sehingga Anda mendapatkan berkas HTML saja sebelum ditaruh di awan. Paham?

Pembangunan berkas-berkas itu bakal menjadi rumit ketika aplikasi web statis Anda menjadi besar. Cukup tentang Gatsby.

Nuxt.js baru saja mendapatkan pendanaan dari pemodal ventura. Nuxt.js adalah kerangka pengembangan yang dibuat di atas kerangka pengembangan Vue.js.

Gatsby dan Nuxt.js membutuhkan aplikasi untuk membuat konten statis yang biasanya berformat MarkDown. Situs profil perusahaan mungkin tidak butuh alat khusus. Tapi kalau Anda membuat Sistem Manajemen Konten atau CMS, Anda akan terbantu dengan alat khusus. Forestry membuat penggubah konten di atas Git. CMS harus bisa gampang diakses oleh pengisi konten yang tidak teknikal. Penggubah teks ini memiliki tampak-muka yang bersahabat untuk menggubah konten. Selain itu, penggubah konten ini memiliki sistem yang bisa mendorong konten ke repositori Git dan langsung terserbar ke tempat produksi. Mereka menggunakan sistem langganan.

Masih banyak lagi lainnya cara untuk mendulang emas di dunia JavaScript yang edan ini. Yang saya lihat Jamstack sudah mulai populer sehingga ada banyak kesempatan di sini. GraphQL juga populer sebagai sumber data (kita akan bahas di lain waktu) dan terkait erat dengan JavaScript. Kerangka pengembangan web Svelte naik daun juga. Mungkin Anda bisa membangun kerangka pengembangan di atas Svelte seperti Nuxt.js di atas Vue, atau seperti Gatsby di atas React? Deno sebentar lagi akan rilis secara resmi. Apakah Deno akan menyalip popularitas Node.js, hanya waktu yang akan menjawab. Jika Deno bakal sukses, banyak hal yang bisa dibangun di atas pengganti Node.js ini.

Tapi hati-hati, ada sebagian jalan mencari kekayaan di dunia JavaScript yang haram hukumnya.

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.