Baiklah.. sekarang saya mau berbagi pengalaman sebagai developer aplikasi, sebab penulis sekarang sedang mengerjakan beberapa aplikasi android yang dalam waktu dekat ini Insya Alloh akan segera publish di GOOGLE PLAYSTORE. Aamiin..
Banyak orang yang ingin memasuki dunia software development, dan bertanya ke saya: saya perlu belajar bahasa/teknologi yang mana saat ini? Ada yang sudah kerja di IT lalu ingin masuk software development (ada yang di departemen IT, ada yang jaga warnet, dsb). Ada juga anak SMU yang nanya bahasa dan teknologi apa yang perlu dipelajari duluan, dsb. Di sini saya akan berusaha membahas pendekatan pembelajaran yang mungkin, dan sekilas teknologi yang ada saat ini dan kelemahan/kelebihannya dari sudut pandang pemula.
Hal pertama yang perlu Anda pikirkan adalah: apa motivasi Anda? ada yang karena ingin uang lebih karena membuat aplikasi bisa menghasilkan uang banyak, atau Anda ingin sekedar berkontribusi untuk opensource (yang dasar motivasinya juga banyak). Motivasi ini biasanya akan menentukan jalan apa yang bisa dipilih untuk menjadi developer.
Saya dan teman-teman saya dari tempat kuliah (informatika ITB) memiliki kelebihan karena dipandang “pintar”, dan pasti bisa belajar teknologi apapun (dan biasanya memang begitu karena sudah diajari dasar berbagai macam hal ketika kuliah). Dari tempat kami pertama bekerja, ada yang mendalami dan menjadi ahli di bidang yang spesifik (misalnya telekomunikasi, atau enterprise development), ada juga yang bosan dan berpindah bidang. Jadi bagi kami tidak ada kewajiban untuk memilih apakah perlu belajar Java dulu atau PHP dulu, lalu mencari kerja yang sesuai. Untuk kebanyakan orang lain, tentunya pendekatan tersebut biasanya tidak berlaku, tapi ada beberapa pendekatan lain yang mungkin.
Inti dari pendekatan untuk masuk dunia sofware development adalah membuat sofware. Tentunya sulit mencari kerja tanpa pengalaman. Jadi bagaimana mencari pengalaman tanpa bekerja di sebuah software house atau menerima proyek sebagai freelancer?
Pendekatan pertama yang saya lihat adalah melalui dunia opensource. Salah satu orang terkenal adalah Con Kolivas, seorang ahli anastesi, yang tidak punya background computer science, tapi sangat tertarik pada linux dan menjadi developer kernel Linux. Tentunya kecerdasan dan dedikasi orang tersebut luar biasa, tapi tidak perlu kontribusi ke proyek yang sangat high profile untuk bisa masuk melalui dunia opensource. Cara yang paling sederhana adalah dengan membuat plugin untuk berbagai proyek open source, seperti misalnya wordpress, joomla, dan berbagai software lain. Membuat plugin tidak melibatkan proyek utama, jadi mudah dilakukan. Jika sudah cukup confident, Anda juga bisa mengirimkan patch/pull request untuk proyek utama.
Pendekatan berikutnya adalah membuat app sendiri untuk dipublish melalui dunia app store. Ketika masih demam app store, banyak orang nekat terjun membeli buku atau mengambil kursus untuk memprogram iOS atau Android. Sebagian dari mereka sangat berhasil dan menjadi jutawan (dalam USD), dan sebagian gagal. Tapi pendekatan ini bisa berhasil karena: kita bisa membuat aplikasi yang kita mau, tidak dibatasi waktu, dan ada targetnya (menjual app).
Jika Anda ingin membuat aplikasi web, maka pendekatan di atas bisa diganti dengan membuat web app sendiri. Terserah Anda jenis web yang ingin Anda buat seperti apa. Anda juga bisa mencari teman yang bisnis online dan mencoba membantu membuatkan web app untuk teman tersebut.
Pendekatan lainnya, yang menurut saya agak berisiko adalah dengan nekat belajar teknologi tertentu saja, dan berusaha mencari pekerjaan yang berhubungan dengan teknologi tersebut. Anda bisa meyakinkan orang bahwa Anda mengenal teknologi tertentu dan mengambil proyek freelance sesuai teknologi tersebut, atau berusaha mengambil sertifikasi khusus teknologi tertentu (misalnya Java atau .NET) dan berusaha langsung mencari kerja dengan menggunakan sertifikasi itu.
Anda bisa melihat di posisi Anda saat ini apa yang bisa Anda gali untuk memulai. Mungkin Anda masih SMU jadi tahu apa kebutuhan anak-anak SMU dan bisa membuat app yang sesuai. Mungkin Anda bekerja di perusahaan tertentu dan bisa melihat app apa yang bisa dikembangkan untuk perusahaan jenis itu.
Memilih teknologi yang dipelajari adalah hal yang sulit: teknologi berkembang sangat cepat meski dasarnya masih sama. Saya ambil contoh teknologi Java. Teknologi ini ada sejak pertengahan 1990an, dan masih ada dan dipakai sampai sekarang. Tapi teknologi Java (meliputi bahasa, API, runtime environment) sudah berubah banyak. Berbagai fitur bahasa Java ditambahkan setiap kali versi major baru dirillis. Berbagai framework dan tools muncul dan dan mati bergantian. Untuk mengcompile saja ada beberapa pendekatan (manual, ant, maven, gradle), ada berbagai framework sisi server yang selalu silih berganti (struts, spring, grails, dan puluhan lain yang tidak saya ingat), belum lagi berbagai library yang perlu dikuasai, misalnya library apa untuk membuat PDF, library apa untuk memproses gambar, dan berbagai library lain. Belajar bahasa Java saja tidak cukup untuk membuat kebanyakan aplikasi real world, kita tetap perlu belajar framework, library, dan tools yang spesifik untuk aplikasi tersebut.
Penjelasan di atas hanya untuk memberi gambaran bahwa belajar bahasa saja tidak cukup, itu hanya awalnya saja. Hal yang penting ketika mempelajari sebuah bahasa adalah benar-benar memahami fitur-fiturnya, supaya tidak bingung ketika fitur itu dipakai di framework atau library tertentu.
Sekarang saya akan bahas beberapa teknologi dasar yang menurut saya perlu diketahui, lalu berikutnya berbagai teknologi yang bisa Anda pilih, sesuai dengan keadaan Anda.
Teknologi dasar pertama adalah SQL. Ini bisa dipelajari terpisah dari bahasa manapun. Semua aplikasi butuh penyimpanan, dan meskipun teknologi NoSQL mulai banyak dipakai, tapi SQL masih digunakan di mana-mana. Aplikasi server memakai berbagai DBMS (Misalnya SQL Server, MySql, Posgres), aplikasi mobile memakai SQLite, bahkan aplikasi browser bisa memakai WebSQL (saat ini disupport oleh Chrome, Safari, Opera).
Teknologi berikutnya adalah HTML/CSS dan JavaScript. HTML dan CSS dasar diperlukan karena banyak sekali user interface dibuat berdasarkan HTML/CSS. Aplikasi web tentunya memakai teknologi itu, tapi banyak app di desktop dan app store juga memakai HTML/CSS untuk user interfacenya. Mengenal javascript juga akan sangat berguna untuk membuat web yang interaktif, dan bahkan sekarang JavaScript juga bisa dipakai memprogram sisi server dengan NodeJS. Salah satu hal praktis yang bisa dibuat dengan HTML/CSS/JS adalah dengan membuat extension untuk browser (contoh extension browser yang terkenal adalah AdBlock).
Jangan lupa pelajari berbagai tools yang ada, terutama command line yang bisa dipanggil program lain. Ini akan sangat berguna untuk mengurangi pekerjaan memprogram. Anda bisa menulis beberapa ribu baris untuk meresize berbagai format gambar, tapi Anda bisa lebih gampang memanggil program imagemagick dari dalam program Anda untuk melakukannya dengan satu baris saja.
Setelah itu Anda bisa memilih salah satu teknologi utama yang ingin Anda kuasai. Misalnya Anda bisa mendalami teknologi .NET (bisa melalui berbagai bahasa .NET misalnya C# atau Visual Basic .NET). Teknologi .NET saat ini cukup banyak dipakai di berbagai perusahaan besar. Teknologi ini sangat Microsoft centric, walau sekarang mulai dibuka sourcenya agar disupport di platform lain. Dari pengamatan saya, untuk teknologi Web tidak banyak perusahaan menengah atau kecil yang memakai .NET. Jika Anda memprogram aplikasi desktop untuk Windows, maka .NET merupakan pilihan yang bagus. Teknologi .NET bisa juga dipakai untuk memprogram mobile, terutama Windows Phone. Ada juga tools tambahan yang memungkinkan kita membuat program .NET yang jalan di Android ataupun iOS, tapi saya lebih menyarankan Anda memakai Java untuk Android dan Objective C atau Swift untuk iOS.
Alternatif teknologi .NET adalah Java. Java bisa dipakai untuk memprogram aplikasi desktop, mobile (Android), dan Web (Java 2 EE dengan berbagai teknologi dan framework yang ada). Cukup banyak juga enterprise yang memakai Java, apalagi karena Java ini bisa dideploy di berbagai OS, termasuk Linux (yang biaya lisensinya gratis). Dari pengamatan saya: bebereapa perusahaan besar memakai lebih dari satu teknologi (misalnya Java dan .NET sekaligus), karena mereka tidak ingin ditekan oleh vendor tertentu (kalau vendor berusaha menjual harga mahal, maka bisa bilang: saya switch aja deh ke teknologi yang satu lagi).
Anda bahkan bisa menjadikan HTML/JS/CSS menjadi teknologi utama Anda karena sekarang semua jenis aplikasi bisa diprogram dengan HTML/JS. Anda bisa membuat mobile app dengan Phonegap/Cordova, bisa membuat web app dengan menggunakan nodejs di sisi server.
Di sisi open source, ada berbagai alternatif. Yang saya maksud dengan open source di sini adalah open source yang tidak didukung perusahaan besar (Java dan .NET sekarang sudah open source juga). Teknologi PHP masih dipakai diberbagai perusahaan besar (misalnya facebook), tapi sekarang sebagian besar sudah diprogram menggunakan framework tertentu (Larave, CodeIgniter, Nette, dan ratusan framework lain), tidak seperti dulu di mana orang memprogram langsung PHP prosedural tanpa framework.
Meski di luar negeri sudah sangat populer, sepanjang pengetahuan saya penggunaan teknologi Python, Ruby dan lain-lain masih kurang di Indonesia. Mungkin karena tidak ada vendor tertentu yang berusaha menjual produk ke perusahaan (tidak seperti Java atau .NET) sehingga ini masih kurang populer. Jika Anda mau mengambil berbagai pekerjaan freelance dari luar negeri.
Jika Anda spesifik ingin membuat aplikasi iOS, maka sebaiknya Anda belajar Objective C atau Swift. Bahasa Swift lebih sederhana, tapi masih sangat berkembang (terutama sepanjang tahun lalu). Bahasa Swift ini cukup sederhana, tapi sangat Apple centric, dan ilmunya tidak berlaku untuk platform lain.
Selagi belajar teknologi tersebut, Anda sebaiknya belajar berbagai macam hal yang berhubungan dengan development, misalnya versioning (sekarang yang populer menggunakan Git), testing (tergantung teknologi apa yang Anda pakai), deployment (misalnya dengan docker), tools untuk setup development (misalnya dengan Vagrant), IDE (tergantung bahasa yang ingin dipakai). Teknologi-teknologi ini adalah pelengkap yang penting dipelajari, dan lebih mudah dipelajari sambil praktik.
Pertanyaan berikutnya adalah bagaimana cara belajarnya? Anda bisa membeli buku lalu membacanya (silakan dibandingkan sendiri, karena buku yang dianggap bagus oleh satu orang dianggap jelek oleh orang lain), Anda juga bisa mengambil kursus online baik di Coursera, EDX, Udemy, maupun yang lain. Jika Anda suka pendekatan video, banyak sekali tutorial gratis di youtube.
Setelah yakin dengan kemampuan Anda, Anda juga bisa mengambil berbagai sertifikasi. Saya sendiri tidak pernah mengambil sertifikasi pemrograman, jadi kurang tahu bagaimana pandangan perusahaan terhadap berbagai sertifikasi yang ada.
Keahlian yang paling dibutuhkan dalam memprogram adalah mencari jawaban atas error yang ditemui. Keahlian Anda mencari dengan Google akan sangat berguna. Situs stack overflow juga akan sangat membantu dalam menjawab berbagai pertanyaan Anda. Satu hal yang penting adalah: pahami berbagai istilah yang ada, ini akan sangat memudahkan ketika Anda mencari sesuatu menggunakan search engine.
Selamat memasuki dunia development software.
Hal pertama yang perlu Anda pikirkan adalah: apa motivasi Anda? ada yang karena ingin uang lebih karena membuat aplikasi bisa menghasilkan uang banyak, atau Anda ingin sekedar berkontribusi untuk opensource (yang dasar motivasinya juga banyak). Motivasi ini biasanya akan menentukan jalan apa yang bisa dipilih untuk menjadi developer.
Saya dan teman-teman saya dari tempat kuliah (informatika ITB) memiliki kelebihan karena dipandang “pintar”, dan pasti bisa belajar teknologi apapun (dan biasanya memang begitu karena sudah diajari dasar berbagai macam hal ketika kuliah). Dari tempat kami pertama bekerja, ada yang mendalami dan menjadi ahli di bidang yang spesifik (misalnya telekomunikasi, atau enterprise development), ada juga yang bosan dan berpindah bidang. Jadi bagi kami tidak ada kewajiban untuk memilih apakah perlu belajar Java dulu atau PHP dulu, lalu mencari kerja yang sesuai. Untuk kebanyakan orang lain, tentunya pendekatan tersebut biasanya tidak berlaku, tapi ada beberapa pendekatan lain yang mungkin.
Inti dari pendekatan untuk masuk dunia sofware development adalah membuat sofware. Tentunya sulit mencari kerja tanpa pengalaman. Jadi bagaimana mencari pengalaman tanpa bekerja di sebuah software house atau menerima proyek sebagai freelancer?
Pendekatan pertama yang saya lihat adalah melalui dunia opensource. Salah satu orang terkenal adalah Con Kolivas, seorang ahli anastesi, yang tidak punya background computer science, tapi sangat tertarik pada linux dan menjadi developer kernel Linux. Tentunya kecerdasan dan dedikasi orang tersebut luar biasa, tapi tidak perlu kontribusi ke proyek yang sangat high profile untuk bisa masuk melalui dunia opensource. Cara yang paling sederhana adalah dengan membuat plugin untuk berbagai proyek open source, seperti misalnya wordpress, joomla, dan berbagai software lain. Membuat plugin tidak melibatkan proyek utama, jadi mudah dilakukan. Jika sudah cukup confident, Anda juga bisa mengirimkan patch/pull request untuk proyek utama.
Pendekatan berikutnya adalah membuat app sendiri untuk dipublish melalui dunia app store. Ketika masih demam app store, banyak orang nekat terjun membeli buku atau mengambil kursus untuk memprogram iOS atau Android. Sebagian dari mereka sangat berhasil dan menjadi jutawan (dalam USD), dan sebagian gagal. Tapi pendekatan ini bisa berhasil karena: kita bisa membuat aplikasi yang kita mau, tidak dibatasi waktu, dan ada targetnya (menjual app).
Jika Anda ingin membuat aplikasi web, maka pendekatan di atas bisa diganti dengan membuat web app sendiri. Terserah Anda jenis web yang ingin Anda buat seperti apa. Anda juga bisa mencari teman yang bisnis online dan mencoba membantu membuatkan web app untuk teman tersebut.
Pendekatan lainnya, yang menurut saya agak berisiko adalah dengan nekat belajar teknologi tertentu saja, dan berusaha mencari pekerjaan yang berhubungan dengan teknologi tersebut. Anda bisa meyakinkan orang bahwa Anda mengenal teknologi tertentu dan mengambil proyek freelance sesuai teknologi tersebut, atau berusaha mengambil sertifikasi khusus teknologi tertentu (misalnya Java atau .NET) dan berusaha langsung mencari kerja dengan menggunakan sertifikasi itu.
Anda bisa melihat di posisi Anda saat ini apa yang bisa Anda gali untuk memulai. Mungkin Anda masih SMU jadi tahu apa kebutuhan anak-anak SMU dan bisa membuat app yang sesuai. Mungkin Anda bekerja di perusahaan tertentu dan bisa melihat app apa yang bisa dikembangkan untuk perusahaan jenis itu.
Memilih teknologi yang dipelajari adalah hal yang sulit: teknologi berkembang sangat cepat meski dasarnya masih sama. Saya ambil contoh teknologi Java. Teknologi ini ada sejak pertengahan 1990an, dan masih ada dan dipakai sampai sekarang. Tapi teknologi Java (meliputi bahasa, API, runtime environment) sudah berubah banyak. Berbagai fitur bahasa Java ditambahkan setiap kali versi major baru dirillis. Berbagai framework dan tools muncul dan dan mati bergantian. Untuk mengcompile saja ada beberapa pendekatan (manual, ant, maven, gradle), ada berbagai framework sisi server yang selalu silih berganti (struts, spring, grails, dan puluhan lain yang tidak saya ingat), belum lagi berbagai library yang perlu dikuasai, misalnya library apa untuk membuat PDF, library apa untuk memproses gambar, dan berbagai library lain. Belajar bahasa Java saja tidak cukup untuk membuat kebanyakan aplikasi real world, kita tetap perlu belajar framework, library, dan tools yang spesifik untuk aplikasi tersebut.
Penjelasan di atas hanya untuk memberi gambaran bahwa belajar bahasa saja tidak cukup, itu hanya awalnya saja. Hal yang penting ketika mempelajari sebuah bahasa adalah benar-benar memahami fitur-fiturnya, supaya tidak bingung ketika fitur itu dipakai di framework atau library tertentu.
Sekarang saya akan bahas beberapa teknologi dasar yang menurut saya perlu diketahui, lalu berikutnya berbagai teknologi yang bisa Anda pilih, sesuai dengan keadaan Anda.
Teknologi dasar pertama adalah SQL. Ini bisa dipelajari terpisah dari bahasa manapun. Semua aplikasi butuh penyimpanan, dan meskipun teknologi NoSQL mulai banyak dipakai, tapi SQL masih digunakan di mana-mana. Aplikasi server memakai berbagai DBMS (Misalnya SQL Server, MySql, Posgres), aplikasi mobile memakai SQLite, bahkan aplikasi browser bisa memakai WebSQL (saat ini disupport oleh Chrome, Safari, Opera).
Teknologi berikutnya adalah HTML/CSS dan JavaScript. HTML dan CSS dasar diperlukan karena banyak sekali user interface dibuat berdasarkan HTML/CSS. Aplikasi web tentunya memakai teknologi itu, tapi banyak app di desktop dan app store juga memakai HTML/CSS untuk user interfacenya. Mengenal javascript juga akan sangat berguna untuk membuat web yang interaktif, dan bahkan sekarang JavaScript juga bisa dipakai memprogram sisi server dengan NodeJS. Salah satu hal praktis yang bisa dibuat dengan HTML/CSS/JS adalah dengan membuat extension untuk browser (contoh extension browser yang terkenal adalah AdBlock).
Jangan lupa pelajari berbagai tools yang ada, terutama command line yang bisa dipanggil program lain. Ini akan sangat berguna untuk mengurangi pekerjaan memprogram. Anda bisa menulis beberapa ribu baris untuk meresize berbagai format gambar, tapi Anda bisa lebih gampang memanggil program imagemagick dari dalam program Anda untuk melakukannya dengan satu baris saja.
Setelah itu Anda bisa memilih salah satu teknologi utama yang ingin Anda kuasai. Misalnya Anda bisa mendalami teknologi .NET (bisa melalui berbagai bahasa .NET misalnya C# atau Visual Basic .NET). Teknologi .NET saat ini cukup banyak dipakai di berbagai perusahaan besar. Teknologi ini sangat Microsoft centric, walau sekarang mulai dibuka sourcenya agar disupport di platform lain. Dari pengamatan saya, untuk teknologi Web tidak banyak perusahaan menengah atau kecil yang memakai .NET. Jika Anda memprogram aplikasi desktop untuk Windows, maka .NET merupakan pilihan yang bagus. Teknologi .NET bisa juga dipakai untuk memprogram mobile, terutama Windows Phone. Ada juga tools tambahan yang memungkinkan kita membuat program .NET yang jalan di Android ataupun iOS, tapi saya lebih menyarankan Anda memakai Java untuk Android dan Objective C atau Swift untuk iOS.
Alternatif teknologi .NET adalah Java. Java bisa dipakai untuk memprogram aplikasi desktop, mobile (Android), dan Web (Java 2 EE dengan berbagai teknologi dan framework yang ada). Cukup banyak juga enterprise yang memakai Java, apalagi karena Java ini bisa dideploy di berbagai OS, termasuk Linux (yang biaya lisensinya gratis). Dari pengamatan saya: bebereapa perusahaan besar memakai lebih dari satu teknologi (misalnya Java dan .NET sekaligus), karena mereka tidak ingin ditekan oleh vendor tertentu (kalau vendor berusaha menjual harga mahal, maka bisa bilang: saya switch aja deh ke teknologi yang satu lagi).
Anda bahkan bisa menjadikan HTML/JS/CSS menjadi teknologi utama Anda karena sekarang semua jenis aplikasi bisa diprogram dengan HTML/JS. Anda bisa membuat mobile app dengan Phonegap/Cordova, bisa membuat web app dengan menggunakan nodejs di sisi server.
Di sisi open source, ada berbagai alternatif. Yang saya maksud dengan open source di sini adalah open source yang tidak didukung perusahaan besar (Java dan .NET sekarang sudah open source juga). Teknologi PHP masih dipakai diberbagai perusahaan besar (misalnya facebook), tapi sekarang sebagian besar sudah diprogram menggunakan framework tertentu (Larave, CodeIgniter, Nette, dan ratusan framework lain), tidak seperti dulu di mana orang memprogram langsung PHP prosedural tanpa framework.
Meski di luar negeri sudah sangat populer, sepanjang pengetahuan saya penggunaan teknologi Python, Ruby dan lain-lain masih kurang di Indonesia. Mungkin karena tidak ada vendor tertentu yang berusaha menjual produk ke perusahaan (tidak seperti Java atau .NET) sehingga ini masih kurang populer. Jika Anda mau mengambil berbagai pekerjaan freelance dari luar negeri.
Jika Anda spesifik ingin membuat aplikasi iOS, maka sebaiknya Anda belajar Objective C atau Swift. Bahasa Swift lebih sederhana, tapi masih sangat berkembang (terutama sepanjang tahun lalu). Bahasa Swift ini cukup sederhana, tapi sangat Apple centric, dan ilmunya tidak berlaku untuk platform lain.
Selagi belajar teknologi tersebut, Anda sebaiknya belajar berbagai macam hal yang berhubungan dengan development, misalnya versioning (sekarang yang populer menggunakan Git), testing (tergantung teknologi apa yang Anda pakai), deployment (misalnya dengan docker), tools untuk setup development (misalnya dengan Vagrant), IDE (tergantung bahasa yang ingin dipakai). Teknologi-teknologi ini adalah pelengkap yang penting dipelajari, dan lebih mudah dipelajari sambil praktik.
Pertanyaan berikutnya adalah bagaimana cara belajarnya? Anda bisa membeli buku lalu membacanya (silakan dibandingkan sendiri, karena buku yang dianggap bagus oleh satu orang dianggap jelek oleh orang lain), Anda juga bisa mengambil kursus online baik di Coursera, EDX, Udemy, maupun yang lain. Jika Anda suka pendekatan video, banyak sekali tutorial gratis di youtube.
Setelah yakin dengan kemampuan Anda, Anda juga bisa mengambil berbagai sertifikasi. Saya sendiri tidak pernah mengambil sertifikasi pemrograman, jadi kurang tahu bagaimana pandangan perusahaan terhadap berbagai sertifikasi yang ada.
Keahlian yang paling dibutuhkan dalam memprogram adalah mencari jawaban atas error yang ditemui. Keahlian Anda mencari dengan Google akan sangat berguna. Situs stack overflow juga akan sangat membantu dalam menjawab berbagai pertanyaan Anda. Satu hal yang penting adalah: pahami berbagai istilah yang ada, ini akan sangat memudahkan ketika Anda mencari sesuatu menggunakan search engine.
Selamat memasuki dunia development software.
0 komentar:
Posting Komentar