Menjadi Insinyur yang Baik
(0x0001.cc)- Banyak software engineer bekerja tanpa gairah terhadap perangkat lunak
- Mereka bekerja hanya untuk mendapatkan gaji yang baik, tetapi tanpa gairah pada akhirnya kinerja akan menurun
- Jika terpaku pada teknologi lama dan keyakinan yang keliru tanpa terus belajar, pertumbuhan tidak akan terjadi
- Elemen yang dibutuhkan untuk menjadi insinyur yang baik
- Harus memahami esensi rekayasa dan membangun pengetahuan yang mendalam
- Harus terus mempelajari teknologi baru dan meninjaunya secara kritis
- Dibutuhkan kebiasaan menerapkan dan memperbaiki pengetahuan yang dipelajari dalam praktik
# Apa yang Membuat Insinyur yang Baik
- Definisi insinyur
"Orang yang menerapkan prinsip-prinsip ilmiah untuk menganalisis masalah, lalu menyelesaikannya melalui perancangan, penulisan kode, pembuatan, penciptaan, dan menjadikan dunia tempat yang lebih baik"
- Kemampuan yang dituntut dari software engineer
- Harus memahami prinsip cara komputer bekerja
- Perlu pemahaman mendalam tentang cara hardware dan software saling berinteraksi
- Tidak hanya bergantung pada bahasa atau teknologi yang terabstraksi, tetapi harus belajar dari dasar
Pemahaman Mendalam tentang Domain
- Diperlukan pemahaman yang kuat tentang prinsip-prinsip dasar
- Insinyur mesin → pengetahuan tentang sifat material dan penerapannya
- Software engineer → memahami cara kerja memori dan CPU
- Harus belajar mulai dari prinsip dasar
- Pemahaman mendalam tentang konsep dasar seperti HTTP, struktur memori, dan cara kerja sistem adalah hal yang esensial
- Jangan mulai dari level atas; bangun dari dasar
Pembelajaran Berkelanjutan
- Harus terus mempelajari teknologi terbaru dan tren pengembangan
- Harus menganalisis secara kritis kelebihan dan kekurangan teknologi baru
- Menggali lebih dalam topik-topik baru yang ditemukan selama proses belajar
- Seperti saat mempelajari matematika yang terhubung ke subtopik-subtopik rinci, kedalaman belajar juga harus diperluas
Memahami Batasan dan Masalah Teknologi
- Harus memahami dengan jelas kelebihan dan kekurangan alat atau bahasa
- Perlu mewaspadai sikap yang terlalu memuja bahasa atau alat tertentu
- Penting untuk memilih alat yang paling tepat untuk proyek
Menerapkan Pengetahuan dalam Praktik
- Hanya mengetahui teori tidak ada artinya
- Pengetahuan yang dipelajari harus diterapkan pada proyek nyata
- Harus digunakan untuk memecahkan masalah atau membuktikan konsep
- Contoh penerapan praktis
- Membangun prototipe kecil
- Menyelesaikan masalah yang muncul dalam keseharian
- Menjelaskan dan mengajarkan hal yang dipelajari kepada orang lain
# Cara Menjadi Insinyur yang Lebih Baik
Mengembangkan Kemampuan Berpikir Kritis
- Berpikir kritis adalah elemen inti dalam engineering
- Ini penting untuk memahami konsep dan dampaknya serta menantangnya
- Kurangnya berpikir kritis atau mengabaikannya akan menimbulkan inefisiensi dan kompleksitas
- Memperkuat kemampuan berpikir kritis
- Saat menemukan konsep baru, jangan langsung menerimanya; tinjau efektivitas dan validitasnya
- Analisis secara logis kelebihan, kekurangan, dan alternatif dari suatu pendekatan tertentu
- Materi pembelajaran berpikir kritis: lihat Critical Thinking
Membaca Lebih Banyak Buku
- Membaca adalah cara efektif untuk memperoleh pengetahuan
- Ada banyak buku dengan beragam topik terkait software engineering
- Jangan hanya menerima isi buku begitu saja; dekati secara kritis
- Contoh pertanyaan untuk membaca secara kritis
- "Apakah ada masalah dengan pendekatan ini?"
- "Apakah ada cara yang lebih baik?"
- "Jika saya melakukannya secara berbeda, seperti apa caranya?"
- "Apakah yang dijelaskan dalam buku ini benar-benar tepat?"
- Membangun kebiasaan mencatat
- Menyusun dan mencatat hal-hal yang dipelajari serta pemikiran sendiri
- Jika topik yang tidak dikenal disebutkan, telusuri lebih lanjut
- Obsidian direkomendasikan sebagai alat pencatatan (dapat dipilih sesuai preferensi pribadi)
- Daftar bacaan yang direkomendasikan
Menerapkan Pengetahuan yang Dipelajari ke Proyek
- Menghubungkan teori ke praktik
- Pembelajaran yang sesungguhnya terjadi ketika hal yang dipelajari diterapkan dalam proyek nyata
- Dengan benar-benar mengimplementasikan konsep, pemahaman mendalam dapat diperoleh
- Penting untuk membuat sendiri meskipun hanya proyek kecil atau prototipe
- Manfaat yang diperoleh dalam proses penerapan praktis
- Akan menghadapi masalah nyata yang tidak terlihat dalam teori
- Dalam proses pemecahan masalah, pengetahuan dapat dibuat lebih konkret dan diperbaiki
- Kemampuan memecahkan masalah dan berpikir logis menjadi lebih kuat
- Cara menerapkan hal yang dipelajari
- Membangun prototipe kecil
- Setelah mempelajari framework, bahasa, atau konsep baru, cobalah proyek kecil
- Contoh: setelah mempelajari indexing database, implementasikan sistem pencarian sederhana dan bandingkan performanya
- Menyelesaikan masalah nyata
- Cobalah menyelesaikan masalah kecil yang muncul dalam kehidupan sehari-hari atau pekerjaan
- Contoh: mengotomatisasi pekerjaan manual yang berulang, memperbaiki masalah penurunan performa, dan sebagainya
- Mengajarkan hal yang dipelajari
- Memperkuat pemahaman dengan menjelaskan hal yang dipelajari kepada orang lain
- Menulis blog, membuat thread Twitter, atau berdiskusi dengan rekan kerja
- Dalam proses mengajar, sudut pandang baru dapat ditemukan
- Jika pengetahuan terus diterapkan, pemahaman teoretis akan berubah menjadi kemampuan praktis, sehingga dapat berkembang menjadi insinyur yang lebih kompeten
Mengevaluasi dan Memperbaiki Kode Sendiri
- Kritik terhadap diri sendiri adalah kebiasaan inti insinyur hebat
- Banyak insinyur melakukan kesalahan dengan berpikir bahwa jika kode berjalan maka itu "sudah cukup"
- Namun insinyur sejati menyadari bahwa selalu ada ruang untuk perbaikan
- Tujuan evaluasi diri
- Tidak perlu terlalu keras pada diri sendiri
- Intinya adalah menemukan peluang untuk perbaikan berkelanjutan
- Jangan puas hanya karena kode berjalan; carilah cara untuk meningkatkan performa, maintainability, dan readability
- Dampak evaluasi diri yang berkelanjutan
- Kualitas kode meningkat secara bertahap
- Kemampuan memecahkan masalah menguat melalui kritik diri
- Pengetahuan dan kemampuan diri dapat terus berkembang
# Daftar Rekomendasi untuk Software Engineer
Buku Rekomendasi
- Designing Data-Intensive Applications – perancangan aplikasi yang berfokus pada data
- Introduction to Algorithms – (edisi Koreanya juga memakai judul bahasa Inggris)
- Writing a C Compiler
- Essential Maths for Data Science – matematika esensial untuk developer
- Elements of Information Theory
Proyek Rekomendasi
- Compiler - cobalah menulis compiler untuk bahasa pilihan Anda, dengan referensi LLVM atau JVM
- Emulator - tulis emulator CPU sederhana (misalnya 8086)
- Rendering engine / game engine - tulis program grafis menggunakan OpenGL atau Vulkan
- Menulis memory viewer dan editor - tulis program yang berinteraksi dengan memori program lain
- Menulis server HTTP - tulis server HTTP dengan bahasa level rendah
- Hindari website atau proyek sederhana. Efek belajarnya mungkin rendah. Pilih salah satu proyek yang disebutkan di atas, teliti topiknya, lalu implementasikan sendiri
Kesimpulan
- Menjadi insinyur yang baik bukan berarti mengetahui banyak bahasa pemrograman
- Pemahaman mendalam tentang prinsip dasar + berpikir kritis + penerapan praktis adalah inti
- Dibutuhkan sikap untuk belajar, menerapkan, dan terus memperbaiki diri
- Engineering adalah perjalanan tanpa akhir, dan sikap untuk terus bertumbuh itu penting
Kesimpulan
- Esensi menjadi insinyur yang baik
- Bukan tentang mengetahui paling banyak bahasa pemrograman, menguasai framework terbaru, atau mengejar teknologi baru
- Kuncinya adalah pemahaman mendalam tentang prinsip-prinsip dasar engineering
- Harus menerapkan pengetahuan yang dipelajari ke proyek nyata, berpikir kritis, dan terus berkembang
- Ciri-ciri insinyur terbaik
- Tidak berhenti belajar dan terus memperoleh pengetahuan baru
- Terus meragukan asumsi sendiri dan mencari cara untuk memperbaikinya
- Menerapkan pengetahuan yang dipelajari pada pemecahan masalah nyata, serta bertumbuh melalui kolaborasi dengan rekan kerja
- Engineering adalah perjalanan seumur hidup
- Dibutuhkan rasa ingin tahu (curiosity), kedisiplinan (discipline), dan kemauan untuk berkembang
- Jika prinsip-prinsip ini dijalankan, Anda bisa menjadi bukan hanya insinyur yang baik, tetapi juga insinyur yang hebat
9 komentar
Saya juga pernah berkontribusi pada sisi manajemen memori di kernel Linux, dan merasa punya pemahaman tertentu tentang cara kerja level rendah, tetapi kalau dipikir-pikir pada akhirnya saya justru bekerja di bidang yang tanpa saya inginkan cukup jauh dari pengembangan, jadi saya merasa untuk menjadi insinyur yang sukses justru harus bertindak kebalikan dari tulisan ini.
Setelah kembali, saya merasa pasar di Korea terlalu kecil dan persaingannya terlalu ketat, sehingga hanya ada sedikit perusahaan atau posisi yang memungkinkan seseorang fokus pada pengembangan; dan karena semua orang berebut tempat yang sedikit itu, pada akhirnya tampaknya Anda harus fokus pada hal-hal yang mudah terlihat agar bisa melakukan pengembangan yang benar-benar ingin Anda kerjakan.
Saya juga setuju! Dan menurut saya, interpretasi tiap orang tentang insinyur seperti apa yang dimaksud dengan insinyur yang 'baik' di sini sangat berbeda. Mungkin terdengar ekstrem, tetapi meski kita tahu pentingnya pengetahuan dasar, jadi membuat saya berpikir apakah insinyur yang tidak memiliki nilai di pasar bisa disebut insinyur yang baik.
Saya benar-benar sangat relate,,,
Sayang sekali, ini bukan permainan tentang seberapa tepat kita memahami hal yang esensial dan seberapa baik menanganinya,
melainkan permainan tentang seberapa pandai kita memakai bahasa tertentu dan teknologi tertentu sesuai tren,,
Saya rasa di Korea juga ada banyak engineer yang hebat, tetapi saya juga merasa ada banyak bagian yang disayangkan karena ukuran pasarnya.
Saya jadi berpikir, seandainya tempat seperti FuriosaAI bisa berhasil dengan baik.
FuriosaAI bangkrut...?
Agak relate juga ya.. wkwk
Mungkin memang cuma pasar Korea yang seperti itu...
Beberapa waktu lalu, saya pernah mengadakan seminar di perusahaan untuk studi bahasa Kotlin. Saat saya menjelaskannya dengan membandingkannya dengan bahasa C++ yang paling sering digunakan di divisi, saya ingat responsnya cukup bagus. Padahal saya sendiri hampir tidak pernah memakai C++, dan anggota divisi juga baru pertama kali mengenal Kotlin, tetapi rasanya dalam banyak hal hal itu membantu perkembangan kami semua.
Opini Hacker News
Sangat menyukai pendapat tentang membaca buku. Saya sering melihat banyak engineer kehilangan banyak hal karena lebih memilih video dan postingan dangkal daripada dokumentasi dan buku
Saya setuju dengan banyak poin yang disebutkan dalam tulisan ini. Namun, saya tidak yakin bagaimana mengetahui dasar-dasar yang mendalam seperti CPU, memori, dan HTTP membantu seseorang menjadi engineer yang lebih baik
Saya mungkin tidak tahu sampai ke fondasi yang sangat dalam, tetapi saya pernah melihat bahwa ketika tidak memahami dasar-dasarnya, orang bisa menghasilkan hal yang benar-benar absurd dan sama sekali sulit dibayangkan.
Contohnya, mengimplementasikan pencarian dengan memasukkan semua record di DB ke memori terlebih dahulu lalu mencari di memori.
Saat record masih sedikit, semuanya berjalan baik, tetapi ketika record bertambah banyak, memori pun jebol.
Mereka menulisnya seperti ini karena sama sekali tidak memahami perbedaan antara memori dan DB.
Ini hanya salah satu contoh, dan setiap kali mereka mengimplementasikannya ke arah yang benar-benar tak terbayangkan.
Programmer biasa(?) benar-benar tidak bisa membayangkannya.