Quali competenze sono essenziali per la programmazione professionale che non vengono comunemente insegnate nelle scuole? [chiuso]

14

Sono un importante del primo anno in informatica. Sono andato a una fiera di lavoro, ho distribuito curriculum, con mia grande sorpresa ho ottenuto un'intervista e infine uno stage come sviluppatore.

Ho spiegato all'intervistatore (che sarà il mio capo) che sono solo un primo anno e non ho una grande esperienza nella programmazione. Mi ha semplicemente detto che, dato che ho un strong background in matematica (ho quasi finito il mio BA in matematica, e ho alcuni corsi di perfezionamento sotto la cintura), è sicuro che andrò bene.

Faccio bene in tutti i corsi di programmazione, ma sento ancora di essere in svantaggio. In questo momento, voglio davvero fare del bene in questo lavoro quando inizia. Il lavoro userà principalmente C #, ma oltre a imparare ovviamente un C #, qual è l'abilità che vorresti aver imparato prima di diventare un vero programmatore?

Qualunque consiglio è molto apprezzato, ma se hai in mente qualche libro, per favore dillo. Grazie!

    
posta Eric 20.04.2013 - 19:17
fonte

12 risposte

21

A scuola, impari a scrivere il codice. Ciò che non apprendi è il resto del software in sviluppo. Le cose principali che non ho mai imparato a scuola sono:

  • lavorare come parte di un team di sviluppo
  • utilizzando il controllo della versione
  • utilizzando un bug tracker

Queste sono abilità molto importanti per qualsiasi sviluppatore e sfortunatamente non le troverai in una classe.

    
risposta data 20.04.2013 - 19:37
fonte
20

Mi piacerebbe sapere in precedenza nella mia carriera che, in qualità di sviluppatore, ho un ruolo molto importante nel business . Non sono solo una scimmia del codice.

Come sviluppatore hai una mano importante nelle parti del business relative al software su cui stai lavorando.

Se la tua azienda non scrive test per il loro codice, inizia a scrivere test ora.

Se non tengono traccia dei bug, trova subito un bug tracker appropriato.

Se il tuo capo desidera che tu inizi immediatamente a lavorare su un'animazione di fantasia per la schermata iniziale dell'app del foglio di calcolo, ma hai ancora dozzine di bug da correggere e diverse funzionalità critiche non completate prima della prossima scadenza di rilascio del cliente - parla di prioritizzazione del lavoro correttamente.

Anche se sei solo "un impiegato normale", agire come un consulente è un ottimo modo per distinguerti dagli altri sviluppatori che scrivono semplicemente codice e non si comportano come se avessero un interesse acquisito nel business.

    
risposta data 20.04.2013 - 19:31
fonte
9

La mia scuola non mi ha mai insegnato come risolvere i problemi. Mi hanno insegnato i meccanismi della codifica, ma essere in grado di studiare un problema, capirlo e trovare una soluzione è qualcosa che non hanno insegnato. Richiede pazienza, rigore e intuizione oltre alla comprensione di un linguaggio di programmazione.

Inoltre non hanno insegnato sul lavoro di squadra, sul controllo della versione e sull'importanza di scrivere codice che sia facile da mantenere. Inoltre non hanno insegnato molto su come testare il software. Potrebbero aver toccato i test unitari, ma non hanno approfondito i concetti di test di accettazione, test di regressione, ecc.

Disclaimer: sono andato al college negli anni '80. Tuttavia, ne vedo le prove con le persone che assumo oggi: neolaureati che hanno pochissime conoscenze sul mondo reale della programmazione: controllo delle versioni, testing, codifica pulita, capacità di debug, ecc.

    
risposta data 20.04.2013 - 21:51
fonte
7

Secondo me alcune delle cose più importanti non apprese (o apprese correttamente) a scuola sono:

  • Come utilizzare correttamente e IDE; sfruttando tutta la potenza di un IDE moderno si ottiene un enorme aumento della produttività: refactoring automatico, navigazione del codice, integrazione VCS, analisi del codice, completamento del codice ecc.
  • Come utilizzare correttamente un debugger: debug remoto, debugging multithreading dell'applicazione, valutazione espressa ecc.
  • Risoluzione e manutenzione dei bug; nell'università non ti insegnano quasi nulla su questo, ma nell'industria è abbastanza comune correggere i bug.
  • Come lavorare in una grande squadra e su un grande progetto; fondamentalmente nell'università, i progetti sono piuttosto piccoli, rispetto ai grandi progetti industriali.
  • Come scrivere un buon codice e come mettere l'accento sulla leggibilità; questo viene con l'esperienza, ma ci sono alcuni libri che ti insegnano le basi (codice completo, codice pulito ecc.).
  • Come utilizzare un framework a piena potenza, usando la sua personalizzazione; nell'università forse hai imparato come utilizzare alcuni framework su alcuni scenari molto basilari; nell'industria raggiungerai le casse d'angolo.
  • Come capire e scrivere il codice dopo le specifiche; probabilmente imparerai come scrivere le specifiche ma ora come leggerle e come interpretarle

VCS, sistemi di tracciamento dei bug, strumenti di compilazione, ecc. sono strumenti che devi imparare per poter lavorare con una squadra; non richiedono molto tempo per essere appresi a un livello base e sono piuttosto semplici (almeno all'inizio); l'elenco precedente contiene sottigliezze che, se conosciute, aumentano la tua produttività.

    
risposta data 11.05.2013 - 14:12
fonte
4

La cosa più importante che mi manca nei neolaureati è una buona comprensione del controllo della versione.

Se hai esperienza nello sviluppo di software open source utilizzando repository di codice sorgente (come GitHub ) sei un passo avanti a most dei tuoi compagni di classe.

La seconda cosa è la comprensione della complessità ( big O ). La maggior parte delle persone fuori dal college ne ha sentito parlare, ma non hanno ancora sviluppato un vero software dove entra in gioco e quindi non capiscono la sua reale importanza.

Quando i tuoi set di dati sono così grandi che la forza bruta non lo taglierà mai e la comprensione di altre tecniche è utile ed essere in grado di indovinare quando la forza bruta andrà bene per la situazione, è qualcosa che sviluppi con esperienza e rendendo gli errori.

    
risposta data 20.04.2013 - 19:53
fonte
3

Come eseguire il debug in modo corretto, specialmente usando un debugger e adottando un approccio corretto per affrontare un bug, cioè scoprire cosa sta causando, scoprire perché lo sta causando e capire perché la soluzione lo risolve piuttosto che semplicemente provare cose e sperare .

La maggior parte dei laureati in informatica sono sorprendentemente poveri nel debugging e - di conseguenza - impiegano molto più tempo a sistemare le cose di quanto sia necessario e creano più bug quando lo fanno.

Altre cose come il controllo della versione, il bug tracking e così via sono degni di nota, ma a mio avviso la mancanza di approcci sensibili al debug è un problema molto più grande e richiede più apprendimento.

    
risposta data 10.03.2015 - 00:09
fonte
2

what is the one skill that you wish you could have learned before you became a real programmer?

In my experience, my school never taught me how to solve problems.

Nella mia esperienza di programmazione si tratta di risolvere i problemi. Nella mia scuola stavano solo controllando se è possibile scrivere programmi senza errori di sintassi. Ciò che è effettivamente richiesto non è dato come input. La sintassi è solo qualcosa che puoi cercare da qualsiasi libro, se necessario. Ma la capacità di risolvere un problema non può essere raggiunta da nessun'altra parte tranne che ti eserciti bene e ti alleni per questo.

Lascia che sia di qualsiasi tipo, prova a completare il maggior numero possibile di domande in modo da creare una certa sicurezza in te stesso. Prova a farlo con una certa passione nella tua mente e sicuramente riuscirai a farlo.

    
risposta data 21.04.2013 - 14:07
fonte
2

Prenditi del tempo per imparare alcuni schemi di progettazione comuni: factory, singleton, adapter, command e observer (il mio college non li ha insegnati).

Se la società utilizza la metodologia Agile per lo sviluppo di software, sarebbe utile avere una certa comprensione di ciò.

    
risposta data 21.04.2013 - 14:26
fonte
2

Molte delle competenze di cui avrai bisogno come programmatore professionista sono quasi impossibili per tutti in un ambiente universitario / accademico.

Possono venire solo dall'esperienza lavorando direttamente sul campo.

  • Imparare come collaborare e comunicare con persone al di fuori della "professione", come grafici, progettisti di prodotti, manager, ecc.

  • Capire che il tuo compito non è scrivere codice, ma dare vita a un prodotto. Più facile a dirsi che a farsi.

  • Sapere come bilanciare le buone pratiche di codifica con considerazioni pratiche. Acquisire la capacità di giudicare quando il codice è "abbastanza buono", "sovradimensionato" o "necessario refactoring".

  • Imparare a superare le proprie debolezze e insicurezze. Acquisire la capacità di resistere alle critiche. Lascia andare il tuo ego. Imparare cosa significa assumersi la responsabilità personale, e poi prenderlo.

È facile leggere tutto ciò. È una cosa completamente diversa metterla in pratica. L'unico modo è farlo. Verrai morso molte volte e probabilmente ti farà male, ma ne uscirai più strong e migliore.

Lettura pertinente: Modelli di apprendistato

    
risposta data 10.03.2015 - 12:14
fonte
1

Tutto dipende da scuola. Nel mio college, abbiamo molti progetti pratici. Abbastanza spesso in team e utilizzando vari controlli di origine. Quindi penso che alcune scuole si concentrino su quelle.

Ma una cosa che la scuola non insegna: i dettagli. Abbastanza spesso quando la scuola insegna qualche tecnologia o pratica (come lo sviluppo web, lo sviluppo dell'interfaccia utente di JAVA, i database avanzati), essi scalfiscono solo la superficie e non entrano mai nei dettagli, che sarebbero necessari per utilizzare questa tecnologia o pratica nel mondo reale. Avrai una visione generale dei possibili modi per risolvere i tuoi problemi, ma dovrai imparare da te i dettagli necessari.

Solo il tempo in cui la scuola insegna qualcosa nei dettagli è quando c'è un strong background matematico o teorico dietro qualcosa. Cose come i linguaggi formali o i database SQL sono spesso parte fondamentale del curriculum scolastico, perché sono basati su basi matematiche e sono utilizzati molto sia in informatica che in ingegneria.

    
risposta data 20.04.2013 - 22:35
fonte
1
  • requisiti: sbagliare e riposare è uno spreco per lo più
  • priorità (che funzione in quale versione)
  • creare o usare fuori dalla scatola (compra / freeware)
  • lavoro di gruppo
  • gestione del progetto - requisiti, qualità (campioni di dati in prod, test case, test, copertura prima del codice, c'è più come un costo ma non è rilevante. leggi un libro di PMI
  • strumenti di comunicazione (posta, riunioni: agenda)
  • gestione del codice sorgente
risposta data 21.04.2013 - 15:57
fonte
0

Spero di aver deciso in anticipo nel gioco se volessi o meno essere un programmatore generale, imparando molte cose diverse, lingue, database e piattaforme, e alla fine diventassi uno sviluppatore web, o dovrei semplicemente specializzarmi un CMS, o anche solo specializzarsi in Photoshop, essendo uno specialista, le tue abilità sarebbero altrettanto preziose e redditizie, quindi saprai che cosa dovrebbe sapere un vero programmatore. In altre parole, se hai solo bisogno di fare soldi, sii specializzato in UNA COSA. Se ami il computer e ami risolvere i problemi, allora sii un programmatore.

[riflettendo su e dopo aver imparato come 4 o 5 differenti "framework" javascript prima che JQuery si rivelasse davvero efficace, ottenendo la certificazione in JAVA e non ottenendo mai una posizione java e dopo aver lavorato su più piattaforme; AS400- rpg, > .NET - c #, e PHP, prima di desiderare ho appena acquisito padronanza di Photoshop e guadagnare soldi uguali senza dover correggere bug o scrivere software. ]

Voglio dire che c'è una certa soddisfazione nel conoscere una vasta gamma di argomenti, ma la soddisfazione è zoppicante quando vedi qualcuno che sa solo che Photoshop incassa lo stesso stipendio.

    
risposta data 11.05.2013 - 13:50
fonte

Leggi altre domande sui tag