Pengin jadi Full Stack Developer ?

https://en.wikipedia.org/wiki/Swiss_Army_knife

Apa itu Full Stack Developer?

Menjadi seorang Full Stack Developer bisa diwujudkan oleh orang dengan latar belakang apapun. Latar belakang pendidikan anda, latar belakang pekerjaan anda saat ini, dan berbagai macam latar belakang lainnya, tidak akan berpengaruh sedikitpun atau menjadi penghalang. Yang anda butuhkan adalah sumber daya waktu, sumber daya finansial, kemauan yang tinggi dan passion. Yang paling penting sebenarnya adalah kemauan yang tinggi dan passion, karena tanpa ini, sumber daya waktu dan finansial tidak akan berguna. Programer yang hebat dan sukses rata-rata adalah programer yang memanfaatkan waktu luangnya untuk berlatih dan menjadikan coding sebagai hobi. Programer yang senang belajar dan mencoba hal-hal baru. Para Hobbyist programer inilah yang mempunyai kesempatan besar menjadi seorang Full Stack Developer.

Full Stack Developer adalah salah satu topik yang cukup hangat di kalangan Developer, sehingga tidak heran topik ini menjadi tren jenis pekerjaan baru saat ini di kalangan Developer. Beberapa orang menganggap Full Stack Developer hanya sebuah title, sehingga tidak heran banyak orang yang menempatkan title ini pada media sosial mereka, terutama pada platform Linkedin. Padahal sebenarnya tidak semudah itu menempatkan title Full Stack Developer. Developer yang ingin menjadi Full Stack Developer bukan fokus kepada title tersebut, tetapi seharusnya memfokuskan pada bagaimana cara untuk mencapai title tersebut dengan cara belajar berbagai hal dengan serius, terutama teknologi. Jadi Full Stack Developer bukan title, melainkan gabungan antara mindset dan skill set.

Dari berbagai sumber yang saya rangkum, saya menyimpulkan pengertian Full Stack Developer mempunyai dua definisi. Definisi pertama adalah Seorang Developer menjadikan coding sebagai hobi, open-minded, siap belajar, senang belajar hal baru khususnya teknologi, dan senang membangun produk. Definisi kedua adalah seorang Developer yang bisa memaksimalkan kemampuan yang dia miliki untuk menangani pekerjaan dari beberapa bidang yang dikerjakan oleh beberapa role Developer. Yang artinya dia harus bisa menyelesaikan banyak permasalahan yang berada pada setiap layer produk teknologi sampai produk teknologi itu selesai. Jadi, seorang Full Stack Developer harus siap terlibat dan ditempatkan pada setiap posisi yang membutuhkan bantuan.

Berikut beberapa bidang pekerjaan yang dimana seorang Full Stack Developer harus siap dilibatkan dan ditempatkan.

  1. Pekerjaan pada sisi Client (Frontend Web). Ketika anda sedang berada pada posisi sebagai Frontend Web Developer, ada beberapa tanggung jawab yang harus anda emban. Pertama anda harus bisa mengkonversi desain atau prototype yang sudah dibuat oleh tim UI/UX menjadi sebuah komponen code yang siap dipakai oleh pengguna. Kedua, anda juga harus bisa mengkonversi atau memparsing data yang datang dari sisi server(Backend) kemudian menyajikannya kepada pengguna sudah dalam bentuk tampilan yang memanjakan user experience dari para pengguna produk yang anda buat. Ketiga, anda juga bertanggung jawab terhadap pemilihan teknologi yang akan dipakai di sisi Frontend Web, lengkap dengan komponen-komponen yang terlibat, seperti framework, library dan build tools yang akan digunakan.
  2. Pekerjaan pada sisi Client(Mobile Apps). Pekerjaan pada sisi Mobile Apps, tidak jauh berbeda dengan pekerjaan pada sisi Frontend Web. Disini anda harus mengkonversi desain dan prototype dari tim UI/UX menjadi sebuah komponen code yang siap dipakai dan responsif terhadap tingkah laku pengguna. Anda juga perlu memparsing dan mengkonversi data yang datang dari sisi server(Backend) kemudian menyajikannya kepada user dalam bentuk yang interaktif dan memanjakan pengguna produk anda. Perbedaan mencolok antara Frontend Web dan Mobile apps adalah teknologi yang dipakai. Membangun sebuah Mobile apps anda bisa memilih teknologi Hybrid, yaitu code anda akan dibuat satu kali dan akan mendukung beberapa sistem operasi sekaligus, misalnya Android dan IOS. Anda juga bisa memilih teknologi Native, yaitu aplikasi yang kita bangun untuk spesifik sistem operasi, misalnya untuk Android saja atau untuk IOS saja. Ada beberapa keuntungan dan kekurangan ketika anda memilih untuk mengembangkan aplikasi mobile dengan teknologi Hybrid ataupun Native. Keuntungan ketika anda memilih teknologi Hybrid yaitu anda hanya butuh satu codebase untuk mengembangkan aplikasi mobile untuk beberapa target sistem operasi, misalnya untuk Android dan IOS, kemudian less time-consuming to develop, yaitu waktu yang dibutuhkan lebih sedikit, dan kemudian kemudahan dalam maintenance codebase, karena kita hanya punya satu codebase. Kekurangan yang cukup menjadi pertimbangan dari teknologi Hybrid yaitu dari sisi performance dan security. Berbeda dengan ketika anda menggunakan teknologi Native, anda akan dimudahkan ketika anda membutuhkan akses di level sistem operasi dan hardware, seperti anda membutuhkan akses pada bluetooth dan Kamera. Pada teknologi Hybrid akses pada level sistem operasi dan hardware biasanya lebih susah, biasanya disebabkan oleh minimnya dukungan library yang sesuai. Kekurangan dari teknologi Native yaitu anda harus memaintain lebih dari satu codebase, sehingga cost untuk development biasanya lebih mahal.
  3. Pekerjaan pada sisi Server(Backend). Ketika anda sedang berada pada posisi sebagai Backend Developer, anda tidak akan terlalu memikirkan tampilan dan user experience produk yang anda bangun. Tetapi ada banyak tanggung jawab yang harus anda tangani sekaligus. Pertama, anda harus bisa mengkonversi prototype atau tampilan yang dibuat oleh tim UI/UX menjadi sebuah struktur data yang akan dikirim ke Frontend Web maupun Mobile Apps, mengkonversi menjadi ERD(Entity Relationship Diagram), mengkonversi menjadi tabel-tabel pada database, mengkonversi menjadi sebuah flowchart. Kedua, pemilihan metode yang akan anda gunakan untuk membangun Backend sistemnya, anda harus paham kapan harus menggunakan proses aliran data dengan synchronous atau asynchronous, anda harus paham kapan menggunakan protokol tertentu untuk menyelesaikan masalah, anda harus paham kapan menggunakan arsitektur tertentu. Ketiga, pemilihan teknologi yang akan digunakan untuk membangun Backend sistemnya, anda harus paham kapan harus menggunakan scripting programming language dan kapan harus menggunakan compiled programming language, lengkap dengan komponen yang terlibat, seperti bahasa pemrograman yang dipakai, framework, library, http server, message broker dan database.
  4. Pekerjaan pada sisi DBA (Database Administrator). Pekerjaan ini sebenarnya sangat erat hubungannya dengan pekerjaan pada sisi Backend. Sengaja saya pisahkan, karena ketika kita bicara Backend, kita akan fokus pada penyajian data ke sisi Client (Frontend Web/ Mobile Apps), kita belum berfokus pada bagaimana membuat desain Database yang baik. Tugas seorang DBA antara lain, mendesain ERD, mendesain tabel-tabel yang kita buat berdasarkan data mockup yang sebelumnya kita buatkan untuk dikonsumsi oleh Client(Frontend Web/ Mobile Apps), pemilihan tipe data dan panjang pada setiap kolom yang berada pada tabel-tabelnya, dan yang paling penting adalah optimasi query.
  5. Pekerjaan pada sisi Ops dan semua yang berhubungan dengan kata kunci deployment dan server. Ketika anda sedang berada pada posisi sebagai DevOps, anda harus mempunyai skill fundamental yang menurut saya wajib, yaitu skill pada sistem operasi Linux dan skill Terminal pada sistem operasi ini. Karena sistem operasi Linux bisa dikatakan backbone, pondasi, dan nyawa dari keseluruhan Internet di seluruh dunia yang kita manfaatkan hampir setiap hari. Ketika anda menjadi seorang Full Stack Developer, anda tidak bisa terhindar dari kata kunci “deployment dan server”. Ketika bicara seputar deployment dan server, anda juga tidak bisa terhindar dari kata kunci “Linux”. Ketika bicara tentang deployment, anda tidak bisa terhindar dari komputer server dan pemakaian terminal pada Linux. Hal yang sama terjadi ketika anda menggunakan layanan cloud berbayar, VPS, ataupun server internal yang anda setup sendiri. Anda akan tetap berhadapan dengan Linux. Jadi skill pada sistem operasi Linux adalah wajib. Skill selanjutnya yang dibutuhkan adalah bash scripting. Skill ini akan anda butuhkan untuk mengotomasi pekerjaan yang sifatnya berulang, misalnya mengkompilasi codebase, mengambil codebase dari storage server kemudian mengkompilasi dan kemudian menjalankannya, mengimpor atau mengekspor database dan lain sebagainya. Skill DevOps juga dibutuhkan ketika repository code pada organisasi anda sudah banyak, anda perlu mengotomasi deployment untuk tiap repository code tersebut. Disinilah skill pemahaman tentang CI/CD oleh seorang Full Stack Developer dibutuhkan. Beberapa skill lain yang menurut saya wajib antara lain yaitu penggunaan monitoring tool, virtualization, containerization, orchestration, VPS dan layanan cloud berbayar.
  6. Pekerjaan pada sisi UI/UX, (Optional). Pada nomor 1 dan 2, yaitu pekerjaan pada sisi Client Frontend Web dan Mobile Web saya beberapa kali menyebutkan tugas Developer untuk mengkonversi desain dan prototype menjadi sebuah komponen code, kemudian dari komponen code tersebut menjadi tampilan. Ada kemungkinan besar ketika suatu tim belum memiliki anggota tim yang bertugas dan fokus pada UI/UX. Seorang Full Stack Developer harus siap dengan kemungkinan ini. Sehingga skill minimal pada bidang pekerjaan ini harus ada, seperti membuat prototype dan alur produk yang akan kita buat, kemudian merubahnya menjadi sebuah desain dan wireframe.

Apakah menjadi Full Stack Developer cocok untuk anda?

Ada beberapa pertanyaan yang anda harus tanyakan pada diri anda sendiri untuk membuktikan kesiapan anda menjadi seorang Full Stack Developer.

  1. Apakah salah satu hobi anda adalah coding?
  2. Apakah anda siap belajar hal-hal baru, terutama teknologi?
  3. Apakah anda siap keluar dari zona yang sangat nyaman bagi anda saat ini?
  4. Apakah anda siap bekerja lebih dan meluangkan waktu anda di luar pekerjaan anda hanya untuk belajar hal-hal baru?
  5. Apakah anda siap menginvestasikan yang anda miliki untuk anda sendiri? seperti membeli komputer baru yang lebih powerful, memakai tabungan anda untuk kursus atau bootcamp, memakai banyak waktu anda untuk belajar mandiri?

Kenapa anda harus menjadi seorang Full Stack Developer?

Ada beberapa alasan kenapa anda harus menjadi seorang Full Stack Developer.

  1. Salah satu topik hangat. Bisa anda manfaatkan untuk self-branding anda.
  2. Anda tidak tertarik dengan role lain seperti Manager, VP Engineering, atau CTO. Tetapi anda ingin tetap fokus pada hal-hal teknis tetapi pendapatan atau gaji anda tetap bisa naik seiring dengan kemampuan anda.
  3. Anda memiliki helicopter view pada produk yang anda buat. Full Stack Developer cenderung sering terlibat pada keseluruhan role dan keseluruhan requirement pada pengembangan sebuah produk, sehingga dia bisa membuat sebuah prototype dan MVP sebuah produk dengan cepat.
  4. Anda bisa menjadi orang yang selalu diandalkan dan dilibatkan dengan luasnya pengetahuan dan skill anda. Ini juga akan ber-impact pada penghasilan, gaji dan reputasi anda.
  5. Ketika anda bergabung dengan sebuah startup atau bahkan anda mendirikan startup anda sendiri yang kemungkinan anggota tim anda masih terbatas dan anda dituntut untuk menangani segala hal sendiri, anda tidak akan kaget. Karena anda bisa membuat prototype, MVP atau bahkan menyelesaikan produk anda sendiri.

Kapan Full Stack Developer sangat dibutuhkan?

Ada beberapa alasan kenapa Full Stack Developer sangat dibutuhkan.

  1. Perusahaan atau Startup sedang fokus membangun produk, dengan cepat.
  2. Perusahan atau Startup tersebut hanya ingin memiliki 2–3 Developer karena belum mendapatkan pendanaan yang memadai untuk menyelesaikan produk menjadi MVP misalnya dalam waktu 1–2 bulan.

Langkah-langkah untuk menjadi seorang Full Stack Developer

Berdasarkan jawaban tentang pertanyaan “Apa itu Full Stack Developer ?” di atas yang sudah kita bahas tadi, keluasan bidang pekerjaan seorang Full Stack Developer bisa kita gambarkan pada bagan berikut ini.

Keluasan bidang pekerjaan seorang Full Stack Developer

Jika melihat bagan diatas, kita bisa sedikit menyimpulkan hal yang bisa diwujudkan oleh seorang Full Stack Developer adalah dia bisa dengan cepat membuat prototype sebuah produk dan bahkan MVP yang siap pakai dengan memanfaatkan luasnya kemampuan dan pengetahuan yang dia miliki.

Untuk mencapai dan menguasai keluasan bidang pekerjaan pada bagan tersebut, kita akan coba jabarkan pada langkah-langkah berikut ini.

Memiliki mindset Full Stack

Coding adalah salah satu hobi, open minded, siap belajar hal-hal baru dan senang dengan hal-hal baru.

Belajar Linux

Seperti yang kita bahas sebelumnya, Linux adalah backbone dan nyawa dari sebagian besar Internet di seluruh dunia yang kita manfaatkan setiap hari. Mau tidak mau anda harus nyaman pada Terminal milik Linux. Anda harus terbiasa dengan command-command umum yang sering dipakai, misalnya ssh, ls, curl, grep dan mkdir. Bahkan anda harus bisa menggunakan editor terminal seperti Nano, Vi, ataupun Vim. Karena ketika berbicara komputer server, anda harus mengaksesnya melalui remote komputer menggunakan ssh. Jadi kita tidak akan berharap ada tampilan atau GUI yang akan memudahkan kita.

Belajar Version Control Code dengan Git

Kita pilih Git sebagai version control tool untuk membantu manajemen code yang kita buat. Kita pilih Git karena tool ini paling banyak digunakan dan menjadi core dari beberapa platform layanan penyimpanan dan manajemen code seperti Github dan Gitlab. Jadi skill Git menjadi mandatory. Anda bisa mulai belajar Git dari yang paling sederhana yaitu inisialisasi projek kemudian mengunggahnya ke Github atau Gitlab. Kemudian mulai mencoba berkolaborasi dalam satu repository code dengan teman yang sama-sama sedang belajar menggunakan Git.

Belajar Bahasa Pemrograman

Menjadi seorang Full Stack Developer menuntut kita untuk menjadi seorang Generalist dan Polyglot programer. Hindari menjadi FanBoy pada bahasa pemrograman tertentu. Selain menjadi seorang generalist, anda juga dituntut untuk paham pada beberapa paradigma pada pemrograman. Anda harus tahu kapan menerapkan dan memanfaatkan OOP(object oriented programming) pada produk anda, kapan menerapkan dan memanfaatkan pemrograman prosedural (procedural programming), dan kapan menerapkan dan memanfaatkan pemrograman fungsional (functional programming). Untuk tren Industri teknologi saat ini, anda bisa mempertimbangkan beberapa bahasa yang anda harus pelajari, yaitu Javascript, Java, C#, Golang, Kotlin, Swift, Kotlin, Python dan PHP. Untuk tambahan belajar, anda bisa mencoba C, C++, Clojure(functional), dan Elixir(functional). Untuk otomasi, anda bisa belajar shell dan bash script.

Belajar Menggunakan Framework, Tool, dan Third party library

Setelah anda merasa cukup mahir pada beberapa bahasa pemrograman, anda bisa lanjut pada proses belajar menggunakan framework, tool, dan third party library. Anda nyaman menggunakan Javascript, anda bisa belajar menggunakan platform Javascript runtime seperti NodeJs atau Deno lengkap dengan penggunaan framework-nya seperti ExpressJs dan package managernya yaitu NPM. Anda nyaman menggunakan PHP, anda bisa belajar menggunakan Laravel(web framework), CodeIgniter(web framework), dan Composer(package manager). Anda nyaman menggunakan Java, anda bisa belajar menggunakan Maven(build tool), Gradle(build tool), Spring Boot/MVC(web framework), VertX(library), dan Hibernate(ORM library). Organisasi anda sudah nyaman dengan ekosistem Microsoft, anda bisa memanfaatkan C# dan .NET untuk membangun produk anda. Atau anda ingin membuat aplikasi CLI, anda bisa menggunakan Golang.

Belajar Menggunakan Database

Setelah anda merasa cukup terbiasa dengan beberapa framework, tool atau third party library. Tahap selanjutnya yang anda harus coba adalah mengakses dan menyimpan data ke dalam database dari level aplikasi. Sebelum bisa melakukan itu semua, anda perlu menentukan database yang akan anda gunakan. Anda bisa memilih tipe database RDBMS ataupun NoSQL. Untuk RDBMS anda bisa memilih Postgre atau MySQL. Untuk NoSQL anda bisa memilih MongoDB. Untuk data-data yang sifatnya cache atau sementara anda bisa memanfaatkan Redis. Pemilihan database tergantung keperluan anda. Jika aplikasi anda banyak melakukan transaksi yang melibatkan banyak tabel, anda pertimbangkan menggunakan tipe database RDBMS. Jika data anda cenderung dinamis pada perubahan kolom, anda pertimbangkan menggunakan tipe database NoSQL seperti MongoDB. Setelah menentukan tipe database yang akan dipakai, kemampuan yang anda butuhkan pada penggunaan database selanjutnya yaitu pembuatan tabel (jika anda menggunakan RDBMS), indexing, dan optimasi query seperti harus tahu kapan menggunakan Left Join dan kapan harus menggunakan Inner Join.

Belajar Teknologi Backend

Setelah anda merasa cukup familiar dengan beberapa teknologi, misal untuk membangun Backend anda memilih Golang, Java, C# atau NodeJs, anda harus mulai belajar tahap-tahap membangun sebuah Backend Service. Anda harus belajar memilih arsitektur code yang sesuai kebutuhan anda. Ada beberapa arsitektur code yang bisa anda pilih misalnya clean architecture, hexagonal architecture, dan onion architecture. Anda minimal harus tahu cara kerja protokol seperti HTTP dan WebSocket supaya tahu kapan menggunakan metode yang sesuai untuk proses transmisi data, misalnya anda menggunakan HTTP untuk frontend, anda menggunakan RPC, SOAP, dan Pub/Sub untuk berinteraksi antar Backend service yang anda bangun. Untuk Pub/Sub dan asynchronous anda bisa menggunakan Apache Kafka atau RabbitMQ misalnya. Setelah metode transmisi data, anda harus belajar serialisasi data. Yang paling umum yaitu menggunakan JSON untuk serialisasi data yang dikirim dengan protokol HTTP. Jika sudah cukup familiar dengan serialisasi data menggunakan JSON, anda bisa mencoba metode serialisasi data lain, misalnya dengan Protocol Buffer atau Apache Avro. Untuk membangun search engine internal anda bisa menggunakan Elasticsearch. Sebagai seorang Full Stack Developer harus mendalami banyak teknologi yang kita bahas sebelumnya, juga harus siap dan terus belajar terutama pendalaman terhadap arsitektur dan design pattern pada sebuah code.

Belajar Teknologi pada Frontend Web

Dengan semakin terjangkaunya biaya untuk mengakses Internet, maka akan semakin bertambah pengguna Internet terutama di Indonesia. Saat ini Indonesia ada di peringkat enam untuk pengguna Internet terbanyak di dunia. Bisa kita simpulkan, pengguna Internet di Indonesia adalah pasar yang sangat menjanjikan bagi para pengembang produk teknologi. Karena hal inilah skill teknologi pada Frontend Web sangat menjanjikan dan dibutuhkan. Ketika anda memulai belajar sebagai Full Stack Developer anda harus menguasai dasar dari teknologi web yaitu HTML, CSS, dan Javascript. Setelah anda merasa cukup menguasai dasar untuk membangun sebuah website, anda bisa lanjut dengan belajar teknologi dan Framework untuk Frontend Web, seperti ReactJS, VueJs, dan NextJs.

Belajar menggunakan Komputer server dan Layanan Cloud

Untuk memulai belajar menggunakan komputer server, anda sudah harus paham command-command dasar pada Linux, seperti ssh, curl, ls, mkdir dll. Untuk tahap belajar awal, anda bisa membeli layanan VPS, untuk belajar tahap selanjutnya anda bisa membeli layanan Cloud seperti AWS, Google Cloud Platform, atau Azure. Untuk latihan saya sarankan membeli layanan VPS terlebih dahulu. VPS dengan spesifikasi 1 GB RAM, 4 Core CPU, dan storage sebesar 15 GB sekitar Rp. 300.000. Spesifikasi ini cukup untuk anda gunakan sebagai playground untuk mencoba menginstall Web Server seperti Nginx dan Apache. Setelah anda cukup familiar dengan komputer server menggunakan VPS, anda bisa mencoba membeli layanan pada AWS. Anda bisa mencoba fitur-fitur yang ada di AWS seperti EC2, RDS, lambda, SQS dan SNS. Anda bisa menggunakan kartu kredit untuk mencoba gratis selama setahun. Anda bisa memilih VPS atau Layanan Cloud untuk mencoba mendeploy aplikasi yang sudah anda buat.

Belajar Container dan Virtualization

Dengan naiknya tren arsitektur Microservice, pentingnya belajar teknologi container menjadi hal yang mandatory. Kita pilih Docker untuk teknologi container-nya. Karena saat ini paling banyak digunakan dan sudah didukung oleh layanan-layanan Cloud seperti AWS, Google Cloud Platform, dan Azure. Virtualisasi juga perlu kita pelajari, biasanya sering kita pakai untuk local development. Kita bisa memanfaatkan Virtual Box dan Vagrant untuk belajar virtualisasi, sebab kita kadang perlu environment yang bisa dipasang dan dibuang jika sudah tidak kita perlukan.

Belajar Teknologi pada Mobile Apps

Pertimbangannya hampir sama dengan ketika belajar teknologi Frontend Web, yaitu “Terjangkaunya biaya untuk mengakses Internet”, sehingga semakin banyak juga pengguna Mobile yang merupakan pasar yang sangat menjanjikan bagi para pengembang produk teknologi. Untuk pemula, anda bisa mulai menggunakan teknologi Hybrid seperti React Native atau Flutter. Tetapi jika anda sudah familiar dengan Javascript atau mungkin ReactJS, anda saya sarankan untuk menggunakan React Native. Ketika anda menggunakan React Native anda tidak perlu membutuhkan waktu yang lama untuk belajar, karena anda sudah terbiasa dengan Javascript dan ReactJs. Keuntungan lain yang akan anda dapatkan adalah anda bisa membuat aplikasi untuk sistem operasi Android dan IOS. Setelah anda cukup familiar dengan teknologi Mobile Apps ketika anda membangun aplikasi dengan teknologi Hybrid, anda bisa mulai belajar membangun aplikasi dengan teknologi Native menggunakan Kotlin untuk Android dan Swift untuk IOS.

Belajar UI/UX (Optional)

Untuk topik belajar UI/UX saya tandai dengan (Optional), karena kemungkinan seorang Full Stack Developer terlibat dengan topik ini sangat kecil. Tetapi tidak ada salahnya jika anda mencoba membaca topik-topik seputar UI/UX, belajar membuat prototype sebuah produk, dan belajar tool-tool yang biasa digunakan seperti Figma dan Sketch.

Untuk mencapai semua itu dibutuhkan semangat, kesabaran, investasi waktu, dan investasi finansial.

Semoga sukses….

wuriyanto

Leave a Reply

Your email address will not be published. Required fields are marked *