Seberapa pentingkah itu benar secara sintaksis selama wawancara? [Tutup]


40

Ketika meminta kandidat wawancara untuk menulis sebuah program di papan tulis, apakah Anda mengharapkan kandidat untuk menulis kode yang secara sintaksis benar?

Saya memiliki dua kandidat, yang salah satunya menulis program yang benar secara sintaksis tetapi logikanya tidak sesuai sasaran, dan yang lainnya memiliki logika yang ditulis lebih baik tetapi sintaksnya adalah omong kosong.

Saya mendukung kandidat pertama.


75
Pilihan Anda masuk akal jika Anda mengharapkan mereka untuk kode di Notepad, saya kira.
Benjol

20
Bagaimana sintaks kodesemu salah? Atau Anda meminta mereka untuk menulis dalam bahasa nyata?!?
SK-logic

6
Tergantung pada uraian tugas ... salin editor?
Konrad Rudolph

9
Sintaks dapat dipelajari, ini adalah tugas sepele, terjadi dalam beberapa minggu di tempat kerja. Mampu menyelesaikan masalah dengan logika yang lebih baik lebih sulit untuk dipelajari, jika bukan tidak mungkin, berdasarkan tingkat keterampilan programmer. Synax salah memecahkan sendiri ketika Anda pergi untuk mengkompilasi atau melihat pekerjaan Anda di browser (yaitu tidak benar).
Ramhound

26
Sementara saya setuju dengan jawaban yang mengatakan bahwa kandidat kedua lebih baik, saya pikir itu juga tergantung pada bagaimana "omong kosong" sintaks itu .. Jika dia lupa titik koma bukan masalah besar, tetapi jika itu adalah sesuatu yang bahkan tidak terlihat mirip dengan bahasa pemrograman dan pemohon menyatakan bahwa mereka memiliki banyak pengalaman dengan bahasa itu, maka ada sesuatu yang salah
Thomas Bonini

Jawaban:


125

Saya akan menyukai orang yang mampu bernalar melalui masalah, menghasilkan solusi yang baik, dan kemudian menjelaskan solusi mereka kepada saya. Bahkan jika logika mereka tidak 100%, jika mereka berada di jalur yang benar dan sedang memikirkan masalahnya, mengajukan pertanyaan yang benar, dan menyusuri jalan yang benar, itu akan menjadi pemenang saya.

Ketika Anda mengembangkan kode pada pekerjaan, Anda memiliki banyak alat - IDE, kompiler, analisis statis, tes unit, tes integrasi, dan prosedur tes penerimaan - untuk menemukan kesalahan dalam sintaks dan logika. Jika Anda menulis di papan tulis, Anda tidak memiliki alat-alat ini dan Anda pasti akan membuat kesalahan dalam sintaks (lupa nama metode, titik koma, tanda kurung), dan saya bisa memaafkan itu.

Satu-satunya pertanyaan saya kepada Anda: Mengapa calon Anda menulis kode aktual di papan tulis, alih-alih berfokus pada algoritma, strategi desain, dan pemikiran logis? Bahasa pemrograman berubah, pemecahan masalah tidak.


6
+1, tetapi terkadang ini merupakan ukuran yang layak tentang seberapa nyaman seseorang dalam bahasa tertentu. Secara pribadi, saya tidak pernah menaruh banyak bobot di dalamnya (pasti setuju bahwa algoritma adalah yang penting), tetapi tidak ada salahnya.
Demian Brecht

2
Bagi saya, bobot pertama pada proses berpikir, kedua pada algoritma dan logika, dan terakhir pada bahasa (dengan poin bonus akan kodesemu - ini menunjukkan Anda dapat berpikir secara abstrak). Saya akan mempekerjakan pemecah masalah yang baik yang dapat belajar dan beradaptasi dengan bahasa sebelum menguasai bahasa tertentu (bahkan jika bahasa itu adalah bahasa pilihan organisasi saya saat ini).
Thomas Owens

1
Satu hal yang saya perhatikan tentang pengkodean saya sendiri - jika saya bekerja dengan beberapa bahasa, kompiler menangkap lebih banyak kesalahan sintaks daripada jika saya hanya bekerja dengan satu.
Loren Pechtel

12
Saya selalu meminta orang menulis kode di papan tulis. Saya telah menjumpai terlalu banyak orang yang mengetahui hal-hal yang sesuai tetapi tampaknya tidak dapat menghasilkan kode ketika dibutuhkan.
dietbuddha

5
@dietbuddha Poin-poin itu berlaku terlepas dari bagaimana Anda mengajukan pertanyaan, bahasa implementasi, atau kodesemu - ketiganya. Satu pertanyaan wawancara juga tidak dapat mengidentifikasi kebiasaan buruk yang mungkin dimiliki pengembang karena cukup mudah untuk menyembunyikan kebiasaan buruk Anda untuk waktu yang singkat. Saya tidak melihat bukti kuat untuk mengatakan apa pun selain fakta bahwa satu-satunya keterampilan paling penting bagi seorang insinyur perangkat lunak adalah pemecahan masalah dan komunikasi, yang keduanya paling baik ditangani dengan menempatkan pengembang dalam situasi dunia nyata menggunakan alat standar atau dengan menggunakan pseudocode.
Thomas Owens

46

Saya akan memilih kandidat kedua. Logika akan sulit ( sangat keras, kadang-kadang) untuk mendapatkan persis benar. Sintaks bisa sangat mudah untuk mendapatkan yang benar ketika IDE dan kompiler dan berbagai macam alat lainnya membantu.

Kandidat pertama mungkin tidak pernah memicu kesalahan kompiler, tetapi jika kodenya sering gagal dalam semua jenis kasus batas yang aneh (dan kurang aneh), dia tahu di mana harus meletakkan tanda titik koma tidak begitu berharga.


1
Persis. Anda dapat mengajarkan sintaksis (khususnya jika mereka sudah mengetahui beberapa sintaksis lain). Anda tidak bisa mengajarkan alasan yang masuk akal dengan mudah.
Tridus

19

Tergantung pada kesalahan sintaksis yang sebenarnya, saya kira saya akan lebih memilih kandidat kedua , karena memeriksa sintaksis biasanya lebih baik diserahkan kepada mesin .

Kesalahan seperti titik koma yang hilang, lupa tanda kurung tutup, lupa koma dalam daftar argumen, dll, bahkan kesalahan non-sintaksis seperti mengalihkan urutan argumen saat memanggil fungsi biasanya tertangkap oleh penyorot sintaks, kompiler atau ketika kode dijalankan pertama kali , semua hal yang biasa digunakan, tetapi tidak tersedia di papan tulis.

Namun, ada beberapa kesalahan, yang, sementara secara teknis hanya kesalahan sintaksis, menunjukkan kesalahpahaman yang lebih dalam.

Sebagai contoh yang agak artifisial untuk menyampaikan maksud: pertimbangkan seorang programmer python yang mengawali semua variabelnya dengan $, atau menulis for-loop sebagai for list as item. Secara teknis, keduanya adalah kesalahan sintaks, tetapi bahkan dengan hanya eksposur terbatas pada python kita harus tahu bagaimana dengan karakter legal dan for loop. Ini akan menjadi tebakan yang baik bahwa kandidat tahu php (atau perl?) Dan mencoba untuk menggertak tentang keterampilan python-nya


15

Saya lebih suka kandidat kedua, pada teori bahwa papan tulis memiliki lebih banyak dampak pada sintaks daripada logika, dan bahwa kesalahan sintaks lebih mudah untuk dikoreksi - baik IDE atau kompiler biasanya dapat melakukannya.


15

Saya telah menulis SQL dan CSS (bahasa paling sederhana dan dasar yang saya tahu) selama hampir 13 tahun, dan saya tidak bisa selalu mengingat sintaksnya.

Teman saya (juga seorang pengembang) bekerja untuk hedge fund, dia tidak pernah bisa mengingat sintaks untuk pernyataan penyisipan.

Kami berdua berakhir di W3CSchools , saya kira kita harus malu (dia memiliki gelar, dan saya memiliki gelar PhD).

Namun, jujur ​​saja, saya pikir prioritas kita sudah benar. Sintaks bukanlah keterampilan yang penting.


13

Beberapa pemikiran tentang kesalahan sintaksis ... Saya bertanya-tanya apakah Anda telah menjelaskan dengan baik bahwa sintaks perlu benar. Terkadang orang menganggap kode pseudo itu OK.

Juga, jika seseorang mengklaim pengalaman bertahun-tahun dalam suatu bahasa dan tidak dapat membuat sintaksis dasar yang benar, Anda harus meragukan klaim tersebut.

Kesalahan sintaksis dapat bervariasi, jadi jika seseorang lupa nama metode itu boleh saja (bagi saya) tetapi jika seseorang tidak tahu bagaimana merujuk ke metode di kelas (notasi titik) atau tidak tahu dasar pemikiran seperti sintaksis untuk suatu kelas sederhana, maka kemungkinan orang ini tidak menggunakan bahasa untuk waktu yang lama.

Untuk pria yang tidak mendapatkan sintaks yang benar, apakah Anda berpikir bahwa kesalahannya bisa dengan mudah diperbaiki dengan editor bahasa yang sesuai? jika demikian, saya memilih dia.

Saya kira apa yang saya pikirkan di sini adalah bahwa kesalahan sintaks dapat diterima dalam batas.


5

Asisten junior programmer atau bahkan alat perangkat lunak mungkin dapat menemukan dan memperbaiki sintaksis yang buruk jika logikanya baik. Logika buruk ... perbaikan apa pun tidak terlalu terjamin. Semua programmer akan mengacau. Saya akan memilih yang sekrupnya lebih mudah dikenali dan diperbaiki.


5

Kecuali masalahnya halus, dan sebagian besar pertanyaan wawancara tidak, kandidat pertama didiskualifikasi. Jauh lebih mudah untuk belajar sintaks bahasa daripada desain algoritma. Saya akan mempekerjakan seorang programmer dengan sejarah kerja yang sukses dalam berbagai bahasa, bahkan jika dia tidak memiliki pengalaman dalam teknologi saya saat ini. Ini bukan strategi terbaik jika saya perlu melakukan sesuatu hari ini, tetapi jika saya perlu banyak hal dilakukan selama dua belas bulan ke depan, maka saya akan selalu memilih kemampuan umum daripada pengalaman tertentu.


5

Memeriksa sintaks untuk kompiler. Kompiler tidak dapat membuat logika Anda lebih baik, tetapi ia dapat memberi tahu Anda cara memperbaiki sintaks Anda. Itu berarti bahwa pekerjaan apa pun di mana Anda menulis kode menggunakan kompiler, logikanya secara inheren jauh lebih berharga daripada menjadi benar secara sintaksis.


5

Wawancara selalu merupakan situasi yang canggung - Anda dapat mengatakan hal ini karena ketika Anda keluar, Anda segera memikirkan semua hal yang seharusnya Anda katakan, atau jawaban yang tepat untuk pertanyaan dan hal-hal yang ingin Anda tanyakan tetapi lupa. Jadi, mengingat ini, mengharapkan kode yang ditulis dengan sempurna tanpa kesalahan sintaks menjadi tidak realistis.

Selain itu, harapan Anda akan kode sempurna (di papan tulis!) Mungkin tidak cocok dengan pewawancara - misalnya, pada satu wawancara yang saya hadiri saya diminta untuk menulis kelas, yang saya lakukan, hanya agar pewawancara menarik saya untuk tidak meletakkan dalam copy constructor. Jadi saya menulis satu di, yang tidak melakukan apa-apa selain menetapkan a = b, tapi itu cukup untuk memuaskannya. Harapan saya terhadap masalah ini tidak memerlukan copy ctor, jadi saya mengabaikannya karena masalah yang sedang diselesaikan - Saya tidak berharap harus menulis kode kompilasi yang sesuai sepenuhnya (dengan standar kode tersembunyi), cukup tunjukkan pemahaman saya tentang solusinya. (pewawancara yang sama ini juga tidak menyukai solusi saya, itu bukan bagaimana dia akan melakukannya jadi jelas saya salah, menghela napas).

Jika Anda ingin kode kerja dari orang yang diwawancarai, beri mereka kompiler. Maka jangan mengeluh ketika mereka menagih Anda :)

Jadi pilih orang yang tahu apa yang dia lakukan, bukan orang yang bisa menirukan kata-kata tetapi tidak mengerti artinya.


3

Selama wawancara, pewawancara lebih tertarik untuk melihat Anda

  1. Pendekatan masalah
  2. Keterampilan yang digunakan untuk menyelesaikan masalah dan
  3. Waktu yang dibutuhkan untuk secara efektif memberikan solusi yang tepat

Sintaksis meskipun tidak begitu penting tetapi itu memegang tempat yang menonjol sambil memecahkan masalah, dengan kesalahan besar dalam sintaksis Anda tidak bisa berharap untuk membuat pewawancara terkesan.

Logika dan sintaksis yang tepat dikombinasikan bersama-sama dapat melakukan trik untuk Anda dalam sebuah wawancara.

Kesalahan kecil atau kecil tidak akan dikenakan biaya banyak jika logika cukup baik.

Terlebih lagi mungkin ada IDE yang tersedia yang dapat dengan mudah membuat sintaks bahkan dalam bentuk yang tepat. Tetapi untuk menggunakan metode mana dan kapan dan yang paling penting MENGAPA , hanya akan diketahui pria dengan logika dan pengetahuan yang tepat tentang subjek yang sebenarnya.

Saya berharap dan mendesak Anda untuk memberikan sesuatu yang lebih dari sekadar papan tulis atau notepad untuk menulis kode.

Saya akan pergi dengan kandidat kedua. ..


2

Nah beberapa orang menginginkan Java Developers yang hebat, pengembang C # yang hebat, pengembang C ++ yang hebat, dll. Jika itu kasus Anda, maka pergilah dengan A dan lebih banyak kekuatan untuk Anda. Satu kekhawatiran yang akan saya miliki adalah jika mereka tidak dapat menalar untuk memecahkan masalah, bagaimana Anda bisa mengharapkan mereka untuk bernalar dan memecahkan masalah bisnis Anda?

Orang lain hanya menginginkan pengembang hebat yang dapat bekerja dalam bahasa apa pun yang diperlukan. Mereka memikirkan / memodelkan masalah dan kemudian mengimplementasikannya dalam bahasa apa pun. Jika Anda tiba-tiba memutuskan .NET payah dan beralih ke Java atau sebaliknya, ini adalah pengembang yang tidak akan melompat kapal atau menolak untuk belajar. Juga jika Anda mendapatkan beberapa jenis paket otomatisasi / paket perhitungan yang memiliki bahasa khusus dan Anda memerlukan beberapa tugas otomatis, ini adalah jenis pengembang yang dapat melakukannya. Contoh kehidupan nyata ... Saya perlu mengetahui bahasa skrip kepemilikan khusus untuk paket perangkat lunak pemetaan untuk mengekstraksi kode pos untuk wilayah yang dibuat khusus untuk perusahaan lama. Contoh lain .... majikan saya saat ini memiliki sistem manajemen properti milik yang berisi bahasa khusus untuk menulis laporan ... Bagaimanapun juga,

Juga di papan tulis ada tekanan ekstra / kegugupan sehingga tidak ada yang terbaik. Ditambah lagi, saya sangat ragu bahwa ketika coding Anda membuatnya sempurna setiap saat. Saya menduga Anda mengkompilasi atau hanya menjalankan dan menemukan beberapa kesalahan. Selain itu tergantung pada bahasa. C cukup kecil sehingga Anda mungkin dapat menghafal sebagian besar perpustakaan bahasa / inti (meskipun saya tidak akan memerlukannya). Java / C # memiliki perpustakaan yang sangat besar (dengan perubahan yang sering terjadi) sehingga menghafal perpustakaan tidak mungkin dilakukan.

Mengetahui banyak bahasa juga bisa merugikan Anda. C # dan Java saling mengganggu dengan saya. Tetapi mengetahui beberapa bahasa juga dapat memperluas perspektif Anda, terutama jika Anda tahu bahasa scripting dan bahasa fungsional selain C # / Java.

Namun jika kedua kandidat menyelesaikan masalah dengan logika yang benar, pria dengan sintaks yang benar mungkin memiliki keuntungan. Jika seseorang memecahkan masalah dan yang lain tidak, maka secara pribadi saya akan pergi dengan pria yang dapat memecahkan masalah.

Namun jika seseorang mengklaim sebagai ahli di Java dan tidak dapat mendeklarasikan array penggunaan pernyataan if atau while, mereka mungkin berbohong. Tapi saya mungkin mengerti jika seseorang adalah ahli di Jawa tetapi telah banyak dong C # belakangan ini dan mencoba untuk melakukan Peta atau sesuatu .... Juga jika Anda masuk ke spesifik perpustakaan, atau seseorang melakukan myArray.length bukannya myArray .Length atau string.length () / string.Length / string.length alih-alih string.length () ... Hal-hal kecil yang akan saya maafkan. Atau jika mereka lupa urutan argumen panggilan perpustakaan. Atau salah ketik / semi colon di sini atau di sana ....


1

Saya tidak akan mengambil satu pun dari mereka.

Sintaks yang baik tidak berguna jika programmer tidak pandai memecahkan masalah. Dan sintaksis yang buruk untuk bahasa tertentu berarti kandidat tidak merasa dirinya nyaman dengan bahasa tertentu itu, mungkin karena kurangnya pengalaman langsung.

Bagaimanapun, logika jauh lebih penting daripada sintaksis.


3
Saya tidak pernah ingat detail sintaks bahkan bahasa yang saya rancang sendiri. Dan saya tidak ingat sintaks bahasa yang telah saya gunakan selama beberapa dekade juga. Ini bukan masalah sama sekali, saya selalu bisa mencarinya, saya sudah mencetak BNF untuk semua bahasa yang saya gunakan. Sintaks adalah bagian paling tidak penting dari bahasa apa pun, semantik adalah cara yang jauh lebih penting.
SK-logic

@ SK-logic: Saya setuju sepenuhnya, tetapi terlalu sering orang-orang datang ke sini mengatakan bahwa mereka dapat memprogram dalam bahasa xxx, maka mereka bahkan tidak dapat mengingat apakah tanda titik koma diperlukan atau tidak. Sangat mudah untuk mempelajari sintaks suatu bahasa baru, tetapi jika saya mencari seseorang yang fasih dalam bahasa tertentu, pasti seperti itu. Selain itu, saya sudah menunjukkan bahwa logika jauh lebih penting daripada sintaksis.
Jose Faeti

1

Itu, seperti biasa, tergantung. Jika kesalahan sintaks relatif kecil, saya akan mengabaikannya. Jika mereka sangat besar, saya akan memperhatikan mereka dan mencoba untuk menyimpulkan mengapa mereka ada di sana.

Saya pikir kesalahan logika lebih buruk daripada kesalahan sintaksis, yang terakhir hampir selalu dapat ditangkap secara mekanis, yang pertama kurang begitu (tergantung, pada tingkat, pada bahasa apa yang Anda tulis, beberapa kelas kesalahan logika ditangkap oleh jenis yang cukup maju) inferensi dan pemeriksaan).


1

Itu pasti akan tergantung pada posisi wawancara itu, dan mungkin juga pada bahasanya.

Bekerja pada C ++, membuat cowok gagap pada sintaks itu menakutkan. C ++ penuh dengan sudut-sudut gelap, perangkap pada dasarnya terletak di mana-mana. Gagap pada sintaksis berarti eksposisi yang buruk ke bahasa, dan pemula C ++ membuat banyak kesalahan (tidak untuk mengatakan bahwa orang lain tidak dari waktu ke waktu).

Untuk menjawab pertanyaan Anda, maka:

  • jika saya perlu mengisi posisi pengembang yang sederhana, saya akan mengambil pria dengan pemahaman yang baik tentang sintaks C ++. Dia tidak akan bersinar, tetapi jangan terlalu banyak memprovokasi bencana.
  • jika saya perlu mengisi posisi pengembang utama, saya tidak akan mengambil salah satunya. Pengembang utama seharusnya memiliki pengalaman dan logika.

Hanya ada satu peringatan: orang mengakui kurangnya pengalaman mereka. Idealnya orang harus membuat kode dalam bahasa pilihan mereka, atau kode pseudo jika mereka lebih suka (siswa misalnya).


1

Kisah nyata, saya masih lupa sintaksis peristiwa C # ketika saya harus menulisnya dengan tangan. Kadang-kadang terjadi dalam wawancara. Saya tidak memiliki masalah ketika saya kode di keyboard.

Pilih orang yang bisa kode, bukan orang yang tidak bisa tetapi bisa mengingat sintaksnya.


0

Ketika saya menulis kode di atas kertas / papan tulis, bahkan untuk wawancara kerja, saya pada dasarnya melewatkan sebagian besar sintaks. Saya tidak menggunakan titik koma, saya panggilan metode fudge, dll. Saya lebih cenderung menulis kalimat yang menjelaskan 4 baris kode yang benar-benar dasar daripada kode itu sendiri. Sungguh, saya menggunakan pseudocode seperti php, dan berbicara melalui apa yang saya lakukan, sementara saya melakukannya, dan menuliskan komentar cepat untuk menjelaskan hal-hal yang saya sesuaikan (yang, secara teori, tidak ada yang benar-benar penting bagi program)

Tujuan saya ketika menulis kode dalam sebuah wawancara adalah untuk menunjukkan bagaimana saya menyelesaikan masalah, bukan untuk mendikte sesuatu yang bisa diketik oleh juru ketik ke Notepad dan telah berjalan.

Singkat cerita: Saya pikir Anda harus mempertimbangkan mengapa programmer pertama memiliki sintaks yang jelek. Dia sangat bisa mengetahuinya tetapi hanya menganggapnya tidak relevan untuk wawancara, dan lebih memilih untuk fokus pada bagian-bagian pekerjaan ini yang sulit (logika dan pemecahan masalah).


0

Orang yang tidak dapat memenuhi jawaban secara logis tidak memenuhi syarat. Ada terlalu banyak orang di industri kami yang memproduksi kode sampah yang sesuai tetapi tidak benar-benar melakukan apa yang seharusnya dilakukan atau menangani kesalahan atau kasus tepi.

Orang kedua mungkin atau mungkin tidak memenuhi syarat tergantung pada jenis dan jumlah kesalahan dan kesulitan apa yang Anda harapkan mereka tulis. Dalam istilah SQL (bahasa tempat saya menulis), orang yang tidak dapat mengingat sintaks untuk gabungan eksplisit tidak memenuhi syarat untuk pekerjaan yang mengharuskan Anda untuk meminta basis data - tidak ada pengecualian; orang yang tidak dapat mengingat bagaimana cara melakukan CTE yang resusif (tetapi siapa tahu mereka ada dan mencoba menggunakannya) tidak. Dengan kata lain, saya berharap sintaks lebih tepat untuk kode dasar yang Anda tulis sepanjang waktu tetapi tidak untuk hal-hal yang dilakukan hanya sesekali dan bukan untuk sintaks yang kompleks.

Jika saya mempertimbangkan seseorang yang saya kenal memiliki kualifikasi luar biasa di bidang terkait tetapi hanya sedikit pengetahuan tentang bahasa spesifik saya, saya mungkin akan lebih memaafkan kesalahan sintaksis juga. Saya lebih suka menyewa pengembang Oracle yang hebat daripada pengembang SQl Server yang biasa-biasa saja untuk pekerjaan SQL Server (Tentu saja orang SQL Server yang hebat akan menjadi yang terbaik) dan tidak akan mengharapkan orang itu untuk mengetahui sintaks SQL Server jika mereka bisa menunjukkan kepada saya bagaimana caranya. lakukan di Oracle. Hal yang sama dengan orang-orang Jawa dan C #, orang dengan keterampilan pemecahan masalah yang sangat baik mengalahkan orang dengan keterampilan bahasa yang sangat baik, tetapi orang dengan keduanya menang setiap kali (mereka kadang-kadang sulit ditemukan).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.