Abilità di programmazione, genio del problem solving o guru del linguaggio? [duplicare]

12

Nella mia breve esperienza qui su programmers.stachexchange, quando qualcuno ha bisogno di aiuto per iniziare a programmare un bel po 'di utenti suggeriscono di apprendere questo o quel linguaggio, ma pochi suggeriscono di imparare le basi della programmazione (strutture dati, strutture di flusso, algoritmi , paradigmi, ecc.) Quindi sto arrivando alla conclusione che la comunità di programmazione in generale attribuisce più valore al linguaggio che alle competenze di programmazione di base, ed ecco dove arriva la mia domanda:

La conoscenza di più linguaggi di programmazione e la comprensione di ogni singolo dettaglio dell'implementazione è più importante di sapere come astrarre, trasformare e creare codice che risolva un determinato problema?

    
posta guiman 18.01.2011 - 08:18
fonte

11 risposte

14

Vedete, le persone di solito provano sentimenti, ea volte queste sensazioni sono una barriera per fare la cosa più importante: il lavoro di squadra.

Ci sono quelli che hanno ottime capacità di problem solving, e quelli che riescono a ricordare tutti i piccoli deatails di ogni lingua. E nel corso degli anni ho incontrato persone che ne hanno una e mancano l'altra e viceversa.

Una volta ho lavorato con qualcuno con capacità di risoluzione dei problemi superiori. Partecipava ai concorsi di programmazione con risultati eccellenti. Era un programmatore di stelle.

Ma poi, lavorare con lui su una squadra come partner ogni giorno era più che complicato. Le sue abilità di "lavoro di squadra" erano qualcosa come "il resto della squadra che lo incoraggiava a fare tutto il lavoro".

Poi ho spostato i lavori e ho incontrato l'architetto. Conosceva tutti i Pattern di Desing per memoria, creando tonnellate di strati di astrazione solo perché "Ha senso tenere le cose separate", portando a una soluzione sovradimensionata due volte più piccola di una più semplice.

E ancora, invece di comunicare la sua "soluzione" al resto, apriva Eclipse e scriveva tutto il codice da solo, solo perché era "più semplice".

Finalmente ho incontrato Q. Non era intelligente come il primo, né conosceva tutti i modelli di progettazione come l'Architetto. Ma codifica come una macchina, creando soluzioni eleganti e semplici.

La sua abilità più notoria consisteva nello spiegare le cose, un'abilità che gli altri due mancavano completamente.

    
risposta data 18.01.2011 - 18:25
fonte
10

Ne hai bisogno.

Ma la programmazione non è un'attività individuale, ma richiede un team di sviluppatori. È sempre utile avere almeno un "avvocato linguistico" e un "Solving Genius" e un "architetto" (tenendo ben presente il quadro generale) sulla squadra. Ma in realtà hai bisogno di un minimo di tutte queste abilità per essere un buon programmatore.

    
risposta data 18.01.2011 - 08:36
fonte
7

Niente batte come ottenere risultati . Quindi voto anche per le capacità di problem solving. Conoscere ogni dettaglio di una lingua è meno importante, anche se non chiamerei qualcuno esperto che non sappia scrivere codice idiomatico nella lingua scelta.

    
risposta data 18.01.2011 - 09:04
fonte
4

Il genio del problem solving viene prima di tutto.

La sintassi della lingua può essere raccolta in seguito. Le abilità sviluppate in più lingue non possono essere utilizzate a meno che non siano guidate dalle potenti correnti sotterranee delle capacità di risoluzione dei problemi.

Ogni programmatore dovrebbe chiedersi: mi piacciono i rompicapi? Mi piace affrontare problemi scoraggianti con le idee più comuni?

    
risposta data 18.01.2011 - 08:46
fonte
2

Hai bisogno di entrambi.

Dì al posto di uno sviluppatore di software, sei una sorta di caporeparto della costruzione. Immagina di avere qualche problema da risolvere. Potresti essere un fantastico risolutore di problemi e vedere immediatamente la soluzione di fronte a te, tuttavia, se parli solo inglese e i tuoi lavoratori parlano solo Zulu, non sarai molto efficace. Al contrario, se parli correntemente inglese e zulu, ma non riesci a risolvere il problema che ti viene in mente di risolvere, non sarai più efficace.

Quindi, come sviluppatore di software, invece di organizzare una squadra di braccianti Zulu, stai organizzando computer. Hai bisogno di una strong padronanza di entrambe le abilità di problem solving, oltre a essere in grado di comunicare il problema, sia nella tua lingua parlata ai colleghi che nei tuoi linguaggi di programmazione per comunicare al computer.

    
risposta data 18.01.2011 - 16:18
fonte
2

L'unica caratteristica spesso sottovalutata ma importante secondo me è il buon senso. Ok, senso comune e auto-riflessione, sono due tratti importanti.

Il buon senso è decidere cosa vale e cosa non vale la pena fare. Più spesso che no, uno sviluppatore non sta cercando la verità ultima, la soluzione perfetta, spesso non c'è comunque una soluzione perfetta. Quindi facciamo dei trade-off ogni giorno. Ma i costi dei compromessi negativi possono essere enormi, quindi valuto chiunque possa fare in modo affidabile quelle deviazioni molto in alto.

L'autoriflessione fa parte dello stesso processo davvero, ogni volta che stai per iniziare a lavorare su qualcosa, chiedi "Perché lo sto facendo?" e procedi solo se hai una buona risposta. (Intendiamoci, anche "Perché il marketing lo ha detto." Può essere una buona risposta, almeno sai non mettere le tue aspettative in alto.) Un sacco di lavoro non necessario può essere evitato essendo costantemente consapevole dello scopo del pezzo che tu " sta lavorando su.

Certo, si tratta di meta-abilità un po 'vaghe rispetto al problem solving o alle abilità linguistiche, ma sono fondamentali per impedirti di essere trascinato via da loro.

Aggiornamento: ho appena pensato a una risposta un po 'meno soggettiva a questa domanda: possiamo dire le 100 risposte più popolari di StackOverflow e classificarle in uno dei tre tipi. Non è un metodo perfetto, ma probabilmente il più vicino è possibile ottenere una risposta definitiva.

    
risposta data 18.01.2011 - 16:46
fonte
1

Capacità di risoluzione dei problemi, pensiero analitico e paziente!

Ma, qui, in Sri Lanka, la maggior parte delle industrie del lavoro, alla ricerca di persone con conoscenza del linguaggio, strutture, ecc. Quindi, sto pensando, cosa vogliono? Davvero confuso.

    
risposta data 18.01.2011 - 09:45
fonte
1

Riguarda le competenze di programmazione e non si tratta di lingue, quindi è per questo che prendi una decisione consapevole prima di suggerire a qualcuno un linguaggio di programmazione, perché vuoi dare loro una buona combinazione di paradigmi in cui tutto i grandi concetti brillano nella loro vera forma.

Prendi Java per esempio. È un ottimo linguaggio Fa schifo come prima lingua. Manderai qualcuno in una impresa dove saranno colpiti con OOP, OOD, incapsulamento, atomicità, bla bla e tutto ad un tratto il turno si trasformerà in primitivi, smetteranno di parlare di oggetti e ora sono variabili, valori e tipi . Non sfidare o, almeno, rifuggire da tutto ciò che hai letto fino a quel punto?

Ecco perché suggerisco immediatamente che prendano due lingue dall'inizio. Passa attraverso il primo e, una volta arrivati lì, in tempo utile riprendi il secondo. Lo scontro di paradigma rivelerà quali bit erano concetti, che erano l'odore del linguaggio. È così che fai i programmatori e questo è esattamente il motivo per cui stiamo suggerendo le lingue.

    
risposta data 18.01.2011 - 19:42
fonte
0

Abilità analitica

Un po 'di tutto è importante, ma la più importante è l'abilità analitica per risolvere i problemi.

    
risposta data 18.01.2011 - 08:51
fonte
0

Direi questi due e altri come capire come progettare una libreria o come minimo una classe appropriata. Qualche conoscenza di base dell'algoritmo (conosci la differenza tra un array e un elenco? Utilizzeresti mai listVar.ElementAt (offset) quando listVar ha qualche centinaio di migliaia di elementi?).

Inoltre direi che un guru conoscerebbe una quantità diversa di tecnologie. Se qualcuno non ha mai usato IPC, o non sa come scrivere una classe e scaricare / caricare da e verso un file binario, non li chiamerei un guru. (possono imbrogliare e utilizzare serializzabili in .NET purché sappiano come implementarlo in una classe che hanno scritto).

Non chiamerei qualcuno un guru se sapessero come risolvere il problema della wazoo e conoscere tutta la sintassi del loro linguaggio di scelta se pensano che abbiano bisogno di una zip lib per decomprimere alcuni file. (suggerimento: popen o Process.Start)

    
risposta data 18.01.2011 - 10:59
fonte
-1

Dipende tutto dalla pratica, da ciò che vuoi essere. L'ambiente in cui hai iniziato la tua carriera di programmatore, il tipo di progetti su cui hai lavorato e quanto sei disposta a risolvere i problemi che sorgono ....

    
risposta data 21.06.2011 - 11:04
fonte

Leggi altre domande sui tag