Bagaimana cara melatih programmer junior untuk lingkungan web saat ini (rumit)?

39

Saat ini perusahaan kami mengembangkan aplikasi yang sebagian besar terdiri dari server web Ruby on Rails dan sekelompok klien REST yang berbeda, dari sistem kios di Jawa hingga perangkat yang disematkan di C / C ++ (di samping antarmuka untuk browser web standar). Kami perlu memperluas tim kami dan, setelah gagal menemukan programmer senior yang baik, kami memutuskan untuk berupaya melatih para programmer junior yang akan tumbuh bersama dengan perusahaan.

Kami telah memberi mereka beberapa buku Ruby dan Rails dan meminta mereka untuk membuat beberapa program mainan, tetapi sekarang saya menyadari betapa curamnya kurva belajar untuk kondisi pemrograman web saat ini.

Ketika saya mulai pemrograman 15 tahun yang lalu saya hanya menggunakan Delphi dan Source Safe dan mampu menghasilkan perangkat lunak yang dapat digunakan sejak awal. Keduanya adalah alat sederhana dan mudah untuk mempelajari cara kerja lingkungan di dalam. Perlahan-lahan saya mulai menggunakan kerangka kerja pihak ketiga, telah beralih ke CVS, SVN dan akhirnya Git, mempelajari bagian-bagian yang membuat web saat ini, seperti HTTP, JavaScript, CSS, REST dll. Hari ini, bahkan setelah bertahun-tahun pengalaman, saya tidak tahu sebanyak tentang bagaimana Ruby on Rails bekerja di dalam seperti yang saya lakukan di masa lalu tentang Delphi, dan bagi saya itu penting agar saya bisa menghubungkan blok belajar dasar ke alat yang saya gunakan.

Sepertinya saya bahwa programmer yang saya rekrut akan membutuhkan waktu lama untuk berintegrasi dengan tim dan menghasilkan sesuatu yang dapat digunakan, karena ada begitu banyak hal untuk dipelajari menggunakan kerangka kerja tunggal (Rails): Ruby, HTML, CSS, JavaScript, REST, test-case, akses basis data (dengan SQL dibangun secara ajaib di dalam framework!), MVC, tiga manajer paket yang berbeda (apt untuk Ubuntu, gem dan bundler untuk Ruby), ssh, git, Apache dan Phusion Passenger untuk digunakan, dll.

Saya merasa tersesat karena ini adalah pertama kalinya saya harus berurusan langsung dengan programmer junior. Apa cara terbaik untuk melatih programmer junior dalam praktik terbaik saat ini untuk pengembangan web ketika ada begitu banyak pilihan?

Rômulo Ceccon
sumber
8
Paragraf kedua hingga terakhir kedengarannya seperti Anda mungkin belum melihat perubahan penting yang terjadi dalam 15 tahun terakhir: Programer generalis praktis sudah tidak ada . Bagi siapa pun untuk mengetahui semua detail yang Anda rujuk, mereka harus sudah, sudah berkecimpung di industri ini selama 15 tahun. Anda mungkin memiliki hasil yang lebih baik dalam menemukan / melatih spesialis yang mengetahui satu atau dua hal yang Anda daftarkan dengan sangat akrab, dan menciptakan tim dari beragam spesialis yang Anda butuhkan ( kemudian crosstrain). Atau temukan insinyur senior dengan pengalaman 15 tahun seperti Anda, tetapi itu bukan tugas yang mudah.
Jimmy Hoffa
Hanya FYI, kurva belajar yang curam berarti Anda mempelajari sesuatu dengan sangat cepat. Ini membingungkan sebagian orang ketika digunakan secara tidak benar :)
Alternatex
Saya selalu menggunakan ungkapan sebagai arti "sulit" (Bahasa Inggris bukan bahasa ibu saya) tetapi Wikipedia mengatakan itu ambigu, jadi saya tidak tahu pilihan terbaik di sini: en.wikipedia.org/wiki/Learning_curve :)
Rômulo Ceccon

Jawaban:

39

Banyak orang tidak akan menyukai gagasan ini, tetapi saya menganjurkan ini di mana pun saya bisa: terlepas dari bahasa pemrograman dan lingkungan, jika mereka tidak memiliki pengalaman dan jika ada tugas pemeliharaan yang muncul dari laporan bug pelanggan di dunia nyata. Anda, cobalah untuk memastikan mereka ditugaskan untuk tugas semacam itu setidaknya selama 30-40% (+) dari waktu mereka. "Ini laporan bug, lihat itu, selesaikan. Jika Anda tidak tahu apa itu semua, berkomunikasi dengan kolega yang berpengalaman, Google, apa pun itu". Pekerjaan nyata pada masalah nyata, tidakmainan, setidaknya: bukan hanya mainan. Pastikan juga, bahwa seseorang dengan banyak pengalaman telah melihat apa yang mereka lakukan sebelum dirilis dan dikirim ke pelanggan, tentu saja. Pastikan kolega baru itu mendapat umpan balik jujur ​​tentang apa yang dia lakukan dari kolega dan pelanggan. Pilih tugas-tugas ini dengan hati-hati agar tidak terlalu membebani mereka, tetapi perlu diingat bahwa suatu hari Anda ingin mereka melakukan pekerjaan mereka secara mandiri.

Melakukan perbaikan bug adalah mempelajari pekerjaan yang memungkinkan mereka bekerja pada kode yang benar-benar dieksekusi dan memiliki beberapa relevansi (jika tidak akan ada laporan bug) dan akan menunjukkan kepada mereka dalam banyak contoh bagaimana tidak melakukannya.

Fokus secara otomatis diletakkan pada titik nyeri. Mereka akan mulai mempelajari detail-detail yang sebenarnya menyebabkan masalah. Hal ini juga menempatkan tanggung jawab nyata di pundak mereka sejak awal, yang (walaupun pemeliharaannya tidak begitu menarik) dapat agak memotivasi jika mereka menyelesaikannya demi kepuasan pelanggan / pengguna akhir. Melewati apa yang mereka lakukan akan dianggap lebih serius oleh senior Anda karena mereka tahu dampaknya jika ada yang salah, dan dengan cara itu juga akan menyederhanakan integrasi ke dalam tim, karena itu akan membuat mereka berbicara satu sama lain secara otomatis, juga.

Intinya bukan untuk membuat mereka produktif dari saat pertama (seperti yang terlihat). Intinya adalah memastikan bahwa mereka tahu bahwa mereka seharusnya melakukan sesuatu yang berharga sejak saat pertama, dan untuk fokus pada hal-hal yang paling penting tanpa perlu membuat daftar.

Saya memang memiliki beberapa tahun pengalaman bekerja setiap sekarang dan kemudian dengan orang-orang yang datang langsung dari perguruan tinggi ke pekerjaan pengembang baru mereka, dan hasil terburuk yang saya lihat adalah biasanya ketika seseorang tanpa setidaknya beberapa pengalaman dalam pemeliharaan diminta untuk melakukan pengembangan aplikasi baru . Pastikan mereka selalu memiliki seseorang yang bisa mereka minta dukungan jika mereka merasa kehilangan.

Thomas
sumber
Saya melakukan hal yang sama. Jawaban yang bagus.
Rocklan
Saya memulai cacat memperbaiki karier saya untuk tahun pertama. Ketika saya pindah ke proyek lain, saya merasa memperbaiki bug membuat saya jauh lebih baik karena saya tahu apa yang tidak boleh dilakukan.
Brandon
8

Mari kita asumsikan pertama-tama bahwa Anda telah merekrut programmer junior yang benar-benar kompeten. Ini belum tentu asumsi yang aman, terutama karena pemrogram senior yang mewawancarai "seseorang yang kurang berpengalaman dari saya" cenderung mengabaikan ketidakmampuan dasar.

Tetapi, dengan asumsi mereka kompeten, langkah pertama adalah mengirim mereka ke kelas. Kelas satu minggu akan dikenakan biaya $ 2.000 - $ 3.000 (AS). Namun, itu akan memberi mereka pengalaman langsung, dengan seorang instruktur yang (semoga) memahami materi, dan rencana pelajaran yang dirancang untuk membuat mereka lebih cepat. Mengirim seseorang dengan sebuah buku dan arahan untuk "mempelajari ini" tidak akan mendekati sesuatu yang berharga, dan kemungkinan akan lebih mahal (biaya kelasnya kira-kira sama dengan satu programmer yang terbuang-minggu).

Setelah mereka memiliki pengetahuan dasar, bekerjalah dengan mereka. Duduklah di meja yang berdekatan, dan berikan setidaknya setengah dari waktu Anda untuk memastikan bahwa mereka memahami bisnis Anda, dan cara Anda melakukan sesuatu. Ya, itu akan menurunkan produktivitas Anda, setidaknya pada awalnya, tetapi dalam jangka panjang akan membuat tim Anda secara keseluruhan lebih produktif. Dan jika Anda berpikir, sekali lagi, tentang biaya, jika seorang junior membuang satu bulan untuk melakukan hal yang salah, itu mungkin kira-kira sama dengan setengah bulan gaji Anda.

parsifal
sumber
4

Aplikasi mainan yang Anda minta harus mereka lakukan harus mengimplementasikan beberapa fungsi dasar CRUD, dan setiap pengembang harus menulis kode mereka sendiri. Tetapi Anda dapat mendiskusikan aplikasi dalam ulasan kode, dan menawarkan kiat. Mereka perlu memahami arsitektur keseluruhan aplikasi MVC terlebih dahulu, jika ada harapan yang masuk akal terhadap produktivitas.

Dari sana, masing-masing pengembang harus dapat keluar sendiri ke mata pelajaran terkait seperti Javascript, CSS, DAL, generator template, perutean dan sebagainya. Anda dapat memberi mereka panduan tentang topik mana yang akan dipelajari (dapat didasarkan pada kebutuhan perusahaan Anda yang paling mendesak), membimbing mereka, dan memantau kemajuan mereka. Pindahkan pengembang satu per satu ke proyek-proyek sederhana yang menghasilkan fungsionalitas yang akan memajukan upaya pengembangan Anda yang sebenarnya, saat mereka menunjukkan pemahaman akan keterampilan yang diperlukan.

Anda dapat memasangkan beberapa pengembang berpengalaman Anda dengan magang sebagai semacam program mentoring. Harus ada pedoman yang tersedia untuk pengembang junior sehingga mereka tahu kapan mereka dapat mengganggu mentor mereka, dan untuk berapa lama. Mentor mereka dapat mengawasi pekerjaan mereka ketika mereka mulai menulis kode nyata.

Anda akan memiliki waktu yang lebih baik jika Anda dapat menemukan orang-orang muda yang sangat cerdas, penasaran intelektual, dan pemula. Saya telah melihat proses ini bekerja; itu adalah pendekatan majikan saya sebelumnya, karena dia tidak ingin membayar banyak uang untuk para ahli, meskipun itu lebih merupakan jenis "tenggelam atau berenang" (tidak ada program pelatihan formal seperti itu). Tantangan terbesarnya adalah membuat mereka tinggal cukup lama untuk mendapatkan kembali investasinya; selalu ada godaan untuk membayar lebih baik di tempat lain.

Robert Harvey
sumber