2009-06-04 12 views
10

Sto lavorando alla scrittura di applicazioni C# .NET per una piccola azienda. Per quelli di noi che non hanno una laurea in programmazione, cosa ci è mancato ci potrebbe richiedere anni per scoprire di insegnarci?Cosa mi sono perso non studiando informatica?

Ho una laurea in ingegneria elettronica, quindi non è che ho lasciato la scuola a 16 anni e mi sono seduto con Visual Studio. Ho coperto alcune C incorporate di base nei miei studi, algoritmi, sistemi di controllo, matematica, ecc. Ho solo la sensazione che ci debbano essere cose che dovrei sapere fare, ma non farlo.

risposta

16

Sono un collega di EE, ma mi diletto un po 'in informatica, così posso parlare di argomenti trattati in una laurea in informatica che non sono coperti in un diploma di EE.

Matematica discreta

Matematica per la programmazione è molto diversa dalla matematica per l'ingegneria. L'unica sovrapposizione ovvia è la probabilità discreta. Altri argomenti, come l'analisi degli algoritmi e la notazione di Big O, non sono solitamente trattati in corsi di matematica ingegneristica.

strutture dati e algoritmi

corsi di programmazione di progettazione di solito coprono semplici concetti algoritmici come ricorsione e dividere et impera (Quicksort e la FFT) e semplici strutture di dati come liste collegate e alberi. Un corso di informatica su strutture e algoritmi di dati coprirà ulteriori concetti algoritmici come la programmazione dinamica e strutture di dati aggiuntive come i grafici.

teoria della computazione

so argomenti come teoria degli automi e completezza (P, NP, etc.) sicuramente non erano coperti di mia laurea EE.

+0

La tua risposta copre le cose giuste provenienti da uno sfondo EE! – Tim

+0

Sì, aggiungerei a questo, anche i corsi di algoritmi avanzati. Ti lascia davvero guardare all'efficienza ... – Irwin

2

Ho lasciato la scuola a 18 anni senza alcuna laurea e ho trascorso 10 anni a programmare professionalmente con una varietà di lingue. Ho fatto questa domanda esatta a poche persone che hanno ottenuto Comp. Sci. o laurea in ingegneria del software. Finora l'unica cosa che ho scoperto di aver perso è stata l'esperienza di vita generale che si ottiene frequentando l'università.

Ho scoperto alcune persone che hanno fatto Comp Sci o simili e poi hanno intrapreso una carriera in un campo non correlato. Potrebbe essere che un corso Comp Sci ti aiuterà a decidere se questo è veramente per te.

+1

Mi chiedo se si potrebbe dire che se si lavora in uno scenario in cui le preoccupazioni algoritmiche sono molto importanti. – akappa

+0

L'università potrebbe essere un buon posto per imparare gli algoritmi; Non ho mai sentito nessuno dire che mi sono perso non avendolo imparato, ma poi non conosco molti giochi o programmatori scientifici. –

2

È difficile dire cosa vi siete persi poiché non ci sono segreti insegnati in corsi di programmazione che non possono essere letti anche altrove. Ma nella mia esperienza, le persone senza la giusta educazione spesso hanno problemi a cogliere concetti come la ricorsione, l'orientamento corretto degli oggetti, ecc. Inoltre usano spesso il proprio schema di denominazione ecc. Invece di seguire la pratica comune.

+1

Ovviamente può anche essere vero il contrario - a volte le persone con questa istruzione hanno difficoltà a adattarsi a certe differenze o vincoli di programmazione nel "mondo reale". –

+0

Sono d'accordo con Colin, alcune persone "istruite" sanno così tanto della teoria che non possono seguire gli standard di denominazione –

+0

Vere persone istruite spesso hanno difficoltà ad accettare che nel mondo reale, le cose non sono così semplici e perfette come erano in teoria. A volte sono così sicuri di se stessi che cercano di rendere tutto "perfetto", anche se ciò significa che la loro parte di programma sembra molto diversa rispetto al resto. Che ovviamente fa schifo perché non importa quanto sia brutto il resto, l'incoerenza lo rende solo peggiore. –

9

Bene ... Big O notation si sente come una di quelle cose che vengono insegnate in genere, ma che non si può raccogliere da soli.

Discrete mathematics potrebbe anche appartenere a quella categoria, insieme a statistics forse. Anche quelli potrebbero essere in EE, questa risposta è forse un po 'troppo pessimista. :)

+0

I metodi discreti sono stati una delle mie parti preferite del corso che ho fatto e lo trovo ancora molto utile. –

+0

Devo dire che la notazione Big O è una cosa che potresti imparare e applicare in un solo giorno, a meno che il tuo cervello non sia lesionato della matematica;) – akappa

3

Una formazione formale in ricerca operativa, complessità computazionale, alcuni elementi algoritmici "avanzati" (cache-ovvietà, data mining, ecc.) E una cultura sui problemi di concorrenza, che sono tipicamente coperti in OS e corsi di programmazione. Forse anche alcune buone pratiche di programmazione, ma penso che tu l'abbia già imparato.

Questi potrebbero o non potrebbero essere importanti, in base al tuo lavoro corrente, ma penso che la tua laurea ti consenta di studiare da solo queste cose.

2

Con una laurea avrai maggiori possibilità di ottenere posti di lavoro più alti. Avresti anche imparato molte cose teoriche, il che aiuta enormemente a identificare costrutti condivisi in diversi framework/linguaggi di programmazione. Una cosa che mi aiuta di più sono le informazioni generali che raccogli durante lo studio. Puoi rispondere a molte domande riguardanti argomenti per lo più sconosciuti semplicemente confrontandolo con cose più generali che hai imparato prima.

0

Quando si scrivono piccole applicazioni, è piuttosto semplice. Quando i progetti diventano più grandi, vieni sommerso di problemi, se non sai come applicare architetture, buoni progetti e così via. Quando le persone studiano, è anche una specie di pratica. È più difficile convincere i datori di lavoro ad assumerti se pensano di essere o potrebbero essere ancora nella fase di studio. Inoltre ci sono professori qualificati nelle università che conoscono molte informazioni importanti che potresti non aver pensato da solo, ma che potrebbero condividerle.

+0

Ho ottenuto questo lavoro con il mio diploma EE, ma ho scritto software per supportare il hardware per alcuni mesi. Non sono ancora sicuro se vorrei lavorare interamente sul software! – Tim

+1

Non sono d'accordo. I programmatori devono sempre continuare ad imparare. Qualsiasi datore di lavoro che ritenga di aver finito di studiare sarebbe stato terribile per cui lavorare. –

+0

Chiunque nell'industria Electroics/Computing non fosse interessato a imparare cose nuove sarebbe presto senza lavoro – Tim

3

Probabilmente l'unica cosa che ti manca è una teoria, anche se ne avrai ottenuto un po 'con il tuo grado EE.

L'uso della teoria nella programmazione pratica è oggetto di accesi dibattiti, di solito con quelli senza titoli da un lato che insinuano che non manchi nulla e quelli con titoli di studio che affermano di esserlo. Preferisco prendere la posizione media di non aver bisogno di una laurea, non imparerai segreti che sono impossibili da trovare altrove e quello che impari non è richiesto per un sacco di programmazione commerciale (come in quella non accademica) posizioni. Quello che fa è aiutare con un sacco di cose, come sapere perché un compito è difficile o impossibile o come funziona qualcosa in particolare. Agisce anche come una buona base per costruire il resto della tua carriera.

3

Penso che sia più il modo in cui funziona il nostro cervello - come analizza, cerca/trova soluzioni ecc ... La differenza tra programmatore con una laurea e senza di essa si attenua con il passare del tempo e la tua esperienza diventa più importante/informativo/solido su cui basare il tuo pensiero.

1

Ho iniziato a programmare professionalmente a tempo pieno dopo aver lasciato la scuola nel 1984, e non ho frequentato corsi di terzo livello fino ai primi anni '90. I temi principali su cui mi sono concentrato sono la gestione dell'IT e la matematica discreta, che ho trovato molto utile. La parte di programmazione effettiva era piuttosto debole, Pascal dal ritrovamento di libri di testo. Alcune delle classi di database erano piuttosto buone, normalizzazione, algerbra relazionale, ecc., Come l'analisi del sistema e la progettazione strutturata.

La mia sensazione è che senza un rigido cirriculum, si rischia di saltare molto di ciò che si potrebbe pensare noioso che in realtà è molto utile.

4

che su quello di non aver trascurato: le ragazze, feste ... solo scherzando;)

Penso che avere studiato EE le uniche aree si avrebbe bisogno di rafforzare sono quelli relativi al Software Architecture: UML, schemi, design ...

Sì, ci sono altre aree che ti mancheranno (compilatori, reti, ecc.) ma le conoscenze che potresti usare da loro impareranno a lavorare, non un grosso problema.

+1

Penso che i corsi EEE coprano probabilmente più reti che corsi CS. Ho seguito un corso che riguardava sia EEE che CS, le classi EEE erano molto più approfondite di quelle CS. Il resto della tua risposta è azzeccata. –

+0

Ops, il mio male, non aveva idea di aver coperto le reti in modo così estensivo. –

1

Solo supposizioni sulla tua situazione, ovviamente, ma trovo molto spesso che "Ho appena imparato a programmare e pratico da allora" i programmatori (una classe che include me, potrei aggiungere) sono a volte brevi sul strumenti forniti da un corso di compilatori (vedere Learning to write a compiler per le risorse). Il riconoscimento di questo mi è saltato addosso lentamente, ma guardando indietro su di esso questo è enorme.

La mia seconda preoccupazione per i programmatori informati è capire come funzionano i computer ai livelli bassi, ma se si sta facendo un lavoro integrato, immagino che abbiate (almeno!) Un buon inizio in quell'area.


Suppongo che suona inutile quando (nei commenti) descrivo questo come "il corso sulla scrittura di compilatori". Dopotutto, probabilmente penserai che non intendi scrivere compilatori, quindi stai bene. Ma questo corso fornisce davvero una serie di strumenti potenti e generali che puoi sfruttare in molte situazioni. Vedi How much of the compiler should we know?.

+0

cosa intendi per "corso di compilatori"? – Tim

+0

Il corso su come scrivere i compilatori. Lexers, parser e cosa fare con loro. Ci sono molte risorse su SO per questo materiale: http://stackoverflow.com/questions/1669/learning-to-write-a-compiler e altri ... – dmckee

8

Ho frequentato un'università, ma mi sono specializzato in psicologia e filosofia. Dieci anni dopo aver lasciato la scuola, ho preso i computer per hobby e ho trascorso moltissimo tempo semplicemente leggendo tutto quello che potevo mettere le mani su e provandolo da solo.

Dopo diversi anni, sono passato dal mio precedente percorso di carriera e ho iniziato a programmare professionalmente. Dopo quattro anni di lavoro, ho finito per lavorare in una grande azienda di software nella loro struttura R & D. I miei colleghi pensavano che avessi un M.S.in informatica, anche se non mi ero mai presentato come se ne avesse uno.

La mia conclusione è che la conoscenza è conoscenza. Puoi prenderlo da solo o frequentando la scuola. Ciò che è importante è che tu ce l'abbia, e avere la spinta per continuare a imparare indipendentemente dal fatto che tu sia a scuola o meno.

+0

"knowledge is knowledge" ... Mi è piaciuto quella! – Kensai

2

Mi sono laureato in EE e Comp Sci molto tempo fa :) Ci sono sicuramente cose buone che sei costretto a imparare in un corso di laurea in informatica, ma non è tutto. Ci sono cose concrete che non si imparano (vari pacchetti java, uso di Studio per il debug, sistemi di controllo del codice sorgente, pattern usati in framework specifici). Ma ci sono cose che impari che sono buone conoscenze fondamentali, anche se potresti non rendertene conto al momento (algoritmi, ecc. Come hanno postato le persone).

Ho anche cooptato (richiesto nel college di ingegneria di U.Cincinnati) che è stata una grande esperienza. Questo mi ha fatto capire che ci sono degli usi pratici in alcune delle cose apparentemente astratte che impari in classe, quindi ero più motivato a scuola di quanto avrei potuto altrimenti.

Mentre considero una laurea che di solito indica un certo livello di abilità di base, oltre a uno sforzo diligente, cerco di più quando intervisto. E ho conosciuto alcuni grandi sviluppatori che non avevano lauree, quindi non è sempre necessario. Inoltre, le università generalmente non coprono aspetti come gli aspetti sociali dell'ingegneria, o lavorano su sistemi molto grandi, e possono essere molto importanti in molte situazioni lavorative.

Essendo stato lontano per molto tempo, mi rendo conto che è facile dimenticare le cose che ho imparato a scuola o sul posto di lavoro. Il nostro settore continua a cambiare, quindi penso che leggere sul campo sia importante. E penso che leggere più ampiamente delle cose solo tecnicamente dettagliate sia importante. Ecco perché mi piace joelonsoftware. Di recente mi sono imbattuto nel suo sito e nei libri che ha scritto/scritto mentre cercavo modi per saperne di più sullo sviluppo del software.

Quindi consiglierei a tutti, in modo soddisfacente o meno, di leggere libri e articoli sullo sviluppo del software. Una delle mie lezioni di laurea in ingegneria del software ci ha fatto leggere cose come The Mythical Man Month, che è grandioso. Mi piacciono anche i libri sulla costruzione di software, come il codice completo di McConnell.Joel ha una buona lista di raccomandazioni sul suo sito:

http://www.joelonsoftware.com/navLinks/fog0000000262.html

4

Nella mia esperienza, 4 anni di vedere parti di codice o algoritmo pseudo-codice aiuta a sviluppare un istinto per la valutazione eleganza tecnica - si può dire buone idee dalle cattive idee più velocemente. È importante poter scartare una cattiva idea cinque minuti dopo averlo pensato, anziché dopo cinque mesi di tentativi per farlo funzionare.

Problemi correlati