![10 Kesalahan Umum Junior Software Engineer](https://images.ctfassets.net/7wjlcr9d5ii8/5AiSpF5OGAxEfGJwMy1bXE/5cbd2ef5a0d6eaebe82cbfc37e7dfe25/mistakes.png?w=1024&h=768&q=100&fm=png&fit=thumb&f=faces)
Junior itu adalah jabatan entry level seseorang yang memasuki karir secara profesional. Hampir semua orang yang berkarir di bidang programming pernah berada di posisi junior. Sebelum akhirnya secara bertahap naik ke posisi yang lebih tinggi. Ga ada patokan sih junior itu sampai berapa tahun, tapi umumnya sekitar 2 tahunan. Yang kurang dari 2 tahun ada, dan yang lebih dari 2 tahun juga ada. Tergantung kemampuan diri dan regulasi tempat kerja juga. Di sini gw merangkum beberapa poin tentang kesalahan-kesalahan umum yang biasa dilakukan junior software engineer menurut pendapat gw pribadi, termasuk pengalaman gw sendiri🤭.
Ini adalah kesalahan pertama yang sering dilakukan oleh junior yang masih baru belajar. Termasuk gw😅. Ini juga jadi saran cara belajar pertama yang gw dapat dari sosial media. Waktu itu ada beberapa yang menyarankan untuk melakukan cara ini untuk belajar programming dengan gampang. Memang gampang sih. Tapi ini justru membuat kita terbiasa copy-paste code dari internet tanpa mengerti fungsinya, hanya modal copy-paste dan modfikasi. Kalau error, modifikasi lagi sampai bener. Gitu aja terus. Tipe seperti ini hanya berorientasi hasil, tanpa mengutamakan proses. Masalahnya adalah saat mendapatkan kasus yang unik yang solusinya tidak ada di internet. Pasti puyeng😵💫. Cara belajar yang lebih baik adalah perkuat fundamental algoritmanya. Sering-sering berlatih struktur data dan latihan membuat aplikasi sederhana dengan menerapkan beberapa algoritma yang dipelajari, hindari copy-paste. Kalau pemahaman algoritmanya udah kuat, ketemu masalah apapun biasanya bisa diakali sendiri tanpa harus copy-paste.
Ini juga jadi kesalahan gw saat kuliah dulu😮💨. Gw pernah internship, tapi bukan di perusahaan teknologi. Ga banyak hal yang bisa gw ambil setelah internship di sana. Bahkan bisa dibilang gw cuma “numpang” aja untuk memenuhi syarat akademik dari kampus. Beberapa mahasiswa juga banyak yang memilih jalan pintas demi mendapatkan nilai akademik. Ada yang internship di kantor orang tuanya, ada yang di kantor pemerintahan, ada juga yang di kampus, lalu ada yang di bengkel, warung, warnet, dll. Bahkan ada yang ga internship sama sekali. Padahal internship di perusahaan teknologi sangat penting buat calon software engineer. Kita akan mendapatkan banyak hal. Mungkin di kampus kita cuma bikin program cuma untuk kebutuhan nilai, tapi dengan internship kita jadi punya gambaran standar kerja di industri itu kayak gimana. Bukan berarti internship di selain perusahaan teknologi jelek, yang bagus mungkin juga ada. Tapi lebih bagus lagi kalau internship di perusahaan teknologi. Ketika lulus, orang-orang yang memiliki pengalaman internship di perusahaan teknologi biasanya akan lebih gampang dapat kerja. Ibarat lomba lari mereka udah nyolong start, sedangkan kita baru ambil ancang-ancang.
Ini salah satu kesalahan sebagian besar junior yang paling sering ditemui. Gw pun melakukannya🤭. Dulu waktu kuliah gw berpikir bisa ngoding dengan berbagai bahasa, database, dan framework, maka akan gampang nyari kerja. Beda mata kuliah, beda lagi bahasa yang dipakai meskipun ga disuruh. Gw emang pengen keliatan keren aja😎. Memang sih, gw bisa menggunakan beberapa bahasa, tapi gw ga menguasainya. Gw hanya tau basicnya aja. Baru nyadar pas lulus mau interview kerja. Waktu interview gw ditanyai terkait fitur dan struktur bahasa-bahasa yang gw tulis di cv, tapi gw ga bisa menjawabnya. Alhasil, gw nganggur 9 bulan🤣. Menguasai banyak bahasa itu sangat bagus, dengan catatan beneran menguasai. Gw jadi inget salah satu nasehat dari dosen gw, “Lebih baik pelajari satu atau dua bahasa dan fokus mendalaminya, daripada bisa banyak bahasa tapi cuma basicnya aja”. Saat itu gw denial dalam hati, “ah, masa sih?”. Ternyata itu benar adanya. Berhubung pada masa itu Java demand-nya lagi tinggi di Jobstreet, gw fokus belajar Java dari nol sampai akhirnya gw diterima bekerja. Kalau udah mendalami satu teknologi, ke depannya mau belajar apapun akan lebih gampang. Bukan berarti kita mentok belajar satu teknologi aja, tapi pelajarilah satu-satu secara bertahap dan mendalam, jangan diborong semuanya sekaligus dalam satu waktu.
Sebenarnya ga ada yang salah untuk ngikutin trend dan selalu up-to-date. Bagi yang sudah experienced punya curiousity terhadap sesuatu yang baru justru sangat bagus. Tapi, kalau kondisinya masih tahap baru belajar programming, jangan mudah tergiur dengan apa-apa yang lagi hype. Banyak junior yang kemakan marketing dari suatu teknologi dan mengabaikan kebutuhannya. Contoh yang terkini framework Next.js. Banyak yang baru belajar Javascript dan nyobain Next.js versi sebelumnya tergoda buat mempelajari versi terbaru dengan fitur yang lebih kaya. Kemudian muncul lagi versi baru dengan fitur yang lebih kaya lagi. Ujung-ujungnya malah pusing sendiri dan ga bisa ngikutin karena fundamentalnya aja belum kuat. Next.js itu open-source milik startup Vercel yang ingin membahagiakan investornya yang senantiasa menantikan rilis-rilis terbarunya, wajar perkembangannya begitu cepat. Kalau kondisinya masih baru belajar, jangan gampang kemakan iklan. Solusinya fokus dulu aja sama versi yang sedang dipelajari. Kalau jam terbangnya udah tinggi di salah satu versi, ke depannya cenderung akan lebih mudah kalau mau upgrade versi. Atau pelajari teknologi lain yang sudah stabil saja. Saat interview kerja juga belum tentu ditanya tentang versi terbaru. Di industri, upgrade teknologi itu ga setiap saat. Kecuali emang benar-benar dibutuhkan seperti ada security bugs atau ada masalah lain yang kritikal. Karena untuk upgrade itu butuh cost, waktu, dan tenaga, dan itu ga murah nilainya.
Ini cukup sering gw temukan tipe yang seperti ini. Merasa cukup dengan apa yang udah mereka pelajari. Padahal teknologi itu cakupannya sangat luas. Ada yang udah bisa bikin aplikasi CRUD, trus ngerasa ga perlu belajar banyak lagi. Orang seperti ini biasanya karena emang ga punya curiousity dan passion di bidang teknologi. Banyak hal yang perlu dipelajari, mulai dari database, programming principle, design pattern, atau belajar dari codingan-codingan senior. Pelajari satu-satu secara bertahap. Semakin kita memahami sesuatu, semakin kita sadar bahwa apa yang telah kita pahami sebelumnya masih belum apa-apa. Justru kalau malas-malasan kayak gini bakalan kalah saing sama yang lain nantinya. Apalagi dengan kondisi ekonomi sekarang, rawan PHK jika dinilai kurang berkembang.
Ada beberapa junior yang ketika belajar langsung pakai framework dan mengabaikan fundamental. Biasanya karena ga sabaran pengen belajar dengan cepat. Sebenarnya secara hasil bisa-bisa aja belajar programming langsung pakai framework dan mengabaikan fundamental. Tapi kebanyakan malah ga paham bahasa pemrograman dan taunya cuma fitur dari suatu framework. Jadinya sangat bergantung ke fitur framework tersebut. Suatu saat jika diharuskan untuk memakai framework lain, atau membuat module sederhana tanpa framework bakal kebingungan. Beda halnya dengan orang yang memperkuat fundamental dulu, baru belajar framework. Suatu saat jika diharuskan untuk memakai framework berbeda biasanya adaptasinya lebih gampang, atau bikin sesuatu yang sederhana tanpa framework bisa langsung gas. Bahkan bisa bikin framework atau library sendiri untuk kebutuhan internal. Framework itu cuma alat bantu suatu bahasa, bukan sebagai pengganti bahasa.
Kalimat ini sering gw liat di meme😂. Gw rasa ini banyak yang relate. Kalau aplikasinya jalan, walaupun codenya terlihat aneh, jangan diganggu, biarkan aja. Walaupun ini sekedar candaan, tapi banyak juga junior yang menerapkan ini. Padahal itu bisa memperluas wawasan. Bisa jadi itu codenya emang nge-bug, tapi belum ketahuan aja di production. Atau bisa jadi itu sesuatu yang tadinya kita anggap salah, padahal itu fitur canggih yang sebelumnya kita ga ketahui. Apapun hasilnya, itu akan menambah pengetahuan kita. Jadi jangan ragu untuk mempelajari, atau bahkan bertanya kepada orang yang membuat code tersebut jika menemukan sesuatu yang unik. Sebagai seorang software engineer, memiliki sifat curious itu udah jadi hal wajib.
Ada juga junior yang rajin banget belajar ini-itu. Hari ini belajar Javascript, besoknya belajar Go, besoknya lagi belajar Next.js, lanjut lagi belajar Postgresql, Kafka, Docker, dan seterusnya. Tapi cuma baca-baca di internet aja atau liat-liat videonya aja di youtube. Ga diiringi dengan praktek. Padahal programming itu teori dan praktek harus seimbang. Tau teorinya aja tanpa praktek ga akan menghasilkan apa-apa. Sebaliknya, prakteknya aja tanpa teori pun hanya menghasilkan program yang asal-asalan. Minimal setelah mempelajari teori dipraktekin dengan membuat mini project. Selain itu, bikin project dan share di github juga bisa menambah point plus pada cv.
Banyak junior yang berpikir bahwa performa di atas segalanya. Ada yang ngodingnya jadi berantakan dan ga bisa dibaca karena ngerasa secara performa itu bakal lebih cepat. Ada yang dengan pendekatan sebelumnya sebenarnya ga ada masalah, tapi malah diganti dengan alasan “performa”. Bahkan ada juga yang langsung ganti teknologi atau upgrade versi yang belum tentu backward compatible dengan code sekarang. Padahal belum tentu performanya bermasalah, tergantung kasus. Selain performa, ada komponen lain yang harus dipertimbangkan yang juga sama pentingnya, yaitu maintainability dan readability. Ketiga komponen ini harus seimbang. Jika secara performa cepat, tapi susah dibaca dan ribet dimaintain juga buat apa? Tiap penambahan fitur jadi butuh waktu lama, bisa bikin rugi saat development. Kecuali performanya memang benar-benar bermasalah dan kritikal. Bila ngomongin performa tentu harus ada patokannya. Misalkan, sebelumnya pemakaian RAM dan CPU tinggi banget, setelah dibenerin jadi lebih rendah. Atau saat buka webnya waktu yang dibutuhkan 5 detik, setelah dibenerin jadi kurang dari 1 detik. Nah, kalau kasusnya seperti itu memang harus dibenerin performanya. Kalau sebelumnya loading web udah kurang dari 1 detik atau RAM & CPU masih aman dan ga ada masalah, ga usah dibikin aneh-aneh. Apalagi kalau selisih perbedaan before-after cuma 1 millisecond atau nanosecond, ga terlalu signifikan, ga ada manfaatnya, cuma buang-buang waktu development, user juga belum tentu aware. Menentukan suatu performa itu cepat atau lambat harus ada data benchmark atau analitiknya seperti data P95 (95th percentile latency) atau bisa juga berdasarkan feedback dari user, bukan berdasarkan perasaan engineer😅. Standard load time satu webpage itu adalah kurang dari 2 detik, dan standard load time satu API itu adalah kurang dari 500ms. Atau misalnya codenya itu bad practice, seperti ada yang menyimpan value unik ke array trus melakukan looping untuk melakukan pengecekan satu-satu (O(n)). Kalau kayak gitu justru sebaiknya diganti karena best practicenya menggunakan tipe data Set. Itu tidak memperburuk readability, malah meningkatkan readability karena ga perlu looping satu-satu, tapi bisa gunakan function pengecekan dari Set tersebut (O(1)). Intinya kalau mau melakukan improvement performa pertimbangkan juga readability dan maintainability, kalau worth it gas aja, tapi kalau malah ribet dibaca dan susah dimaintain sebaiknya jangan terlalu gegabah✋.
Mungkin sudah sering juga dibahas di internet atau di dunia nyata. Banyak junior yang kalau diskusi tidak menjelaskan secara detail. Misalkan dia ada masalah atau mau diskusi sesuatu, tapi ga menceritakannya secara detail masalahnya apa. Orang lain jadi bingung nanggepinnya😅. Mungkin sebagian orang ada yang punya ilmu baca pikiran🪄, tapi gw yakin sebagian besar ga bisa baca isi pikiran orang lain. Untuk itu jika ada masalah teknis atau mau diskusi sesuatu, tolong jelaskan detailnya, cara reproduce, snippet code, apa yang sedang dilakukan, expectednya apa, gambaran kasusnya gimana, atau apapun itu. Semakin detail semakin bagus.
Itulah beberapa unek-unek gw tentang junior SDE. Mungkin banyak yang relate juga. Atau mungkin ada yang ga setuju, itu sah-sah aja. Tulisan ini memang opinion banget😁. Sebenarnya ada beberapa poin lagi yang ingin gw tulis, tapi masih belum mateng tulisannya. Mungkin nanti lanjut part 2.