Apa yang harus dilakukan ketika Anda dihadapkan dengan tugas pemrograman yang belum pernah Anda lakukan?

37

Saya memulai karir saya sebagai pengembang .NET 3 bulan lalu dan setelah rencana pelatihan panjang tentang beragam teknologi, pola, dan konsep, pengembang yang mengawasi saya telah memutuskan bahwa saya siap untuk bergabung dengan salah satu dari banyak proyek yang ditangani perusahaan.

Saya sangat senang akhirnya bisa mulai coding. Tim yang saya bergabung agak kecil untuk saat ini karena mulai dengan proyek baru, yang hebat karena saya bisa terlibat dalam seluruh siklus hidup proyek. Ini adalah proyek SPA berbasis web dengan didukung yang menggunakan ASP.NET MVC / ASP.NET Web API dan di depan kerangka Durandal dan perpustakaan terkait.

Masalah saya adalah bahwa setelah melakukan pertemuan dengan kolega saya dan menetapkan tugas dan perkiraan untuk bulan berikutnya saya menemukan diri saya dalam posisi yang saya tidak tahu apakah saya mampu mengambil salah satu tugas.

Saya belum pernah melakukan tugas yang dibuat dan saya tidak tahu bagaimana saya harus melanjutkan.

Misalnya salah satu tugas yang dibuat adalah membuat mekanisme penanganan kesalahan umum untuk seluruh aplikasi.

Bagaimana biasanya seseorang melanjutkan ketika menghadapi tugas-tugas yang belum pernah dia lakukan?

aleczandru
sumber
7
Ini mungkin terasa unik untuk pemrograman, tetapi semua pekerjaan pasangan pertama yang dilakukan kebanyakan orang, terasa seperti ini bagi mereka. Mereka tidak mempekerjakan Anda karena Anda tahu jawabannya - ini adalah pekerjaan tingkat pemula! - mereka mempekerjakan Anda karena Anda akan dapat mengetahuinya.
Marco

Jawaban:

59

Ada beberapa hal yang dapat dan harus Anda lakukan untuk mempersiapkan tugas:

  • Pikirkan masalah dan gambarkan beberapa diagram. Pastikan Anda tahu apa masalahnya yang ingin Anda selesaikan.
  • Lakukan penelitian tentang apa yang Anda coba lakukan. Internet adalah sumber informasi yang berharga. Saya tidak mengatakan meminta Stack Overflow - saya katakan melakukan penelitian tentang bagaimana orang lain telah memecahkan masalah seperti Anda atau mendekatinya. Ini apa google datang dengan: "Penanganan Exception sebagai System Wide Concern" . Secara pribadi, saya selalu berusaha belajar dari orang lain.
  • Terakhir, dan ini mungkin yang paling penting, bicaralah dengan orang lain di tim Anda untuk mendapatkan lebih banyak klarifikasi dan arahan tentang apa yang harus dilakukan. Saya selalu ingin melihat insinyur baru datang meminta bimbingan tentang proyek.

Tidak tahu bagaimana melakukan sesuatu tidak akan pernah benar-benar berakhir. Setiap hari saya mengalami masalah yang belum pernah saya tangani sebelumnya. Memiliki kemampuan untuk mencari tahu bagaimana menyelesaikan masalah baru sangat penting. Bahkan masalah lama tidak pernah benar-benar tua - dalam pemrograman, hampir selalu ada sentuhan baru atau permintaan agar solusi Anda bekerja dengan cara baru atau berbeda.

Inilah sebabnya saya seorang insinyur; Saya suka mencari hal baru.

Jangan pernah berhenti belajar hal-hal baru. Belajarlah yang membuat Anda lebih baik.

barrem23
sumber
27

Tidak ada solusi yang sempurna, tetapi beberapa hal yang mungkin membantu:

  • Hancurkan tugas menjadi unit terkecil yang mungkin - pisahkan sampai Anda memiliki hal-hal yang dapat Anda lakukan.

  • Nyatakan kembali tugas atau masalah langsung yang ada untuk memastikan Anda benar-benar memahaminya. Kemudian lakukan beberapa analisis dan ulangi.

  • Pilih tugas yang paling sederhana terlebih dahulu, bahkan jika tampaknya terlalu sederhana hanya untuk mendapatkan momentum . Beberapa orang lebih suka tugas yang paling sulit sehingga 'kerja keras' tidak memungkinkan. Saya telah menemukan bahwa 'tugas paling sederhana' umumnya bekerja lebih baik karena Anda hanya mencari untuk mendapatkan momentum dan saya telah melihat memimpin 'paling sulit pertama' untuk proyek-proyek macet sebelum mereka mendapatkan momentum nyata.

  • Minta bantuan dalam memilih tugas dan pendekatan yang tepat untuk memulai.

  • Cari mentor yang dapat memberi Anda umpan balik konstan (idealnya setiap hari) selama satu atau dua minggu.

  • Ajukan banyak pertanyaan tetapi fokuslah untuk bersikap sopan kepada teman satu tim Anda. Selalu tanyakan apakah mereka punya waktu, dan perhatikan tanda-tanda verbal dan non-verbal yang biasanya mereka tidak punya waktu saat itu.

  • Simpanlah daftar masalah yang sedang Anda temui dan kemudian dalam scrum harian atau pada waktu yang Anda pilih, lewati bersama orang lain.

  • Jangan takut menanyakan pertanyaan paling mendasar. Asumsi orang lain mungkin sulit untuk ditentang, tetapi jika Anda tidak dapat melanjutkan dengan apa yang diberikan kepada Anda, Anda harus bertanya lagi.

  • Jika Anda tahu tujuannya, lakukan sebanyak yang Anda bisa sampai Anda terjebak dan kemudian posting kemajuan dan pertanyaan di Stack Overflow.

Michael Durrant
sumber
11
Saya sebagian besar setuju, selain dari "memilih tugas yang paling sederhana dulu" . Dari perspektif risiko proyek, mungkin lebih baik melakukan tugas-tugas penting yang paling sulit terlebih dahulu. Lebih baik belajar sejak awal jika bagian yang keras sebenarnya terlalu keras. Kemudian Anda dapat (mungkin) mundur ke desain yang lebih sederhana ... atau menegosiasikan kembali persyaratan.
Stephen C
18

Tentu saja Anda tidak tahu bagaimana menulis "mekanisme kesalahan generik". Tidak ada yang tahu cara menulis "mekanisme kesalahan umum" sampai beberapa persyaratan ditentukan. Kedengarannya seperti yang Anda miliki hanyalah anggapan seseorang bahwa "mekanisme kesalahan generik" diperlukan untuk memulai proyek ini.

Secara pribadi, saya akan mendorong kembali gagasan ini. Menulis "generik" apa pun sebelum menerapkan persyaratan pengguna yang sebenarnya hampir selalu membuang-buang waktu. Dan karena generik , menurut definisi itu tidak spesifik untuk perusahaan atau aplikasi Anda, jadi mungkin ada sesuatu yang sudah tersedia yang akan memenuhi sekitar 95% dari kebutuhan Anda.

Tetapi karena Anda adalah anggota junior, mendorong kembali mungkin bukan ide bagus. Jadi, Anda perlu berbicara dengan orang-orang yang berpikir mereka membutuhkan "mekanisme kesalahan generik" dan mencari tahu layanan apa yang mereka harapkan disediakan mekanisme ini. Kemudian cari di internet untuk melihat apakah sesuatu yang sudah ditulis sudah cukup. Jika Anda menemukan sesuatu, usulkan saja menggunakannya. Mereka mungkin tidak akan setuju, karena siapa pun yang meminta "mekanisme kesalahan umum" kemungkinan menderita kasus buruk karena tidak ditemukan di sini.

Jika itu gagal, ia langkah selanjutnya adalah mendefinisikan antarmuka untuk mekanisme kesalahan dan membuatnya disetujui oleh para pemangku kepentingan. Setelah itu, implementasi mungkin akan sepele.

=================

PS Ada beberapa programmer yang berpikir bahwa cara untuk memulai proyek apa pun adalah dengan menulis "platform" untuk menyediakan semua layanan umum yang akan dibutuhkan oleh modul aplikasi. Ini biasanya berubah menjadi berbulan-bulan pekerjaan sepele menciptakan kembali hal-hal yang sudah tersedia secara gratis. Sampai Anda mencapai batas kinerja solusi yang tersedia, tidak ada alasan untuk menulis layanan "platform". Juga tidak ada alasan untuk menulis pembungkus di sekitar API yang ada. Jika Anda terus menerus melakukan refactor, pembungkus tepat yang diperlukan oleh aplikasi Anda akan secara ajaib muncul.

kevin cline
sumber
5
Saya pikir saya menghabiskan bahkan mungkin sebagian besar waktu saya menghilangkan fungsi yang orang pikir mereka butuhkan, padahal ternyata itu hanya sedikit berguna dan bermasalah ketika datang dengan cepat beradaptasi dengan kebutuhan baru. Peringatan Anda tepat!
Eamon Nerbonne
11

Saya pikir Anda lebih menderita kecemasan daripada defisit keterampilan. Pada titik tertentu, bukankah semuanya baru? Apakah Anda pernah diberi tugas dan tidak mampu menyelesaikannya sampai batas tertentu? Anda dibayar untuk mencari tahu.

Manfaatkan Tim Anda - Jika Anda berada di tim yang baik, Anda harus dapat meminta bantuan. Ada hal-hal yang akan Anda ketahui yang bahkan paling senior pun tidak akan tahu. Meminta bantuan bukanlah tanda kelemahan (tidak lebih dari berlari ke beberapa situs pertanyaan.).

Pencarian - Pencarian web tentang penanganan kesalahan umum tidak menghasilkan apa-apa? Anda mungkin tidak menemukan seluruh solusi. Anda harus mengerjakannya dan membuatnya pas di aplikasi Anda.

Prototipe - Ubah perspektif Anda tentang tugas dari produksi menjadi prototipe. Dapatkan sesuatu untuk bekerja dan membangun dari sana. Ketika Anda sampai pada titik Anda dapat menggunakannya, maka mulailah menganggapnya sebagai produksi. Sekarang Anda tidak akan melihat tugas itu sebagai sesuatu yang bahkan Anda tidak tahu harus mulai dari mana.

Get Over It - Hanya melakukan hal-hal yang Anda tahu cara melakukannya akan membosankan. Ini juga membawa Anda ke dalam perangkap hanya dengan kasar memaksa beberapa solusi dengan mengulangi hal yang sama berulang-ulang (Jika Anda suka mengulangi hal-hal, bekerja di jalur perakitan.). Bersiaplah untuk melakukan kesalahan. Mereka yang memberi tahu Anda bahwa mereka tahu segalanya, tidak pernah meminta bantuan atau melakukan pencarian, hanya bohong.

Ini adalah lelucon lama tentang dokter yang masih "mempraktekkan" obat; mereka juga tidak memiliki semua jawaban.

JeffO
sumber
Saya setuju dengan memanfaatkan tim Anda. Apakah mereka terbuka untuk pemrograman berpasangan untuk sementara waktu untuk membuat Anda lebih cepat?
neontapir
Tidak semua tim / pengembang tertarik pada pemrograman pasangan, tetapi itu tidak berarti Anda tidak dapat duduk dan melihat dari balik bahu mereka atau sebaliknya.
JeffO
6

Bersukacitalah karena Anda tidak melakukan sesuatu yang telah Anda lakukan seratus kali sebelumnya. Anda telah menemukan kegembiraan pengembangan perangkat lunak (bagi saya, YMMV) - belajar mengemudi saat Anda meluncur di jalan bebas hambatan dengan kecepatan luar biasa. Ini adalah jenis hal yang hidup bagi pengembang hebat dan unggul.

Proses pribadi saya adalah seperti ini:

  • Penelitian. Cari tahu apakah dan bagaimana masalah ini, atau masalah serupa, telah diselesaikan sebelumnya. Bahkan jika Anda hanya dapat menemukan informasi tentang solusi untuk berbagai bahasa atau platform, itu masih bisa sangat informatif.
  • Prototipe. Cara terbaik mutlak untuk melakukan sesuatu yang benar adalah melakukan kesalahan terlebih dahulu. Bangun solusi, buat semuanya sesuai keinginan Anda, berdasarkan riset Anda. Cobalah membuatnya sesuai dengan persyaratan utama, dengan mempertimbangkan persyaratan tambahan. Jangan repot-repot membuatnya cantik atau sempurna atau dapat diperluas atau fleksibel atau berkinerja, buat saja itu berhasil. Catat pelajaran yang didapat - apa yang berhasil, apa yang tidak, hambatan potensial, dll. Lalu buang kode itu. Jika Anda khawatir terlihat bodoh karena terlalu lama, lakukan ini sendiri. Ini menguntungkan Anda secara pribadi, dalam hal pengetahuan.
  • Desain. Gabungkan pengetahuan luar Anda (penelitian) dengan pengetahuan pribadi (pelajaran prototipe yang dipelajari) dan rumuskan desain yang menurut Anda akan menjadi Cara yang Benar untuk melakukannya.
  • Bekerja sama. Temukan anggota tim senior, tunjukkan desain yang Anda usulkan, dapatkan umpan balik. Perlihatkan kepada orang lain, dapatkan tanggapan mereka. Sempurnakan desain Anda.
  • Iterate. Jika Anda masih tidak yakin dengan solusi Anda, pastikan peer review adalah bagian dari siklus iterasi Anda. Bawa implementasi Anda kepada anggota tim senior secara teratur untuk mendapat umpan balik.
  • Berbahagialah - Anda telah meningkatkan pengetahuan Anda, dan karier Anda, dan Anda harus melakukan sesuatu yang baru dan menarik alih-alih sesuatu yang lama dan membosankan yang telah Anda lakukan ribuan kali sebelumnya. Cobalah untuk membuat proyek Anda berikutnya menjadi tantangan yang lebih besar.

Dan terakhir, jangan terlalu khawatir tentang penampilan. Sebagai manajer tim pengembang, saya lebih suka memiliki seseorang yang dapat membuktikan bahwa mereka dapat belajar apa pun yang mereka perlu pelajari saat mereka membutuhkannya, daripada seseorang yang dapat membuktikan bahwa mereka sudah tahu satu hal yang sedang kami coba lakukan saat ini. Yang pertama akan lebih berguna untuk apa pun yang kita lakukan besok, atau bulan depan, atau tahun depan.

Adrian
sumber