Come essere un programmatore di successo senza una laurea in CS [chiuso]


46

Disclaimer (leggere prima di saltare per rispondere):

Ho visto una serie di domande simili a quella che vorrei porre, quindi ecco alcune domande simili .

IMHO Non sono né completamente ciò che sto chiedendo, né sono accurati come spero di essere (non intendo spazzare via le risposte alle domande seguenti, né scredito i richiedenti, voglio solo essere un un po 'più approfondito):

Un diploma CS può essere di beneficio a un programmatore più anziano?

https://softwareengineering.stackexchange.com/questions/80024/importance-of-certifications-for-java-programmer-without-bs-degree

https://softwareengineering.stackexchange.com/questions/81591/in-the-absense-of-a-cs-degree-how-can-i-fill-in-the-gaps-so-to-speak

Importanza del grado CS quando si applicano per lavori di sviluppo?

Vorrei essere chiaro, non sto chiedendo quanto segue:

  • Come insegnarmi a programmare da zero (senza una laurea in CS)
  • Come commercializzarmi come un buon sviluppatore di software (senza una laurea in CS)
  • Come ottenere un ottimo lavoro pagante come sviluppatore di software (senza una laurea in CS)

Un piccolo contesto:

Ora che ho delle esclusioni di responsabilità, lasciami chiarire la mia domanda, iniziando con una breve storia della mia esperienza come sviluppatore di software.

Prima di tutto, sono stato incredibilmente fortunato. Mi sono state offerte diverse opportunità di lavoro (un paio di pesanti progetti PHP / MySQL back-end e diverse app WP7 in XAML / C #) attraverso le quali ho davvero imparato tutto ciò che so sullo sviluppo del software. Quasi tutti i lavori di sviluppo software che ho avuto erano quelli che non ero legittimamente qualificato ad avere (e l'ho chiarito ai miei datori di lavoro prima che mi assumessero). Non voglio riconoscermi dove non è dovuto, ma direi che l' umiltà perfetta rinuncia alla modestia .

In quasi ogni singolo lavoro di sviluppo che ho avuto, ho superato le aspettative del mio datore di lavoro e ho dimostrato di essere una risorsa preziosa. Ci sono ovviamente delle eccezioni 1 . Ma il mio punto è che sono abbastanza intelligente e sono stato in grado di insegnare a me stesso ciò che dovevo sapere per avere successo nel mio lavoro. Con ogni lavoro che ho svolto, mi sono allungato sempre di più.

Frequento il campus di Seattle all'Università di Washington e attualmente sono al mio quarto anno con due anni rimanenti, lavorando a una laurea in matematica. Durante i vari lavori che ho avuto (vedi il mio curriculum se vuoi quella lista) ho anche frequentato la scuola come studente a tempo pieno.

Come penso che la maggior parte degli sviluppatori sarebbe d'accordo, studiando i tipici corsi di laurea generali, compresi i corsi di programmazione introduttiva ASSOLUTAMENTE PALES rispetto a scrivere codice reale, costruire 2 prodotti reali , lavorare con persone fantastiche e influenzare positivamente la vita degli utenti 3 .

Quindi ... come vanno le cose ... ho trascorso molto più tempo ed energie a lavorare invece di concentrarmi sui miei studi. A volte mi esibivo in modo orribile , ma per la maggior parte riuscivo a rimanere a galla con i miei voti.

Tuttavia, il programma di informatica presso UW è molto , molto , molto , molto competitivo.

Quindi, non è stata una sorpresa per me quando sono stato respinto dal programma. Due volte. Ironia della sorte, la stessa finestra di mezz'ora in cui ho ricevuto il sempre gentile, sebbene scoraggiante avviso di rifiuto via e-mail, ho ricevuto una telefonata da Amazon che mi offre uno stage estivo 4 come SDE.

Mentre mi guardo intorno ad altri "signori della mia età (21), che condividono gli stessi obiettivi di me stesso nello sviluppo del software, mi trovo abbastanza bene su dove sono, cosa sto imparando, chi sono e cosa Posso fare. Naturalmente ci sono molti 21enni molto più brillanti là fuori di me, non intendo dire che mi distinguo in mezzo alla folla, ma solo che mi sento come se non fossi spaventosamente dietro i progressi del mio pari medio .

Sono fiducioso della mia capacità di avere successo nel mondo del software. Ancora più importante, mi sento fiducioso nella mia capacità e desiderio di continuare a crescere, imparare ed essere imbarazzato umilmente quando ne ho davvero bisogno.

Laurea in matematica

Mi ritrovo a seguire una laurea in matematica con l'unico scopo di conseguire una laurea. Ci sono quelli che dicono che dovrei abbandonare e iniziare a lavorare ora (come ho avuto l'opportunità di fare), e ci sono quelli che dicono che dovrei davvero finire la mia laurea. Ho deciso di andare avanti con la mia laurea per ragioni completamente diverse da quelle che entrambi i campi tendono a sollevare, quindi per favore non incoraggiarmi in un modo o nell'altro su quella questione. Considera il problema "chiuso" :)

* RESPIRO PROFONDO * ... scusa se è più lungo di quanto mi aspettassi.

Questo in sostanza, è la mia domanda:

  • Come posso determinare oggettivamente quali aree di studio, conoscenze generali e altre competenze avrei acquisito attraverso una laurea in CS di cui potrei o meno mancare ora?
  • Come faccio a ordinare queste abilità in ordine di importanza?

  • Qual è il modo migliore (nei prossimi due anni) di integrare la mia istruzione per raggiungere quegli attributi in modo tale da eguagliare o addirittura superare il livello di un corso di laurea in CS da una delle migliori università?

Ecco i passaggi che sto già eseguendo:

  1. Chiedi alla community di sviluppo (questo post)
  2. Perseguire tutoraggi con sviluppatori esperti che condividono con me un percorso di carriera simile
  3. Definire obiettivi di "apprendimento" a breve e lungo termine e programmi successivi che delineano argomenti di studio
  4. Continuare a scrivere codice e lavorare su progetti di cui sono appassionato

Se sei arrivato così lontano, meriti un biscotto :) Apprezzo che ti porti dietro.

Quindi ... comunità di sviluppo, sviluppatori esperti, compagni di studio che sono nella mia stessa barca, che consiglio avresti?

Inoltre ... tieni presente le mie dichiarazioni di non responsabilità nella parte superiore di questo post su ciò che NON sto chiedendo.

Aggiornare:

Mi rendo conto di non aver fornito parametri molto concreti per ciò che ritengo una "risposta" riuscita alle mie domande. Penso che la domanda sia molto vaga e potrebbe giustificare una serie di risposte "corrette".

Dopo un periodo di tempo ragionevole selezionerò la risposta che si adatta ai seguenti attributi:

  • Spiega il perché della loro risposta
  • Può parlare da un certo livello di esperienza (sia che si tratti di assumere / interagire o essere qualcuno che ha / è nei miei panni)
  • È conciso ma completo, fornisce principi generali preferibilmente accoppiati con esempi specifici
  • Infine, considerando la lunghezza che sembra richiedere la corrispondenza di quanto sopra, si prega di renderla una buona risposta ben comunicata che è piacevole da leggere. Altri che potrebbero essere interessati a questo in futuro, spero che siano intrattenuti e istruiti dalla risposta.

Quindi ci sono alcuni parametri per "corretto". Sono molto alti, penso, ma li ho progettati come una sorta di contorno per quello che immagino che la risposta "migliore" sarebbe. Ovviamente, dato il tempo sufficiente, selezionerò la risposta corrispondente più vicina come "risposta".


(1) - Ho lavorato su una versione precedente di questo sito Web, e mentre non ne avevamo un esplicito 
      conversazione a riguardo, ho sentito che non ero in grado di fare molto bene (questo può essere 
      evidenziato dal fatto che da allora hanno completamente cambiato il loro sito Web)
(2) - In primo luogo, sì, è un prodotto reale (anche se sto scrivendo questo post in Chrome ...) e
      prende a calci in culo. In secondo luogo, ero uno sviluppatore del liceo in fase di test, ha scritto la prova
      codice concettuale per alcune delle nuove funzionalità di IE8 ... così è stato un po 'di tempo fa.
(3) - Al momento di questo post sono lo sviluppatore che ha scritto questa app, non lo sono più
      responsabile della sua base di codice
(4) - Il mio stage inizierà nel giugno del 2012 e lavorerò nel Web Store 
      squadra.

17
Il mondo ha bisogno di più programmatori con una laurea in matematica. Disse Nuff.
Pieter B,

1
Il mercato per gli psicologi e altri servizi di consulenza o consulenza individuali deve essere enorme. Sto pensando di cambiare lavoro ...
Ingo,

16
Inizia modificando questa domanda e tagliandola a metà.
JeffO,

8
@PaulHazen una volta rimosso il tuo background estremamente dettagliato e il contenuto della dichiarazione di non responsabilità e arrivando alle tue domande reali, ti stai ponendo tre cose: come determinare cosa ti manca dal non avere un diploma CS, come ottenere ciò che ti manca e come stabilire le priorità per ciò che ti manca. Tutte e tre le domande sono completamente coperte dalla domanda duplicata. Se non ti piacciono le risposte, offri una generosità : ecco a cosa servono.

7
@PaulHazen In alternativa, se siete non interessato alle domande che hai elencato (che sono duplicati della domanda precedente), rivedere la tua domanda per chiedere espressamente solo di qualcosa di nuovo. La tua domanda soffre di troppe informazioni - la maggior parte delle quali probabilmente non è necessaria al problema che stai riscontrando - e dovrebbe essere abbinata per porre domande su un problema molto specifico che stai riscontrando che non è già coperto da altre domande.

Risposte:


17

OK, trovo troppo allettante per non rispondere alla tua domanda, quindi eccomi qui ...


Prima alcune cose su di me


Ho 26 anni e grazie a mio padre (a proposito, un matematico e attualmente lavora come professore) ho avuto la possibilità, sin dalle primissime fasi della mia vita, di stare al computer. (nel 1986 quando nacqui, anche se non era la cosa più comune a quei tempi, avevamo sempre uno o due computer a casa). Detto questo, e - ovviamente a causa della mia natura curiosa e incline alla matematica / orientata alla risoluzione dei problemi - non passò molto tempo prima che mi trovassi innamorato della programmazione. Prima con Pascal, all'età di 7-8 anni e poi praticamente tutto il resto è appena seguito.

Innanzi tutto, lasciatemi dire che, a scuola, ho sempre eccelso in tutto ciò che riguarda la matematica, semplicemente perché mi piaceva e, onestamente, potevo facilmente seguire l'esempio di mio padre e diventare anche un matematico. Ma ciò non è accaduto.

Quello che è successo è stato probabilmente il più grande errore della mia vita (finora): come lo chiameresti quando qualcuno innamorato del codice , che parla più di 15 lingue e ha scritto migliaia di righe di codice (dai compilatori ai micro-kernel e al web quadri) all'età di 18 anni, all'improvviso (i motivi sono ancora troppo oscuri nella mia mente, ma l'influenza generale, anche se sottile, del tuo ambiente non è mai troppo trascurabile) decide di intraprendere una carriera in Medicina ? Immagino un "errore".

Il risultato? 5 anni dopo (a 23 anni) e 1 anno prima di terminare la mia laurea in medicina (lavorando sempre su progetti di programmazione open source personale come hobby per tutto il tempo), ho deciso di averne abbastanza e ho deciso di smettere. E non solo odiavo così tanto questo nuovo campo (medicina), ma c'era anche qualcosa di inquietante in tutta questa situazione, un prurito insaziabile nascosto nel profondo ... ( cosa sarebbe stato se ...? ) Inoltre, mi ero appena reso conto che il mio hobby , quello che consideravo grande ma che non avevo nemmeno immaginato come un vero lavoro, non poteva solo portare un po 'di soldi, ma portarmene molti + rendermi felice come individuo. Quindi, ho deciso di smettere. (= la scelta migliore, anche se un po 'in ritardo, l'ho mai fatta).

Quindi, eccomi ora, una volta che sarò un medico (psichiatra sull'orlo di un esaurimento nervoso per essere precisi; stupido me!) Che sta per ottenere una laurea in CS (al mio terzo anno in realtà; e, onestamente, perseguirlo per non mancare di quelle temute qualifiche tipiche ...) e un professionista più che felice che lavora su qualcosa che adoro e sicuramente l'argomento su cui devo offrire di più.


Alcune osservazioni (dalla mia esperienza)


  • La programmazione è uno dei pochissimi campi in cui quelli veramente buoni troveranno sempre la loro strada, qualunque cosa accada. E sicuramente NON si tratta di qualifiche tipiche (onestamente, se avessi un'azienda e volessi reclutare programmatori, posso facilmente dire chi è bravo in pochi minuti, indipendentemente dal fatto che abbia o meno una laurea)

  • Quello che serve per essere un buon programmatore è: intelligenza orientata alla matematica (ma NON matematica stessa) e passione (che renderanno le infinite ore di studio un piacere invece di un peso; e, anche se non me ne sono reso conto, fiducia io ho studiato tonnellate di materiale sull'argomento nella mia vita, puramente per conto mio) . L'istruzione formale è una cosa carina, ma è un po 'sopravvalutata. Gli ingredienti fondamentali del successo sono i primi due.

  • La matematica è sicuramente dove CS è nato. Ma CS non è più solo matematica. Ho sempre avuto un forte cervello orientato alla matematica, ma non sono affatto un guru della matematica. E onestamente, nella programmazione di tutti i giorni (a meno che tu non stia costruendo un motore grafico o qualcosa di troppo localizzato) molto probabilmente non avrai mai bisogno di altro che una semplice aritmetica (addizione, sottrazione, moltiplicazione, divisione, modulo) e alcune cose sulle matrici. (molti non saranno d'accordo con me, probabilmente matematici o programmatori troppo orientati all'accademia, ma sicuramente padroneggiare il calcolo NON è quello che serve per essere un buon programmatore). Avere una buona preparazione matematica forse ti aiuterà, ma NON a causa della matematica stessa; ti aiuterà esclusivamente sulla base di una cosa comune che condividono questi due campi: abilità di problem solving.

  • La matematica è una scienza (e una scienza che rispetto).

  • La programmazione è un'arte. (E anche una scienza applicata, se insisti) Ma tienilo a mente: un'arte - ed è così che l'ho sempre trattata. E come per tutte le arti, non può essere insegnato. Potrei insegnarti il ​​modo formale di disegnare una faccia e renderti migliore della media, ma ciò non ti renderà né un Da Vinci, né un Klimt. I Mona Lisas sono dipinti da Da Vincis e non da pittori attentamente istruiti. Il grande codice è scritto da grandi artisti del codice. E abilità e devozione possono facilmente bilanciare l'educazione formale.


Quindi, cosa ci vuole per diventare un buon programmatore * davvero *?


  • Essere intelligenti, grandi capacità di problem solving e passione per la materia (se non ce l'hai, lasciala; essere mediocre non è una scusa)
  • Molto tempo da dedicare all'argomento
  • Studiare tutto il tempo ("semplicemente non lo saprai mai tutto; e nota: perché" studiare "deve essere in qualche modo correlato? Ho sempre trovato molto più piacere fare le cose secondo il mio ritmo ... )
  • Scrivere codice continuamente (non importa quanti libri hai letto; il tuo livello di codifica è direttamente equivalente alla quantità di codice che hai scritto)
  • E ancora, AMORE per l'argomento (se non lo ami abbastanza, e intendo davvero adorarlo, tutto quanto sopra diventerà prima o poi insopportabile; per me, codificare come lavoro è ancora come essere pagato per .. guardare film: assolutamente assurdo ma semplicemente fantastico)

Sulle tue domande


  • Come posso determinare oggettivamente quali aree di studio, conoscenze generali e altre competenze avrei acquisito attraverso una laurea in CS di cui potrei o meno mancare ora?

Tuttavia, dovrei davvero sapere cosa include la laurea in matematica, vorrei riassumere ciò che molto probabilmente ti mancherà da una laurea in CS (come corsi / materie / ecc. - ispirata al programma di studi della mia università ) in nessun ordine particolare :

  • Logic Design of Digital Systems (alcuni circuiti di basso livello, e / o / xors / etc - apparentemente non troppo correlati, ma comunque molto educativi)
  • Architettura del computer (insieme ad alcuni codici Assembly; molto probabilmente non lo userai mai , ma non puoi dire quanto possa modellare il tuo atteggiamento di programmatore)
  • Strutture di dati (dall'elenco collegato, agli alberi complessi, ecc.; Per quanto possano sembrare semplici, prima o poi avrai bisogno di un buon background su queste; usare soluzioni pronte che non capisci non è qualcosa di un buon programmatore farebbe)
  • Compilatori (sì, compilatori! Scriverai mai un compilatore? Probabilmente no; ma se non riesci a scriverne uno, non saprai mai davvero come funzionano le cose ...)
  • Sistemi operativi (come sopra)
  • Reti di computer
  • Intelligenza artificiale e sistemi esperti (molto probabilmente non codificherai mai anche in Prolog; ma è ancora una delle cose che potrebbero modellare il tuo cervello codificante e fargli vedere le cose da una prospettiva radicalmente diversa)
  • Come faccio a ordinare queste abilità in ordine di importanza?

Sapere a cosa dare la priorità in un campo in continua evoluzione come CS sarà sempre una scommessa - un gioco d'ipotesi .

Scopri cosa vuoi fare e fidati del tuo istinto. Certo, avere una solida conoscenza di base è un must. Ma quello che approfondirai, dipende interamente da te. Inoltre, pianifica attentamente la tua carriera: se vuoi essere impiegato, scegli il tuo obiettivo e sii bravo a farlo (ad es. Voler essere impiegato da Google e non sapere come leggere un semplice script Python è probabilmente una di quelle situazioni no-go ) . Se stai iniziando qualcosa da solo (un'azienda), allora non hai un "capo" da soddisfare; scegli quello che ti si addice meglio.

Ad esempio, se vuoi fare qualcosa legato al web, ti consiglio vivamente di scegliere: PHP / MySQL / HTML / CSS / JavaScript (+ jQuery / AJAX) . Ma sono solo io. A qualcuno potrebbe piacere (o vedere più futuro in) Ruby / Rails che in PHP.

Ad esempio, ora sto principalmente codificando Objective-C / Cocoa . Ti consiglierei di proseguire? Sicuramente no. Cioè: a meno che tu non sia interessato ai Mac o desideri una carriera vendendo software per Mac / iPhone. Se ti interessa lo sviluppo di Windows, scegliere C # / .NET Framework sarebbe probabilmente la scelta migliore. (se vuoi avere un'idea di ciò che mi interessa maggiormente, dai un'occhiata al mio profilo StackOverflow )

  • Qual è il modo migliore (nei prossimi due anni) di integrare la mia istruzione per raggiungere quegli attributi in modo tale da eguagliare o addirittura superare il livello di un corso di laurea in CS da una delle migliori università?

Studia molto (libri, internet, codice di altre persone, qualunque cosa) e scrivi più codice che puoi.

Ah, e cerca di trovare un lavoro in qualsiasi codice correlato. (Ho iniziato a lavorare come libero professionista ed è stata un'esperienza davvero preziosa, solo per vedere come funzionano davvero le cose nel mondo reale).


Solo i miei 2 centesimi amichevoli ... :-)

Sidenote: So che alcuni dei miei punti possono sembrare controversi e sono sicuro che ci saranno molti che non saranno d'accordo con me. Questo è accettabile Ma ciò non cambia il modo in cui vedo le cose, e soprattutto le cose che amo.


Questo e 'esattamente quello che stavo cercando. Grazie! Quasi tutte le altre risposte erano buone, pochissime contenevano tutto ciò che era sbagliato o inutile. Aggiornerò la domanda per includere una piccola sezione sul perché ho scelto questo, e un link a un post sul blog che lo approfondisce in modo più dettagliato (il motivo per cui ho messo una spiegazione del genere sul mio blog anziché sui programmatori è dovuto al già ENORME lunghezza del post, così come il numero crescente di moderatori interessati che già ritengono che la domanda non sia adatta a questo sito). Tieniti aggiornato. E grazie ancora.
Paul Hazen,

@PaulHazen Sei davvero il benvenuto! Sono contento di aver aiutato (SE l'ho fatto) ... (Ora, per quanto riguarda la ENORME lunghezza della mia risposta ... argh ... Il sistema lo ha riconosciuto automaticamente come un post "wiki della community" e sto cercando di ottenere i moderatori lo riportano al suo stato iniziale: una risposta semplice - anche se un po 'ri-modificata - risposta)
Dr.Kameleon

Su meta ( meta.programmers.stackexchange.com/questions/3513/… ) li sto effettivamente incoraggiando a spostarlo verso una destinazione più appropriata. Secondo le FAQ ufficiali la domanda non è appropriata per questo forum. Tuttavia, osservando l' uso di fatto dei programmatori, ritengo sia opportuno essere qui. I moderatori possono decidere dove si adatta meglio. Per riassumere il mio pensiero in movimento esso: Secondo quanto programmatori è supposto per essere non appartiene qui, ma in base a ciò programmatori è si adatta perfettamente.
Paul Hazen,

@PaulHazen Beh, almeno per me (anche se non sono affatto un esperto di cose SO), sembra assolutamente appropriato.
Dr.Kameleon,

Sì, mi limiterò a sollevare le mani in aria. Fintanto che le persone possono usare google o stack exchange per trovare almeno le risposte, sono felice. Il contenuto deve essere facilmente individuabile in futuro da persone che hanno la stessa domanda.
Paul Hazen,

18

Come posso determinare oggettivamente quali aree di studio, conoscenze generali e altre competenze avrei acquisito attraverso una laurea in CS di cui potrei o meno mancare ora?

Sfoglia il curriculum del dipartimento CS presso UW, prendi in prestito e naviga attraverso la lettura richiesta, guarda gli esami precedenti e le esercitazioni di laboratorio (compiti a casa). Se non hai idea di come affrontare il problema, hai un buco nella tua conoscenza.

Come faccio a ordinare queste abilità in ordine di importanza?

Pensa al tipo di programmazione che vorresti fare in futuro. Se sei felice di creare siti Web e applicazioni CRUD, sembra che tu abbia già tutte le conoscenze di cui hai bisogno.

L'educazione CS entra in scena se sei interessato a capire come database [distribuiti], web server, compilatori e interpreti, sistemi operativi, protocolli di rete ecc. Funzionano sotto il cofano e sei interessato a costruire tali sistemi tu stesso.

Qual è il modo migliore (nei prossimi due anni) di integrare la mia istruzione per raggiungere quegli attributi in modo tale da eguagliare o addirittura superare il livello di un corso di laurea in CS da una delle migliori università?

Non lo so. Per me, il più grande vantaggio dell'università è stato quello di 1) ampliare i miei orizzonti (ho dimenticato il 90% dei dettagli che ho imparato all'università, ma ricordo concetti e idee) e 2) mantenere la mia motivazione intrinseca per imparare le cose da calante: è più facile mantenere alta la motivazione quando si lavora verso un obiettivo - esame, un altro esame, ecc. fino al conseguimento del titolo. (Inoltre, strutturare l'autoeducazione non è un compito facile.)

[Aggiunto: scegli un'università di cui desideri seguire il programma CS, scegli corsi su argomenti che ti interessano e segui tu stesso il curriculum: compiti a casa, esami, ecc. La maggior parte dei corsi pubblica diapositive di lezioni e compiti / esami di anni precedenti .]

Un consiglio però: NON rinunciare alla laurea in matematica. Qualsiasi persona brillante può insegnarsi a programmare, ma la matematica ti darà un vantaggio competitivo se dovessi mai voler lavorare su applicazioni diverse da CRUD / frontend, ad esempio simulazioni fluide e meccaniche, computer grafica, elaborazione di immagini, riconoscimento e applicazioni di apprendimento automatico, (anche finanze!) ecc.

AGGIORNAMENTO 2 - esperienza [lunga]: ho conseguito un master presso la facoltà EE: i primi due anni erano curriculum comune (fisica, ingegneria elettrica, elettronica analogica e digitale e molta matematica - algebra lineare; matematica discreta; reale, vettoriale e analisi applicata complessa.) Questo è stato molto prezioso, esp. la parte EE ed elettronica - mi ha permesso di lavorare su progetti misti HW-SW e collaborare con i progettisti HW è stato molto eccitante. Non ho contribuito alla progettazione di HW, ma sono stato in grado di seguire il designer HW "eseguendo il debug" del suo diagramma schematico e porre domande sensate [non eravamo sicuri se il bug fosse in SW o HW - si è scoperto che era in HW: -)].

Quindi le linee si ramificarono e scelgo la linea CS. Alcuni dei "dettagli" hanno contribuito a radicare i concetti (ad esempio, "eseguire manualmente" l'algoritmo di Dijkstra). Inoltre ho imparato i dettagli su come funzionano le CPU (segnali di bus, interpretazione dei diagrammi di bus, esecuzione, ecc.) Sull'esempio di Motorola 68000 obsoleto, già allora, ma i concetti appresi attraverso i dettagli non sono molto diversi per le moderne CPU.

Altri dettagli, esp. Le implementazioni SW (ad esempio, l'implementazione di Dijkstra), sono state per me [da quando sono diventata abbastanza brava a scrivere codice nelle scuole superiori] un esercizio inutile nel debug e hanno contribuito ZERO alla comprensione dei concetti.

E poi mi sono iscritto al programma di dottorato, dove ho dovuto seguire corsi obbligatori. Sono stato deluso dalla scelta dei corsi, dal momento che molti di loro sembravano più orientati verso le esigenze del settore (ad esempio, utilizzando Python per l'analisi dei dati scientifici - grazie, posso programmare e sono molto in grado di insegnare a me stesso - - che ha comportato ancora un sacco di programmazione inutile) rispetto all'insegnamento di concetti fondamentali (fortunatamente, ho approfondito corsi di ottimizzazione discreta, analisi statica dei programmi e analisi formale con Promela).

Quindi, alcuni dettagli sono stati utili per incorporare concetti e alcuni erano un onere assolutamente inutile (un altro esempio: programmare la comunicazione seriale tra due computer. Ero già abituato a leggere e interpretare le specifiche HW e programmare HW attraverso i registri, quindi era giusto. È noioso, forse sono ingenuo nel ritenere che gli ingegneri CS per diventare media non debbano essere istruiti su come leggere i documenti HW).

In conclusione: esponiti a molti concetti diversi (idee di alto livello) e vai nei dettagli per quelli a cui vuoi dare la priorità e diventare estremamente bravo. [NON PUOI essere estremamente bravo in tutto!]


+1 di sicuro. Nonostante abbia dimenticato il 90% dei dettagli, diresti che l'esperienza di apprendere quei dettagli è ciò che ha radicato i concetti e le idee, o sarebbe più prezioso investire tempo nell'apprendimento di meno dettagli e idee più concettuali / di livello superiore ?
Paul Hazen,

@PaulHazen Vedi la nuova modifica (a partire da UPDATE2 - non si adattava al campo dei commenti;))
zvrba

Molto affermativo dei passi che sto attualmente facendo. La sezione aggiunta è preziosa. Sento che l'elenco delle cose su cui voglio imparare i dettagli è troppo lungo per essere ragionevole, storicamente ho un problema di scoping a questo proposito. C'è un buon modo per guardare al settore e identificare quali argomenti all'interno di quelli che mi interessano sarebbero più utili per conoscere i dettagli? O diresti che non importa davvero quali imparo, purché mi immerga in profondità su un set più piccolo di loro? Sembra che l'industria possa essere difficile da prevedere al riguardo.
Paul Hazen,

1
Cercare di prevedere l'industria è un gioco perso in anticipo [ad esempio, non sono sicuro che qualcuno avrebbe potuto indovinare che Twitter - (quasi) clone IRC per il web - sarebbe diventato una tale moda. È ancora un mistero per me come intendono fare soldi a lungo termine.]. Devi fare una scelta proattiva su quale tipo di lavoro ti piacerebbe fare e scoprire cosa serve per ottenerlo. Come? Trova qualcuno che sta già lavorando nel tuo obiettivo industriale (y | ies) e parla con loro.
zvrba,

1
@Paul I concetti sono vitali, ma i dettagli (di solito) non lo sono. Puoi cercare i dettagli quando ne hai bisogno, ma devi imparare il quadro generale per sapere che c'è qualcosa che vale la pena cercare nella zona in primo luogo.
Donal Fellows il

7

Intervista e partecipo al reclutamento di un sacco di giovani appena usciti dal college. Devo ancora assumere qualcuno in base alle competenze in materia acquisite da qualsiasi programma abbiano preso. La ragione di ciò è semplice: nessun programma CS (o qualsiasi altro programma) che ho incontrato insegna qualsivoglia abilità concreta connessa alla programmazione o allo sviluppo di software a livello professionale e commerciale . Essere in grado di elaborare modelli e soluzioni per complesse equazioni differenziali e scrivere algoritmi di ordinamento ottimizzati per scopi speciali può avere un valore accademico e / o scientifico, ma non ha alcun impatto sullo sviluppo generale del software.

Cosa cerco allora? Beh, mi aspetto che un laureato abbia perfezionato l'arte dell'apprendimento. Questo è, dopo tutto, ciò che un buon college dovrebbe insegnare ai suoi studenti. Come analizzare e scomporre i problemi generali in componenti logici e discreti prevedibilmente risolvibili. Un approccio metodico per trovare, valutare, organizzare e applicare conoscenze e informazioni verso una soluzione.

Inoltre, cerco persone che capiscano che un gruppo di persone, che lavora insieme e comunica, vale molto di più della somma dei suoi individui. Ciò richiede maturità, umiltà e capacità di dare e chiedere aiuto.

Quindi, per tornare all'ambito della tua domanda: mentre una laurea in CS potrebbe migliorare le tue possibilità di ottenere quella prima intervista dal college, trovo che abbia poco o nessun effetto sul tuo successo o competenza come sviluppatore. Ho sempre seguito la filosofia "assumere per l'atteggiamento, allenarsi per l'abilità" ed è stata pagata bene.

Il mio consiglio: continua con la tua laurea in matematica se è qualcosa che ti interessa. Qualsiasi educazione scientifica ti servirà bene, quindi scegli quello che ti piace di più in quanto è quello che più probabilmente eccellerai. Quindi concentrati sull'apprendimento delle cose importanti: come imparare, come analizzare e come affrontare la soluzione dei problemi un modo strutturato, come interagire e cooperare con altre persone, come assumere la leadership e la responsabilità per la consegna sia dei propri che dei compagni di squadra. Il resto è solo tecnologia e codifica, gli strumenti del mestiere. Quelli che puoi e imparerai da solo. Acquisisci e studia alcune conoscenze di uso generale, come modelli di progettazione popolari e paradigmi architettonici. Inizia a scrivere programmi per esercitarti. Scegli una base linguistica e tecnologica abbastanza aggiornata, ma non commettere l'errore di pensarla " s quello finale che imparerai. Strumenti e lingue cambiano continuamente, quindi lo sviluppo del software è comunque un costante processo di apprendimento.


Sarebbe giusto dire che dal tuo punto di vista non c'è quasi nulla all'interno di una laurea in CS che di per sé sia ​​utile per diventare un programmatore di successo? Al momento mi piace la tua risposta al meglio, sicuramente hai colpito molte delle cose che sto cercando di capire e capire. Potresti dare qualche ulteriore contesto a quale area all'interno di CS per la quale stai reclutando? Immagino che i recruiter che assumono nuovi laureati per lavorare sui sistemi operativi possano avere prospettive diverse rispetto a te (ma potrei sbagliarmi totalmente). Apprezzo il tempo che hai impiegato, questo è molto utile
Paul Hazen,

Lavoro per una società di consulenza IT che si recluta abbastanza pesantemente nella fascia di esperienza 0-1 anni. Non posso rispondere con fiducia riguardo ai negozi di sviluppo del sistema operativo (quanti ce ne sono?) Ma suppongo che lo stesso vada lì, se sono intelligenti. Pochissimi laureati avranno abbastanza abilità in materia per essere competitivi solo su quello, quindi assumi per atteggiamento, potenziale e capacità di apprendimento.
pap

Interessante. Ti ho dato un "+1", e mi piace quello che hai da dire più di chiunque altro, tuttavia stai rispondendo più accuratamente alla domanda "Come posso entrare con successo nel campo dello sviluppo del software" Informazioni preziose per essere certi , ma il mio interesse è capire gli attributi di un programmatore di successo , non gli attributi di un programmatore desiderabile (sì, ovviamente anche i programmatori di successo sono auspicabili, ma non sempre vanno al contrario).
Paul Hazen

Non assumo persone che non penso abbiano già successo o abbiano il potenziale e la capacità di avere successo. Quindi per me "desiderabile" e "successo" sono la stessa cosa. Se qualcuno sta reclutando secondo altri criteri, ha torto o male a individuare i talenti. Ad ogni modo, probabilmente non è un buon posto di lavoro. La chiave, tuttavia, come datore di lavoro è sapere come sfruttare il potenziale del tuo personale e convertirlo in un vero successo. È un mix di formazione, tutoraggio e coaching e se non lo hai, non importa quanto siano talentuose le persone che assumi.
pap

7

In sostanza, questa è la mia domanda: come posso determinare oggettivamente quali aree di studio, conoscenze generali e altre competenze avrei acquisito con un diploma di laurea specialistica in cui potrei o meno mancare ora?

risposta 1

Se impari qualcosa di nuovo dal tuo studio. Quindi puoi obiettivamente dire che hai ottenuto questo attraverso un grado CS.

A1. Il perché

Una laurea in CS concettualmente riguarda l'apprendimento. Se si ritorna da una laurea in CS senza differenza netta, il suo obiettivo principale non viene raggiunto. Gli esami e i corsi sono la misura "ufficiale" di ciò che è stato appreso. Tuttavia, la comprensione individuale (ho imparato qualcosa di nuovo?) Dovrebbe essere una misura obiettiva migliore.

A1. L'esperienza

Sono stato entrambi al mondo accademico e ora lavoro professionalmente. Ho scelto un Master in Informatica perché volevo espandere la mia comprensione e ho una passione per l'apprendimento.

Il mio mondo si è espanso come risultato di ottenere un Master in informatica. Anche il mio mondo si è espanso dal lavoro professionale.

Come faccio a ordinare queste abilità in ordine di importanza?

Risposta 2

L'importanza è relativa su chi sta ponendo la domanda e per quale situazione. Se è per la crescita personale , allora è tutto importante. Se è per l'industria, allora cose come algoritmi e buone pratiche software OOP / standard sono importanti.

A2. Il perché

La "portata" dell'importanza dipende fortemente dal "contesto". Senza un contesto, i meriti delle competenze sono difficili da ordinare.

A2. L'esperienza

Ho scoperto che le competenze ottenute da "università" vs "sul campo" sono diverse. Le "abilità" nell'università sono più "teoria", dall'industria è più "pratica". Per questo motivo, questa differenza significa che le abilità sono effettivamente classificate in modo diverso in termini di importanza.

Qual è il modo migliore (nei prossimi due anni) di integrare la mia istruzione per raggiungere quegli attributi in modo tale da eguagliare o addirittura superare il livello di un corso di laurea in CS da una delle migliori università?

Risposta 3

Spingiti oltre il punto di rottura e quando ti spezzi continua a spezzarti di nuovo.

Cosa voglio dire?

Se arrivi a un punto in cui non capisci, allora ti sei rotto. Continua a imparare fino a quando non capisci. Quindi spingi oltre fino a trovare qualcos'altro che non capisci (all'infinito) .

A3. Il perché

Se impari e rimani solo entro i tuoi limiti, sarai solo "ok". Non vuoi essere solo "ok". Vuoi essere il "migliore" che puoi essere. Non puoi raggiungere il tuo vero potenziale, se non spingi COSTANZA oltre i tuoi confini.

A3. L'esperienza

Sarò sempre uno studente per tutta la vita, non enumererò il mio attuale set di abilità, se sei curioso di vedere il mio profilo.

L'unica cosa che dirò è quella. Non sono mai soddisfatto della mia attuale conoscenza. Voglio volare più in alto, vedere oltre e andare più in profondità.


Buone osservazioni sicuramente, questo risuona con me. Vedi aggiornamento se ti stai chiedendo perché mi sto trattenendo dal contrassegnare qualsiasi risposta come "corretta".
Paul Hazen,

E bei aggiornamenti. Mantieni la fede, non dimenticherò di contrassegnare una risposta come tale quando verrà il momento.
Paul Hazen,

1
Potresti per favore ripulire la tua risposta? Hai due intestazioni di sezione ripetute, con contenuti diversi ma simili sotto ciascuna.
Paul Hazen,

Ciao Paul, non sono sicuro di come vorresti che lo pulissi. Immagino che sia un po 'confuso. Ogni sottotitolo, si riferiva a ciascuna domanda, ovvero ogni "domanda" ha un "Perché" e "Esperienza" per sostenere la risposta come richiesto nell'aggiornamento. Sono più che felice di apportare modifiche in termini di chiarezza.
Darknight,

Ohhh ... questo era ciò che mi confondeva così tanto, potresti aumentare i titoli o usare il testo ** grassetto ** per contrassegnare i sottotitoli? Penso che andrebbe d'accordo nel migliorare la chiarezza.
Paul Hazen,

4

Come posso determinare oggettivamente quali aree di studio, conoscenze generali e altre competenze avrei acquisito attraverso una laurea in CS di cui potrei o meno mancare ora?

Basta guardare i requisiti di laurea, quindi cercare il programma per ogni classe.

Come faccio a ordinare queste abilità in ordine di importanza?

Non puoi davvero farlo da solo senza il senno di poi. Direi che la cosa più importante che manca ai programmatori autodidatti è l'analisi dell'algoritmo e la progettazione. Il resto può essere raccolto a parte.

Qual è il modo migliore (nei prossimi due anni) di integrare la mia istruzione per raggiungere quegli attributi in modo tale da eguagliare o addirittura superare il livello di un corso di laurea in CS da una delle migliori università?

Anche se non sei ammesso al programma, spesso puoi prendere lezioni da altri dipartimenti come elettivi. Una delle mie lezioni preferite era una lezione di progetto di ingegneria aerospaziale in cui ho lavorato su elettronica e firmware per un piccolo satellite.

È inoltre possibile acquistare il libro di testo utilizzato dalla classe desiderata. L'ho fatto per un paio di lezioni che non riuscivo a trovare nel mio programma. Un'altra opzione è il courseware aperto del MIT .


Un utente così esperto, sorpreso che non ti sia preso il tempo di leggere le risposte postate da altri utenti, la tua risposta è quasi identica ad alcune che sono già qui. Si prega di fare attenzione a rivedere le risposte preesistenti o, se si ritiene che la risposta sia diversa, aiutarmi a chiarirle.
Paul Hazen,

Non ho visto nessun altro raccomandare di prendere lezioni di CS per elettivi, che molte persone non capiscono che è permesso. La quasi duplicazione sul resto è il risultato di una grande domanda multipart :-)
Karl Bielefeldt,

Mi scuso, hai ragione. Nessun altro ha suggerito lezioni CS come elettivi. Sebbene sia un buon consiglio, e certamente non sbagliato , alcune delle altre risposte sono state più approfondite e hanno affrontato le tre domande in un contesto migliore con il resto della mia domanda. Per non negare nessuno dei consigli che dai (ti do un +1), sarà sicuramente preso a cuore, sinceramente, grazie mille e ancora scusa per il mio errore.
Paul Hazen,

3

Perché pensi che una laurea in CS sia così importante per essere un programmatore di successo ?

Ciò di cui hai bisogno per essere un programmatore di successo è:

  • Passione per la programmazione
  • Una sete infinita di conoscenza delle nuove tecnologie
  • Entra nel settore in qualche modo

Di solito la laurea in CS ti farà entrare nel settore, ma se non hai la passione e la sete di conoscenza, soffrirai e non sarai mai un buon programmatore.

Sembra che tu sia già entrato nel settore, e certamente sembra che tu abbia sia la passione che la sete di conoscenza.

Quello che devi sapere è continuare a ricercare, apprendere e acquisire esperienza, e l'industria saprà apprezzarti senza la laurea.

Un esempio da parte di qualcuno con cui lavoro

uno degli sviluppatori di software che lavora nel mio team ha una laurea in giurisprudenza ... dopo alcuni anni ha capito che non le piace affatto la legge e che vuole fare la programmatrice. non è riuscita a trovare un lavoro come programmatrice (nessuna esperienza, nessuna laurea), quindi ha frequentato un corso di informatica di 6 mesi, poi ha ottenuto un lavoro e da allora è una grande sviluppatrice.


Anche se questo è un ottimo contenuto, ritengo che non risponda del tutto alla risposta alla mia domanda (qualcosa che potrebbe benissimo essere colpa mia in termini errati). Non sono fermamente convinto che avere una laurea in CS sia uno dei programmatori di successo. La mia domanda è più ", che dei temi insegnati all'interno di un grado CS fare tendo a contribuire al successo di un programmatore, e come posso oggettivamente determinare come sarò all'altezza in questi argomenti, e come fare Isupplement / arricchire la mia passione esistente, la fame per conoscenza ed esperienza nel settore con tali argomenti? " La tua risposta non è certamente sbagliata.
Paul Hazen,

2

IMHO non ci sono lavori di programmazione (o lavori di vendita o lavori di amministratore di sistema ecc.), Ci sono solo lavori di risoluzione dei problemi. Assumiamo e paghiamo persone per risolvere i problemi, la scrittura di codice è solo una parte della risoluzione del problema. Sì, anche le vendite sono una forma di problem solving. Quindi una laurea in matematica dimostra che puoi risolvere il problema e una laurea in scienze umane.

Dalle tue pubblicazioni è chiaro che stai acquisendo molta esperienza / stage. Grande! non preoccuparti di trovare un lavoro dopo la laurea.

Per tentare di rispondere alle tue domande:

classi? scegli alcune classi CS teoriche piuttosto che le classi di scrittura del codice. Trova alcune classi non CS / matematiche ad es. la filosofia ti aiuterà a distinguerti dalla massa

priorità? imparare cose nuove (non solo lezioni facili che già conosci per metà)

i prossimi due anni? parlare con le persone, imparare, costruire relazioni, cercare attività esterne. (Hobby / sport / passatempi lontano dal lavoro / dallo studio sono un indizio per vedere quanto sia motivato un candidato.)

Suggerimenti finali: laurea al più presto possibile. Costruisci una rete di contatti. E l'unico lavoro sicuro è creare il tuo lavoro. Cerca idee / opportunità in cui puoi avviare la tua attività. In bocca al lupo.


È fantastico, grazie per la tua risposta. Fornisco un "+1", tuttavia non posso contrassegnarlo come risposta, altre risposte hanno approfondito completamente il perché , nonché i modi identificati per determinare oggettivamente gli obiettivi di apprendimento. Niente di tutto ciò nega la tua risposta, prendo a cuore ciò che dici ed è veramente utile, quindi grazie ancora.
Paul Hazen,

@PaulHazen - se vuoi sapere "perché?" quindi scegli un corso di filosofia :-) Ma sul serio, ho conseguito un diploma di laurea teorica di 4 anni in cui non c'era un corso di laurea in C perché "è qualcosa che puoi insegnare a te stesso" Per alleggerire ho scelto un piccolo corso di filosofia un semestre e poi ne ho fatto un altro. Oltre a essere una sfida, è stato un grande gruppo di persone e idee rinfrescanti. E la tua domanda dimostra chiaramente che hai le capacità di scrittura richieste per qualsiasi classe non matematica / CS.
jqa,

1

Innanzi tutto, lasciami dire che sono molto felice che tu abbia posto questa domanda perché è una che mi sono posto da anni.

Immagino di potermi considerare un po 'un successo in questo settore, finora. Ho una certa esperienza universitaria e vorrei finire la mia formazione universitaria in Informatica, ma non ho ancora meritato una laurea a questo punto della mia vita. Tuttavia, ho avuto un discreto successo nell'ingegneria del software nonostante questo svantaggio (in corso 10 anni). Devo essere sincero con te, tuttavia, non è stata necessariamente una cosa facile da fare (ovviamente scommetterei che tutto ciò che vale la pena fare spesso NON è il più semplice). Dirò anche che non è ancora la cosa più semplice. Ci sono molte aziende là fuori disposte a dare la possibilità al candidato giusto, ma sono entrato in contatto con altri che si opporranno alla mancanza di quel "sigillo di approvazione" dell'istruzione universitaria. Però,

È iniziato in .net in un'azienda molto grande. Come piccolo programmatore non programmato (all'epoca lavorava come rappresentante dell'assistenza tecnica), ho imparato tutto ciò che potevo sulle lingue e le tecnologie utilizzate quando si applicava alla società per cui lavoravo. Inoltre, e questa è probabilmente la cosa più importante, ho messo in rete. Ho inviato un'e-mail a tutte le persone che ho trovato nella directory che aveva Software Engineer nel loro titolo. Ero fastidioso? Probabilmente. Sono sempre stato cortese e auto-deferente con l'entusiasmo di imparare. Pianificavo i pranzi o li trovavo nella mensa e mi sedevo per cercare di conversare. A volte era imbarazzante o venivo snobbato, ma alla fine, otteneva i risultati attesi. Sono stato in grado di ottenere credenziali di piccole dimensioni in alcuni database interni e dopo un po 'ho acquisito le credenziali necessarie per sviluppare software sulla loro piattaforma proprietaria. Poco dopo, mi sono trovato in una posizione all'interno dell'azienda per prestare alcune competenze nello sviluppo di strumenti interni per il team di analisi su cui ho lavorato in quel momento. Da lì, ho sempre cercato di essere il ragazzo più intelligente nella stanza nel modo più semplice senza pretese. Ero desideroso e mi sono assicurato che tutti lo sapessero. Ho sempre cercato di fornire una soluzione ove possibile e ho scoperto che se ci provi abbastanza ci sono pochissimi domini problematici che sono impossibili da risolvere (al di fuori della teoria quantistica, forse). Mi sono trovato in una posizione all'interno dell'azienda per prestare alcune competenze nello sviluppo di strumenti interni per il team di analisi su cui ho lavorato in quel momento. Da lì, ho sempre cercato di essere il ragazzo più intelligente nella stanza nel modo più semplice senza pretese. Ero desideroso e mi sono assicurato che tutti lo sapessero. Ho sempre cercato di fornire una soluzione ove possibile e ho scoperto che se ci provi abbastanza ci sono pochissimi domini problematici che sono impossibili da risolvere (al di fuori della teoria quantistica, forse). Mi sono trovato in una posizione all'interno dell'azienda per prestare alcune competenze nello sviluppo di strumenti interni per il team di analisi su cui ho lavorato in quel momento. Da lì, ho sempre cercato di essere il ragazzo più intelligente nella stanza nel modo più semplice senza pretese. Ero desideroso e mi sono assicurato che tutti lo sapessero. Ho sempre cercato di fornire una soluzione ove possibile e ho scoperto che se ci provi abbastanza ci sono pochissimi domini problematici che sono impossibili da risolvere (al di fuori della teoria quantistica, forse).

Per concludere quella che potrebbe essere una lunga storia (e se sei nel Pacifico nord-occidentale mi piacerebbe discutere con una birra), ho avuto la mia "grande pausa" in una piccola piccola startup che era disposta a darmi una possibilità . Hanno scambiato la mia mancanza di esperienza con un salario un po 'più piccolo, e io sono sceso a terra correndo. Ho poi saltato da un piccolo negozio di sviluppo a quello successivo nei prossimi anni, acquisendo amicizie e competenze lungo il percorso, fino a quando sono finalmente lo sviluppatore principale e il direttore di una piccola società di ingegneria.

Una chiave da asporto qui, se non l'ho comunicata abbastanza efficacemente, è che devi fare rete. Fai amicizia, sorseggia birre e risate e trova persone che si trovano nel campo in cui vuoi lavorare (preferibilmente nella tua scelta tecnologica). Assicurati che le persone conoscano la tua disponibilità a fare tutto il necessario e l'entusiasmo per ottenere il lavoro svolto, non importa quanto monumentale possa essere. Fondamentalmente devi "superare" la tua mancanza di educazione formale. Entra e divertiti. Questo settore è il migliore sulla terra, IMHO. Ho stretto amicizie e contatti duraturi che mi hanno aiutato da un posto all'altro e continuerò a fare lo stesso per loro ogni volta che l'occasione si presenta.


1
Mi sento davvero male per non poterlo contrassegnare come risposta. Come molte altre risposte, nulla di ciò che dici penso sia sbagliato , ma ti concentri interamente su come promuovere la mia carriera quando il nocciolo della mia domanda è come essere un programmatore di successo. Mentre il programmatore di successo implica una buona carriera, preferirei concentrarmi sull'aspetto "programmatore di successo" e lasciare che la parte della carriera sia (un aspetto importante e molto intenzionale) dopo aver pensato. Ti do un "+1" per informazioni preziose che rispondono in parte alla mia domanda.
Paul Hazen,

Oh, e parlando di networking, mi piacerebbe saperne di più sulla tua storia! Sembra che condividiamo molto lo stesso percorso / obiettivi. Sentiti libero di scegliere il metodo di contatto più adatto a te su paulhazen.net/about e prenderemo quella birra.
Paul Hazen,

1

Prima di tutto, lasciami LOL alla clausola "concisa ma approfondita" verso la fine della tua grande opera. Per affari:

Come posso determinare oggettivamente quali aree di studio, conoscenze generali e altre competenze avrei acquisito attraverso una laurea in CS di cui potrei o meno mancare ora?

Come altri hanno già detto, puoi iniziare dal catalogo dei corsi . Ma ti incoraggio a uscire dai limiti di tale elenco. In realtà è un bene che ti stai specializzando in matematica. Molti ingegneri con cui ho lavorato non ricordano come eseguire una semplice integrazione e non hanno mai esplorato al di fuori delle mura dei tradizionali corsi di matematica discreti di CS.

Questa risposta sembra piuttosto scarsa in termini di dettagli. Non ho una laurea in CS e non mi sono trovato carente in nessuna delle aree necessarie. Vorrei, tuttavia, che ho trascorso più tempo sulle altre cose che mi interessavano. Storia, linguistica e inglese, per esempio.

Come faccio a ordinare queste abilità in ordine di importanza?

Scopri cosa ami

Cosa è importante per te? Cosa è importante per i datori di lavoro? Il mio euristica personale è sempre stato quello di imparare ciò che sembra più interessante per me - si ha bisogno di amare quello che fate; altrimenti, ti esaurirai. Il software è un campo così vasto che sembra che ci sia sempre un lavoro disponibile per uno sviluppatore competente che è appassionato di una di queste competenze.

Impara a imparare e spingiti

Immagino che questo mi porti a due meta-abilità che metterei al di sopra delle altre: apprendere voracemente e lavorare sodo. Possono sembrare cliché e dolorosamente ovvi, ma la combinazione è rara. Sono stato su tutta la mappa in termini di competenze "necessarie" - front-end HTML / javascript alle estensioni di lingua allo sviluppo mobile alla visione da computer all'amministrazione dei sistemi e viceversa, in oltre 7 lingue. L'unica vera abilità di base in tutto ciò che ha reso l'abitudine a superare la mia ignoranza.

Amo davvero la filosofia di Jack White su chitarre e musica (seriamente, vai a guardarlo), e penso che sia estremamente applicabile al mondo della programmazione. Metti le cose un po 'più fuori portata. Spingiti. Quindi sembrerà facile quando tutto quello che qualcuno vorrà farti è il tuo lavoro.

Qual è il modo migliore (nei prossimi due anni) di integrare la mia istruzione per raggiungere quegli attributi in modo tale da eguagliare o addirittura superare il livello di un corso di laurea in CS da una delle migliori università?

  1. Classi CS non principali

    Come te, il dipartimento CS di UW mi ha respinto ... anche se penso di averlo lasciato fare una terza volta prima di tornare in me. Mi sono laureato in Informatica e ho studiato in Matematica Applicata. Ma ho ancora preso l'intera traccia CS non importante. Questo è CSE 373, 410, 413, 415 e 417. Quindi, sono sicuro che dovresti prima seguire la tua passione. Il mio mi ha portato a quelle lezioni. E penso che tu ottenga un'educazione di base piuttosto completa con loro, anche se potrebbe essere un po 'di luce sul lato teorico delle cose.

    Ora, ecco la cosa bella: con l'Informatica, la maggior parte di questi contava per i miei elettivi richiesti. Nel dipartimento di matematica, potrebbe essere necessario ottenere l'approvazione esplicita, e potrebbe essere un allungamento per tutti tranne CSE 417.

    Evoca una richiesta DARS (probabilmente un UWNetID solo link) e vedere dove stanno le cose. Lo facevo per varie major fino alla nausea .

  2. Classi AMATH

    Sulla stessa linea, il dipartimento di matematica applicata ha alcune classi che potrebbero essere lavorate come requisiti elettivi. Potresti anche essere minore in AMATH come il tuo veramente.

    Perché lo menziono? Il calcolo numerico, ad esempio AMATH 301/352, è un enorme mistero per la maggior parte dei programmatori. Se non ottieni nient'altro, sarai in grado di scrivere post interessanti sul blog . Ma direi che conoscere i problemi che circondano i tipi numerici di una lingua e sapere come misurarli e migliorarli è dannatamente importante.

  3. Costruisci qualcosa!

    La cosa più importante che puoi fare è costruire qualcosa di nuovo. Prendi un'idea dall'inizio alla fine. Non lasciare che sia qualcosa di facile nella tua zona di comfort.

    Le lezioni di programmazione più fruttuose che ho seguito hanno sempre avuto un grande componente di programmazione pratica. Per un ingegnere, la teoria è incredibilmente importante, a condizione che possa essere trasformata in qualcosa di reale. Quindi vai a trovare un documento CS dal suono interessante e prova a implementarlo. Sul serio.

  4. Trova un lavoro

    Ora, hai già detto che hai uno stage in Amazon. È fantastico. L'esperienza lavorativa effettiva è davvero fondamentale! Ci sono molte persone con titoli CS che non riescono a programmare l'uscita da un sacchetto di carta bagnato. Avere una buona esperienza di lavoro vale molto più di una laurea.


QUESTO. Questo va molto bene. In effetti, considero questa una risposta più che valida. La risposta contrassegnata è stata solo un po 'più valida ... * sospiro * così difficile da giudicare con così tante grandi risposte :( Vorrei poter aiutare il tuo rappresentante di più. Ma dal momento che ti conosco nella vita reale (ma soprattutto attraverso Twitter come noi ho discusso in precedenza haha), dovrò comprarti una birra o del whisky come premio di consolazione.
Paul Hazen,

-2

Ci sono più di alcune storie di persone che diventano milionari prima di laurearsi al college, forse quello che sento di più è Bill Gates. Le persone con abilità di nicchia tendono a fare meglio senza una laurea rispetto al laureato in cookie timbrato.

Trova qualcosa in cui ci sono pochissime persone, di solito qualcosa di noioso, noioso o difficile da imparare, e imparalo bene, diventa ossessionato da esso. Alcune aree di cui ho sentito parlare sono roba di back-end Unix (non Linux, anche se Linux non è molto indietro nella domanda), Flash (non ne so abbastanza di Flash per ricordare esattamente di cosa si trattasse, ma conosco un ragazzo che si è trasferito sapendolo velocemente e ha detto che esiste ancora un mercato per questo, soprattutto perché la gente dice che sta morendo e non lo imparerà). Potrebbe essere necessario seguire alcune lezioni per iniziare, ma se conosci le tue cose e hai un portafoglio impressionante ci sono affari là fuori che avranno bisogno di te!


1
-1 per non aver risposto alla mia domanda. Non sbagli, ma sembra che tu abbia saltato la mia sezione "quello che non sto cercando", e non ha colpito nessuna delle cose che stavo cercando.
Paul Hazen,
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.