In che modo gli algoritmi per risolvere i problemi incontrati nelle interviste si traducono in soluzioni del mondo reale? [chiuso]

7

Ho recentemente terminato un corso di laurea in informatica e sto cercando un lavoro. Durante la ricerca ho incontrato diversi problemi interessanti (e difficili) che richiedevano algoritmi intelligenti da risolvere. Io uso anche google code jam come set di pratica.

Non riesco a capire come queste soluzioni si traducono nella risoluzione di problemi del mondo reale. Molti problemi appaiono (per me) non solo artificiali e fantastici, ma anche altamente specifici per essere una soluzione generica (anche se non è impossibile estenderli usando l'ingegno).

Ci sono questi problemi lì solo per testare le capacità di problem solving o sono questi alcuni aspetti del problema del mondo reale mascherati?

    
posta josh88 25.05.2012 - 12:34
fonte

6 risposte

9

In genere, i problemi di intervista sono più semplici dei problemi reali che si presentano nel lavoro. I problemi dell'intervista sono studiati per vedere se hai familiarità con algoritmi e strutture dati fondamentali: hashing, attraversamento di alberi, ricerca di grafi, programmazione dinamica, ecc. Ogni laureato CS dovrebbe conoscerli, ma molti no.

    
risposta data 26.05.2012 - 05:59
fonte
6

Generalmente queste domande sono lì solo per testare le tue capacità di problem solving, in particolare, come hai scoperto, quando ti viene chiesta una soluzione per uno scenario forzato.

Tuttavia, in alcuni casi l'azienda utilizzerà esempi dal proprio campo, ma di solito è possibile estrarre un esempio dalla propria base di codice, quindi hanno già una buona soluzione (o, almeno, un lavoro uno) e vedi se riesci a trovare qualcosa di simile. Ma anche in questi casi, non è come se stessero cercando qualcuno in grado di risolvere un problema particolare per loro.

Concentrati sulla tua capacità di risolvere problemi generali. È come imparare a guidare ... pratica spesso e per un tempo abbastanza lungo e diventerà una seconda natura. Buona fortuna!

    
risposta data 25.05.2012 - 12:54
fonte
2

A volte non si traducono affatto nel core business dell'azienda. Questo è un dato di fatto.

Tuttavia, almeno una volta, sono associati a un problema aziendale principale del team o dell'azienda con cui stai intervistando i volti.

In una società con cui ho intervistato, principalmente noto per aiutare gli utenti a trovare un volo economico, mi è stato chiesto un paio di problemi con le radici nella complessità combinatoria e nel routing. Uno di questi era un problema di tipo "n", che può certamente verificarsi quando si dispone di un numero elevato di insiemi ed è necessario enumerare tutti i sottogruppi di elementi, ad esempio 1, 2 o 3; c'è almeno un caso plausibile che la ricerca di tutti i voli non-stop, one-stop e 2-stop potrebbe trarre beneficio dal sapere come risolvere il problema astratto. Separatamente, mi è stato chiesto un problema con lo scafo convesso 2D, che è strettamente correlato a una serie di problemi usati per esempio, rilevamento di collisioni in computer grafica, alcune classi di riconoscimento dell'immagine e problemi di trasformazione da grafica a testo e, in effetti, alcuni classi di problemi di routing; avrebbero potuto anche chiedermi del problema dello spanning tree minimo, che è stato precedentemente utilizzato, ad esempio, dalle compagnie telefoniche per capire dove posizionare quasi in modo ottimale pali e interruttori telefonici e simili, e anche in problemi di trasporto .

In questa particolare squadra, non avrei avuto alcun coinvolgimento nella risoluzione dei problemi di routing; Sarei stato principalmente concentrato sul lavoro di internazionalizzazione. Ma forse a causa della cultura dell'organizzazione e dei loro problemi principali di business, questi tipi di problemi ora pervadono il loro processo di intervista agli sviluppatori di software, indipendentemente da ciò su cui si potrebbe effettivamente lavorare.

Anche se non ho risolto particolarmente bene questi problemi, dato il mio background non-algoritmico, non accademico nel software, in qualche modo mi è stato offerto un lavoro; Immagino che in alcune organizzazioni, vogliono solo vederti sudare e vedere come ti avvicini ai problemi fuori dalla tua zona di comfort sotto pressione. In alcuni team, potrebbe essere stato davvero importante risolvere il problema bene, piuttosto che solo dimostrare il tuo processo di pensiero.

Anche se non penso che questa sia la migliore strategia possibile per identificare i buoni sviluppatori, Google, Amazon, Microsoft e dozzine di altre ben note aziende hanno adottato il processo di intervista per il nocciolo ritualizzato pesantemente algoritmatico, quindi potrebbe essere inevitabile dipende da dove vuoi lavorare. Puoi prepararti leggendo il Algorithm Design Manual di Skiena, che ti aiuterà a modellare i problemi concreti con quelli astratti e ti indurrà a proporre soluzioni appropriate, anche se non puoi implementarle in un'ora lungo colloquio di programmazione.

Se intervistassi un candidato per un ruolo che implicava una profonda conoscenza algoritmica, sarei incline a sondare proponendo problemi che richiedono loro di estrarre dal proprio kit di strumenti algoritmici. Tuttavia, nella maggior parte del mio lavoro, mi concentro principalmente sulla ricerca di candidati che capiscono perché fare tre strati di cicli nidificati per emettere query separate su un'origine esterna un ID alla volta è una cattiva idea e provare a trovare la prova che sanno come fare meglio di così Mi concentro sulla ricerca di prove che abbiano escogitato alcune strategie sensate per scrivere codice mantenibile, che abbiano una curiosità intellettuale e che abbiano abilità sociali di base. Cerco di verificare che hanno lavorato a fondo abbastanza con alcuni problemi che hanno imparato abbastanza da essere l'esperto locale su di esso.

Se finisci per intervistare in una società la cui attività è basata sulla risoluzione di alcuni problemi difficili con l'aiuto di algoritmi intelligenti, ci sono buone probabilità che cercheranno di trovare prove che anche tu puoi risolvere i problemi con l'aiuto di algoritmi intelligenti. Penso anche che, anche se si finisce per scrivere software aziendale "noioso", è utile avere una solida conoscenza del panorama degli algoritmi, perché riconoscerai approcci follemente cattivi quando li vedi e farai un passo indietro e proverai a trovare soluzioni migliori Ora ho visto un sacco di codice di produzione scadente che le scienze informatiche di base applicate al problema avrebbero impedito.

Per questo motivo, anche se non trovo l'intervista pesante con l'algoritmo tanto utile quanto alcune aziende sembrano, sono convinto che, se non riesci a vedere la connessione tra algoritmi astratti e reali problemi di business, il problema è, almeno in parte, tu. Puoi fare pratica sull'abbinamento dei pattern con l'aiuto del libro di Skiena e pensando ai problemi del mondo reale che ti piacerebbe risolvere e implementare soluzioni difendibili, quindi fallo.

    
risposta data 26.05.2012 - 06:35
fonte
2

A volte è solo utile testare, come i dipendenti reagiranno a problemi insoliti. Sono certo che se stai candidando per una posizione di uno sviluppatore web, puoi creare un blog wordpress o scrivere il tuo. Ma non è possibile valutare appieno le abilità di qualcuno dando loro problemi di routine.

Per fare ciò, devi spingere un po 'oltre i confini e mettere il candidato fuori equilibrio. Dagli un problema difficile e vedi come reagisce. Riuscirà a risolverlo rapidamente da solo? O dirà semplicemente "Ehi, vorrei solo google, sono sicuro che c'è una soluzione pronta all'uso per questo". Entrambi gli approcci hanno alti e bassi, ed entrambe le risposte sono accettabili. La maggior parte delle volte non ha importanza, il candidato sarà in grado di risolvere il problema, ma è importante, come lo affronta.

    
risposta data 26.05.2012 - 10:00
fonte
1

Dipende dal tipo di lavori di programmazione per cui stai intervistando e da chi sta facendo l'intervista.

Se il potenziale datore di lavoro sta assumendo qualcuno che sta per lavorare su un sistema embedded in cui non ci sono framework o librerie esistenti, potrebbe aver bisogno di qualcuno che possa codificare algoritmi intelligenti. In questo caso, è una cosa valida da chiedere.

Tuttavia, se cercano qualcuno per mantenere e migliorare un CRUD aziendale di 5 anni o un'applicazione di reporting, è probabilmente uno spreco di tempo e dei tuoi per chiederti di codificare un algoritmo che è già nel framework che hanno " usando (ad esempio, chiedendo a qualcuno di codificare un elenco ordinato in C # da zero ). È molto più prezioso dare loro un esempio di qualcosa che deve essere corretto / migliorato e lasciare che spieghino in che modo si avvicinerebbero.

È mia opinione che molti intervistatori usino complessi puzzle di programmazione e altre cose simili non correlate al lavoro che stanno facendo per sentirsi superiori ai candidati piuttosto che valutare il livello di abilità dei candidati. Altri li usano perché Google / Facebook / Microsoft / etc. usali così che pensino che dovrebbero farlo anche per essere "cool".

Non sto dicendo che chiedere domande di risoluzione dei problemi dovrebbe essere off limits ma che quelle buone dovrebbero adattarsi al lavoro o essere ragionevolmente semplici e generiche senza trucchi o trucchi coinvolti. FizzBuzz anziché Kobayashi Maru

Quindi, nella mia esperienza, tali domande raramente hanno a che fare con il lavoro in corso e ad alcuni viene chiesto per i motivi sbagliati.

    
risposta data 25.05.2012 - 13:51
fonte
1

Dipende tutto dal software su cui stai lavorando. Le soluzioni CRUD in genere non sono molto intelligenti a meno che non si stia tentando di sostituire vari software analitici \ clericali con software. Se si accede al data mining con analisi statistiche, potrebbe essere utile conoscere vari modi per strutturare i dati. Avrai bisogno di conoscere le operazioni della tua geometria se vuoi lavorare con la grafica. Comprendere i vari algoritmi numerici è estremamente importante se si entra in aree tecniche o finanziarie in cui precisione e velocità sono cruciali. Gli algoritmi sono tra le competenze che ti permetteranno di esplorare e lavorare in un'area che spinge la busta in un dominio piuttosto che lavorare su un'altra soluzione di reporting.

    
risposta data 26.05.2012 - 05:29
fonte

Leggi altre domande sui tag