Domanda

Durante l'estate, ho avuto la fortuna di entrare in Google Summer of Code.Ho imparato molto (probabilmente più di quanto io abbia imparato la somma di tutti i miei studi universitari corsi).Sto davvero chiedendo perché non insegnare un paio di cose che ho imparato prima a scuola però.Per citarne alcuni:

  • unit test
  • il controllo di versione
  • sviluppo agile

Mi sembra che spendono una notevole quantità di tempo per l'insegnamento di altre cose come le strutture di dati e algoritmi di fronte.Mentre penso ancora che quelli sono molto importanti per imparare presto, perché non insegnano più di questi tre prima di loro?O è solo la mia scuola che non insegna molto di questa roba?

Non fraintendetemi, io non credo che sia auspicabile che le università insegnare sempre più in voga, di programmazione, le mode passeggere, ma non i miei professori per insegnare a me qualcosa di diverso da "disegnare un diagramma prima di iniziare la codifica?"

È stato utile?

Soluzione

La risposta più semplice alla tua domanda è che i campi dell'informatica e dello sviluppo software, sono nuovo e non molto ben compreso.Sebbene tutte le discipline scientifiche e ingegneristiche sono avanza più rapidamente in tempi moderni, altri campi che hanno molta più esperienza di disegnare e vi è una più ampia comprensione condivisa di come funzionano.

Per esempio, nonostante i recenti progressi nella scienza dei materiali, ingegneri civili hanno conosciuto per circa 2000 anni, come costruire un arco in modo da non cadere, e questo è qualcosa che può essere insegnato e imparato in università con relativamente piccola polemica.Anche se sono completamente d'accordo con voi circa le tecniche che gli sviluppatori di software devono imparare, questo accordo è basato su esperienza personale e informale ragionamento.Per essere socialmente accettato "best practice", abbiamo bisogno di dati quantitativi che possono essere molto costosi da raccogliere:quanto costa la versione control?Come aiutare?I test di unità?Siamo in grado di ragionare sull'efficacia delle varie tecniche, ma, in realtà, dimostrando che l'efficacia conclusivamente sarebbe molto costoso.Avremmo bisogno di eseguire un completo, realistico software di progetto, dall'inizio alla fine, molte volte, con gruppi di programmatori che hanno competenza equivalente, utilizzando diverse tecniche.Almeno avremmo bisogno di un sacco di dati su progetti esistenti che tali progetti sarebbero disposti a rilasciare.

Ingegneri civili hanno migliaia di anni di ponti a guardare, con un sacco di informazioni.Gli sviluppatori di Software, invece, hanno solo un paio di decenni di informazioni, la maggior parte dei quali è tenuto segreto, poiché c'è un po ' di motivazione per le organizzazioni per la raccolta e la pubblicazione di informazioni sul loro sviluppatori l'efficacia, anche se la raccolta (che la maggior parte non sono).

C'è anche una certa confusione di campi.Sviluppo Software, o di "software engineering", è davvero una cosa diversa dall'informatica.Gli sviluppatori di Software hanno bisogno di una conoscenza di informatica, ma di lavoro ai confini della complessità algoritmica o ragionamento sul parallelismo non è qualcosa che un lavoro programmatore che deve fare ogni giorno;allo stesso modo, un vero e proprio "informatico" scrivere tonnellate di usa-e-getta il codice che non funziona o non fare nulla di interessante, e non possono beneficiare tanto una sorta di rigore che un software vero e proprio prodotto.

L'avvento di internet e la comunità open source possono fornire dati sufficienti per iniziare a rispondere a queste domande in modo conclusivo, ma anche se le risposte sono disponibile domani, probabilmente ci vorranno 100 anni per loro di permeare la società internazionale al punto in cui tutti sono d'accordo su quello che dovrebbe essere insegnata nelle scuole.

Infine ci sono alcune considerazioni di carattere economico.È stato un tempo relativamente breve, dal momento che quasi tutti coloro che sono coinvolti nello sviluppo di software aveva economici, facile accesso a macchine dedicate di eseguire qualsiasi strumenti di sviluppo che vogliono.Un paio di decenni fa, completamente dedicando una macchina per l'esecuzione di prove o anche abitazioni una storia infinita di codice sorgente, sarebbe sembrato superficiale costoso per un sacco di gente.

Altri suggerimenti

Perché i nostri insegnanti:

  1. Mai provato i test di unità,
  2. Non so come usare il controllo di versione e
  3. Non hanno nemmeno sentito parlare di "sviluppo " agile".

Gli studenti dovrebbero prendere la situazione nelle proprie mani.Noi l'abbiamo fatto, e si è rivelata bene, non abbiamo?

Leonardo da Vinci scrisse,

Coloro che sono innamorati di pratica senza scienza sono come un pilota che va in una nave senza timone o bussola, che mai ha certezza dove sta andando.La pratica dovrebbe sempre basata su una solida conoscenza di teoria.

La buona scuola insegna sia la teoria (strutture dati, algoritmi, etc.) così come la pratica (unit test, il controllo di versione, etc.).Questo richiede una miscela appropriata di facoltà, in modo che entrambi i lati di questa moneta può essere adeguatamente istruiti.Una faculty composta interamente di teorico tipi, con nessuna esperienza reale non fare.Allo stesso modo, una facoltà interamente composto da professionisti non.Avete bisogno di un mix, e le buone scuole sono che.

Informatica è sempre stato un po ' contraddittorio;La parte che è di circa il computer non è una scienza, e la parte che è una scienza, non si tratta di computer.

Le università tendono ad appoggiarsi di più su 'science' fine (algoritmi, datastrctures, compilatori, etc) perché quelle cose sono molto di piu 'senza tempo' rispetto alle attuali migliori pratiche del settore, che tendono a evolversi e a cambiare di anno in anno.Il Controllo di versione, per esempio, ha subito dei cambiamenti incredibili negli ultimi 5 o 10 anni, ma big-O è ancora big-O, e hash, b-alberi, e la ricorsione sono ancora utili come erano 40 anni fa.La loro idea è, in generale, di dare abbastanza fondazioni che si può quindi selezionare strumenti, come git e capire che cosa significa quando si dice che il sottostante datastructure è un grafo orientato aciclico di hash SHA-1, e che gli sviluppatori hanno lavorato duramente per ottimizzare il numero di chiamate di sistema in modo che i / o-bound.

Ora, pensare a dove hai imparato tutte le cose che si doveva sapere, per capire che l'ultima frase - se la risposta è "università", che stanno facendo un buon lavoro.

Ho insegnato queste cose quando ero un Professore presso l'Oregon Institute of Technology.Viene loro insegnato, solo scarsamente.

Tutto è una moda passeggera.Si impara di più nel tuo primo anno di college di tutti i tuoi anni in un college.Informatica non ha nulla a che fare con i computer.

Il College offre una cassetta degli attrezzi completa di attrezzi.Questo è un cacciavite, che è una chiave inglese.Si POTREBBE arrivare a utilizzare ogni strumento una volta in un college.Quando si immette il mondo reale è quando si ha realmente scoprire che cosa avete.Si ordinano gli utili quelli del resto, che quelli che si desidera lasciare a casa sul banco di lavoro, in caso di necessità, e quelli ti tieni in tasca ogni giorno.

Tqm, Iso, Cmm, Agile, etc.Queste sono tutte le mode essi vanno e vengono, nessuno di quelli di successo sono molto più di buon senso.Successo ingegneri e aziende utilizzano una qualche sapore del senso comune, che è ciò che li ha resi successo, alcune bisogno di un nome per esso.Il problema è che non si può vendere il senso comune, un manager non è in grado di dimostrare il loro valore per l'azienda attraverso la formazione e l'acquisto di senso comune, senza un nome accattivante.Mettere un nome su di esso, che i loro superiori hanno letto in qualche articolo di giornale o una rivista e il gestore mantiene il loro lavoro e mantenere la vostra.Molto poche le aziende che sostengono di seguire queste pratiche effettivamente fare.La maggior parte scrivere un assegno a un consulente, e ottenere il loro annuale e di durata o di certificato di alcuni club, in modo che si può mettere un grafico sul loro sito web o un etichetta sulla scatola il loro prodotto viene fornito in.Molti sostengono che questo è raro...sono stato lì, visto che non succede.Tutto questo fa parte del business, è necessario tagliare gli angoli, a volte, di rimanere redditizio e tenere le porte aperte e le luci accese.Gli irriducibili seguaci di tutte queste pratiche hanno tutti sostenuto che l'ultimo è stato una moda, e questo non è, l'ultimo era davvero troppo costoso per seguire, questo isnt.L'ultimo era falso appena assunto un consulente, questo è reale.Come linguaggi di programmazione, anche questi si evolverà.

La capacità di comprendere la realtà del business, il sistema universitario, e il tuo ruolo in tutto questo è la chiave.Come qualsiasi cosa nella vita, scegliere le tue battaglie.La sua non è l'università o il lavoro o il governo o chiunque altro lavoro per insegnare che si desidera è necessario o si desidera sapere.È il vostro lavoro per guardare fuori per il numero uno.Allo stesso modo si può incolpare chiunque altro per fornire il tempo per fare questo, è necessario farlo.Si cade il cavallo, non sei una vittima, alzarsi e tornare su, niente scuse, la vita non è giusta che fare con esso.Non prendere il vantaggio di volantini, non fingere di essere indipendente.E certamente pagare le tasse, non succhiare una società a secco di volantini, senza dare loro qualcosa (il migliore al momento?) nel ritorno.

Perché la gente pensa cmm o agile o di altri è una moda?Perché pensano che non sono?Perché il professore insegnerà programma che modo?Per evitare goto o per evitare costanti o per evitare questo e quello?È perché si produce un codice più affidabile?Migliore esecuzione di codice?Riduce l'errore umano?O è perché è più facile classificare le carte/programmi dando loro più tempo per fare una ricerca?È perché non sanno programma e sono solo a seguito di qualcun'altro libro sull'argomento?Ti insegnavano che non si può avere gestibile, affidabile e ad alte prestazioni codice?Si può anche "scegliere qualsiasi due" gestibile interferisce sia affidabile e ad alte prestazioni?A volte il sacrificio di affidabilità per le prestazioni.A volte non si cura circa l'affidabilità o le prestazioni, si desidera ottenere dalla versione 117.34.2 di ancora un altro programma di contabilità per la versione 118.0.0.Il vostro modello di business è la vendita di versione aggiornamenti e il supporto tecnico e per quanto riguarda gli sviluppatori di software di qualsiasi vecchio robot sono in grado di scrivere lo stesso codice nello stesso modo.Sostituire il bruciato uno con il fresco di college e far vendere gli aggiornamenti.

Non ci sono universale risposte a queste domande, è necessario scoprire che cosa il vostro parere, vivono con esso e a difenderlo.Cambiare la vostra mente, per vivere con lui, e a difenderlo.

Mettere tutto in discussione...sarà che ho davvero ottenere bruciato se tocco il caldo pentola sul fornello?Saranno gli effetti psicologici della paura causare più danni di bruciato?C'è un modo sicuro per testare la risposta senza farsi male?

Quando ho potuto permettermelo vorrei comprare e alla fine si sciolgono transistor, tappi, resistenze, ecc nella mia stanza del dormitorio, che hanno un caratteristico cattivo odore.È molto più economico e più facile acquistare un amplificatore per il vostro stereo di provare a costruire una il giorno dopo il vostro primo transistor in classe.Linus essere l'eccezione, naturalmente, è più facile acquistare un sistema operativo di scrivere una...Si può fare di più anche se ciò che impari che il tempo è diverso da quello che Linus imparato.

Il mondo dentro e fuori l'università adotterà queste formule (cmm, agile, ecc) per la risoluzione di problemi e si esce che li lascerà più veloce.Non hai bisogno di usare il controllo di versione per avere successo, ci sono proprio tanti successi con senza (beh in realtà a causa dell'età del settore ci sono molti più successi senza il controllo della versione finora).Allo stesso modo si può avere successo con il minimo di prove (guardare veramente grandi nomi nel settore informatico come esempi).Si può avere successo testando il tuo codice, così come un successo, seguendo la regola che non si deve mai testare il proprio codice.Si può avere successo con emacs e si può essere successo di uso di vi.Si deve decidere che cosa il mix funziona per voi e se siete fortunati a trovare un posto di lavoro che è d'accordo con te.Con il tempo ciò che funziona per voi cambierà, da strumenti per le lingue di stile di programmazione di paure, di controllo di versione, documentazione, etc.Si, sposarsi e avere figli e decidere che si potrebbe desiderare di nascondersi nell'angolo di una grande azienda con un grande pacchetto di assicurazione sanitaria con il lavoro noioso e godere i vostri bambini, invece di essere hotshot programmatore presso la piccola startup.

Quando si ottiene l'università e il mondo reale, ascoltare e lavorare con e di discutere con i "veterani".Sono decenni, di secoli di esperienza, trappole sono caduti in che si potrebbe evitare e / o test sul proprio (forse ti rendi conto che non hai bisogno di toccare il piatto caldo per scoprire li bruci).La maggior parte hanno visto almeno una o due di queste mode vanno e vengono, e, in particolare, di quanto male sono stati bruciati, e che cosa hanno fatto per recuperare da esso.Sanno molti modi diversi per testare le cose e i nomi dei test di stili che sono venuti e andati così.Che cosa funziona, cosa no.Dove il rischio è e come evitare di sprecare tempo per la tangente.Come si matura e si diventa old timer, si passa avanti.Pagare per ciò che hai imparato, cercando di insegnare a coloro che ti seguono.Ricordati di insegnare loro a pescare, non solo dare loro un pesce.E a volte è necessario per permettere loro di fallire prima di riuscire a tenerli da ottenere bruciato troppo male.

Quello che volevo dire, è proprio ora siamo in una rara situazione in cui siamo in grado di testimoniare l'evoluzione di un universo parallelo (e forse lo influenzano).Sì informatica è una giovane scienza rispetto a dire di fisica.Ma, allo stesso tempo, si è evoluta più volte.A seconda di dove si lavora e che si lavora con voi può essere in grado di osservare ingegneri hardware.Linguaggi di programmazione il mondo dell'hardware non è certo una novità, ma non si è evoluta rapidamente come il mondo del software.Il Software ha avuto un paio di decenni head start.Hardware ha sempre pensato di ingegneri del software come cittadini di seconda classe.Il nostro lavoro è facile, il loro lavoro è duro.(Nota: in realtà io sia come hardware che come software engineer).Quello che è interessante è che per ora sono ancora a che fare con quello che noi consideriamo elementare infantile o problemi.Perché ho bisogno di usare il controllo di versione, io sono l'unico a lavorare su questo chip.La tua esperienza con gcc o altro mercato compilatori o connessione Ide cant eventualmente confrontare con i costosi strumenti che uso, se la società pensava che erano abbastanza degno di usarlo o anche so quanti comprerebbero una copia.E una lunga lista di altre scuse.Ho avuto il piacere di conoscere sia vhdl e verilog e diventare produttivo sia all'interno di una settimana da quella che era quasi una sfida da un progettista hardware (nonostante il mio diploma dicendo ingegnere elettrico il mio titolo di lavoro è un software engineer).Volevo imparare queste lingue, quando gli strumenti sono disponibili per me ho soggiornato presso l'ufficio della notte e mi ha insegnato.Da quel punto in poi che il tecnico in particolare capito che quello che mi stava dicendo era vero, lingue, sono solo la sintassi, i fondamenti della programmazione sono gli stessi, gli strumenti tutti di fare la stessa cosa.Le mele e le mele non le mele e le arance.

In linea generale, tuttavia, è ancora difficile per mandare un messaggio a uno di questi due in parallelo industries ha molta più esperienza in lingue, abitudini di programmazione, controllo del codice sorgente, test, strumenti, ambienti di programmazione, ecc rispetto ad altri.Il problema che sto cercando di risolvere è tenuto l'hardware design sono in fase di sviluppo, creare conveniente funzionale simulatori che siamo in grado di legare con una simulazione (macchina virtuale) del processore, in modo che possiamo iniziare a testare l'hardware e lo sviluppo, il test e risultato finale di software molto tempo prima di andare al silicio.Non c'è nulla di "nuovo" su questo, ma non abbiamo alcun meccanismo per ottenere il codice più recente, tenere traccia delle modifiche nel codice per vedere dove dobbiamo concentrare il nostro tempo.Nessun meccanismo per il monitoraggio, la documentazione definizione dell'utente (programmazione) interfaccia per l'hardware.Un golden copia è qualcuno di posta elettronica in formato binario e cambia solo quando, beh, non hai letto il verilog per scoprire cosa sta succedendo.Attendere che verilog è quanti anni?Che bug che ho passato tutta la settimana a capito di tre settimane fa e fissa?Così anche noi, basta volare per qualche luogo di vacanza e di festa per i sei mesi di attesa per la gente del hardware per completare il loro compito e si gettano sopra la parete di noi, o si fa a prendere questa occasione per cercare di essere paziente e ottimista e insegnare loro che non ci sono il senso comune metodi che non sono invadente che consentano loro sia di fare il loro lavoro, il backup loro lavoro, oltre a condividere le loro cose per la peer review...

Ricordati che l'hardware che gli ingegneri hanno lasciato il college con una scatola di lucido nuovi strumenti come hai fatto.Hai imparato 17 diversi linguaggi di programmazione che si può utilizzare solo uno, il resto delle lingue nella tua carriera sarà inventato dopo aver lasciato il college.Quando hanno lasciato il college sono in grado di dirvi che cosa sanno di calcolo e la teoria della relatività, quanti elettroni sono in ogni elemento e calcolare il costo di circa una superficie Gaussiana.Ma la maggior parte della loro carriera è uno, zero, e, o e non (ehi, ci sono quelli in comune, tutti si ha realmente bisogno di sapere su computer, uno, zero, e, o e non hardware o software engineer).Concesse le leggi fondamentali della fisica, analisi matematica, gli elettroni non sono sta per cambiare velocemente i linguaggi di programmazione che fare.Ma i fondamenti di programmazione sono gli stessi in tutte le lingue e continuerà ad essere in futuro.Ha lasciato il college sapendo che o hai lasciato pensare java è diverso e migliore rispetto a C++, perché questo e quello e l'altro?

Come qualsiasi altra attività, l'università compito è quello di rimanere redditizio.Essi devono assumere il diritto accademici di portare sia a destra che a studenti e il diritto di dollari di ricerca e il giusto tipo di ricerca fare l'università redditizio.Essi hanno da offrire il giusto classi di portare il diritto di studenti e di produrre laureati, in modo che i decenni, passano i datori di lavoro sia vicino all'università e si spera lontano riconoscere che questa università produce produttiva e redditizia dipendenti.(sì, sì, e a volte è necessario per attirare il giusto atleti di sport che per ottenere la giusta quantità di tempo TV e la quantità di riconoscimento del nome e sport fatturato).Alcune università si insegnano C++ e Java, alcuni non lo farà mai.Alcuni si inventano CMM, e alcuni insegneranno Agile, alcuni non.Se l'università ha alcun valore c'è qualcosa da apprendere.Non vi insegnerà tutto ciò che c'è da imparare, ma hanno qualcosa di utile.Imparare qualcosa mentre siete lì, raccogliere un numero ragionevole di varie forme di strumenti nella vostra cassetta degli attrezzi.Lasciare l'università e trovare un lavoro.Se la casella degli strumenti succhia magari trovare un'altra università, e non menziona mai il primo.Se è ok strumento casella di utilizzare quegli strumenti e costruire qualcosa di nuovo sul proprio tempo.Se la sua un buon strumento di dialogo, di dire cose buone su di che università e la buona accademici hai imparato e che e pagare la scuola per quello che ti hanno dato.Anche se si didnt ottenere ogni possibile strumento universale catalogo dell'università di strumenti che a piedi con un certo sottoinsieme.Anche se non laureato...

oh dio, non mi è iniziato

una volta ho avuto il preside della cs in una università mi dicono che la programmazione object-oriented, era solo una "moda" in modo che non offrono tutte le classi di passaggio fantasie come il C++

perché non insegnano queste cose, beh, il collegio è lì per insegnare i fondamenti della disciplina, non necessariamente le migliori pratiche del settore

La risposta più semplice è che si sta studiando informatica e le cose che hai elencato non sono realmente correlati accademico campo della computer science.Sviluppo Software potrebbe essere qualcosa che si fare con l'informatica, qualcosa che si basa su blocchi di ciò che hai imparato ...ma l'informatica e sviluppo software non sono la stessa cosa.

Le classi che ti ha insegnato il controllo di versione, o come scrivere un efficace test di unità...che sarebbe l'insegnamento è un commercio, vale a dire, (buono) lo sviluppo di software.

Beh, la cosa con le università, che hanno bisogno di insegnare cose che sono davvero universale.Qualcosa di simile lo sviluppo agile è ancora abbastanza nuovo e nonostante quanto è parlato di su Internet non è di essere utilizzato ovunque, in modo che l'insegna di un'intera classe di studenti potrebbe solo beneficiare di un paio di persone che hanno atterrato in agile negozi.

Il controllo di versione, tuttavia, è qualcosa che in questi giorni è imperdonabile.È qualcosa che tutti hanno bisogno di capire è uno strumento che è quasi più utile di un compilatore e CVS è stato intorno per circa 20 anni.I concetti di almeno il bisogno di essere compreso da qualsiasi programmatore di lasciare l'università.Fortunatamente, se si esegue qualsiasi lavoro di gruppo in università si può essere abbastanza fortunati da terra con qualcuno che conosce già il controllo di versione e convince il gruppo di usarlo.So che sono contento che la persona che era nel mio gruppo.

Unità di test è praticamente come imperdonabile.L'unica cosa che vorrei dire è che il libro è ancora in test driven development e andando per il 100% di copertura codice sempre a volte può essere più problemi di quanto ne vale la pena.Ma i test di unità è estremamente prezioso e dovrebbe essere coperto in un software di ingegneria corso.Immagino che alcune di queste cose è che rende la strada in alcune università, ma semplicemente non ha ancora raggiunto tutti loro sicurezza.

Perché no, infatti?La mia esperienza di ottenere il mio CS grado era praticamente lo stesso.La ragione è che le persone che insegnano la programmazione non si programma, per quanto posso dire.Non è necessario insegnare che la roba per l'accreditamento, gli insegnanti non hanno familiarità con esso, e gli studenti non sviluppare progetti di rilievo, come parte del loro corso di studi.Non c'è nessuna motivazione per insegnare la programmazione, in quanto contrario all'insegnamento CS teoria o sintassi di Java.

Dipende dall'università.Mi sono laureato nel 2003, da un Australiano william university.In questo tempo abbiamo imparato UML, Unit Testing, XP (e altre Metodologie Agili), insieme con tutta la roba formale come Z, Algoritmi e Strutture Dati, Sistemi Operativi, etc.

Non coprire i test di unità nel dettaglio, anche se, più semplicemente pagato il passaggio di servizio per una lezione.Sarebbe stato bello avere imparato come scrivere un efficace test di unità, piuttosto che solo "che Cosa è un test di unità".

Quanto riguarda il controllo di versione è interessato, ci sono state usando (CVS) nei nostri progetti di programmazione dal 2 ° anno in poi.

Io sono d'accordo fortemente con ciò che Glifo detto, troppo.CS è un immaturo campo, solo circa negli ultimi 50 anni, che non sappiamo cosa ci dovrebbe essere di apprendimento e che cosa è solo una moda passeggera.Dare un 150 anni, quindi le cose potrebbero essere di stabilirsi in più.Il numero dei tentativi realworld progetti rende evidente che questo è un immaturo industria.Immaginate se l ' 80% dei progetti di costruzione non è riuscito!

Computer scienziati pensano che i matematici non ingegneri e così preferiscono insegnare la matematica parti di parti di ingegneria.Il collaudo,il controllo di versione e la documentazione non sono mode passeggere più che in qualsiasi altra disciplina di ingegneria.

Tutto ciò può essere facilmente coperto (superficialmente) in una singola classe in attività di sviluppo software.Non è parte del più CS programmi, perché non è quello che CS è, anche se penso che alcuni copertura di quella roba è utile.La mia scuola aveva una classe;non coprire il controllo di versione, ma non si è fatto coprire UML, raccolta dei requisiti, metodologie di sviluppo (vari agile e cascata), unit test, test di integrazione, etc., e ha richiesto di lavorare in team di 4-5 per sviluppare un progetto (un semplice Indizio rip-off in Java).Se hai sentito la necessità di ulteriori Software Engineering classi, erano disponibili come opzionali.

Pur non avendo mai il controllo di versione già detto una volta in una qualsiasi classe che ho preso, la maggior parte dei miei amici erano in uso, per progetti personali, compiti in classe, e così via, quindi non è come se non fossimo stati esposti ad esso.Le persone che non prenderlo sul loro ha costretto ad usarlo da un compagno di classe, nel corso di un team di assegnazione.

L'università è destinata a insegnare concetti e teorie, perché queste sono le cose che sono difficili da raccogliere sul proprio.Il controllo di versione è uno strumento, e abbastanza facile da imparare.Utilizzare un po', leggere qualche tutorial sul web, e tutto è a posto.Se avete bisogno di lezioni e compiti a casa per capire come controllare qualcosa di SVN, si sta andando ad avere un sacco di problemi con le cose che in realtà SONO difficili.

Ricordate che ci sono un sacco di modi per imparare tante cose in università al di fuori delle lezioni;approfittare di questo.Si sta pagando un sacco di frequentare le classi e utilizzare le strutture, il latte è per tutti che vale la pena e andare al DENTE e ACM riunioni, partecipare a gruppi di progetto (c'è sempre qualche MEs costruzione di un robot che hanno bisogno di un programmatore) o ottenere un lavoro in somministrazione di studi Umanistici dipartimento di server.Trashpick un computer dal bacino di caricamento dei Materiali edificio di Ingegneria, scaricare una iso di Linux con la vostra dormitorio con connessione a internet e giocare.

Penso che il problema è che le università non si sentono che hanno bisogno di insegnare ad essere un professionista, ma invece concentrarsi sul lato accademico di programmazione.Avrei pensato che ci dovrebbe almeno essere di riferimento per i più recenti metodi e tecniche che vengono utilizzate nell'industria, come queste cose sono di interesse accademico, come pure.

Nel nostro corso ci hanno insegnato Personale di Processo del Software, che ha coperto le cose come tempo di registrazione trascorso su progetti, buoni commenti ecc.... ma non si parla di professionali fondamentali come il controllo di versione.

Ho imparato tutte quelle Università.Forse dipende dai corsi che si sceglie?I miei corsi erano molto diverse (Software Design, Progettazione dell'interfaccia utente, e-commerce, AI, programmazione Funzionale, etc.).Progettazione del Software era l'esposizione di modelli di progettazione e test di unità (un solo grande progetto che ha coinvolto le varie cose).Progettazione dell'interfaccia utente...siamo stati tre gruppo di persone che lavorano sul progetto.Non abbiamo potuto fare nulla senza il controllo di versione, quindi abbiamo ottenuto che.E di sviluppo agile è qualcosa che i nostri professori continuamente ci ha raccontato, ma hanno lasciato fino a ogni gruppo di usarlo.

So che molti studenti Universitari hanno preso "facile" corsi o corsi che vorresti dare loro un alto GPA.Altri si concentrano su ciò che si desidera imparare e sono in gran parte ad esplorare per trovare quello che il campo di loro interesse.E poi ci sono quelli che sanno esattamente che cosa sono interessati in...il che è buono, tranne che essi tendono a non diversificare i loro corsi.

Per rispondere perché queste cose non sono le prime cose che vengono insegnate:Di laurea in genere i programmi di allenarti a diventare un Master studente.Solo una volta che si iniziare a raccogliere i vostri corsi (che in genere accade negli anni successivi) si può scegliere di imparare le cose utilizzate al di fuori del mondo accademico.Questo è il motivo per cui essi si concentrano su algoritmi, strutture di dati, che si presenta con problemi irrisolti, etc.

Io personalmente penso che sia bene che stanno facendo questo.La programmazione non è così facile come molti di noi fanno sembrare;molte persone lottano con esso.Vorrei piuttosto queste persone prima capire come un ciclo for opere prima di capire il mostro che Perforce.

Non insegnano tali argomenti, perché la maggior parte delle scuole accademiche, non commerciali.Che è, essi sono progettati per insegnare le idee e le teorie, non il treno è in una carriera.L'intero concetto di QA ha nulla a che fare con l'informatica oltre il passaggio di una dimostrazione matematica.Inoltre, QA pratiche e sviluppo di flussi di lavoro differisce di molto da uno sviluppo casa all'altra, in modo da insegnare loro a scuola è uno spreco di tempo e denaro.

Ho imparato tutta la roba del primo anno, con l'eccezione di sviluppo agile.

È tutto su come scegliere la scuola giusta, IMHO.Se vai in top 10, è imparare tutta quella roba in fretta.

Per quanto CS Educazione in generale, siamo fondamentalmente chiedendo professori per insegnare in modo molto (lingue di ogni sapore, strutture di dati, di run-time di efficienza, come le cose funzionano realmente a livello di bit).Vorrei sollevare la questione, Perché non i bambini prendono su di sé per imparare più circa l'Ingegneria del Software?

Hai nominato 3, alcuni dei quali non credo siano così importante per la comprensione dei sistemi informatici (ad esempio, il controllo di versione).Queste cose sono parte di un processo, e si può diventare un buon programmatore/informatico, senza bisogno di saperlo.

allo stesso modo per i test di unità - perché scegliere i test di unità?Sicuramente i test di usabilità, test di sistema, user acceptance test e factory acceptance test è più importante?Beh, a meno che tu consideri il tuo lavoro completo una volta che il codice viene spedito al reparto di manutenzione :)

Pensare gli altri concetti che io uso tutti i giorni, che sarebbe di scarsa utilità per uno studente di venire a patti con i fondamenti di software e sistemi informatici:

  • buone pratiche commenti
  • conformità alle norme (non solo a quelli internazionali, ma il team di codifica standard)
  • documentazione
  • controllo delle modifiche (non necessariamente la stessa versione per il controllo in merito all'archiviazione delle differenze, questo è più circa che cosa e perché è cambiato qualcosa)
  • l'usabilità di sviluppo

Queste sono tutte le "soft skills" che non si bisogno per scrivere del buon codice.

Tuttavia, se ti manca il "duro' abilità, come algoritmi e strutture di dati, quindi la tua possibilità di scrivere del buon codice è praticamente impossibile.

Proprio come gli studenti, ogni collegio è diverso.Alcune università, o, più precisamente, alcuni professori sono resistenti al cambiamento o sono pigri.Per fortuna la maggior parte non lo sono.Teorie, concetti, storia, ecc ... sono importanti e di vitale importanza per qualsiasi CS curriculum.Ma così è preparare lo studente per il loro ambiente di lavoro.Non sorprende, l'università di comunità della mia zona che offrono molto attuale e applicabile CS corsi.Non tanto grandi e consolidate e prestigiose università.

È semplicemente perché i dati-algoritmi e strutture di costituire il nucleo di calcolo e, di conseguenza, sono molto più importanti.I test di unità, il controllo di versione e la metodologia agile ma sono strumenti del mestiere (e, se necessario, uno è atteso a prenderli sul lavoro).

Penso che una buona CS programmi dovrebbero insegnare i fondamentali che serviranno come base per tutti i futuri programmazione di istruzione.Metodologie di sviluppo Agile, e strumenti di controllo di versione sono come le mode;essi vanno e vengono.Inoltre, essi tendono ad essere utilizzati nell'industria impostazioni e non a quelli accademici, quindi penso che è raro per le università per coprire cose come quelle che probabilmente imparare sul lavoro.Non sto dicendo che è giusto, ma che probabilmente è la mentalità accademica.

Sono d'accordo con quello che stai dicendo.Solo di recente ho iniziato a lavorare nello sviluppo di software del mondo, e ho già iniziato a conoscere di sviluppo agile, cosa che non mi è mai stato insegnato in università.

Il fatto della questione può essere che l'università di profs non tenere il passo con le più recenti tecniche per lo sviluppo di quanto dovrebbe.Essi possono anche sentire che ci sono altre e più importanti cose sul loro curriculum.

I docenti universitari non so come scrivere software, solo che di ricerca, di insegnamento, e, occasionalmente, bash fuori un po ' di codice che solo lavorare fino a quando la carta viene pubblicato.

E ' solo a causa di gente come Tito, che stiamo ottenendo qualsiasi accademici che veramente curarsi di programmazione - Leggere i suoi commenti su questo argomento qui

Quando ero studente ho letto dei libri in biblioteca, su Extreme Programming, un'abbiamo discusso brevemente in classi - le stesse classi, che ha chiesto che noi conforme al "Modello a Cascata" di sviluppo del software, dove "compilation" è un passo in proprio.

Tutto il meglio per la tua carriera, spero di aver conseguito la laurea, è bello avere le lettere dopo il nome.:)

Tutte e tre le cose che si ricordano (unit test, il controllo di versione, di sviluppo agile) sono insegnato per alcuni di laurea in Informatica programma dell'Università di Groningen.Se o non che sia una cosa buona che lascio aperta la questione;ma non è vero che nessuna università ti insegnano le "cose pratiche".

Questi sono basati fuori la mia limitata esperienza in un CS programma prima ho acceso la major, e la mia esperienza come stagista presso una grande azienda di software.Unit test non è insegnato, perché la maggior parte dei programmi che devi creare arn abbastanza grandi bisogno di test automatici, il tuo garantita una specifica serie di ingressi quindi possibile testare il tutto manualmente.L'insegnamento come automatizzare i test possono anche interfear con la valutazione del progetto dal momento che la maggior parte dei progetti sono classificati con script in grado di eseguire test automatizzati, con una rapida occhiata al codice per assicurarsi che non hai int pippo1;int pippo2;e l'uso corretto di rientro.

Non so perché, il controllo di versione non essere insegnato, ma parte di esso è probabilmente la dimensione dei progetti.Non ho mai avuto alcun progetto che era abbastanza grande per il controllo di versione, e da grande voglio dire più di 1000 linee di codice e ha preso un intero semestre di scrivere.Immagino che figura ti insegni a te stesso, se ne avete bisogno.Eventuali progetti di gruppo che ho avuto sono stati supposti per essere paio progetti di programmazione, e perché usare il controllo di versione, se il tuo sia allo stesso computer?

Non so perché, sviluppo agile di non essere insegnato, ma probabilmente risale la stessa cosa con la dimensione del programma.Mentre adgile sviluppo è comune con i nuovi software che gira su personal computer e server di piccole dimensioni non è generalmente utilizzato su sistemi come i mainframe IBM o in domini di problema come quello bancario o medico dove la documentazione è re.Inoltre, probabilmente ha a che fare con il fatto che adgile di sviluppo non è stato circa 20 anni fa, quando molti dei docenti sono stati formati.

Il motivo principale è che molti (la maggior parte?) università ritiene di avere un obiettivo diverso, di una scuola di commercio.Come tali, essi vogliono insegnare agli studenti come imparare, e i principi fondamentali della disciplina.Inoltre, gli algoritmi e strutture dati si applica a qualsiasi linguaggio di programmazione, e non dipende da specifici strumenti (che possono o non possono essere ancora in uso dalla laurea).

In informatica, il che significa che gli algoritmi, strutture di dati, computer teoria, la teoria dei compilatori, etc.La roba che hai listato è meno di capire come programma, come risolvere i problemi, etc.Si tratta di circa la pratica di programmazione (che, per inciso, è un fantastico libro per chi in università con l'intenzione di lavorare come programmatore).Ora, questo non sarà usata per un entry level code monkey posizione, che porta alcune persone a pensare che non è utile.Io non sono d'accordo.Penso che si può essere estremamente utile.Tuttavia, ciò non significa che dopo aver ottenuto il CS di laurea, di sapere tutto quello che avrete mai bisogno di lavoro come programmatore.

Che, inoltre, non è per dire che le cose che hai menzionato non sono utili.Essi sono.Ti hanno problemi di lavoro come programmatore, se non si impara, e penso che dovrebbe essere insegnato in un college, almeno in una certa misura.Vorrei guardare insegnamento controllo di versione, unit testing, ecc, allo stesso modo in cui guardo un corso di programmazione in arte, e l'insegnamento di ciò che i pennelli e quelli che devono essere utilizzati per vari casi.

Penso che dipende da che tipo di programma di informatica si sono ci sono quelli che puntano verso la Ricerca e la Scienza lato e ci sono quelli che marcia verso l'Attuazione.Ho appositamente sceso nei confronti di alcune scuole che avevano solo i professori che hanno soggiornato nel mondo accademico.Se non hai professori che havent stato "uso" che cosa insegnano, è tutto nella loro testa, letteralmente.

Spina:Tenendo BS in Comp Sci e MS in Morbido Ita presso la DePaul University, sono stato in gran parte tenuti da istruttori/docenti che hanno insegnato a tempo parziale, che fu un bene per me, perché preferisco che siano loro arrivano con un aneddoto del giorno precedente e si riferiscono alla classe.Anche questo, per lo più pendolari/part-time scuola, la maggior parte degli studenti di posti di lavoro nell'uso di ciò che hanno appreso.

Il processo di apprendimento inizia ancora con la teoria, ma poi solitamente ci viene chiesto: "quanti di voi effettivamente utilizzare questo nel vostro lavoro?" e la risposta tipica è "la utilizziamo, ma in una spogliato o più semplicemente" e poi andiamo in pratica gli scenari reali.

Durante il mio percorso di studi i test di unità, era sempre presente.Anche se si inizia su Java, che ci ha fatto usare ANT e JUnit per il progetto.Che è stato un buon punto di partenza su configurazione e test di unità.

E l'Estrema Programmazione è stato incluso in circa 3 o 4 di classi che ho preso.Ricordo che tutto è cominciato con 12 diversi aspetti, a partire dalla coppia di programmazione per unità di test(vedi sopra).E ora sembra che il focus è su Agile.

Quindi la risposta breve è sì, ci sono scuole che hanno un approccio più pragmatico poi gli altri.

I test di unità e di controllo di versione sono stati entrambi insegnato nel 2 ° anno, corsi di informatica, dove sono andato all'università.Unità di test è sceso sotto la parte del test, che comprendeva anche le differenze tra il bianco e il nero scatola e una buona fetta dei voti 3 ° anno compiti di programmazione è andato per una buona gestione degli errori che possono facilmente venire da test di unità.

Di sviluppo Agile, può essere piuttosto difficile da insegnare in un ambiente accademico penso.Mentre ho fatto conoscere la Cascata metodo in teoria, io non sono riuscito a vederlo in campo fino a quando, dopo la laurea e si è trasferito nel mondo reale che può essere molto diverso dall'università, ad esempio,nel 3 ° anno faccio tutti i dispari casi di errore e quasi passare un incarico in cui non ho mai toccato il cuore di ciò che l'assegnazione cercato di insegnare a me a proposito di Semafori.

Inoltre, per quanto tempo è agile stato intorno e quale forma di agile volevi dire?Ci sono molte diverse implementazioni di esso da quello che ho visto.

Non credo agile programming è una moda, ma allo stesso tempo mi sarebbe difficile pensare a un modo in cui un insegnante può dare dei progetti per consentire di imparare..A meno che non le ha dato il progetto di costruzione di un, progetto B espandersi.Il problema è il tempo e la portata.In 4 mesi di corso sarebbe difficile.

Il controllo di versione e unità di misura metodi di prova sono in continua evoluzione e a seconda della lingua, o la persona che li definisce.

Le strutture di dati e algo sono qualcosa che può essere lavorato in un ambiente di classe.Onestamente troppo, prendono un po ' più di sforzo per capire poi i test di unità e di controllo delle versioni.Cercate di ricordare parte dell'università è quello di insegnare a insegnare a te stesso.Collage di non avere lo stesso mandato.O almeno non nella stessa misura.IMHO.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top