Quanto è importante essere sintatticamente corretti durante un'intervista? [chiuso]


40

Quando chiedi a un candidato al colloquio di scrivere un programma sulla lavagna, ti aspetti che il candidato scriva un codice sintatticamente corretto?

Avevo due candidati, uno dei quali ha scritto un programma sintatticamente corretto ma la logica non era all'altezza, e l'altro aveva la logica meglio scritta ma la sintassi era una schifezza.

Favorisco il primo candidato.


75
La tua scelta ha senso se ti aspetti che codifichino in Blocco note, immagino.
Benjol,

20
Come può una sintassi dello pseudocodice essere errata? O stai chiedendo loro di scrivere in qualche lingua reale?!?
SK-logic,

6
Dipende dalla descrizione del lavoro ... copia editor?
Konrad Rudolph,

9
La sintassi può essere appresa, è un compito banale, avviene in un paio di settimane di lavoro. Essere in grado di risolvere un problema con una logica migliore è più difficile da imparare, se non impossibile, in base al livello di abilità del programmatore. Synax errato si risolve da solo quando vai a compilare o visualizzare il tuo lavoro in un browser (cioè non è giusto).
Ramhound,

26
Mentre sono d'accordo con le risposte dicendo che il secondo candidato è migliore, penso che dipenda anche da quanto "schifo" fosse la sintassi .. Se avesse dimenticato un punto e virgola non è un grosso problema, ma se fosse qualcosa che non sembrava nemmeno simile al linguaggio di programmazione e il richiedente dichiarò di avere molta esperienza con quel linguaggio, quindi c'è qualcosa che non va
Thomas Bonini,

Risposte:


125

Preferirei la persona che è stata in grado di ragionare attraverso il problema, trovare una buona soluzione e poi spiegarmi la soluzione. Anche se la loro logica non fosse al 100%, se fossero sulla buona strada e stessero ragionando sul problema, ponendo le domande giuste e andando sulla strada giusta, quello sarebbe il mio vincitore.

Quando stai sviluppando codice sul lavoro, hai molti strumenti - IDE, compilatori, analisi statiche, unit test, test di integrazione e procedure di test di accettazione - per trovare errori nella sintassi e nella logica. Se stai scrivendo su una lavagna bianca, non hai questi strumenti e sei obbligato a fare errori nella sintassi (dimenticando un nome di metodo, un punto e virgola, una parentesi graffa), e posso perdonarlo.

La mia unica domanda per te: perché i tuoi candidati scrivono un codice reale sulla lavagna, invece di concentrarti su algoritmi, strategie di progettazione e pensiero logico? I linguaggi di programmazione cambiano, la risoluzione dei problemi no.


6
+1, ma a volte è un indicatore decente su quanto qualcuno sia a proprio agio in una determinata lingua. Personalmente, non ci ho mai messo molto peso (sono assolutamente d'accordo che l'algoritmo è ciò che è importante), ma non fa male.
Demian Brecht,

2
Per me, il peso è in primo luogo sul processo di pensiero, in secondo luogo sull'algoritmo e sulla logica, e infine sul linguaggio (con punti bonus che vanno allo pseudocodice - mostra che puoi pensare in modo astratto). Assumerei un buon risolutore di problemi in grado di imparare e adattarsi alle lingue prima di un maestro di una determinata lingua (anche se quella lingua era la lingua scelta dalla mia organizzazione).
Thomas Owens

1
Una cosa che ho notato sulla mia codifica: se sto lavorando con più lingue, il compilatore rileva molti più errori di sintassi rispetto a quando sto lavorando solo con uno.
Loren Pechtel,

12
Ho sempre persone che scrivono codice sulla lavagna. Ho incontrato troppe persone che conoscono le cose appropriate ma non riescono a produrre codice quando richiesto.
dietbuddha,

5
@dietbuddha Questi punti si applicano indipendentemente da come poni la domanda, dal linguaggio di implementazione o dallo pseudocodice, tutti e tre. Una singola domanda di intervista non può inoltre identificare le cattive abitudini che uno sviluppatore potrebbe avere in quanto è abbastanza facile nascondere le tue cattive abitudini per un breve periodo. Non vedo prove convincenti per dire qualcosa di diverso dal fatto che le singole competenze più importanti per un ingegnere del software sono la risoluzione dei problemi e la comunicazione, entrambi i quali sono meglio affrontati mettendo lo sviluppatore in una situazione del mondo reale utilizzando gli strumenti standard o usando pseudocodice.
Thomas Owens

46

Preferirei il secondo candidato. La logica può essere difficile ( molto difficile, a volte) per avere esattamente ragione. La sintassi può essere molto semplice da ottenere quando l'IDE, il compilatore e altri strumenti assortiti aiutano.

Il primo candidato non può mai innescare un errore del compilatore, ma se il suo codice spesso fallisce in tutti i tipi di casi limite (e meno strani), la sua conoscenza di dove inserire un punto e virgola non vale molto.


1
Esattamente. Puoi insegnare la sintassi (in particolare se conoscono già qualche altra sintassi). Non puoi insegnare ragionamenti sonori con la stessa facilità.
Tridus,

19

A seconda degli errori sintattici effettivi, immagino che preferirei il secondo candidato , perché il controllo della sintassi è generalmente meglio lasciato alle macchine .

Errori come punti e virgola mancanti, dimenticare parentesi di chiusura, dimenticare le virgole negli elenchi di argomenti, ecc., Anche errori non sintattici come cambiare l'ordine degli argomenti quando si chiama una funzione di solito vengono catturati dall'evidenziatore di sintassi, dal compilatore o quando il codice viene eseguito la prima volta , tutte le cose che si usano di solito, ma non sono disponibili sulla lavagna.

Tuttavia, ci sono alcuni errori che, sebbene tecnicamente solo errori di sintassi, mostrano un malinteso più profondo.

Come esempio in qualche modo artificiale per chiarire il punto: considera un programmatore python che antepone tutte le sue variabili con $ o scrive il for-loop come for list as item. Tecnicamente, entrambi sono errori di sintassi, ma anche con un'esposizione limitata a Python si dovrebbe sapere quali sono i caratteri legali e il ciclo for. Sarebbe una buona ipotesi che il candidato conosca php (o perl?) E cerchi di bluffare sulle sue abilità di pitone


15

Preferirei il secondo candidato, in base alla teoria secondo cui una lavagna ha un impatto maggiore sulla sintassi che sulla logica, e che gli errori di sintassi sono più facili da correggere - l'IDE o il compilatore di solito possono farlo.


15

Scrivo SQL e CSS (i linguaggi più semplici e di base che conosco) da quasi 13 anni e non ricordo sempre la sintassi.

Il mio amico (anche uno sviluppatore) lavora per un hedge fund, non riesce mai a ricordare la sintassi di un'istruzione insert.

Entrambi finiamo in W3CSchools , immagino che dovremmo essere imbarazzati (ha una laurea e ho un dottorato di ricerca).

Tuttavia, ad essere sincero, penso che le nostre priorità siano corrette. La sintassi non è un'abilità importante.


13

Pochi pensieri sugli errori di sintassi ... Mi chiedevo se avessi chiarito a entrambi che la sintassi deve essere corretta. A volte le persone credono che lo pseudo codice sia OK.

Inoltre, se qualcuno afferma anni di esperienza in una lingua e non è in grado di correggere la sintassi di base, dovresti dubitare del reclamo.

Gli errori di sintassi possono variare, quindi se qualcuno dimentica un nome di metodo, va bene (per me) ma se qualcuno non sa come fare riferimento a un metodo in una classe (notazione punto) o non conosce un pensiero di base come la sintassi di un classe semplice, quindi è probabile che questa persona non usi la lingua da molto tempo.

Per il ragazzo che non ha ottenuto la sintassi corretta, pensi che i suoi errori avrebbero potuto essere facilmente risolti con l'editor di lingue appropriato? in tal caso, voto per lui.

Immagino che ciò a cui sto pensando sia che gli errori di sintassi sono accettabili entro certi limiti.


5

Un programmatore assistente junior o anche uno strumento software potrebbe essere in grado di trovare e correggere sintassi errata se la logica è buona. Logica sbagliata ... qualsiasi soluzione è molto meno sicura. Tutti i programmatori falliranno. Vorrei scegliere quello che è più facile da individuare e riparare.


5

A meno che il problema non sia sottile e la maggior parte delle domande del colloquio no, il primo candidato viene squalificato. È molto più semplice imparare la sintassi del linguaggio rispetto alla progettazione dell'algoritmo. Assumerò un programmatore con una storia di lavoro di successo in più lingue, anche se non ha esperienza nella mia attuale tecnologia. Questa non è la strategia migliore se ho bisogno di qualcosa da fare oggi, ma se avrò bisogno di molte cose da fare nei prossimi dodici mesi, sceglierò sempre l'abilità generale rispetto a un'esperienza specifica.


5

Il controllo della sintassi è lo scopo di un compilatore. Un compilatore non può migliorare la tua logica, ma può dirti come correggere la sintassi. Ciò significa che qualsiasi lavoro in cui si scrive codice utilizzando un compilatore, la logica è intrinsecamente di gran lunga più prezioso dell'essere sintatticamente corretto.


5

Le interviste sono sempre situazioni imbarazzanti: puoi dirlo perché quando esci, pensi immediatamente a tutte le cose che avresti dovuto dire, o alle risposte giuste alle domande e alle cose che avresti voluto porre ma che hai dimenticato. Quindi, dato questo, aspettarsi un codice perfettamente scritto senza errori di sintassi è irrealistico.

Inoltre, le tue aspettative sul codice perfetto (su una lavagna!) Potrebbero non corrispondere agli intervistatori - ad esempio, in un'intervista a cui ho partecipato mi è stato chiesto di scrivere una lezione, cosa che ho fatto, solo per l'intervistatore che mi tirasse su a non mettere in un costruttore di copie. Quindi ne ho scritto uno, che non ha fatto altro che impostare a = b, ma è stato abbastanza per soddisfarlo. Le mie aspettative sul problema non richiedevano un copiatrice, quindi l'ho lasciato fuori come estraneo al problema da risolvere - non mi aspettavo di dover scrivere un codice di compilazione completamente conforme (ai suoi standard di codifica nascosti), semplicemente mostrare la mia comprensione della soluzione. (Anche a questo stesso intervistatore non piaceva la mia soluzione, non era come l'avrebbe fatto, quindi ovviamente ho sbagliato, sospiro).

Se vuoi un codice funzionante da un intervistato, dagli un compilatore. Quindi non lamentarti quando ti fatturano :)

Quindi scegli la persona che sa cosa sta facendo, non quella che può pappagallo le parole ma non capisce il significato.


3

Durante un'intervista l'intervista è più interessata a vedere il tuo

  1. Approccio al problema
  2. Abilità usata per risolvere il problema e il
  3. Tempo impiegato per fornire una soluzione adeguata

La sintassi, tuttavia, non è così importante, ma occupa un posto di rilievo durante la risoluzione di un problema, con importanti errori nella sintassi che non puoi aspettarti di far impressionare l'intervistatore.

La logica e la sintassi corrette combinate insieme possono fare al caso tuo in un'intervista.

Un piccolo o piccolo errore non ti costerebbe mai molto se la logica è abbastanza buona.

Inoltre ci sono IDE disponibili che potrebbero facilmente rendere la sintassi anche di qualsiasi forma corretta. Ma usare quale metodo dove e quando e, soprattutto , PERCHÉ , sarebbe conosciuto solo a un ragazzo con la logica e la conoscenza adeguate della materia reale.

Spero e vi esorto a fornire qualcosa di più di una lavagna bianca o un blocco note per scrivere il codice.

Vorrei andare con il secondo candidato. ..


2

Beh, alcune persone vogliono grandi sviluppatori Java, grandi sviluppatori C #, grandi sviluppatori C ++, ecc. Se questo è il tuo caso, scegli A e più potenza. Una preoccupazione che vorrei avere è se non riescono a ragionare per risolvere il problema, come puoi aspettarti che ragionino e risolvano i tuoi problemi aziendali?

Altre persone vogliono solo grandi sviluppatori che possano lavorare in qualsiasi lingua sia richiesta. Pensano / modellano il problema e quindi lo implementano in qualsiasi lingua. Se improvvisamente decidi che .NET fa schifo e passi a Java o viceversa, questi sono gli sviluppatori che non salteranno la nave o si rifiuteranno di imparare. Inoltre, se ottieni un tipo di pacchetto di automazione / pacchetto di calcolo che ha un linguaggio proprietario e hai bisogno di alcune attività automatizzate, questi sono i tipi di sviluppatori che possono farlo. Esempio di vita reale ... Avevo bisogno di capire un linguaggio di scripting proprietario personalizzato per un pacchetto software di mappatura al fine di estrarre i codici postali per le regioni disegnate personalizzate per un vecchio datore di lavoro. Un altro esempio .... il mio attuale datore di lavoro ha un sistema di gestione della proprietà proprietario che contiene un linguaggio personalizzato per la scrittura di rapporti ... In ogni caso,

Anche sulla lavagna bianca c'è ulteriore pressione / nervosismo, quindi nessuno è al meglio. Inoltre dubito fortemente che quando si codifica lo si ottiene sempre perfetto. Ho il sospetto che tu compili o semplicemente esegua e trovi alcuni errori. Inoltre dipende dalla lingua. C è abbastanza piccolo da poter probabilmente memorizzare la maggior parte delle librerie di lingua / core (anche se non lo richiederei). Java / C # ha librerie così enormi (con cambiamenti così frequenti) che la memorizzazione della libreria è fuori discussione.

Anche conoscere più lingue può funzionare contro di te. C # e Java interferiscono tra loro con me. Ma conoscere più lingue può anche ampliare la tua prospettiva, soprattutto se conosci un linguaggio di scripting e un linguaggio funzionale oltre a C # / Java.

Tuttavia, se entrambi i candidati risolvono il problema con la logica corretta, il ragazzo con la sintassi corretta probabilmente ha un vantaggio. Se uno risolve il problema e non lo fa, personalmente andrei con il ragazzo che può risolvere il problema.

Tuttavia, se qualcuno afferma di essere un esperto in Java e non può dichiarare una matrice di utilizzo un'istruzione if o un ciclo while, potrebbe mentire. Ma potrei capire se qualcuno è un esperto di Java, ma ultimamente è stato un sacco di C # e prova a fare Map o qualcosa del genere ... Anche se entri nei dettagli della libreria o qualcuno fa myArray.length invece di myArray .Length o string.length () / string.Length / string.length invece di string.length () ... Roba minore che perdonerei. O se dimenticano l'ordine degli argomenti di qualche chiamata in biblioteca. O un errore di battitura / punto e virgola qua o là ....


1

Non ne prenderò nessuno.

Una buona sintassi è inutile se il programmatore non è bravo a risolvere i problemi. E una sintassi scadente per una determinata lingua significa che il candidato non si sente a suo agio con quella lingua particolare, forse per mancanza di esperienza diretta.

Comunque, la logica è molto più importante della sintassi.


3
Non ricordo mai alcun dettaglio della sintassi anche delle lingue che ho disegnato da solo. E non ricordo la sintassi delle lingue che uso da decenni. Non è affatto un problema, posso sempre cercarlo, ho BNF stampato per tutte le lingue che sto usando. La sintassi è la parte meno importante di qualsiasi lingua, la semantica è molto più importante.
SK-logic,

@ SK-logic: sono completamente d'accordo, ma troppe volte i ragazzi sono venuti qui dicendo che erano in grado di programmare in linguaggio xxx, quindi non erano nemmeno in grado di ricordare se fossero richiesti punti e virgola o meno. È facile imparare la sintassi di una nuova lingua, ma se sto cercando qualcuno che parli fluentemente una lingua particolare, deve essere così. Inoltre, ho già sottolineato che la logica è molto più importante della sintassi.
Jose Faeti,

1

Dipende, come sempre. Se gli errori di sintassi sono relativamente minori, li ignorerei. Se sono tremendi dalla terra, presterei attenzione a loro e proverei a dedurre perché sono lì.

Penso che gli errori logici siano peggiori degli errori di sintassi, il secondo può quasi sempre essere catturato meccanicamente, il primo in meno (dipende, in una certa misura, dal linguaggio che stai scrivendo, alcune classi di errori logici sono colte da un tipo sufficientemente avanzato inferenza e controllo).


1

Dipenderebbe sicuramente dalla posizione per la quale si trova l'intervista, e probabilmente anche dalla lingua.

Lavorare su C ++, avere un ragazzo che balbetta sulla sintassi è spaventoso. Il C ++ è pieno di angoli bui, le trappole si trovano praticamente ovunque. Una balbuzie sulla sintassi significa una scarsa esposizione al linguaggio, e i principianti C ++ commettono molti errori (per non dire che gli altri non fanno di tanto in tanto).

Per rispondere alla tua domanda, quindi:

  • se avessi bisogno di riempire una semplice posizione di sviluppatore, prenderei il ragazzo con una buona comprensione della sintassi C ++. Non brillerà, ma non dovrebbe provocare troppe catastrofi.
  • se avessi bisogno di ricoprire una posizione di sviluppatore principale, non prenderei neanche. Uno sviluppatore capo dovrebbe avere sia esperienza che logica.

C'è solo un avvertimento: le persone riconoscono la loro mancanza di esperienza. Idealmente, le persone dovrebbero programmare nella loro lingua preferita o pseudo-codice, se lo preferiscono (per esempio gli studenti).


1

Storia vera, dimentico ancora la sintassi degli eventi C # quando devo scriverli a mano. Succede nelle interviste a volte. Non ho il problema quando scrivo su una tastiera.

Scegli il tipo che sa programmare, non quello che non sa ma può ricordare la sintassi.


0

Quando scrivo codice su carta / lavagna, anche per un colloquio di lavoro, in pratica salto un grosso pezzo di sintassi. Non uso i punti e virgola, accetto le chiamate al metodo, ecc. È più probabile che scriva una frase che spiega 4 righe di codice veramente di base rispetto al codice stesso. In realtà, io uso uno pseudocodice simile a php e parlo di ciò che sto facendo, mentre lo sto facendo, e scrivo brevi commenti per spiegare le cose su cui cerco (che sono, in teoria, nulla di veramente importante per il programma)

Il mio obiettivo durante la programmazione di un'intervista è mostrare come risolvo il problema, non dettare qualcosa che un dattilografo potrebbe inserire nel Blocco note e averlo eseguito.

Per farla breve: penso che dovresti considerare il motivo per cui il primo programmatore ha avuto una sintassi scadente. Sapeva benissimo, ma lo considerava irrilevante per l'intervista e preferiva concentrarsi sulle parti di questo lavoro che sono difficili (logica e risoluzione dei problemi).


0

La persona che non può logicamente soddisfare la risposta non è qualificata. Ci sono troppe persone nel nostro settore che producono codice Garbage che è conforme ma che in realtà non fa ciò che dovrebbe fare o gestire errori o casi limite.

La seconda persona potrebbe non essere qualificata o meno a seconda del tipo e del numero di errori e della difficoltà di ciò che si aspetta che scrivano. In termini SQL (la lingua in cui scrivo), la persona che non ricorda la sintassi di un join esplicito non è qualificata per un lavoro che richiede di interrogare un database - senza eccezioni; colui che non ricorda come si fa a un CTE (ma che sa di esistere e cerca di usarlo) non lo è. In altre parole, mi aspetto che la sintassi sia più corretta per il codice di base che scrivi tutto il tempo, ma non per le cose fatte solo occasionalmente e non per la sintassi complessa.

Se stavo prendendo in considerazione una persona che conoscevo aveva eccellenti qualifiche in un'area correlata ma solo una conoscenza minima della mia lingua specifica, probabilmente avrei perdonato anche di più gli errori di sintassi. Preferirei assumere un grande sviluppatore Oracle piuttosto che un mediocre sviluppatore di SQl Server per un lavoro di SQL Server (ovviamente una persona eccezionale di SQL Server sarebbe la migliore) e non mi aspetterei che quella persona conoscesse la sintassi di SQL Server se potesse mostrarmi come fallo in Oracle. La stessa cosa con le persone Java e C #, la persona con eccellenti capacità di problem solving batte quella con eccellenti abilità linguistiche, ma quella con entrambe vince ogni volta (sono difficili da trovare a volte).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.