Membantu programmer junior melewati kekurangan mereka? [Tutup]

15

Apa keluhan Anda tentang pengembang junior yang bergabung dengan tim Anda atau dengan siapa Anda harus bekerja? Jelas mereka tidak berpengalaman sehingga Anda tidak dapat mengharapkan mereka mengetahui segalanya, tetapi keterampilan apa yang sering kali hilang secara tidak dapat dijelaskan - dan bagaimana, secara khusus, kami dapat membantu mereka membangun keterampilan yang hilang ini?

Maksud saya bukan keterampilan antar-pribadi seperti 'mendengarkan saran,' Maksud saya masalah teknis seperti (jika berlaku):

  • "Anda belum pernah melakukan SQL?"

  • "Kau belum pernah menulis unit test?"

  • "Anda tidak tahu bagaimana cara menggunakan baris perintah Unix?"

Hal-hal yang Anda lakukan harapkan - Saya ingin mendengar pengamatan dan teknik untuk mengajar programmer baru untuk melewati kekurangan tertentu tersebut.

Andrew M
sumber
13
Satu hal yang paling menjengkelkan: terus bertanya tentang apa yang menjengkelkan. :-)
Jerry Coffin
12
Saya tidak berpikir Anda harus jengkel ketika orang tidak tahu hal-hal yang Anda harapkan mereka ketahui. Yang penting adalah mereka mau belajar =)
koenmetsu
Ya setuju dengan @KoMet jika Anda memiliki kemauan untuk belajar Mendengarkan Saya pikir ini penting :)
MalsR
8
Saya tidak suka pertanyaan ini, ia memiliki mentalitas yang salah untuk seorang pengembang. KITA SEMUA SEKALI itu pemula, dan setiap hari kita adalah pemula dalam sesuatu. Saya tidak akan pernah merasa jengkel pada seseorang yang tidak tahu sesuatu. Ini terasa bahwa ada terlalu banyak kesombongan yang terlibat ....
Darknight
3
Oh, tertutup, BRAVO. Saya membaca enam pedoman pertanyaan subjektif yang konstruktif dan ini memenuhi semuanya. Sejujurnya, bagian yang tidak konstruktif adalah kesibukan tubuh yang menutup utas yang sudah dijawab oleh 13 orang, hanya karena mereka salah memahami pertanyaan itu. Ini hanya kenyataan bahwa pengembang senior kadang-kadang akan kecewa dengan kemampuan pengembang junior, pertanyaan ini hanya berusaha menemukan pola dalam kekecewaan ini sehingga kita dapat menghindari kesulitan dengan lebih baik. Mengabaikan keluhan dan kritik yang sah tidak menguntungkan siapa pun dan itu tidak ada hubungannya dengan kesombongan.
Andrew M

Jawaban:

25

Tidak tahu apa itu kontrol versi, atau bagaimana menggunakannya dengan benar .

Salah satu pengembang junior yang telah berada di perusahaan saya selama beberapa bulan baru-baru ini harus diajarkan dasar-dasar Subversion. Itu benar-benar membuat saya merasa ngeri ... dia sudah memeriksa kode untuk menjalankan proyek sepanjang waktu ... dan tidak tahu apa yang dia lakukan ...?

sevenseacat
sumber
4
Ngeri? Dia beruntung masih memiliki pekerjaan.
Rein Henrichs
2
Sepertinya ini lebih merupakan masalah "tidak tahu apa yang tidak Anda ketahui" atau "tidak mengakui apa yang tidak Anda ketahui." Apakah dia sudah meminta bantuan sejak awal, apakah itu akan menjadi masalah besar?
Michael McGowan
1
Aduh, kedengarannya seperti saya haha, kami tidak menerapkan kontrol versi sampai akhir-akhir ini, dan saya bergabung dengan perusahaan sebagai lulusan baru, saya memang belajar sedikit kontrol versi dan hal-hal subversi di Universitas, tetapi tidak pernah menerapkannya sebelumnya.
Sufendy
1
"Itu alat untuk cadangan bukan? Kamu menggunakannya untuk menyimpan kode setiap malam?"
David
2
Ini adalah hal besar yang hampir tidak pernah mereka ajarkan di sekolah
Elijah Saounkine
23

Tidak banyak bertanya

Saya tahu mereka junior, saya berharap mereka akan membuat kesalahan dan tidak tahu apa-apa. Begitu banyak royal f ** k up bisa dihindari dengan hanya mengajukan pertanyaan alih-alih mengasumsikan sesuatu. Jujur, saya tidak bisa direcoki cukup.

Saya punya TONNES pertanyaan ketika saya mulai - meminta mereka menyelamatkan pantat saya pada beberapa kesempatan. Sial, saya masih punya banyak pertanyaan ... Saya hanya ingin berpikir itu pertanyaan yang lebih baik sekarang.

Steven Evers
sumber
Astaga ... jawaban yang hampir sama saya posting, Anda masuk sekitar 5 detik sebelumnya.
cepat
2
"Kamu menjengkelkan !! Aku sibuk di sini, tidak bisakah kamu berpikir sendiri?" jika Anda beruntung !! haha
Sufendy
4
+1 - Sub-bagian ini tidak meminta kembali setelah penjelasan. Itu benar-benar membuatku kesal ketika aku menjelaskan beberapa tugas kepada seorang junior, dia mengangguk, aku pikir dia mendapatkannya dan akan mulai bekerja, kemudian dua minggu kemudian dia kembali, menanyakan pertanyaan yang sama lagi , mengangguk lagi, lalu dua lagi berminggu-minggu kemudian ... Cukup adil, itu bukan tugas sepele, tetapi demi Tuhan jangan berpura-pura memahaminya jika Anda tidak. Dan jika Anda pikir Anda memahami sesuatu, buat catatan sehingga Anda mengingatnya dua minggu kemudian.
Péter Török
1
Beberapa orang, di sisi lain, terlalu banyak bertanya (tentang Stack Overflow).
BoltClock
1
@SnOrfus: Mereka yang tidak memenuhi syarat adalah yang saya maksudkan: P
BoltClock
14

Salin tempel dan coba-coba alih-alih berusaha memahami dasar-dasarnya

Banyak pengembang junior akan menyalin kode yang terlihat dekat, kemudian hampir secara acak mencoba berbagai permutasi modifikasi oleh brute force sampai mereka menemukan yang berfungsi. Jika Anda tidak tahu mengapa itu bekerja, kemungkinan Anda memperkenalkan bug dalam kasus batas yang harus dipecahkan oleh seseorang yang memang mengerti.

Menyimpan "draf pertama" kode mereka

Ketika pengembang yang berpengalaman menulis fungsi baru dari kompleksitas tertentu, mereka memulai dengan tulisan rintisan yang tidak melakukan apa pun kecuali mengkompilasi, kemudian menulis ulang untuk menambahkan komentar kode pseudo tingkat tinggi untuk keseluruhan algoritma, kemudian menulis ulang komentar-komentar itu satu per satu dengan kode aktual, menambah dan menghapus kode dummy sesuai kebutuhan untuk pengujian, kemudian menulis ulang untuk menghapus redundansi yang muncul selama implementasi, dan seterusnya dalam serangkaian peningkatan berurutan dan bertahap.

Pengembang junior memiliki kecenderungan untuk menuliskannya dalam satu potongan besar, kemudian melakukan debugging besar-besaran. Mereka tidak suka menghapus satu baris kode begitu itu diketikkan ke editor, dan sangat senang mereka akhirnya berhasil sehingga mereka enggan menulis ulang untuk perbaikan yang tidak fungsional, tetapi mereka adalah orang-orang yang perlu melakukan jadi yang paling.

Karl Bielefeldt
sumber
1
+1 untuk "salin dan tempel alih-alih berusaha memahami", meskipun tentu saja ini bukan masalah yang unik bagi pemrogram baru, hanya untuk yang buruk. Programmer baru setidaknya memiliki peluang untuk berkembang - para rekan kerja saya yang telah menjadi programmer selama beberapa dekade dan masih melakukan ini tidak.
Tom Anderson
Sebagian dari ini juga mungkin merupakan konsekuensi dari gaya manajemen. Tugas sudah berbicara lebih lama dari yang diharapkan dan manajer ingin fitur Anda besok. Anda terburu-buru untuk membuatnya bekerja dan dengan cepat pindah ke tugas berikutnya. Semuanya dipecah menjadi kartu tugas berukuran mikro, sehingga tidak ada waktu untuk melakukan refactor atau mengambil langkah mundur dan melihat masalah yang lebih besar secara keseluruhan
Jamie McGuigan
14

Percayalah Anda yang pertama kali menghadapi suatu situasi.

Setiap masalah pemrograman yang Anda hadapi telah dihadapi oleh orang lain, dalam bentuk umum. Ada banyak hal yang dapat dipelajari dari programmer yang berpengalaman. Saya cukup tua untuk mengingat pemrograman sebelum Google, dan itu mengisap . Lebih buruk lagi ketika kami memiliki mesin pencari, tetapi belum ada informasi yang bagus di web. Pemrograman sekarang jauh lebih produktif karena Anda memiliki akses ke pengetahuan global dalam hitungan detik. Orang yang tidak menggunakannya mengabaikannya.

Edit :

Untuk lebih jelasnya, saya tidak menganjurkan pemrograman copy / paste. Saya yakin, bagaimanapun, bahwa Anda perlu meninjau kembali pengetahuan yang ada sebelum Anda dapat membuat keputusan yang baik sendiri.

Scott Whitlock
sumber
1
Yah, Anda juga tidak ingin pengembang menyalin-tempel semua kode dari beberapa sumber daya yang meragukan dari Web. Pencarian itu baik untuk mendapatkan beberapa ide, mungkin memecahkan beberapa masalah pemahaman mendasar, tetapi tidak pernah untuk mendapatkan solusi yang siap. Itu juga membuat pengembang menjadi bodoh; mungkin itu membuatnya kolektor yang baik, tetapi bukan penemu.
Elijah Saounkine
Saya setuju pada suatu titik dengan Elia, kode copy-paste tanpa meluangkan waktu untuk mempelajari apa yang dilakukannya, tidak mempercepat keterampilan pemrograman Anda. Terburuk, itu akan mengambil alih dan menjadi kebiasaan buruk.
setzamora
1
Tentu, tetapi @Scott tidak mengatakan apa pun tentang menyalin dan menempelkan kode, dia hanya mengatakan jangan menganggap Anda orang pertama yang menghadapi situasi yaitu, sadarilah bahwa mungkin ada beberapa informasi dan pengalaman di luar sana yang bisa Anda manfaatkan. Contoh: Saya ingin tahu apakah dua string serupa. Apakah sudah ada algoritma yang dikenal untuk mengatasi masalah ini? Bayangkan jika pengembang baru saja memutuskan untuk memulai sendiri tanpa menyadari bahwa jawaban sudah ada.
David Conrad
@ David Conrad itu benar, titik diambil, kita berada di halaman yang sama di sini.
Elijah Saounkine
10

Berpikir bahwa mereka tahu segalanya.

Saya punya jr. intern yang mencoba menyelesaikan semuanya dengan javascript. Mencoba menjelaskan beberapa konsep, tetapi dia selalu berpikir dia bisa melakukannya dengan lebih baik. Sekarang dia berhenti dan sedang mengerjakan ulang program besar yang dia buat untuk hasil cetak menggunakan HTML alih-alih teknologi siap cetak seperti PDF. Belum lagi setumpuk masalah besar lainnya.

Pelajarannya adalah meminta senior untuk panduan menyeluruh utama di awal proyek, jangan pergi arsitek tanpa bantuan. Anda dapat menulis kode dan detailnya sendiri, tetapi pastikan Anda setidaknya menggunakan teknologi yang tepat.

P.Brian.Mackey
sumber
5

Saya jarang kesal ketika yunior tidak tahu dasar-dasarnya, mereka tidak diajarkan keterampilan industri seperti SCC di Universitas. Ini tugas para senior dev untuk mengajar mereka. Saya hanya terganggu oleh pertengkaran kepribadian. Tapi aku sangat kesal oleh para devs senior yang tidak tahu dasar-dasarnya.

Craig
sumber
1
@Graig benar banyak hal yang mengganggu kami para pengembang berpengalaman tentang junior adalah hal-hal yang harus kami pelajari bukan di universitas tetapi di lingkungan komersial.
Nickz
5

Tidak ingin memajukan pengetahuan mereka - alih-alih menempuh jalan dengan resistensi yang rendah.

Suatu hari magang bersama dengan desainer grafis (yang sangat ahli dalam pemrograman) meminta bantuan karena mereka mengalami kesulitan dalam mengimplementasikan sesuatu di jQuery - penutupan bisa menyakitkan jika Anda tidak bisa melihatnya datang.

Saya duduk bersama magang dan menjelaskan apa yang salah dan mengapa. Kami memperbaiki bug, kemudian saya menunjukkan beberapa perbaikan tambahan yang dapat dibuat ("karena saya di sini") dan kami akhirnya menulis ulang fungsi bersalah dalam 10 baris, bukan 20 dan tanpa bug. Setelah menjawab pertanyaan, puas bahwa semuanya baik-baik saja di dunia, saya pergi.

Keesokan harinya, pekerja magang datang dengan pertanyaan yang mengungkapkan dia "um, ingin membuat beberapa perubahan dan menulis ulang fungsi dengan cara saya karena saya merasa sulit untuk dipahami" (sebagian besar membatalkan perbaikan saya).

Dia bisa baik mencoba lebih keras bukan (mengajukan pertanyaan tambahan, membaca tentang konsep-konsep yang saya sebutkan) - kode begitu pendek tidak pernah bisa yang sulit untuk memahami - atau mengambil jalan keluar yang mudah. Saya sedih setiap kali saya melihat seseorang melakukan yang terakhir.

Jon
sumber
Menarik, saya bertanya-tanya apakah jika Anda membuat lebih sulit untuk dibaca. Saya ingat manajer proyek pertama saya melakukan ini beberapa kali (dan saya juga bersalah karena mengubahnya kembali). Walaupun saya yakin dalam retrospeksi pendekatannya lebih baik, saya tidak cukup maju pada saat itu untuk memahami mengapa dan bagaimana cara kerjanya. .
Maxim Gershkovich
3

Tidak mengerti OOP. Sayangnya ini jauh lebih umum daripada yang kita sadari.

Mengetahui cara membuat kelas, kelas abstrak, antarmuka, atau bahkan mengetahui polimorfisme adalah satu hal; Memahami cara menggunakannya dengan benar untuk kepentingan program Anda adalah hal lain .


Jika Anda ingin menghindari yang ini, saya menemukan pertanyaan-pertanyaan ini dan jawaban untuk mereka yang mencerahkan:

Nicole
sumber
Seperti pada level dasar, mereka tidak tahu apa yang Anda maksud dengan membuat objek, kelas, dan pewarisan? Atau hal-hal yang lebih maju seperti menggunakan pola desain (Anda harus akui, buku GoF cukup musykil, walaupun tentu saja ada buku / panduan lain)
Andrew M
@Andrew Saya sudah sedikit memperluas jawabannya.
Nicole
1
Dan saya melihat yang sebaliknya: tidak tahu bagaimana menulis kode prosedural lama sederhana dalam C karena hanya diajarkan OOP. Kemudian lagi, jangan membuat saya pergi tentang orang-orang yang tidak diajarkan untuk menulis parser lagi karena mereka diberitahu bahwa semua masalah itu dapat diselesaikan dengan menggunakan lex dan yacc.
cepat
1
@quickly_now Itu poin yang bagus, writing code other ways than OOPdan writing bad OOPdua hal yang sangat berbeda. Yang pertama, saya tidak punya masalah dengan.
Nicole
Sebagian besar universitas tidak mengajarkan desain berorientasi objek. Juga banyak tempat kerja bekerja seperti silo bahkan dengan pengembang junior ... atau memiliki pengembang "senior" yang tidak tahu pemrograman berorientasi objek. Ada pengembang "senior" yang mendapat gelar dari x kerja tahun dan pengembang senior yang tahu barang-barang mereka ....
Cervo
3

Tidak tahu apa yang tidak Anda ketahui, dan dalam ketidaktahuan berpikir Anda tahu segalanya.

(Dan sepupu dekatnya, tidak ingin bertanya.)

Sebagian ini adalah masalah organisasional - induksi masuk yang sesuai akan sangat membantu mencegah beberapa hal ini menjadi masalah. Tetapi sangat sedikit perusahaan memiliki waktu atau orang yang tersedia untuk induksi masuk - sesuatu yang harus berlangsung dari beberapa hari hingga beberapa minggu dan membuat pengembang berhenti bekerja. Jadi kita harus memadamkan api sebagai gantinya.

dengan cepat_now
sumber
2

Saya kagum pada berapa banyak programmer junior yang relatif baru keluar dari program CS yang lemah dengan algoritma. Pilihan algoritme yang buruk mungkin tidak terlalu cocok dengan aplikasi bisnis, tetapi ketika memproses miliaran permintaan layanan web sehari, itu benar-benar penting.

Inilah pertanyaan wawancara yang saya gunakan yang hampir semua programmer Junior lewatkan yang menyoroti masalah ini:

Tulis kode yang menghitung angka Fibonacci Nth .

Mereka hampir selalu pergi untuk menulis yang paling jelas tapi tidak efisien

int Fib(int n)
{
    if (n == 0) return 0;
    if (n == 1) return 1;
    return Fib(n-2) + Fib(n-1);
}

Ketika diminta untuk mengomentari kompleksitas algoritmik, saya biasanya mendapatkan "ini lebih buruk daripada O (N) ... uhm ... O (N logN)". Ini sebenarnya (jauh) lebih buruk dari itu ...

Eric J.
sumber
1
untuk menjawab pertanyaan Anda tentang compleixty, orang harus tahu bahwa rumus untuk menghitung angka fibonacci tanpa rekursi, yang akan ia gunakan sebagai ganti rekursi di tempat pertama.
P Shved
1
@Pavel: Ada solusi O (n) dan O (1) ... sebenarnya Like every sequence defined by linear recurrence, the Fibonacci numbers have a closed-form solution. en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression
Eric J.
1
Saya tidak mengatakan bahwa solusi yang Anda posting sempurna. Saya hanya mempertanyakan relevansi pertanyaan tindak lanjut Anda dengan solusi seperti itu, pertanyaan tentang kompleksitas. Apa yang ingin Anda capai dengan menanyakannya, dan — yang paling penting — mengapa Anda berharap bahwa apa yang Anda inginkan akan tercapai dengan memberikan jawaban untuk pertanyaan sebelumnya? (Apakah saya mengatakan maksud saya?)
P Shved
untuk memperjelas poin saya, saya sarankan Anda bertanya tentang bagaimana kode dapat ditingkatkan daripada meminta untuk memperkirakan kompleksitas. Saya yakin bahwa beberapa lulusan CS akan mengusulkan memoisasi, atau mengatakan bahwa mereka tahu rumusnya tetapi tidak ingin menunjukkannya sekaligus karena Anda akan berpikir bahwa mereka adalah orang yang pintar.
P Shved
Secara praktis, fungsi tersebut dapat ditemukan menggunakan profiler dan dioptimalkan dengan menambahkan cache memoisasi. Inefisiensi hanya benar-benar masalah untuk nilai-nilai besar dari N. Cara terbaik untuk mengajar junior tentang kode tersebut adalah memaksa mereka untuk melangkah melalui seluruh eksekusi kode menggunakan debugger. Untuk nilai N yang sangat besar, ternyata ada rumus matematika maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/…
Jamie McGuigan
1

Melakukan lekukan kode mundur!

Tentu saja itu tidak terlalu "khas". Saya tidak pernah percaya itu mungkin, tetapi pengembang seperti apa yang akan menulis

try {
    switch(action){
        case case1:
            ...
            break;
        case case2:
            ...
            break;
        default:
            break;
    }
}
catch(Exception e) {
    e.printStackTrace();
}

dia akan menulis seperti (Tuhan, sepertinya masih mustahil bagiku!)

            try {
        switch(action){
    case case1:
...
break;
    case case2:
...
break;
    default:
break;
        }
            }

Membuat frustrasi bukan?

Elijah Saounkine
sumber
Apa atas nama ...
Mike Speed
1
Sangat menakjubkan !!!
javanna
Ini hampir seolah-olah mereka di mana bahasa Arab, Ibrani atau Cina di mana Anda membaca kanan ke kiri, daripada konvensi barat kiri ke kanan. Merupakan cara yang benar-benar valid untuk membuat indentasi kode Anda, tetapi tidak berarti Anda harus melakukan indentasi ulang seluruh file Anda berdasarkan tingkat sarang Anda yang terdalam, dan itu membuat kode Anda tidak kompatibel dengan semua orang yang berbagi konvensi yang berlawanan.
Jamie McGuigan