Jika algoritme Anda benar, apakah penting berapa lama Anda menulisnya? [Tutup]

11

Baru-baru ini saya mengetahui bahwa Facebook memiliki tantangan pemrograman yang jika selesai dengan benar Anda secara otomatis mendapatkan wawancara telepon.

Ada contoh tantangan yang meminta Anda untuk menulis algoritma yang dapat menyelesaikan masalah tipe Tower of Hanoi . Diberi sejumlah pasak dan cakram, konfigurasi awal dan akhir; Algoritme Anda harus menentukan langkah sesedikit mungkin untuk mencapai konfigurasi final dan menampilkan langkah-langkahnya.

Tantangan sampel ini memberi Anda batas waktu 45 menit tetapi memungkinkan Anda untuk tetap menguji kode Anda untuk melihat apakah itu melewati begitu batas waktu Anda berakhir.

Saya tidak tahu ada solusi matematika lucu yang bisa menyelesaikannya, dan saya tidak ingin mencari satu karena saya pikir itu akan curang. Jadi saya mencoba untuk menyelesaikan tantangan yang terbaik yang saya bisa sendiri.

Saya dapat membuat algoritma yang berfungsi dan berhasil. Namun, saya membutuhkan waktu lebih dari 4 jam, lebih lama dari persyaratan 45 menit. Karena saya butuh waktu lebih lama dari waktu yang ditentukan, saya belum mencoba tantangan yang sebenarnya.

Ini membuat saya bertanya-tanya, pada kenyataannya apakah penting bahwa saya butuh waktu lama? Maksud saya apakah ini pertanda bahwa saya tidak akan bisa mendapatkan pekerjaan di tempat seperti ini (bukan hanya Facebook, tetapi Google, Fog Creek, dll.) Dan perlu menurunkan aspirasi saya, atau apakah fakta bahwa saya benar-benar lulus? pada upaya pertama saya meskipun butuh waktu terlalu lama dianggap baik?

JD Isaacks
sumber
12
Itu penting di sini - apakah itu cukup nyata bagi Anda?
2
Mengapa Anda percaya bahwa tidak bekerja untuk nama besar .com menyiratkan bahwa Anda menurunkan aspirasi Anda?
mouviciel
@mouviciel Saya tidak bermaksud menurunkan aspirasi saya untuk bekerja dengan nama .com yang besar, tetapi lebih seperti bekerja untuk perusahaan di mana pemrograman adalah peran utama vs bekerja di perusahaan yang melakukan sesuatu yang lain seperti ritel di mana tidak ada yang mengerti apa yang Anda lakukan.
JD Isaacks
5
LOL di perangkat lunak Fog Creek disertakan dengan Facebook dan Google.
georgiecasey

Jawaban:

42

Dalam praktiknya tidak masalah berapa lama Anda. Salah satu yang dapat menyelesaikan masalah dalam 45 menit adalah - semuanya sama - lima kali lebih produktif daripada yang membutuhkan waktu 4 jam, dan karenanya lebih menarik bagi majikan.

Yang mengatakan, Anda tidak mengatakan mengapa Anda membutuhkan empat jam untuk menyelesaikan masalah ini.

  • Apakah Anda yang terbaik (cukup makan, tidak lelah, berkonsentrasi penuh)?
  • Apakah masalahnya dirinci dengan baik, atau apakah Anda perlu melakukan riset tambahan sendiri?
  • Apakah Anda harus belajar hal-hal baru untuk melakukan ini?
  • Apakah alatnya familier atau tidak?
  • dll.

Apa saja dan semua hal ini mungkin memengaruhi waktu yang Anda perlukan, dan sebenarnya lebih penting untuk dapat menyelesaikan masalah ketika berada di bawah tekanan, tanpa diberi tahu segalanya, dan dengan alat yang ada, karena itu AKAN terjadi selama karier Anda dan biasanya pada titik di mana sangat penting bagi seseorang apakah Anda berhasil atau tidak.


sumber
Terima kasih atas jawaban anda. Untuk menjawab mengapa saya butuh waktu lama, satu bagian adalah karena saya memiliki sedikit kesulitan memahami apa yang sebenarnya harus saya lakukan, begitu saya memahami bagian itu, saya masih harus berpikir sedikit untuk membuat rencana. Misalnya, jika disk memblokir disk yang ingin saya pindahkan, dan saya harus memindahkannya terlebih dahulu, ke mana saya harus memindahkannya. Bagian pemrograman yang sebenarnya adalah yang terpendek, tetapi semuanya ditambahkan ke waktu.
JD Isaacks
@JohnIsaacks Jadi masalahnya adalah Anda tidak terbiasa dengan Menara Hanoi. Sebagian besar programmer yang saya kenal telah diperkenalkan ketika diajarkan tentang rekursi (setiap gerakan disk pada dasarnya "memindahkan disk di atas saya ke pasak kosong" yang memetakan dengan baik untuk rekursi). Sudahkah Anda menerima pendidikan formal dan jika demikian pada tingkat apa?
@ ThorbjørnRavnAndersen, saya tidak belajar pemrograman apa pun di sekolah. Saya belajar sendiri, saya belajar di tempat kerja, dengan buku, bereksperimen, dll. Saya tidak terbiasa dengan permainan (kecuali mengingat permainan yang sama dimainkan di planet kera), saya harus Google bahkan tahu itu disebut "Menara Hanoi." Saya mengerti rekursi (setidaknya saya pikir saya mengerti) dan saya menggunakannya di sini. Tetapi memecahkan teka-teki itu akan jauh lebih mudah bagi saya, bagian yang lebih sulit adalah "Pola apa yang akan menghasilkan jumlah gerakan seminimal mungkin setiap kali."
JD Isaacks
Pemrograman @JohnIsaacks sangat mirip dengan bermain piano - Anda bisa menjadi baik sendiri, tetapi untuk menjadi benar-benar baik, Anda perlu diajari cara melakukan hal-hal yang benar oleh guru yang berpengalaman. Bisakah Anda menguraikan bagaimana Anda bisa memecahkan teka-teki tetapi menemukan bagian "apakah itu optimal" sulit?
Saya bisa membuat fungsi rekursif yang memindahkan sepotong ke tempatnya, memindahkan potongan yang menghalangi, lalu memulai kembali dengan potongan berikutnya. Mulai dengan bagian terbesar dan bekerja ke bagian terkecil terkecil. Bagian "apakah itu optimal" berasal dari ketika Anda memindahkan bagian yang menghalangi. Tergantung di mana Anda memindahkannya, itu dapat membuat langkah-langkah tambahan yang tidak perlu. Misalnya memindahkan 1 ke 3 kemudian akan memblokir 3 dan perlu dipindahkan lagi ketika waktunya untuk memindahkan 3. tetapi tergantung pada konfigurasi saat ini, ini mungkin tidak dapat dihindari.
JD Isaacks
13

Tidak masalah, bagi perusahaan yang mencari pengembang umum dengan arus kas yang baik , karena lebih cepat berarti lebih banyak pekerjaan yang bisa dilakukan. Namun, dalam banyak kasus lain (sebenarnya saya berpendapat sebagian besar kasus), tidak masalah sebanyak kemampuan Anda untuk memecahkan masalah , dan kemampuan Anda untuk menyelesaikannya dengan baik .

Saya dapat memikirkan lima jenis pemecah masalah:

Orang-orang yang...

  1. ... dapat menyelesaikan masalah dengan cepat , dengan solusi yang bersih dan efisien.
  2. ... dapat memecahkan masalah dengan cepat , tetapi dengan solusi yang kotor dan tidak efisien.
  3. ... dapat menyelesaikan masalah secara perlahan , tetapi berakhir dengan solusi yang bersih dan efisien.
  4. ... dapat menyelesaikan masalah secara perlahan , tetapi berakhir dengan solusi yang kotor dan tidak efisien.
  5. ... tidak dapat menyelesaikan masalah, dengan cepat, atau lambat.

Tes gaya Facebook secara eksplisit menyingkirkan kandidat # 3, # 4, dan # 5 karena memiliki batasan waktu, jadi kami tahu bahwa tes ini adalah untuk pengusaha yang telah menentukan bahwa mereka hanya boleh merekrut kandidat # 1 atau mungkin # 2 ( tergantung pada penyaringan lebih lanjut).

Beberapa contoh:

  • Majikan seperti Facebook mungkin hanya mencari programmer nomor satu saja, karena mereka mampu membayar gaji besar bagi programmer super-bintang.
  • Seorang majikan yang memiliki penjualan satu kali dengan volume tinggi (seperti beberapa toko desain web) mungkin hanya menginginkan pengembang nomor dua , yang lebih murah daripada pengembang nomor satu yang sama efektifnya.
  • Seorang majikan yang memiliki domain masalah khusus (seperti menulis perangkat lunak peminjaman pinjaman), mungkin menerima pengembang nomor 3 di atas pengembang nomor 1 , karena pengembang jenius tingkat dua mungkin super mahal, atau mereka mungkin sulit ditemukan.
  • Majikan yang tidak peduli atau memiliki anggaran terbatas karena berbagai alasan mungkin baik-baik saja dengan pengembang # 4 .
  • Pengembang nomor 5 dipekerjakan oleh perusahaan yang tidak tahu apa yang mereka cari dan gagal menyaring pelamar tersebut.
Kevin McCormick
sumber
5

Menara Hanoi? Itu adalah salah satu tugas pemrograman pertama yang saya miliki di kursus mahasiswa baru saya di universitas (tepat setelah Fibonacci - ya, saya memiliki kelas dengan salah satu dari orang-orang aneh pemrograman fungsional :). Dan saya bahkan tidak pada ilmu komputer, saya pada teknik komputer.

Dan tetap saja, sebagian besar yang disebut 'programmer' tidak dapat menulis algoritma semacam ini dengan benar, karena sebagian besar programmer mengerikan. (cari fizzbuzz untuk kesenangan tambahan)

Bagaimanapun, setelah Anda melewati ambang tertentu, saya pikir keterampilan pemrograman Anda tidak masalah sebanyak kemampuan Anda untuk menyelesaikan proyek, ketahanan Anda terhadap kesulitan, dll. Dan sepertinya Anda sudah melewatinya dengan pasti.

Facebook ingin mempekerjakan para pengembang top, tentu saja, tetapi saya tidak tahu berapa banyak dari mereka yang mereka harapkan dengan permainan seperti itu. Saya pikir mereka hanya tidak ingin kehilangan waktu dengan programmer yang sangat buruk.

Kiat yang selalu saya dengar adalah bahwa jika Anda ingin dipekerjakan oleh perusahaan teknologi keren, cobalah untuk terlibat dengan proyek sumber terbuka. Juga, cobalah untuk magang.

elias
sumber
3

Ketika ada banyak pasokan (banyak calon pemrogram) dan sedikit permintaan (sedikit pekerjaan pemrograman), pemberi kerja bisa sangat menuntut seperti yang mereka inginkan. Faktanya, mereka harus banyak menuntut, atau mereka akan menghabiskan banyak waktu mewawancarai orang alih-alih menyelesaikan pekerjaan. Jadi, mereka memberikan kandidat tes yang sangat sulit untuk mendapatkan daftar pendek secepat mungkin, dan untuk memastikan bahwa mereka akan mewawancarai orang-orang yang tidak hanya baik, bahkan tidak sangat baik, tetapi sebenarnya karismatik .

Jadi, fakta bahwa Anda tidak menyelesaikan tes dalam kerangka waktu yang diberikan tidak berarti Anda adalah programmer yang buruk; Anda hanya tidak cocok dengan definisi dari apa yang dianggap facebook karismatik. Menurut saya, tidak apa-apa.

Mike Nakis
sumber
0

Waktu itu penting, tetapi jangan anggap Anda bodoh jika itu membutuhkan waktu lebih lama. Banyak orang memiliki hal-hal "hafal". Mereka berlatih menerapkan teknik seperti rekursi begitu banyak sehingga menjadi 2CD. Bukan karena mereka lebih pintar, mereka hanya berlatih sampai ke titik 2CD dan Anda juga bisa!

Pertimbangkan masalah matematika berikut: 2 + 2 =?

Jika Anda segera tahu jawabannya adalah 4 itu bukan karena Anda pintar, tetapi karena itu sifat 2cd. Seorang anak yang belajar menambahkan mungkin terpaksa harus menjalani operasi penghitungan paling mendasar untuk mendapatkan jawabannya. Tetapi anak itu mungkin memiliki potensi untuk melampaui orang dewasa.

Tuan Tydus
sumber
-1

Orang tidak terlalu peduli berapa banyak waktu yang Anda habiskan untuk melakukan sesuatu; hanya memenuhi tenggat waktu Anda dan semuanya baik-baik saja.

pengguna541686
sumber
7
Jadi, ketika tenggat waktu adalah "45 menit dari sekarang" dan Anda selesai empat jam kemudian, orang-orang peduli.
1
Yang dimaksud Mehrdad adalah Anda dapat bekerja lembur untuk memenuhi tenggat waktu: D
quant_dev
1
Jika Anda harus bekerja lembur untuk melakukan hal-hal devs lain tidak perlu lembur untuk - Anda tidak perlu berhenti untuk menarik keluar ketika kotoran benar-benar mengenai kipas ...
occulus
-1

Cukup tegang, Ini akan mengharuskan saya untuk membaca tentang apa itu menara Hanoi -15menit, mulai IDE, buat solusi kosong -5menit, jadi itu hanya 25 menit untuk menyelesaikan masalah. Cukup menulis kode dengan semua pipa seperti kelas aman dengan desain antarmuka yang baik akan membutuhkan waktu juga -10 menit, jadi tinggal 15 menit untuk ide yang sebenarnya. Tergantung pada apa menara di Hanoi, itu mungkin sudah cukup, sedikit mungkin tidak. Dan kadang-kadang, saya hanya perlu membiarkan masalah menyelesaikan sendiri sementara saya sedang mengerjakan masalah lain, karena saya tidak melihat solusi di sana di tempat. Jadi itu dipecahkan secara gratis di utas paralel, tetapi itu tidak terjadi dalam sekejap.

Bagaimanapun, ini adalah salah satu perusahaan terbesar, sehingga mereka dapat melakukan apa pun yang mereka inginkan. Tetapi batas waktu adalah salah satu faktor terburuk dalam wawancara IMHO, saya selalu merasa ditekan, terburu-buru, tidak dapat melakukan semuanya dengan bersih, dan tidak dapat berkonsentrasi pada semua detail yang sangat penting ketika benar-benar bekerja. :) Tentu Anda dapat memecahkan solusi dengan cepat, seperti, mengatur akses ke admin sehingga semuanya berfungsi + 'SELECT * FROM pass WHERE usr == ' + user_input, tetapi untuk tugas apa pun yang aman dan ditulis dengan baik saya akan bangga dengan, saya akan membutuhkan waktu dan 45 menit benar-benar sangat intens.

Coder
sumber
1
Saya pikir mereka menginginkan orang-orang yang hanya ingat apa masalah Menara Hanoi (ini klasik).
quant_dev
Memulai IDE dan membuat proyek kosong membutuhkan waktu lima menit? Jika Anda belum tahu Towers Of Hanoi, setidaknya lakukan dengan urutan yang berlawanan sehingga IDE memuat (dari VM tampaknya melalui internet) saat Anda sedang meneliti!
Bryan Boettcher
Dalam tes seperti ini, mereka tidak perlu mencari "desain antarmuka yang baik" dan "pipa" - Saya berharap mereka ingin melihat pemahaman Anda tentang masalah dan kemampuan untuk membentuk algoritma untuk menyelesaikannya. Jika bahasa bukan kendala, menggunakan sesuatu seperti Java dan Eclipse adalah hal terakhir yang akan saya lakukan. Saya akan menggunakan Python dan editor teks minimal / IDE ringkas. (Tidak mengatakan bahwa Anda akan menggunakan Java sendiri; katakan saja '...)
occulus