Bagaimana cara mengajukan pertanyaan kepada programmer tanpa mendapatkan "Mengapa" sebagai jawabannya

31

Kita semua memiliki pengalaman ini. Anda mendatangi seseorang yang Anda tahu memiliki jawaban atas sebuah pertanyaan, tanyakan pertanyaan itu kepada orang itu dan mereka menjawab dengan respons khas: "mengapa?" Anda menjelaskan mengapa Anda perlu tahu, dan mereka berusaha menyelesaikan masalah Anda.

Dibutuhkan waktu, lengan memutar dan kesabaran untuk mengarahkan kembali percakapan ke pertanyaan awal dan hanya mendapatkan jawaban sialan itu.

Mengapa programmer terus-menerus melakukan ini, dan mengapa perilaku semakin buruk semakin senior programmer menjadi?

Bagaimana Anda bisa mengajukan pertanyaan pada programmer dengan cara yang paling efisien dalam mengekstraksi jawaban untuk pertanyaan asli?

Reactgular
sumber
54
Kemungkinan besar karena mereka tahu Anda kemungkinan besar tidak membutuhkan jawaban itu. How do I walk on water? Why? I want to cross the river Build a boat.
Daniel Gratzer
30
Ini tipuan, dirancang untuk menghentikan Anda dari membuang-buang waktu kami. Anda akan belajar untuk lebih tepatnya, atau berhenti bertanya.
yannis
17
Karena programmer yang lebih senior tahu bahwa sebagian besar pertanyaan yang diajukan adalah pertanyaan XY.
Marjan Venema
12
"Banyak komentar yang berkaitan dengan menjelaskan mengapa pengembang bersikap seperti ini ... Ini bukan jawaban untuk pertanyaan di atas." Ini adalah jawaban langsung untuk pertanyaan "Mengapa programmer terus-menerus melakukan ini, dan mengapa perilaku semakin buruk semakin senior programmer menjadi?" yang termasuk dalam badan pos. Ini juga menunjukkan mengapa programmer bertindak seperti ini: orang-orang yang sering mengajukan pertanyaan tidak menginginkan jawaban atas pertanyaan yang mereka ajukan , tetapi sebaliknya menginginkan jawaban untuk pertanyaan yang mereka maksudkan .
8
"Bagaimana saya bisa mendapatkan plutonium?" Tidak tidak. Tidak ada pertanyaan. Katakan saja caranya.
Erik Reppen

Jawaban:

91

Mengapa pengembang bertanya "mengapa" ketika seseorang bertanya kepada mereka bagaimana menerapkan solusi?

Karena itu memerlukan lebih banyak pengetahuan untuk mengevaluasi apakah suatu solusi tepat daripada yang sebenarnya untuk mengimplementasikan solusi.

Sangat sulit untuk memercayai seseorang ketika mereka berkata, "Saya tidak tahu bagaimana melakukan ini, tetapi saya tahu pasti itulah yang harus saya lakukan." Pemrogram terus-menerus bersikeras untuk menyelidiki lebih dalam karena orang terus-menerus bersikeras untuk mengajukan pertanyaan yang salah. Ya, terkadang akhirnya kembali ke pertanyaan awal Anda, tetapi tidak selalu.

Sebagai analogi, bayangkan jika seseorang berjalan ke mekanik dan bertanya kepadanya bagaimana cara mengganti aki mobil. Biasanya jika Anda memenuhi syarat untuk mendiagnosis baterai yang rusak, Anda memenuhi syarat untuk menggantinya, sehingga mekanik akan bertanya bagaimana Anda tahu perlu mengganti baterai.

Dia tahu jika dia tidak melakukan ini, dan ternyata Anda tidak perlu baterai, maka Anda akan terus kembali mengajukan lebih banyak pertanyaan sampai akhirnya Anda tahu bahwa Anda harus mematikan lampu ketika mesin menyala. tidak berlari. Dengan bertanya di depan Anda, rasanya seperti dia membuang-buang waktu, tetapi dia benar-benar tahu dari pengalaman bahwa dia berpotensi menghemat lebih banyak waktu bagi Anda berdua.

Jadi, jika Anda ingin menghindari garis pertanyaan, Anda harus meyakinkan dia di muka bahwa Anda tahu apa yang Anda bicarakan.

Karl Bielefeldt
sumber
4
Persis seperti ini. Klien yang tidak tahu apa yang mereka inginkan adalah rasa sakit di pantat. Klien yang tahu persis apa yang mereka inginkan seringkali lebih buruk. Jangan mengabaikan persyaratan bisnis ketika meminta informasi. Setiap hal kecil yang kita lakukan seringkali sangat relevan dengan konteks.
Erik Reppen
14

"Pertanyaannya secara khusus bagaimana seseorang terlibat dengan programmer lain untuk mengajukan pertanyaan, di mana yang lain memiliki jawabannya dan melewatkan perdebatan tentang mengapa pertanyaan itu diajukan."

Anda tidak bisa, paling tidak secara deterministik. Programmer lain adalah seseorang, bukan komputer, dan bukan pelayan Anda. Jika Anda mengajukan pertanyaan kepada mereka, mereka dapat memilih apa yang menurut mereka merupakan jawaban terbaik. Jika mereka pikir mereka membutuhkan lebih banyak konteks, mereka harus memintanya.

Anda dapat mencoba membuat pertanyaan lebih awal dengan pernyataan bahwa Anda hanya mencari jawaban garis bawah yang pendek, tetapi masih bebas untuk dijawab karena menurut mereka yang terbaik.

Charles E. Grant
sumber
13

Pertanyaannya secara khusus bagaimana seseorang terlibat dengan programmer lain untuk mengajukan pertanyaan, di mana yang lain memiliki jawaban dan melewatkan perdebatan tentang mengapa pertanyaan itu diajukan.

Kamu tidak bisa Pemrogram, terutama yang baik, terhubung untuk memecahkan masalah dan menjadi efisien . Ketika seorang pelanggan atau sesama programmer datang mencari jawaban - mereka akan memastikan untuk mengetahui masalah yang mereka selesaikan, sebelum memberikan solusi. Dengan begitu mereka efisien (mereka tidak menyia-nyiakan waktu Anda dan mereka dengan memberikan jawaban yang tidak akan menyelesaikan masalah Anda) dan mereka memecahkan masalah nyata (dengan memberi Anda solusi / jawaban untuk pertanyaan yang seharusnya Anda tanyakan).

Contoh - ketika klien datang kepada Anda dan mengatakan ia ingin fitur X diimplementasikan. Terkadang klien benar-benar membutuhkan fitur X dan kadang-kadang Anda benar-benar harus menggali dan menginterogasi pelanggan hanya untuk mengetahui bahwa mereka tidak menginginkan X tetapi sesuatu yang sama sekali berbeda. Semakin tua dan berpengalaman programmer, semakin besar kemungkinan mereka dibakar di masa lalu dengan tidak sampai ke inti masalah sebelum memberikan solusi.

Jadi untuk meringkas - jika Anda ingin pertanyaan Anda dijawab dengan tepat, Anda perlu memastikan bahwa Anda:

  • mengajukan pertanyaan yang tepat (dengan demikian Anda perlu meneliti masalah sebelumnya)
  • menyediakan konteks untuk masalah tersebut
  • berbagi sebagian dari riset Anda untuk mengarahkan mereka lebih cepat ke masalah

Kebanyakan manusia yang saya tahu hanyalah manusia dan bukan komputer. Jika Anda hanya ingin jawaban, coba googling saja.

Christian P
sumber
2
+1 Tepat. Berapa kali pelanggan diminta untuk mengimplementasikan fitur yang akan menelan biaya ribuan dolar dalam hal pengembangan, sedangkan kebutuhan bisnis yang sebenarnya dapat dengan mudah diselesaikan dengan alat yang sudah ada, seringkali tanpa biaya!
Arseni Mourzenko
3
Dengan analogi, itu seperti memberi tahu dokter bedah untuk melakukan serangkaian operasi khusus pada Anda. Saya yakin dia akan bertanya kepada Anda apa sebenarnya masalah kesehatan Anda, kemudian memberi tahu Anda bahwa Anda tidak memerlukan pembedahan sejak awal, karena masalah Anda dapat diselesaikan dengan pergi ke ahli tulang.
Arseni Mourzenko
Tepat :) Dan Anda mungkin mengharapkan dari ahli bedah untuk melakukan hal itu.
Christian P
9

Mengapa programmer terus-menerus melakukan ini, dan mengapa perilaku semakin buruk semakin senior programmer menjadi?

Sayangnya itu jauh dari kebenaran umum yang didapatnya.

Perilaku itu terbatas pada minoritas yang benar-benar baik. Dan Anda sebaiknya mempelajarinya juga.

Hanya dengan menjawab pertanyaan terkutuk yang melompati mengapa adalah cara yang baik untuk mendorong ke jurang, cepat dan pasti.


Jika Anda benar-benar ingin melewatkan bagian yang berpendidikan, Anda dapat mengawali pertanyaan Anda dengan beberapa kalimat tentang batasan dan keinginan Anda untuk melewatkan pertanyaan - Anda mungkin mendapatkan jawaban atau baru saja dikirim. Menyajikan ringkasan penelitian Anda sendiri adalah ide yang lebih baik.

Balog Pal
sumber
Tidak terlalu penting apakah mereka baik atau tidak.
Florian F
4

Setiap jawaban di sini adalah jawaban yang bagus untuk pertanyaan "mengapa", tetapi tidak ada yang benar-benar menjawab pertanyaan OP.

Bagaimana Anda bisa mengajukan pertanyaan pada programmer dengan cara yang paling efisien dalam mengekstraksi jawaban untuk pertanyaan asli?

Jawabannya sangat sederhana: beri tahu mereka mengapa ini perlu dilakukan sebelum Anda bertanya bagaimana caranya.

Hal terbaik yang harus dilakukan adalah memasukkan pengembang dalam beberapa pertemuan tingkat tinggi di sekitar produk - berikan mereka gambaran yang lebih besar sehingga mereka dapat melihat mengapa hal khusus ini perlu dilakukan. Mereka bahkan mungkin mengejutkan Anda dengan datang dengan cara pertama.

HorusKol
sumber
Betapa sederhananya itu. Memberikan sedikit konteks dan menjelaskan mengapa menghemat banyak waktu. Anda membuat pengembang berpikir di jalur yang benar untuk membantu Anda sejak awal.
joshp
3

Pemrogram yang baik tidak hanya ingin mengimplementasikan solusi apa pun; mereka ingin menerapkan solusi terbaik untuk masalah spesifik. Ini memerlukan informasi. Pertanyaan adalah cara untuk mengumpulkan informasi. Tanpa semua informasi, programmer tahu dia dalam bahaya mengimplementasikan solusi yang tidak sesuai dengan semua persyaratan dan akan terjebak melakukannya lagi. Jangan sembunyikan informasi dari programmer Anda. Menyembunyikan informasi menghabiskan waktu, menghancurkan moral, dan mengarah ke solusi yang lebih rendah.

zerobandwidth
sumber
1

Programmer "terprogram" untuk menyelesaikan masalah.

Pemrogram yang baik akan mencoba memecahkan masalah yang "benar".

Hanya memasok apa yang diminta seseorang adalah [sering] masalah yang salah untuk dipecahkan.

Pada hari-hari ketika otomatisasi MS Office adalah hal yang populer, Anda akan mendapatkan serangkaian pertanyaan, biasanya selama beberapa minggu, menanyakan bagaimana melakukan "ini" dalam satu produk Office, kemudian "itu" pada beberapa produk lain , lalu sesuatu yang lain lagi di yang lain. Masing-masing dengan cepat ditangani, tetapi "masalah" - belum sepenuhnya dinyatakan - tidak terpecahkan. Mereka terus kembali untuk "tautan" berikutnya dalam rantai mereka.

Jika Anda menghentikan mereka dan bertanya kepada mereka, "Mengapa?" kemudian mereka harus mundur dan menjelaskan secara lebih luas apa yang ingin mereka capai dan tidak hanya menggambarkan masalah langsung di depan mereka. (BTW, Programmer menderita dari ini sebanyak (jika tidak lebih dari) orang lain, yang dengannya seperti ini menanggung wasiat).
Rantai pengguna "Mendapatkan data dari Database besar ke Access, lalu ke Excel untuk memijatnya sedikit, lalu menyeberang ke Word sehingga mereka dapat menggabungkan hasilnya dan mengirimkannya melalui email kepada orang-orang setiap minggu" dengan cepat diganti oleh pekerjaan batch yang melakukan semua itu, dengan hasil duduk di kotak masuk orang hal pertama pada hari Senin pagi, tanpa keterlibatan pengguna manual sama sekali.

Pengguna seperti itu.

Kami perlu tahu di mana Anda ingin pergi, sebelum kami dapat menawarkan cara terbaik untuk sampai ke sana.

Sebagai alternatif, (dengan kata lain Monty Python): "Apakah Anda menginginkan jawaban 5 menit atau setengah jam penuh"?

Tidak ada gunanya Programmer mengoceh semua hal kecil dari fungsi tertentu ketika Anda hanya ingin tahu apakah itu akan mengatasinya jika Anda memberinya angka dengan tiga tiga tempat desimal.

Mengetahui perspektif Anda seringkali dapat secara radikal membentuk kembali jawaban yang Anda dapatkan.

Phill W.
sumber
0

Pertanyaan terakhir Anda adalah "Bagaimana Anda bisa mengajukan pertanyaan kepada programmer dengan cara yang paling efisien dalam mengekstraksi jawaban untuk pertanyaan asli?"

Anda pertama kali bingung "efisien" dan "efektif". Agar paling efisien , cukup tulis "Apa jawabannya?" pada selembar kertas dan menunjukkannya kepada programmer. Itu cara yang sangat efisien untuk mengajukan pertanyaan. Ini juga sangat tidak efektif dalam mendapatkan jawaban.

Dan kedua, Anda berasumsi bahwa pengembang perangkat lunak adalah penjawab pertanyaan. Mereka tidak. Mereka adalah pemecah masalah. Sikap Anda menunjukkan dengan jelas bahwa Anda tidak memahami pemecahan masalah. Cara paling efektif untuk memecahkan masalah adalah dengan memahami masalah tersebut sampai pada titik di mana Anda dapat menggambarkannya ke pemecah masalah, dan kemudian menyajikannya ke pemecah masalah. Metode lainnya adalah memahami masalah secara parsial sejauh yang Anda bisa, kemudian tunjukkan pemahaman Anda yang tidak lengkap kepada seorang pemecah masalah, yang pertama kali akan menanyakan pertanyaan yang Anda takuti untuk mengubahnya menjadi masalah yang sepenuhnya dipahami, dan kemudian menyelesaikannya.

Cara yang sangat tidak efisien adalah metode yang Anda coba: Dapatkan pemahaman masalah yang tidak lengkap, tebak bagaimana masalah ini dapat diselesaikan, dan tanyakan seorang pemecah masalah bagaimana solusi ini dapat dicapai. Pemecah masalah telah melihat perilaku ini sebelumnya. 10 kali jika dia tidak berpengalaman, ribuan kali jika dia berpengalaman. Jadi pemecah masalah tahu bahwa Anda menuju ke arah yang sepenuhnya salah. Dan pemecah masalah melakukan apa yang perlu dilakukan untuk masuk ke arah yang benar, yaitu mengajukan pertanyaan untuk memahami masalah yang sebenarnya. Pertanyaan pertama untuk memahami pemahaman masalah Anda yang tidak lengkap, dan pertanyaan kedua lainnya untuk memahami masalah sebenarnya.

gnasher729
sumber
0

Mulailah pertanyaan dengan menjelaskan apa yang ingin Anda capai dan dalam konteks apa Anda bekerja. Jika Anda memberikan konteks yang cukup, Anda tidak akan mendapatkan "mengapa?" , Anda akan mendapatkan "apakah ini benar-benar perlu?"

Karena, secara statistik , sebagian besar fitur yang diusulkan menyedot , dan tidak layak untuk diimplementasikan.

Bantahan yang khas adalah "tapi itu tugasnya." Pekerjaannya adalah menulis kode yang baik , dan menambahkan fitur biasanya bertentangan dengan itu, karena sebagian besar fitur memerlukan desain ulang basis kode yang berfungsi dan "hal desain ulang:" ini

  1. dibutuhkan selamanya
  2. menambahkan bug baru
  3. memecah hal-hal yang dulu bekerja
  4. membuat pemeliharaan menjadi tahan

Itu bukan kode yang baik, kode yang baik minimal.

ZJR
sumber
Pekerjaan Programmer bukanlah menulis kode yang baik. Pekerjaan Programmer adalah menghasilkan nilai bagi perusahaan yang mempekerjakan mereka. Dalam banyak kasus, menulis kode yang baik adalah bagian dari ini. Dalam banyak kasus, merakit kode membuang yang berfungsi dengan cepat adalah bagian dari ini. Saya setuju bahwa banyak fitur yang menghisap - Saya melakukan kontrak untuk perusahaan yang ingin menambahkan fitur baru yang tidak pernah digunakan oleh klien mereka karena mereka tidak dikandung melalui proses yang cerdas tetapi hanya oleh seseorang yang berpikir "hei, ini bisa berguna ".
Maurycy