paint-brush
Programmer Cerdasoleh@themachine94
12,795 bacaan
12,795 bacaan

Programmer Cerdas

oleh theMachine9410m2024/10/26
Read on Terminal Reader

Terlalu panjang; Untuk membaca

Sebuah kisah tentang bagaimana seorang mahasiswa tahun akhir dengan prestasi gemilang bergabung dengan tim kecil kami.
featured image - Programmer Cerdas
theMachine94 HackerNoon profile picture

Sebelum pandemi COVID melanda, saya tinggal dan bekerja di kota kecil di wilayah barat laut Jerman. Saat itu, saya bekerja di perusahaan rintisan kecil. Saya adalah salah satu dari 7 teknisi di perusahaan tersebut. Meskipun tim kami sangat kecil, rekan kerja saya adalah orang-orang terpintar yang pernah bekerja dengan saya. Kami membuat aplikasi desktop asli yang digunakan oleh Insinyur Mekanik untuk mendesain komponen. Komponen-komponen ini adalah jenis yang digunakan untuk membuat mobil, pesawat, dan semacamnya. Itu adalah program pemodelan 3D (CAD), jadi wajar saja, setiap kali kami merekrut teknisi baru atau mempekerjakan pekerja magang, kami lebih memilih orang-orang yang ahli dalam matematika, geometri, menulis kode tingkat rendah dengan kinerja tinggi, dll. Ketika kami mewawancarai kandidat, saya diberi tanggung jawab untuk melakukan wawancara teknis. Saya telah menyiapkan beberapa tugas pemrograman yang mencerminkan keterampilan yang kami inginkan dari seorang kandidat. Saya akan meminta kandidat untuk memecahkan masalah dan mendiskusikan proses berpikir mereka. Meskipun mereka tidak menyelesaikan solusinya dalam waktu 45 menit, itu adalah cara yang berguna untuk mempelajari apa yang mereka ketahui dan bagaimana mereka berpikir. Anggota tim saya yang lain mewawancarai kandidat berdasarkan kriteria lain seperti kepribadian, dsb. Hal ini berjalan dengan sangat baik dan kami telah merekrut beberapa teknisi yang sangat berbakat dan termotivasi. Kami semua cukup ahli dalam apa yang kami lakukan dan kami saling menghormati.


Pada awal tahun 2020, ada mahasiswa tingkat akhir dari universitas setempat yang menghubungi kami untuk meminta magang. Saya mengambil cuti yang sangat dibutuhkan dan pergi ke Berlin selama beberapa minggu. Jadi, saya tidak bisa melakukan wawancara teknis. Manajer saya dan seluruh tim sangat terkesan dengan mahasiswa tersebut selama wawancara, dan resume-nya sangat luar biasa. Kami belum pernah memiliki pekerja magang sebelumnya. Manajer saya berpikir bahwa wawancara teknis mungkin tidak diperlukan untuk pekerja magang. Jadi, dia memutuskan untuk meminta pekerja magang tersebut mulai bekerja dengan kami tanpa wawancara teknis. Saya kembali dari cuti dan diberi tahu tentang pekerja magang baru yang akan mulai bekerja minggu berikutnya. Saya harus mengawasi pekerjaan pekerja magang ini. Pada dasarnya, saya harus memastikan dia mengerti apa yang harus dilakukan, menjawab pertanyaan apa pun, membuka blokirnya dengan cara apa pun yang memungkinkan. Kami telah menyusun serangkaian masalah yang kami ingin pekerja magang tersebut tangani. Mulai sekarang, saya akan memanggil pekerja magang itu dengan nama Stefan. Sekitar waktu ini, ada banyak pembicaraan tentang penyebaran virus Corona di Jerman. Itu ada di mana-mana di berita. Kami adalah tim kecil dan terbiasa bekerja dalam jarak dekat, saling bertanya, bertukar pikiran di papan tulis, dll. Namun sayang, tepat sehari sebelum Stefan bergabung dengan kami, Jerman memberlakukan karantina wilayah sepenuhnya. Kami semua mulai bekerja dari rumah. Kami kesulitan dengan pekerjaan jarak jauh selama beberapa minggu pertama. Sebagai pengawas proyek Stefan, saya memberi tahu dia bahwa dia dapat menghubungi saya untuk apa pun yang dia butuhkan agar dapat memulai. Jika saya sedang bepergian atau sibuk, anggota tim lainnya dengan senang hati membantu Stefan.


Basis kode kami merupakan campuran C# dan C++. Semua pengguna kami menggunakan Windows, jadi kami menulis front end dan hal lain yang tidak terlalu penting bagi kinerja dalam C#. Semua algoritme numerik, rendering 3D, dan hal lain yang penting bagi kinerja ditulis dalam C++. Sebagian besar anggota tim kami fasih dalam kedua bahasa tersebut, beberapa di antaranya hanya menguasai salah satunya. Stefan mengaku sangat fasih dalam C# dan C++. Pada hari pertamanya, saya menelepon Stefan selama beberapa jam untuk menjelaskan basis kode kami kepadanya, menyiapkan semuanya di komputer lokalnya sehingga ia dapat mulai bekerja. Stefan sedikit gugup, dan berkata sudah lama ia tidak menulis C++ atau menggunakan Windows. Stefan setiap hari mengendarai komputer Linux. Ia tampak kesulitan menulis C++. Saya pikir ia agak bingung karena harus bekerja di lingkungan baru, basis kode baru, dan memutuskan untuk membantunya hingga ia mulai bekerja. Jadi, kami melakukan pemrograman berpasangan selama beberapa jam berikutnya. Ia membutuhkan bantuan saya untuk menulis kode satu baris dalam satu waktu. Dia terus melakukan kesalahan konyol dalam kodenya, dan meminta saya untuk memperbaikinya serta menunjukkan kepadanya cara yang benar untuk melakukan sesuatu. Saya pikir ini agak aneh tetapi tetap memutuskan untuk memberinya kesempatan. Saya berharap bahwa di akhir panggilan kami, Stefan cukup tahu untuk terus bekerja sendiri.


Saya senang sekali, keesokan harinya saya tidak mendengar kabar dari Stefan. Saya mengirim pesan kepadanya dan dia mengatakan bahwa dia sedang membuat kemajuan dan tidak membutuhkan apa pun dari saya. Saya senang mendengarnya. Saya bisa fokus pada pekerjaan saya sendiri. Namun, keesokan harinya, Stefan menghubungi saya lagi untuk meminta bantuan. Untuk berkontribusi pada aplikasi kami, Stefan harus menulis C# dan C++. Dia harus menulis bagian numerik dari algoritma dalam C++, dan menyambungkannya dengan front end dan melakukan beberapa hal lain dalam C#. Ketika Stefan menghubungi saya pada hari ke-3, dia belum membuat kemajuan apa pun dengan kode C++-nya. Sebagian besar kemajuan itu berada di tempat kami berhenti di akhir hari pertama. Namun, dia membuat banyak kemajuan dengan kode C#-nya. Dia mengerjakan tugas dari kedua sisi secara bersamaan. Stefan dengan bangga menunjukkan kepada saya hal-hal yang dia tulis dalam C# pada hari ke-2 tanpa bantuan saya. Saya membaca kode tersebut dan terpesona olehnya. Kode tersebut benar-benar berkualitas tinggi. Kode tersebut ringkas, elegan, dan efektif. Stefan sebenarnya sangat berbakat, menurut saya. Mungkin dia memang sedikit berkarat dengan sintaksis C++ dan detail bahasa, tetapi kode C#-nya menunjukkan bahwa dia secara umum adalah seorang programmer yang baik. Saya pikir ini adalah pertanda baik dan bahwa dia kemungkinan akan meningkatkan kode C++-nya dengan sangat cepat. Ini mendorong saya untuk membantunya dengan C++-nya. Sekali lagi saya menghabiskan beberapa jam pada hari ke-3 berpasangan dengan Stefan, membantunya dengan kode C++-nya. Siklus ini berulang sekali lagi. Stefan pergi sendiri dan menulis kode C# pada hari ke-4, dan kembali kepada saya meminta bantuan dengan C++ pada hari ke-5. Pada titik ini saya mulai curiga. Tingkat di mana dia membutuhkan bantuan dengan kode C++-nya tidak konsisten dengan kode C# berkualitas tinggi yang dia tulis. Dalam C++ dia tampaknya berjuang dengan konsep dasar, bagaimana komputer bekerja, bagaimana memori bekerja, dll. Jelas C# adalah bahasa yang dikumpulkan sampah dan Anda tidak perlu tahu manajemen memori, tetapi ada sesuatu yang terasa tidak benar dan saya tidak dapat menjelaskannya dengan tepat.


Seminggu penuh telah berlalu. Sebagai tim yang terbiasa bekerja di kantor, kami semua benci bekerja dari jarak jauh. Pada saat ini selama masa karantina, kami diizinkan untuk berkumpul dalam kelompok yang terdiri dari 7 orang atau kurang. Seorang rekan kerja, sebut saja namanya David, mengundang saya dan beberapa rekan kerja lainnya ke rumahnya untuk pesta barbekyu selama akhir pekan. Dia tinggal tidak terlalu jauh dari saya dan kami pernah melakukan hal-hal seperti ini sebelumnya. Cuacanya bagus, kami sedang nongkrong di halaman belakang rumah David bersama istri dan putrinya yang berusia 3 tahun. Kami memanggang dan makan daging dan sayuran, minum beberapa bir dan suasananya sangat tenang. Putri David yang berusia 3 tahun menyajikan kami tanah dalam gelas plastik kecil seolah-olah itu adalah es krim. Tak perlu dikatakan, saya tidak tertipu. David mengangkat topik tentang Stefan dan percakapannya berlangsung seperti ini:


David: Bagaimana kabar Stefan? Dia sudah menghubungi saya beberapa kali untuk meminta bantuan minggu lalu.


Saya: Oh, ya, saya juga banyak membantunya. Dia baru saja memulai, jadi saya tidak keberatan membantunya. Apa pendapat Anda tentang dia?


David: Ya. Saya cukup terkesan dengan karyanya. Dia menulis kode berkualitas tinggi dan tampaknya tahu apa yang dia lakukan dalam C++, tetapi kesulitan menulis kode C# yang bagus. Saya telah membantunya menulis kode C#.


Saya bertanya kepada David: "Tunggu, apakah maksud Anda sebaliknya? Karena menurut saya C#-nya sangat bagus tetapi dia payah dalam C++." Begitu saya menyelesaikan kalimat itu, kami berdua mengerti apa yang sedang terjadi. Saya telah menyuapi Stefan dengan kode C++, yang dia tunjukkan kepada David sebagai miliknya. Dan setiap hari, David menyuapi Stefan dengan kode C# yang dia tunjukkan kepada saya sebagai miliknya. Saya terkesan dengan kualitas kode C# David, dan David terkesan dengan kode C++ saya. Di satu sisi, David dan saya memiliki momen persaudaraan yang indah tentang bagaimana kami mengagumi kode masing-masing. Namun momen itu dibayangi oleh fakta bahwa kami berdua ditipu oleh Stefan. Ini seperti cerita, tetapi terjadi dalam kehidupan nyata. Itu seperti kisah seorang pria yang tidak tahu cara bermain catur, tetapi berhasil bermain imbang dengan dua grandmaster dengan memainkannya satu sama lain. Stefan berhasil melakukannya dalam kehidupan nyata. Stefan tidak tahu apa-apa. Kami membenci diri sendiri karena butuh waktu seminggu untuk menyadarinya. Jujur saja, jika kami berada di kantor, trik ini tidak akan berhasil. Kami tertipu karena buruknya komunikasi kami saat bekerja dari rumah.


Ketika kami kembali bekerja Senin depan, saya memberi tahu Stefan untuk tidak mengganggu David dan hanya meminta bantuan saya. Segera menjadi sangat jelas bahwa Stefan tidak tahu banyak tentang pemrograman, matematika, atau geometri. Jelas bahwa resume-nya penuh dengan kebohongan. Dia kebetulan adalah pembicara yang sangat lancar, dan memiliki bakat untuk terdengar seperti orang yang tahu banyak. Keterampilan itu membuatnya mendapatkan pekerjaan, dan menipu kami selama seminggu penuh. Semakin banyak saya bekerja dengan Stefan, semakin banyak saya meninjau kodenya, semakin tidak kompeten dia. Saya akhirnya melihat siapa Stefan sebenarnya, keterampilan pemrogramannya yang sebenarnya. Saya tidak yakin apakah tidak kompeten adalah kata yang tepat. Stefan menulis kode yang buruk, tetapi itu buruk dengan cara yang aneh. Ketika saya bertanya kepadanya tentang hal itu, dia memberikan jawaban yang aneh. Berikut adalah contoh yang benar-benar terjadi. Saya pernah memberi tahu Stefan sesuatu seperti: "... Jadi Anda ingin mendapatkan nilai integer ini, dan jika nilai itu berada di antara batas bawah dan batas atas, Anda harus memanggil fungsi lain ini ... Apakah itu jelas?". Stefan meyakinkan saya bahwa dia mengerti apa yang harus dilakukan. Ketika saya melihat PR-nya keesokan harinya saya melihat sesuatu seperti ini:


 int value; // Assigned from somewhere. for (int i = lower_bound; i <= upper_bound; ++i) { if (value == i) { do_stuff(...); } }


Saya tercengang. Ini bukan sekadar kode yang buruk, ini sesuatu yang lain. Saya ingat saat masih muda dan buruk dalam membuat kode, tetapi kode saya yang buruk tidak pernah seperti ini. Ini adalah dimensi lain dari keanehan. Bahkan sebagai programmer pemula, saya tidak akan pernah berpikir untuk menulis kode seperti ini. Pilihan untuk mengulang semua bilangan bulat di antara batas-batas itu cukup aneh, tetapi yang benar-benar mengejutkan saya adalah kenyataan bahwa bahkan ketika dia menemukan kecocokan dan memanggil fungsi tersebut, dia tidak pernah keluar dari pengulangan. Dia terus memeriksa nilai yang tersisa. Bagaimana caranya? Saya bertanya kepada Stefan mengapa dia tidak melakukannya saja:


 if (value <= upper_bound && value >= lower_bound) { do_stuff(...); }


Setelah menerima saran saya untuk menggunakan pertidaksamaan sederhana alih-alih membandingkan dengan setiap bilangan bulat dalam rentang yang panjangnya bisa mencapai puluhan atau bahkan ratusan ribu, Stefan memuji saya karena telah memunculkan ide yang bagus, dan mendorong perubahan baru tersebut ke PR. Setiap kali Stefan kesulitan melakukan sesuatu, kami akan memberinya sesuatu yang lebih mudah untuk dilakukan. Anehnya, ia juga gagal melakukannya. Magang itu singkat, jadi kami tidak terlalu peduli dengan Stefan. Setelah beberapa waktu, ia akhirnya mengerjakan tugas-tugas non-pemrograman, mengelola berbagai hal dalam spreadsheet, dan tugas-tugas ad hoc lainnya yang perlu dilakukan. Proyek-proyek awal yang ia kerjakan terbukti jauh di luar kemampuannya. Entah bagaimana, Stefan telah menyelesaikan magang paruh waktu berbayar selama 3 bulan. Ia ingin terus bekerja untuk kami sepanjang musim panas. Ia telah mengajukan proyek penelitian baru yang akan berguna bagi perusahaan kami. Ketika manajer saya bertanya apakah saya ingin terus bekerja dengan Stefan selama 3 bulan lagi, saya menjawab TIDAK. Saya mengingatkan manajer saya betapa buruknya pekerjaannya selama tiga bulan terakhir. Namun, manajer saya adalah seorang yang optimis. Ia memiliki kepercayaan pada orang lain. Ia meminta saya untuk memikirkan diri saya sendiri saat saya seusia Stefan, di perguruan tinggi dan mempelajari banyak hal untuk pertama kalinya.


Manajer saya meminta saya untuk mempertimbangkannya dan meminta saya untuk mempertimbangkan memberi Stefan kesempatan lagi. Sejujurnya, ketika saya seusia Stefan, saya menulis game 2D dalam JavaScript menggunakan kanvas HTML5 yang baru (pada saat itu). Stefan benar-benar tidak kompeten, bahkan setelah disesuaikan dengan usia dan pengalamannya. Namun, yang jauh lebih buruk daripada ketidakmampuannya adalah ketidakjujurannya. Bagaimanapun, saya tidak ingin mengambil keputusan ini dengan mudah. Di satu sisi, mungkin Stefan mampu belajar, tetapi di sisi lain dia tidak jujur. Saya membaca proposal yang dia tulis untuk proyek penelitian baru. Idenya sangat baru, dan jika berhasil, akan sangat berguna bagi perusahaan kami. Itu benar-benar mengesankan. Namun, kemudian saya memiliki momen kejelasan di mana sinisme saya mengalahkan optimisme yang coba ditanamkan manajer saya dalam diri saya. Saya menjadi terpaku pada satu kata dari proposal penelitian Stefan: '2-manifold'.


Setelah bekerja dengannya, saya tahu betapa tidak kompetennya Stefan sebenarnya, dan tidak mungkin dia tahu apa arti 2-manifold. Saya menyalin-tempel proposal penelitian Stefan ke pemeriksa plagiarisme daring. Itu sudah bertahun-tahun lalu dan saya lupa yang mana. Saya hanya mencari di Google dan menggunakan salah satu hasil teratas. Pemeriksa plagiarisme menemukan kecocokan 97% dengan makalah penelitian dan memberikan tautan ke yang asli. Stefan telah menyalin semuanya. Keesokan paginya saya berbicara dengan Stefan tentang proposal penelitiannya. Begitu dia mulai berbicara, jelas dia tidak mengerti apa yang dia bicarakan, dan itu semua hanya salad kata. Dia menjadi penipu lagi. Saya memberi tahu manajer saya dan ini akhirnya menghancurkan kepercayaannya pada Stefan. Stefan tidak bekerja untuk kami lagi.


Satu-satunya hal yang Stefan kuasai adalah menjual dirinya sendiri, dan terlihat seperti dia tahu apa yang dia bicarakan. Saya mengerti ada profesi di mana keterampilan ini dapat membawa Anda cukup jauh, misalnya Penjualan. Namun saya pikir aneh bagi seseorang untuk mencoba dan mengada-ada dalam karier teknis seperti pengembangan perangkat lunak.