Pelajaran yang dipetik sebagai insinyur perangkat lunak tingkat pemula
Diterbitkan: 2022-08-30Jika Anda bertanya kepada saya setahun yang lalu apa yang dilakukan seorang insinyur perangkat lunak, saya akan mengatakan sesuatu di sepanjang baris "menyelesaikan masalah melalui kode." Ini adalah jawaban sederhana yang menunjukkan bagaimana pekerjaan yang kami hasilkan dievaluasi. Untuk insinyur di tim yang digerakkan oleh produk, masalah ini dapat mencakup bagaimana menerapkan fitur baru yang diminta pelanggan, atau bagaimana meningkatkan kinerja fitur yang ada.
Jika Anda menanyakan pertanyaan yang sama hari ini, saya akan memberikan jawaban yang sedikit berbeda. Insinyur perangkat lunak ditugaskan untuk memecahkan masalah yang tepat melalui kode—dan ketika diselesaikan secara efektif, mereka mencapai tujuan bisnis. Mencari tahu masalah mana yang harus dipecahkan dan bagaimana menyelesaikannya adalah bagian terpenting dari menjadi pengembang, dengan detail implementasi yang sebenarnya menjadi yang kedua.
Jalan saya menuju rekayasa perangkat lunak
Saya menjadi tertarik pada pemrograman setelah mengikuti kelas di Upperline Code pada musim panas sebelum tahun pertama kuliah saya. Saya mendapatkan kesempatan ini melalui program persiapan kuliah dan karir yang saya ikuti bernama The Opportunity Network.
Kode Upperline adalah pengantar pertama saya untuk pemrograman, dan di mana saya segera menyadari bahwa saya tertarik untuk belajar kode. Belakangan musim panas itu, saya menerima paket pendaftaran Notre Dame saya dan beralih dari Sekolah Tinggi Seni dan Sastra ke Sekolah Tinggi Teknik sehingga saya bisa mengambil jurusan Ilmu Komputer (CS).
Beberapa kursus CS favorit saya adalah Desain/Analisis Algoritma, Cloud Computing, dan Tantangan Pemrograman. Soal-soalnya menarik dan para profesornya hebat dalam menyajikan ide-ide baru dan menjelaskan konsep-konsep.
Selama kuliah, saya tahu bahwa saya ingin bekerja sebagai insinyur perangkat lunak dan menggunakan keterampilan teknis yang saya peroleh. Untungnya, musim panas sebelum tahun senior saya, saya memiliki kesempatan untuk magang sebagai insinyur perangkat lunak di Kantata dan memasangkan program dengan insinyur lain untuk membantu memberikan fitur.
Pengalaman magang saya, bersama dengan pembicaraan semangat dari profesor saya, memberi saya kepercayaan diri untuk tidak puas dengan peran lain ketika saya pertama kali mulai melamar pekerjaan. Setelah menghabiskan banyak waktu di jam kantor, saya lulus pada tahun 2021 dengan gelar CS dan menerima tawaran untuk menjadi Associate Software Engineer di Sprout Social.
Menetap ke Sprout Social
Bagian dari menjadi baru dalam peran dan baru di perusahaan adalah harus mengembangkan keterampilan rekayasa perangkat lunak umum dan pengetahuan domain khusus Sprout. Saya menemukan bahwa tugas-tugas yang membutuhkan pengetahuan pemrograman umum untuk dipahami adalah yang paling mudah untuk saya selesaikan. Namun, tugas yang membutuhkan pengetahuan tentang arsitektur Sprout membutuhkan waktu untuk saya selesaikan dan saya harus mengandalkan tim saya untuk mendapatkan bantuan. Meskipun ada beberapa masalah yang dapat Anda pecahkan dengan membaca dokumentasi online, Anda tidak selalu dapat menemukan informasi yang relevan dengan pekerjaan yang Anda lakukan—bisa meminta bimbingan orang lain sangatlah penting.
Salah satu hal pertama yang menonjol bagi saya ketika saya bergabung dengan Sprout adalah betapa kolaboratifnya proses pengembangan. Saya tahu bahwa dibutuhkan seluruh tim untuk mengembangkan fitur, tetapi saya tidak tahu seperti apa praktiknya. Saya segera menyadari bahwa merilis fitur yang sukses membutuhkan banyak orang dalam peran yang berbeda untuk bekerja sama—mulai dari manajer produk yang menentukan persyaratan proyek, hingga desainer yang membuat maket dan insinyur yang mengimplementasikan fitur. Kolaborasi bukanlah sesuatu yang opsional, tetapi suatu keharusan dalam mencapai tujuan tim kami.
Mempelajari cara menavigasi melalui berbagai basis kode dan membangun model mental tentang bagaimana layanan yang berbeda berinteraksi satu sama lain adalah kurva pembelajaran yang curam. Karena bisnis inti Sprout adalah perangkat lunak, arsitekturnya sangat ditentukan oleh kebutuhan bisnisnya. Saat saya meningkat, saya harus menyadari masalah bisnis yang coba dipecahkan oleh pengembang dan mengapa keputusan arsitektur sebelumnya dibuat.
Awalnya, saya agak terintimidasi bahwa permintaan tarik memerlukan ulasan sebelum mereka dapat digabungkan ke dalam basis kode. Memahami bahwa tujuan utama dari tinjauan kode adalah berbagi pengetahuan dan memelihara standar kode membantu mengubah perspektif saya.
Melakukan tinjauan kode telah membantu mempertajam keterampilan teknis saya dan meningkatkan kualitas permintaan tarik saya. Memiliki rekan memberi saya saran tentang apa yang harus diubah, memperkenalkan saya pada pola baru, dan mengarahkan saya ke area basis kode yang relevan sangat membantu. Membaca permintaan tarik dari insinyur lain juga memberi saya visibilitas yang berharga ke layanan lain yang tidak saya kerjakan secara langsung.
Pengalaman Anda sebelumnya penting
Ada anggapan umum bahwa saat Anda memasuki tahap baru dalam hidup, pengalaman Anda sebelumnya tidak lagi penting. Setelah Anda masuk perguruan tinggi, pengalaman sekolah menengah Anda tidak lagi penting. Begitu Anda memasuki dunia kerja, pengalaman kuliah Anda tidak lagi penting.
Tetapi sesuatu yang sering diabaikan adalah bahwa pengalaman, pengetahuan, dan kebiasaan kita memiliki efek majemuk. Kami biasanya hanya dapat mencapai hal-hal baru berkat pekerjaan yang telah kami lakukan sebelumnya. Pengetahuan dan keterampilan yang saya peroleh sebelumnya sangat memengaruhi cara saya menghadapi tantangan baru sebagai insinyur perangkat lunak tingkat pemula.
Kelas selama sarjana yang memiliki dampak paling langsung pada pekerjaan saya sehari-hari di Sprout adalah Tantangan Pemrograman dan Konsep Basis Data. Yang pertama mengajari saya cara memecah masalah besar menjadi potongan-potongan kecil untuk menyelesaikannya dengan lebih efisien. Ini membantu saya menjadi lebih sadar tentang bagaimana saya menyusun kode saya dan meningkatkan keterbacaan kode saya.
Konsep Basis Data mengajari saya konsep basis data relasional dasar dan topik yang dibahas seperti desain skema basis data dan SQL. Saya belajar cara menulis kueri, yang sangat berguna karena saya sering perlu menanyakan basis data kami untuk memecahkan masalah atau menjawab pertanyaan.
Kesempatan yang saya miliki di luar kelas sama-sama berharga. Java bukanlah bahasa yang tercakup dalam sebagian besar kursus saya, namun saya memiliki kesempatan untuk mengerjakannya untuk proyek bisnis yang dipimpin oleh salah satu profesor saya. Saya mendapatkan pengalaman langsung menulis Java, bekerja dengan database MySQL dan membuat gambar Docker. Mempelajari Java sangat membantu karena sebagian besar layanan Sprout ditulis di dalamnya.
Ada banyak keterampilan lain yang saya peroleh selama masa kuliah yang saya anggap remeh, seperti menavigasi baris perintah dan memahami konsep pemrograman inti. Ini adalah kesalahpahaman umum bahwa karena sebagian besar topik yang dibahas dalam sarjana bersifat teoritis, mereka tidak akan mempersiapkan Anda untuk karir rekayasa perangkat lunak. Namun, saya yakin kebalikannya yang benar—keterampilan yang Anda pelajari dalam materi sarjana, bahkan jika itu tidak secara langsung dapat diterapkan pada pekerjaan Anda sehari-hari.
Ilmu Komputer adalah bidang yang sangat luas
CS mencakup berbagai spesialisasi seperti kecerdasan buatan, pembelajaran mesin, dan ilmu data. Pengalaman yang Anda peroleh di tingkat sarjana berfungsi sebagai pengetahuan dasar yang dapat membantu Anda dengan baik dalam berbagai peran tingkat pemula yang tidak eksklusif untuk rekayasa perangkat lunak. Membuat lompatan dari sarjana ke posisi penuh waktu memberikan kesempatan untuk mengeksplorasi peran dan spesialisasi apa yang cocok untuk Anda.
Jika Anda ingin memulai karir di bidang rekayasa perangkat lunak, Sprout adalah tempat yang tepat untuk memulai.