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


14

Sono una laurea in informatica del primo anno. Sono andato a una fiera del lavoro, ho distribuito curriculum, con mia grande sorpresa ho ottenuto un colloquio e alla fine uno stage come sviluppatore.

Ho spiegato all'intervistatore (che sarà il mio capo) che sono solo un primo anno e non ho molta esperienza nella programmazione. Mi ha semplicemente detto che, dato che ho una solida preparazione in matematica (ho quasi finito la laurea in matematica, e ho anche alcuni corsi di laurea), è sicuro che farò bene.

Faccio bene in tutti i corsi di programmazione, ma mi sento ancora svantaggiato. In questo momento, voglio solo fare del bene in questo lavoro quando inizia. Il lavoro utilizzerà principalmente C #, ma a parte ovviamente imparare un po 'di C #, qual è l'unica abilità che vorresti aver imparato prima di diventare un vero programmatore?

Ogni consiglio è molto apprezzato, ma se hai in mente dei libri, ti preghiamo di dirlo. Grazie!


8
questa domanda è stata posta più volte su questo sito in diversi modi. per favore cerca prima e poi chiedi. dai un'occhiata alle FAQ; programmers.stackexchange.com/questions/149970/… ; programmers.stackexchange.com/questions/46716/…
tgkprog

3
Ho cercato e ho visto entrambe queste domande. Ma non mi preoccupo dell'apprendimento del design o dello sviluppo web. Mi preoccupo di imparare ciò che molti programmatori ritengono che avrebbero dovuto imparare a scuola. Queste domande hanno comunque degli ottimi consigli, ma non sono proprio quello che sto cercando. Grazie
Eric

+1 L'unica abilità che vorrei poter padroneggiare prima di diventare un programmatore a tempo pieno sono le abilità matematiche forti perché le abilità matematiche sono discutibili l'abilità più importante da avere perché allena la mente a risolvere problemi e ad apprendere nuovi concetti e come programmatore, che è soprattutto quello che farò ogni giorno.
Anthony,

3
Flusso di lavoro. E rendersi conto che il codice non è un fiocco di neve unico unicorno. Applicare il principio del minimo stupore durante la progettazione. Pensa prima di te. La gestione della complessità diventa un aspetto molto importante.
sleeplessnerd,

1
In realtà non mi piace molto lavorare con persone con forti abilità matematiche. Trasformano tutto in una formula matematica invece di applicare i principi dell'ingegneria del software. Il software NON è matematico. È essenziale scrivere il codice in modo che sia facile da capire.
Rob K

Risposte:


21

A scuola, impari a scrivere il codice. Quello che non impari è il resto dello sviluppo di software. Le cose principali di cui non ho mai imparato nulla a scuola sono:

  • lavorando come parte di un team di sviluppo
  • utilizzando il controllo versione
  • utilizzando un localizzatore di bug

Queste sono abilità molto importanti per qualsiasi sviluppatore, e sfortunatamente non le avrai probabilmente in classe.


4
Lavorare come parte di un team di sviluppo è sicuramente un'arte sottile e complessa. Non capisco però perché il controllo della versione e il tracciamento dei bug siano sempre inquadrati come un grosso ostacolo per i nuovi sviluppatori. Sono sicuramente strumenti importanti, ma indichi la persona nuova alle pagine man, a un libro O'Reilly o a un tutorial online e possono raccogliere l'utilizzo di pane e burro nel giro di poche ore. Perché perdere tempo in classe con qualcosa del genere?
Charles E. Grant,

1
@ CharlesE.Grant Il controllo della versione è simile alla programmazione in quanto è possibile abbattere le basi in un tempo relativamente breve, ma ci vuole esperienza per usarlo in modo efficace. E DVCS come Git e Mercurial richiedono più di quanto comprendere CVCS come svn.
Izkata,

8
Non ho mai avuto lezioni sul mantenimento del codice stabilito (che è una parte importante del lavoro come parte di un team di sviluppo) e la mia esperienza in classe su come testare il codice era minima.
Velociraptors

1
@ CharlesE.Grant: ho insegnato corsi di laurea in programmazione e argomenti correlati per diversi anni. Anche i dottorandi hanno difficoltà a capire perché dovrebbero usare un sistema di controllo di revisione di qualsiasi tipo. E quando iniziano a malincuore a usarlo, sembrano esserne molto confusi molto rapidamente. +1 a Mason per averlo sollevato come importante argomento non appreso.
Peter K.

1
+1 +1 +1, uno per ogni punto. È così stupido che non ti insegnano queste cose ... o almeno PROVA a insegnarti.
Radu Murzea,

20

Vorrei sapere prima nella mia carriera che come sviluppatore, ho un ruolo molto importante nel settore . Non sono solo una scimmia codice.

Come sviluppatore hai una mano importante nelle parti dell'azienda legate al software a 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 localizzatore di bug appropriato.

Se il tuo capo vuole che inizi immediatamente a lavorare su un'animazione elaborata per la schermata iniziale della tua app di foglio di calcolo - ma hai ancora dozzine di bug da correggere e diverse funzionalità critiche non finite prima della prossima scadenza di rilascio del cliente - parla della priorità corretta del lavoro .

Anche se sei solo "un normale dipendente", 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.


9

La mia scuola non mi ha mai insegnato a risolvere i problemi. Mi hanno insegnato la meccanica del codice, 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 insegnavano il lavoro di squadra, il controllo delle versioni e l'importanza di scrivere codice facile da mantenere. Inoltre, non hanno insegnato molto su come testare il software. Potrebbero aver toccato i test unitari, ma non hanno approfondito troppo 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, test, programmazione pulita, capacità di debug, ecc.


+1 per la parte di prova. Alla mia università, non lo insegnano neanche. Ho avuto 1 lezione (sì: una) in cui l'insegnante ha menzionato i test unitari ... per circa 3 minuti. Questo è tutto.
Radu Murzea,

So che questa è una risposta tardiva, ma è stata una delle cose che ha reso la mia laurea in matematica attraente per i miei datori di lavoro. Questa opinione è sicuramente condivisa anche tra i datori di lavoro.
Eric,

D'accordo, in molte scuole, gli algoritmi (noti anche come "problem solving") non vengono insegnati correttamente, o non insegnati affatto, o non insegnano come applicarlo con un linguaggio di programmazione, anche se devo essere "agnostico".
Umlcat,

Hmmmm .... la tua risposta non potrebbe essere più opposta a quella che ho vissuto. Il punto centrale della scuola è fornire uno sfondo in modo da poter studiare efficacemente un problema, capirlo e trovare soluzioni. Un nuovo laureato potrebbe non essere "bravo" appena uscito dalla scuola, ma sicuramente dovrebbero essere addestrati e capaci di farlo. Nella mia scuola non insegnavano affatto programmazione. Ci si aspettava che imparassi a programmare (da solo) mentre imparavi le informazioni che il corso stava cercando di insegnarti. Quindi, dove arrivi, insegnano solo la "meccanica del codice" da oltre me ...
Dunk,

... In scuole decenti, non si ottiene credito semplicemente per imparare a programmare. Se trovi difficile usare il controllo delle versioni, allora hai problemi molto più seri che nessuna quantità di istruzione sarà in grado di aiutare. Quando ti viene in mente il modo definitivo di scrivere codice facile da mantenere, allora scrivi un libro e diventa ricco. Nessuno ha ancora risolto questo problema. Devi aver perso le parti a scuola in cui hai dovuto consegnare i tuoi programmi per essere testato. I test di accettazione / regressione sono specifici del settore e vengono insegnati meglio sul lavoro facendolo in modo aziendale piuttosto che a scuola.
Dunk il

7

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

  • Come utilizzare correttamente e IDE; l'utilizzo della piena potenza di un moderno IDE fornisce 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, debug di applicazioni multi-thread, valutazione espressa ecc.
  • Correzione e manutenzione dei bug; all'università non ti insegnano quasi nulla al riguardo, ma nell'industria è abbastanza comune riparare i bug.
  • Come lavorare in una grande squadra e su un grande progetto; fondamentalmente all'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 fornito con esperienza, ma ci sono alcuni libri che ti insegnano le basi (Codice completo, Codice pulito ecc.).
  • Come usare un framework al massimo della sua potenza, usando la sua personalizzazione; all'università forse hai imparato come usare alcuni framework su alcuni scenari di base; nell'industria raggiungerai i casi angolari.
  • 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 costruzione, ecc. Sono strumenti che sei obbligato a imparare per poter lavorare con un team; non richiedono molto tempo per essere appresi a livello base, e sono piuttosto semplici dopo ciò (almeno all'inizio); l'elenco sopra contiene sottigliezze che, se note, aumentano la produttività.


aka "Programmazione" non è solo conoscere un linguaggio di programmazione, esiste un "ambiente", un "ecosistema", un "framework" ...
umlcat

4

La cosa più grande che vedo mancare ai neolaureati è una buona comprensione del controllo delle versioni.

Se hai esperienza nello sviluppo di software open source usando repository di codice sorgente (come GitHub ) sei un passo avanti rispetto mostai tuoi compagni di classe.

La seconda cosa è una comprensione della complessità ( big O). La maggior parte delle persone al di fuori del college ne hanno sentito parlare, ma devono ancora sviluppare software reale 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 potrà mai tagliarla 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 commetti errori.


1
Penso che la mancanza di educazione al controllo delle versioni stia iniziando a cambiare. Il controllo della versione è stato fortemente sottolineato nella mia scuola.
Lepre

@SouthpawHare: non sto dicendo che non esiste, l'hanno persino insegnato ai miei tempi. Solo che le persone che escono dall'università con questa esperienza sono ancora in minoranza. E come tali le persone che lo hanno sono più preziose. Non sono d'accordo sul fatto che sia cambiato molto negli ultimi 20 anni.
Martin York,

3

Come eseguire correttamente il debug, in particolare utilizzando un debugger e adottando un approccio adeguato per affrontare un bug, ovvero 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 è sorprendentemente povera nel debug e, di conseguenza, impiega molto più tempo a correggere le cose di quanto sia necessario e creare più bug nel farlo.

Altre cose come il controllo della versione, il tracciamento dei bug e così via meritano di essere menzionate, ma a mio avviso la mancanza di approcci sensati al debug è un problema molto più grande e che richiede più apprendimento.


2

qual è l'unica abilità che vorresti aver imparato prima di diventare un vero programmatore?

Nella mia esperienza, la mia scuola non mi ha mai insegnato a risolvere i problemi.

In base alla mia esperienza, la programmazione riguarda la risoluzione dei problemi. Nella mia scuola stavano solo verificando se si può scrivere un programma senza errori di sintassi. Ciò che è effettivamente richiesto non viene fornito 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 nessuna parte se non che ti alleni bene e ti alleni per questo.

Lascia che sia di qualsiasi tipo, prova a completare quante più domande possibili in modo da creare un po 'di fiducia in te stesso. Prova a farlo con un po 'di passione nella tua mente e sicuramente ce la farai.


2

Prenditi del tempo per imparare alcuni schemi di progettazione comuni: fabbrica, singleton, adattatore, comando e osservatore (il mio college non ha insegnato loro).

Se la società utilizza la metodologia Agile per lo sviluppo del software, sarebbe utile conoscerla.


2

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

Possono venire solo dall'esperienza di lavoro direttamente sul campo.

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

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

  • Saper bilanciare le buone pratiche di codifica con considerazioni pratiche. Acquisire la capacità di giudicare quando il codice è "abbastanza buono", "troppo ingegnerizzato" o "necessita di refactoring".

  • Imparare a superare le proprie debolezze e insicurezze. Acquisire la capacità di resistere alle critiche. Lasciar andare il tuo ego. Imparare cosa significa assumersi la responsabilità personale e quindi assumerlo.

È facile da leggere su tutto questo. È una cosa completamente diversa metterlo in pratica. L'unico modo è farlo. Sarai morso molte volte e probabilmente ti farà male, ma ne uscirai più forte e migliore.

Lettura pertinente: modelli di apprendistato


1

Tutto dipende dalla scuola. Nel mio college, abbiamo molti progetti pratici. Abbastanza spesso in squadre e usando vari controlli di fonte. Quindi penso che alcune scuole si concentrino su quelle.

Ma una cosa che la scuola non insegna: i dettagli. Molto spesso quando la scuola insegna alcune tecnologie o pratiche (come lo sviluppo web, lo sviluppo dell'interfaccia utente JAVA, i database avanzati), graffieranno solo la superficie e non entreranno mai nei dettagli, che sarebbero necessari per utilizzare questa tecnologia o pratica negli affari del mondo reale. Avrai una panoramica generale dei possibili modi per risolvere i tuoi problemi, ma dovrai imparare da te i dettagli necessari.

L'unica volta in cui la scuola insegna qualcosa nei dettagli è quando c'è un forte background matematico o teorico dietro qualcosa. Cose come i linguaggi formali o i database SQL sono abbastanza spesso parte integrante del curriculum scolastico, perché sono basati su basi matematiche e sono usati molto nell'informatica o nell'ingegneria.


1
  • requisiti: sbagliarli e riposare è principalmente uno spreco
  • priorità (quale caratteristica in quale versione)
  • fare o usare fuori dalla scatola (acquista / freeware)
  • lavoro di squadra
  • gestione del progetto - requisiti, qualità (campioni di dati in prod, casi di test, come testare, copertura prima della codifica, ci sono più costi simili ma non rilevanti. leggi un libro PMI
  • strumenti di comunicazione (posta, riunioni: agenda planner)
  • gestione del codice sorgente

0

Vorrei aver deciso molto prima nel gioco se volevo o meno essere un programmatore generale, imparare molte cose, lingue, database e piattaforme diverse e infine diventare uno sviluppatore web, o dovrei specializzarmi in un solo CMS, o anche solo specializzarti in Photoshop, essendo uno specialista, le tue abilità sarebbero altrettanto preziose e redditizie quindi sapendo davvero cosa dovrebbe sapere un vero programmatore. In altre parole, se hai solo bisogno di fare soldi, specializzati in UNA COSA. Se ami il computer e ami risolvere i problemi, allora sii programmatore.

[riflettendo su e dopo aver appreso come 4 o 5 "framework" javascript diversi prima che JQuery diventasse davvero forte, ottenere la certificazione in JAVA e non ottenere mai una posizione java e dopo aver lavorato su più piattaforme; AS400- rpg,> .NET - c #, e PHP, prima di desiderare di avere appena imparato a fare Photoshop e fare soldi uguali senza dover correggere bug o scrivere software. ]

Voglio dire, c'è una certa soddisfazione nel conoscere una vasta gamma di argomenti, ma la soddisfazione è ostacolata quando vedi qualcuno che conosce semplicemente Photoshop con lo stesso stipendio.


2
Sì, ma quel tipo di specialista non aprirà mai il proprio negozio. Se in futuro il tuo sogno è diventare CEO della tua startup, avrai bisogno di una vasta gamma di competenze.
Davor Ždralo,
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.