Differenze tra la programmazione a scuola e la programmazione nell'industria? [chiuso]

49

Molti studenti quando si diplomano e iniziano il loro primo lavoro, si sentono come se non sapessero davvero come programmare, anche se potrebbero essere stati dei buoni programmatori al college.

Quali sono alcune delle differenze tra la programmazione in un ambiente accademico e la programmazione nel "mondo reale"?

    
posta rdasxy 14.11.2011 - 09:34
fonte

14 risposte

70

In un tradizionale programma di informatica per studenti universitari impari la programmazione solo . Ma il mondo reale non vuole le persone che sono solo programmatori. Il mondo reale vuole veri ingegneri del software. So che molte descrizioni di lavoro non sembrano esprimere questa distinzione, che confonde solo la questione. Nel mondo reale devi essere in grado di:

  • Raccogli e analizza i requisiti quando non ti vengono dati direttamente
  • Progetta e analizza l'architettura con possibilità quasi infinite
  • Crea piani di test e agisci su di essi per valutare e migliorare la qualità di un sistema
  • Lavora in modo collaborativo su un gruppo di persone con background e livelli di esperienza diversi
  • Stimare e pianificare il lavoro anche se non sai esattamente cosa costruire
  • Comunicare efficacemente con gli stakeholder che hanno esigenze diverse che non necessariamente si allineano
  • Negozia pianificazione, budget, qualità e funzionalità senza stakeholder deludenti

Oh sì, e devi anche essere in grado di scrivere il codice, anche se ciò richiede, in media, solo il 40-60% del tempo di un ingegnere del software.

Quindi, non è che gli studenti di informatica appena coniati non sanno come programmare (molti sono in realtà, ottimi programmatori). È che molti di loro non sanno come fare altro.

    
risposta data 29.11.2013 - 17:59
fonte
36

All'università ...

Il tuo insegnante ti dà:

  • Un problema ben definito, isolato, la cui soluzione può essere fornita entro un intervallo di tempo breve e ben definito (e verrà scartata in seguito)
  • Un set ben definito di strumenti a cui sei stato presentato prima dell'assegnazione
  • Una misura ben definita per la qualità della soluzione, con la quale puoi facilmente determinare se la tua soluzione è sufficientemente buona o meno

Nel "Mondo reale" ...

  • Il problema è sfocato, complesso e inserito nel contesto. È un insieme di requisiti contraddittori che cambiano nel tempo e la soluzione deve essere abbastanza flessibile e robusta per poter reagire a tali cambiamenti in un tempo accettabile.
  • Gli strumenti devono essere scelti da te. Forse c'è già qualcosa di utile nella base di 10 anni del tuo team, forse c'è qualche progetto open source, o forse una libreria commerciale o forse dovrai scriverlo da solo.
  • Per determinare se l'iterazione corrente del tuo software è un miglioramento (perché non sei quasi mai fatto con un progetto software), devi fare test di regressione e test di usabilità, il secondo di che di solito significa che i requisiti sfocati, complessi, contraddittori e contestuali si spostano di nuovo.

Conclusione

La programmazione a scuola e la programmazione nel mondo reale sono così intrinsecamente diverse dal punto in cui in realtà si sovrappongono molto poco. CS ti preparerà per lo sviluppo di software "nel mondo reale" come l'allenamento atletico preparerebbe un esercito per la battaglia.

    
risposta data 29.11.2013 - 18:09
fonte
20

Affrontano un aspetto diverso del problema:

L'Academia si concentra principalmente sulla "scienza della programmazione", studiando in questo modo il modo di rendere efficiente un particolare algoritmo o di sviluppare linguaggi su misura per rendere certi paradigmi più espressivi. L'industria è principalmente focalizzata nella produzione di cose che devono essere vendute. Deve fare affidamento su "strumenti" che non sono solo le lingue e gli algoritmi, ma anche le librerie, i framework ecc.

Questa differenza in "focus" è ciò che rende praticamente impossibile per un master universitario in C scrivere su un'applicazione Windows (poiché Windows API non è nello standard C99!), sentendosi così come "non in grado di programmare". Ma, in effetti, ha tutte le capacità per imparare da solo quello che manca. Qualcosa che - senza studi accademici appropriati (non necessariamente fatti in Academia) - è piuttosto difficile da trovare.

    
risposta data 13.11.2011 - 18:08
fonte
10

Buone risposte. Lasciatemi aggiungere, la programmazione accademica tende ad essere quasi un giocattolo in scala. Questo è un bene per l'insegnamento. Come insegnante, stai cercando di trasmettere idee in modo più efficiente. Lo svantaggio è che la programmazione realistica è così qualitativamente diversa, è difficile colmare il divario.

Un'area di differenza è nell'analisi delle prestazioni. Ho scritto molti post cercando di farlo notare. L'analisi delle prestazioni riguarda solo superficialmente algoritmi e misurazioni. Per farlo in modo efficace, devi affrontarlo come un processo di debug.

Un'altra area di differenza è la manutenibilità. Questo comprende tutto, dallo stile alla progettazione del linguaggio specifico del dominio. Non puoi farlo in modo efficace a meno che tu non sappia effettivamente cosa stai cercando di minimizzare.

Queste cose non vengono insegnate e fanno un'enorme differenza di produttività.

    
risposta data 13.11.2011 - 18:40
fonte
7

Nel mondo accademico, la maggior parte delle persone studia informatica o corsi correlati. Dijkstra una volta osservò che "l'informatica non riguarda più i computer che l'astronomia riguarda i telescopi". Una persona che studia informatica è prima di tutto imparare a diventare uno scienziato e non un programmatore. Come programmatore, resterà un dilettante, e il passaggio a un programmatore professionista è di conseguenza difficile.

    
risposta data 13.11.2011 - 13:49
fonte
7

Aggiornamento: come se qualcuno leggesse la mia mente: aspettative per laureati rispetto alla realtà . ..

La mia opinione, altri due fattori:

Dimensione del problema : in ambito universitario, ho dovuto principalmente sviluppare software "da zero", il che significava che la maggior parte delle volte il più grande programma che avevo incontrato era il più grande che ho scritto. Questo de-enfatizza la capacità necessaria per gestire e affrontare la complessità che emerge da diversi software che interagiscono tra loro. Se fossi consapevole dello sforzo necessario per comprendere con la complessità, avrei potuto scegliere di non essere affatto nel settore.

Lettura VS Scrittura : un altro effetto collaterale della dimensione del problema è che spesso, nel "mondo reale", siamo esposti al lavoro che è stato scritto da altri, sia per scopi di manutenzione (non ho fatto manutenzione nelle università ovunque), l'estensione o semplicemente la divisione del lavoro. Pertanto leggere il codice diventa molte volte più importante della scrittura.

Una proposta per migliorare l'educazione alla programmazione : l'Academia dovrebbe esporci di più alle situazioni del mondo reale senza regredire alla formazione professionale. A un certo punto i medici devono affrontare un cadavere per vedere se sono "fatti apposta per questo" (ho sentito storie di persone che abbandonano il corso dopo questa esperienza). Se avessi visto nei miei primi vent'anni un progetto 20K LOC comprendente diversi stili di programmazione, che dovevo capire in un giorno e modificare un bug su tre, avrei potuto prendere in considerazione altre opzioni di carriera, anche se probabilmente no.

    
risposta data 12.04.2017 - 09:31
fonte
4

La più grande differenza che ho riscontrato tra la programmazione accademica e quella industriale riguarda la robustezza. Molti hanno sperimentato il paradosso "funziona per me" nella loro carriera, e questa è un'estensione di questa condizione. In ambito accademico, l'attenzione si concentra sugli algoritmi e le funzioni e si tiene poco conto dell'usabilità e della stabilità del software in condizioni quotidiane.

Ad esempio, nel mio ufficio abbiamo un ingegnere che prenderà il software ed è un maestro nel causare incidenti da condizioni d'angolo. Farà clic su un pulsante il più velocemente possibile finché qualcosa non va in crash ... se un'operazione richiede troppo tempo, inizierà semplicemente a fare clic in modo casuale sullo schermo (per la frustrazione? IDK ....)

Cambiare le nostre filosofie di programmazione in modo da rendere le cose che "Steve proof" ha in generale migliorato la stabilità della nostra applicazione.

    
risposta data 13.11.2011 - 15:38
fonte
3

Non ho nessuna esperienza personale con la formazione di programmazione a scuola - ero un maggiore inglese. Chiedimi di Keats e Byron! - ma ho ricevuto diversi nuovi laureati, li ho cresciuti e li ho guidati nel mondo dello sviluppo di software professionale. Quindi posso parlare da quella prospettiva.

La mia esperienza è che TUTTAVIA hanno ottenuto dalla loro scolarizzazione era un interesse per la programmazione. Le loro abilità variavano da zero a trascurabili. La loro capacità di auto-indirizzarsi era inesistente anche nei più esperti. Il loro modo di pensare non era solo su piccola scala; in realtà pensavano in miniatura. Un sistema composto da più di una dozzina di linee di codice le ha fatte cadere completamente in pezzi.

Ma sai una cosa? Hanno acquisito un interesse e questo è un grosso problema. Un interesse è abbondante . Posso lavorare con qualcuno che è interessato. Posso trasformarli in uno sviluppatore, a condizione che vengano da me con un interesse a esserlo. Diavolo, è iniziato con I . Questo e un apprezzamento per i romanzieri americani postmoderni.

    
risposta data 14.11.2011 - 15:10
fonte
2

In ambito accademico,

DRAWBACKS

  • Abbiamo scadenze che servono principalmente a segnare punti.
  • Gli errori non creano problemi, poiché la maggior parte dei progetti non viene mai utilizzata in applicazioni del mondo reale.

vantaggi

  • Abbiamo ampio tempo per la ricerca.
  • L'ondeggiamento dagli obiettivi iniziali non causa molti problemi.

Nel settore,

  • Lavoriamo su progetti che saranno effettivamente utilizzati dalle aziende.
  • Lavoriamo sotto stress per i sempre mutevoli requisiti del cliente.
  • Le scadenze sono raramente flessibili, in quanto ciò potrebbe portare a enormi perdite finanziarie sia per l'azienda Software che per i clienti.

Controlla questo:

link

    
risposta data 13.11.2011 - 18:30
fonte
2

La programmazione accademica riguarda più te stesso il codice. Questo è importante per imparare come funziona. La qualità del codice e il controllo di revisione non contano molto. Con notevoli eccezioni, il codice non ha una durata oltre il compito. L'ambito dei progetti tende ad essere piuttosto limitato e difficilmente a insinuarsi.

Nel mondo reale, dovresti avere il minor numero possibile di codice originale. Un sacco di codice è sviluppato dai team. È meglio utilizzare le routine di libreria piuttosto che codificarle autonomamente. La qualità del codice e il controllo della revisione diventano più importanti. Il codice tende ad avere una durata ben al di là di quanto originariamente previsto. Lo scopo del progetto è solitamente piuttosto ampio e tende a insinuarsi in modo significativo se non gestito.

    
risposta data 13.11.2011 - 22:08
fonte
1

In realtà,

È impossibile distinguere completamente tra programmazione a livello accademico e programmazione in tempo reale.

Direi che la più grande differenza potrebbe essere questa: nella programmazione del mondo reale - devi sapere più della programmazione e dovresti essere in grado di adattarti velocemente.

A seconda del settore in cui lavori, devi essere conforme alle sue leggi.

Michael ha toccato solo la punta dell'iceberg dichiarando attività correlate alla programmazione, che classificherei come le cose facili (se valuti la pasta ti vengono pagati).

In generale, dovrai affrontare almeno un paio di sfide per argomento in un settore:

  • Leggi applicabili (ad esempio, riservatezza del cliente per i medici)
  • Soggetto know-how (es. sistema di fatturazione-tasse, inventario, gestione delle risorse, schemi medici, standard di settore)
  • Requisiti del cliente mancanti o inesistenti o diversi dagli standard di settore / dalle leggi vigenti

Se confronti un progetto di programmazione di livello phd di ricerca rispetto a un mondo reale, è probabile che siano molto simili per difficoltà, know-how di livello di ingresso e simili.

L'unica vera differenza è che il progetto del mondo reale

  • ha un client
  • ha budget (tempo, denaro, risorse per le persone)

È un gioco di palla diverso quando qualcun altro apporta le regole:)

    
risposta data 14.11.2011 - 07:01
fonte
0

Se guardi le materie studiate nell'IT nel mondo accademico, troverai circa la metà del tempo sprecato in matematica, scienze, materie elettive, ecc. e l'altra metà su argomenti accademici come: progettazione del compilatore, teoria degli algoritmi, Architettura del computer, ottimizzazione, sistemi operativi, elettronica digitale e pochi altri corsi relativi all'industria come la programmazione C e la programmazione Web.

La maggior parte degli argomenti sopra menzionati è piacevole da conoscere, ma non fornirà direttamente una solida base su ciò che è richiesto nell'IT di tutti i giorni.

Accetta i requisiti di programmazione Web Microsoft (ovvero, le aree richieste da qualcuno per essere un membro del team produttivo in un'organizzazione):

1- C # .NET o VB.NET

2- ASP.NET

3- HTML e CSS

4- SQL Server (o un altro database)

Programmazione e progettazione di applicazioni OO

6- Java Script

7- MVC framework

8- Alcune esposizioni agli strumenti di controllo del codice sorgente

9- Alcune esposizioni a strumenti di test automatici

10-Strumento di tracciamento dei bug

11-E-Commerce Concepts (opzionale)

12 ORM

13: alcune capacità di analisi aziendale

14: alcune capacità di comunicazione

15-Probabilmente, alcuni fondamenti del cloud computing

Come puoi vedere, la maggior parte dei requisiti sopra riportati sono raramente focalizzati (potresti ottenere 1 corso in alcuni al massimo) durante l'università / università.

Non si può incolpare completamente le istituzioni poiché ci sono molti stack di tecnologia simili e continuano a cambiare.

La maggior parte dei precedenti di Microsoft non aiuterà qualcuno che voglia sviluppare applicazioni in Java.

Il vero problema è che nessuno degli stack tecnologici necessari al business oggi è completamente coperto.

Quanto sopra riguarda la questione dell'idoneità dei laureati ai lavori aziendali come la programmazione in ambiente aziendale. Le esigenze di laboratori di ricerca, ecc. Non sono coperte da questa risposta. Anche altre aree richiedono più competenze di quelle precedenti, come lo sviluppo di giochi, lo sviluppo integrato, lo sviluppo di sistemi in tempo reale, ecc.

    
risposta data 13.11.2011 - 11:08
fonte
0

Scala e amp; Messa a fuoco
Dalle mie esperienze, in un ambiente accademico, generalmente la scala dell'applicazione su cui stai lavorando è molto più piccola, qualcosa che può essere completata in un giorno o settimana, o forse fino a quando il semestre da uno o due programmatori - tipicamente tutto si scrive sarà il codice throw-away che viene scartato dopo il termine. Nel mondo reale, potresti trovarti a lavorare su un'applicazione che un team più grande ha impiegato mesi, se non anni, per svilupparsi pienamente. Trascorri molto più tempo e esegui il debug del codice di altre persone, cercando di capire l'infrastruttura di una base di codice, giocoleria senza rompere le parti esistenti per aggiungere qualche requisito nuovo o modificato.

Requisiti, integrazione, clienti
Inoltre, ci sono aspetti nello sviluppo di codice, come l'analisi dei requisiti, test di integrazione, ecc. Che tendono ad essere meno rappresentati nei progetti accademici. Per motivi di equità, in genere i requisiti sono già stabiliti per te dall'istruttore e non è deciso in modo collaborativo durante le riunioni. Non si tende a dover "vendere il cliente" su un approccio particolare che non è esattamente quello che volevano, ma a differenza dei loro desideri è in realtà fattibile da un punto di vista tecnico. In un ambiente accademico il tuo cliente (il selezionatore o l'istruttore) tende ad avere un'idea abbastanza concreta di quello che vuole, nel mondo reale, potresti incontrare clienti che non sanno veramente cosa vogliono e devono scegliere il loro cervello per capire cosa dovrebbe essere costruito

    
risposta data 19.11.2011 - 21:04
fonte
0

Manutenzione e amp; Manutenibilità

Nel mondo accademico (almeno a livello universitario), il software è costruito con obiettivi a breve termine in mente, di solito per completare alcuni compiti a casa o termine progetto. Una volta completato l'incarico, il codice viene gettato via e mai più visualizzato.

In un ambiente professionale, la maggior parte del software è scritta con un uso a lungo termine; il software è destinato ad essere utilizzato per almeno alcuni anni e deve essere costruito per essere facilmente mantenuto e aggiornato nel tempo.

Relativo a questo è il lavoro di manutenzione. La maggior parte del lavoro di programmazione professionale comporta l'aggiornamento o il mantenimento del software esistente. I cosiddetti progetti "campo verde" sono l'eccezione, piuttosto che la norma.

    
risposta data 20.11.2011 - 04:26
fonte

Leggi altre domande sui tag