Si può ottenere una solida base di programmazione senza andare al college / all'università? [chiuso]

28

Per prima cosa, ho già cercato nel sito e letto tutti i precedenti argomenti "autodidatti contro il college". La maggior parte delle risposte sosteneva che andare al college era la scelta migliore, per due ragioni principali:

  1. Andare al college ti dà la carta, che è essenziale per l'atterraggio di posti di lavoro, specialmente in periodi di crisi economica.

  2. Andare al college ti offre una solida base di programmazione, insegnandoti i principi che saranno essenziali indipendentemente dalla lingua / percorso che segui.

Ecco la mia domanda: non sono affatto preoccupato per la ragione 1, perché ho già una mia compagnia (costruisco siti web / faccio marketing di affiliazione) e una situazione finanziaria stabile, quindi sono abbastanza sicuro di non aver bisogno cercare un lavoro.

Tuttavia sono preoccupato per la ragione 2. Cioè, voglio assicurarmi di avere una solida base di programmazione come chiunque altro là fuori, e mi chiedo se sia possibile con l'autoapprendimento.

Supponiamo che mi prenda del tempo per studiare le basi, come la matematica discreta, la progettazione di algoritmi, la logica di programmazione, l'architettura del computer, l'assemblaggio, la programmazione C, i database e le strutture dati, principalmente usando libri, risorse online e molti codici. Dico che trascorro 1-2 anni a coprire quelle basi.

Credi che le mie basi sarebbero solide, o comunque carenti rispetto a qualcuno che è andato al college?

    
posta Daniel 15.12.2015 - 08:32
fonte

15 risposte

17

Assolutamente decisamente. Si è possibile. Come lo so? Perché l'ho fatto!

È difficile. Non avere illusioni su questo. Senza un tutor in cui andare quando le cose non funzionano, devi capire da solo i problemi. C'è molto da imparare e se non sei auto-motivato o non sei abbastanza dedicato, non sarai in grado di farlo. Per quanto mi riguarda, trovo difficile essere motivati su tutto, ma mi piace imparare e programmare così tanto che non devo combattere me stesso.

Alcuni suggerimenti:

  • Impara facendo! Vuoi sapere come funzionano gli alberi binari? Creane uno.
  • Fai imparando. Organizza progetti ambiziosi in cui dovrai imparare cose nuove per completarle. Attenzione: se ti prepari progetti troppo difficili, è facile scoraggiarsi, ma se progetti te stesso troppo facili, allora non impari molto. Stai cercando una zona burro.
  • Inizia con C. I linguaggi di alto livello ti rendono pigro. Non avrei mai imparato C se avessi imparato prima Python.
  • Wikipedia dovrebbe essere il tuo primo punto di riferimento per tutti i concetti che devi imparare.
  • Non importa se non finisci mai un singolo progetto, (dopo tutto, cosa è finito). È molto più importante imparare cose nuove. Ciò non significa dire che non si dovrebbe mai provare a finire un progetto. Può essere un'enorme spinta motivazionale vedere qualcosa che hai fatto funzionare. È facile ottenere tracciati laterali, non preoccuparti se lo fai.

Come fai a sapere quando hai finito? Bene, la ragione per cui ti sei laureato è che diventerai abile nella programmazione. Quando sei sicuro di poter scrivere qualsiasi software dato un ragionevole lasso di tempo, allora sei un programmatore, ma questo non significa che dovresti smettere di imparare.

Per inciso, ora sto soffrendo dal punto uno. Essere lontano da qualsiasi società di sviluppo software non aiuta neanche.

    
risposta data 11.01.2011 - 07:41
fonte
12

Penso che la designazione più importante del college / università sia quella di insegnarti a imparare cose da te. Non importa, che si tratti di programmazione, fisica, chimica, matematica, ecc. L'università mi ha insegnato come imparare senza l'aiuto di nessuno.

    
risposta data 06.01.2011 - 15:51
fonte
6

Alcune persone prosperano in ambienti accademici e persino richiedono loro di imparare (di solito come una forma di motivazione). Altri (come me) non lo fanno e possono persino trovarli spiacevoli.

Ho avuto una lunga carriera nel software senza laurearmi. Verso la fine di quella carriera ero in un ruolo architettonico e l'architetto senior del mio progetto diceva che la mia conoscenza del software e dell'informatica (i due non sono la stessa cosa!) Era facilmente equivalente ad avere un master della Waterloo University (uno delle migliori scuole CS del Canada).

Ci sono alcune carenze, ovviamente, nel mio pool di conoscenze. Le mie capacità matematiche sono sufficienti per stare al passo con quello che sto imparando oggi. Odio la matematica pura e, in generale, non posso essere tenuto aggiornato sugli ultimi e più grandi. Questo ha occasionalmente messo un freno alla mia comprensione delle cose (come, ad esempio, Haskell) fino a quando non ho ottenuto le mie capacità matematiche ad un livello sufficiente per comprendere i concetti. Ma resta il fatto che le informazioni sono disponibili senza che io sia vicino a un dipartimento universitario di CS o di matematica. Tutto quello che posso veramente dire è che a volte la mia sequenza di apprendimento è subottimale - occasionalmente devo tornare indietro e riempire del materiale fondamentale prima di continuare a fare quello che sto facendo.

    
risposta data 06.01.2011 - 15:55
fonte
4

Penso che le tue fondamenta saranno solide, a patto che tu abbia la disciplina per sederti veramente e insegnare a te stesso tutte quelle cose e lavorare attraverso gli esempi. Ho una laurea, ma è in ingegneria, non in informatica. Ho lavorato con molti eccellenti programmatori professionisti che hanno imparato da soli tutto ciò che hanno bisogno di sapere. L'auto-studio è qualcosa che devi comunque avere per essere un buon programmatore, poiché c'è sempre una nuova tecnologia che non hai imparato a scuola.

    
risposta data 06.01.2011 - 15:51
fonte
3

Come per la maggior parte delle cose nella vita, la mia risposta è solida dipende dalla persona . Credo fermamente che non sia necessario un diploma di laurea per essere programmatori; tuttavia, in base alla mia esperienza, il college ha la tendenza ad esporre le persone a problemi e idee che potrebbero non incontrare da soli attraverso uno studio indipendente.

In questo giorno ed età una persona motivata può andare online, e grazie a fonti come MIT Open Courseware , metti insieme un corso di studio indipendente che darà loro una conoscenza abbastanza ampia e questa grande conoscenza che sento è ciò che rende un buon sviluppatore. Tuttavia, qualcuno che non è motivato da se stesso potrebbe scoprire di essere in grado di ottenere imparando una singola lingua e potrebbe essere in grado di ottenere solo per carriera saggio.

Come ho affermato prima, sento che è l'ampiezza della conoscenza che è ciò che rende un buon sviluppatore in quanto significa che sono stati esposti a più problemi e hanno sviluppato le loro capacità di problem solving. Non hai bisogno di andare a scuola per ottenere questa ampiezza di conoscenza, ma la scuola sicuramente aiuta in questo senso perché un buon programma di laurea ti costringerà a sviluppare una vasta conoscenza.

    
risposta data 06.01.2011 - 16:14
fonte
2

Come programmatore, trovo che gioco costantemente con API e linguaggi non legati al lavoro (Ruby on Rails, Python, Node.js, ecc.). Lo faccio più per interesse che per lavoro. Ho 2 gradi associativi ma anche dopo 10 anni di programmazione in Java / JEE trovo che mi manca davvero la teoria di un grado BS (Big O, Algorithms, Descrete Math, ecc.).

Sto prendendo lezioni serali part-time per ottenere la mia laurea in Computer Info Systems, ma non c'è molta teoria CS offerta in questo programma. Mi sto laureando principalmente per avere la "carta" perché è più business che tecnica ma è la mia unica opzione per i corsi serali.

Dai un'occhiata a MIT Open Coursware . È gratuito ed è una grande risorsa per colmare le lacune della teoria CS / Math.

    
risposta data 06.01.2011 - 16:01
fonte
2

Credo che sia falso pensare che il college / università per definizione fornisca una buona base di programmazione. Ti insegneranno molte teorie e molti modi diversi di pensare a un problema. Va benissimo, ma trasformare questa teoria in pratica è un altro skillset.

L'unico modo efficace per insegnare la corretta applicazione della teoria è il mentoring e il doing. In breve, devi cercare di applicare la teoria nel miglior modo possibile e affidarti a qualcuno con più esperienza per darti critiche costruttive o indirizzarti nella giusta direzione. Il tuo mentore non farà il tuo lavoro per te, ma ti aiuterà a fare meglio il tuo lavoro.

Non sarei lo sviluppatore che sono oggi senza l'aiuto di alcuni buoni mentori all'inizio della mia carriera. Lavorare su progetti open source è un buon modo per trovare alcuni mentori che saranno disposti a dedicare un po 'di tempo a risolvere i dettagli. Almeno quella fu la mia esperienza. Ho anche avuto un mentore nel mio primo lavoro di programmazione che mi ha aiutato a capire come progettare applicazioni facilmente estese.

Quindi ci sono benefici per l'università / università? Sì. Tuttavia, non sono attrezzati per aiutarti a trasformare la teoria in pratica a meno che tu non prenda te stesso. Se inizi a provare ad applicare ciò che stai imparando mentre sei all'università, puoi iniziare a chiedere i giusti tipi di domande che ti aiuteranno a capire veramente la teoria a un livello più pratico. Se aspetti di essere sul posto di lavoro, hai appena ritardato questo importante processo di apprendimento.

    
risposta data 06.01.2011 - 16:20
fonte
2

Le persone tendono a sovrastimare l'importanza del fondamento teorico, della matematica e della conoscenza algoritmica IMO. I motivi per i quali i programmatori spingono e intervistano queste cose sono che sono "appassionati" della matematica stessi.

Ora ci sono naturalmente alcuni programmi in cui è utile sapere cos'è una "macchina a stati", o come usare una ricerca "Booyer-Moore". Ci sono anche alcuni problemi in cui può essere utile conoscere alcuni calcoli reali, come se si lavori con calcoli finanziari o simulazioni fisiche.

Tuttavia, il 90% della programmazione in genere non è uno di questi, non molti di noi stanno facendo uno sviluppo algoritmico hardcore. La maggior parte delle cose che devi imparare puoi imparare mentre vai avanti. Non c'è bisogno di costruire un enorme edificio di fondazione, ma piuttosto mantenere una costante curiosità su come risolvere diversi problemi.

Sono me stesso al 100% autodidatta e non ho mai avuto problemi a conoscere gli algoritmi. Ho fatto un lavoro sui sistemi finanziari e anche quello era fattibile senza alcuna più profonda abilità teorica matematica.

Essere bravi a programmare non è una questione di fondamento, si tratta di ampliare continuamente la tua cassetta degli attrezzi e l'apprendimento che ottieni è molto più utile quando puoi metterlo nel contesto di un problema che ha davvero bisogno di risoluzione piuttosto che pura ricerca teorica.

Non hai bisogno di sapere tutto in dettaglio, questo è ciò che Google, StackOverflow e Wikipedia sono lì per :) Devi comunque conoscere l'esistenza di diversi strumenti e metodi per realizzare che sono usuabile e applicabile alla tua situazione. Devi anche avere l'esperienza di sapere quale strumento è il migliore da applicare. Le fondazioni sono generalmente viziate per i principianti poiché non hanno esperienza del motivo per cui uno strumento particolare sarebbe utile. Se hai molta esperienza, alcune cose semplicemente "cliccano" sul posto.

Alcune cose che consiglierei comunque:

  • Se non lo hai fatto, inizia a conoscere i modelli di progettazione, questo è lo strumento più pratico e universale nella tua casella degli strumenti.

  • Leggi alcune panoramiche generali di diversi algoritmi se sei curioso, solo per sapere cosa c'è quando potresti averne bisogno

  • Ulteriori informazioni sulla parallelizzazione e il multithreading (e alcune programmazioni funzionali). Essere in grado di supportare più core è importante oggi e presto sarà indiscusso, quindi è una conoscenza cruciale.

  • Realizza progetti di hobby stimolanti e sperimentali che spingono in avanti le tue abilità e ti costringono a imparare le cose nel loro contesto.

risposta data 06.01.2011 - 16:38
fonte
2

Una cosa che il college ti aiuterà in questo modo potresti trovare difficoltà a farti da sola è la capacità di leggere e comprendere i documenti di ricerca accademici, in particolare la matematica. Tuttavia, anche questo può essere raggiunto da solo, ma aiuta ad avere istruttori e colleghi che ti guidano nel processo di apprendimento per ottenere le conoscenze in modo più rapido e semplice.

In quanto programmatore generale di sistemi informativi, non leggerete probabilmente i documenti di ricerca per fare bene. I sistemi di informazione di oggi sono abbastanza semplici e la maggior parte degli algoritmi intensi come la ricerca, l'ordinamento e l'indicizzazione sono fatti dai sistemi di database. Finché comprendi i concetti non dovresti avere difficoltà.

Se decidi di impegnarti in aree di programmazione più difficili come lo sviluppo di sistemi di micro-gestione, lo sviluppo di compilatori, l'intelligenza artificiale e simili, avere la capacità di leggere e comprendere i documenti di ricerca può essere fondamentale per implementare i sistemi in modo rapido ed efficiente .

Per quanto riguarda l'abilità di applicare la conoscenza, questo è molto individualistico. Le persone che vanno al college potrebbero non essere in grado di applicare i principi e qualcuno che non va al college. C'è un vecchio detto che dice "non importa cosa entra ma cosa esce".

Per riassumere, le conoscenze acquisite andando all'università possono aiutarti a capire e comunicare meglio con il mondo accademico. Tuttavia, la conoscenza può essere raggiunta senza andare al college. Avere una laurea rende più facile persuadere gli altri che sai cosa stai facendo e puoi capire i documenti di ricerca accademici.

    
risposta data 06.01.2011 - 17:40
fonte
2

Non penso che molte persone otterranno una buona "base" attraverso lo studio autonomo come vorrebbero andare all'università, almeno non nello stesso periodo di tempo. Due anni di lettura di libri a caso e di giochi con problemi giocattolo nel tempo libero non ti porteranno allo stesso livello di due anni di studio mirato con un curriculum organizzato. Ti prenderà abbastanza per cavartela? Molto probabilmente Ma se vuoi davvero "una buona base come chiunque altro", allora ci vorranno più di due anni.

Per non scoraggiarti, certamente non sarebbe una perdita di tempo. Non sono molto fiducioso sul fatto che molte persone possano mettere insieme l'equivalente di due anni di college in due anni mentre gestiscono la propria attività e hanno una sorta di vita personale / familiare.

    
risposta data 06.01.2011 - 20:44
fonte
1

Ho sviluppato professionalmente per un decennio senza una laurea. Quando intervengo le persone sono interessato alla loro capacità di risolvere problemi e codificare. Detto questo, ci sono alcune aziende / ruoli che non sono idonei solo perché insistono su una laurea. Alcune società di consulenza hanno questa politica perché possono venderti di più ai clienti.

    
risposta data 06.01.2011 - 18:01
fonte
1

Se giochi a numeri, quelli con una laurea ottengono migliori posti di lavoro e amp; pagare.

Non tutti quelli che hanno conseguito il diploma hanno imparato / hanno ricordato qualcosa.

La maggior parte delle persone non si prenderà il tempo di imparare molto della teoria / degli elementi di base / fondamentali come farebbe se andassero al college. Forse i tuoi genitori ti sosterranno attraverso 4 anni di studio individuale; tutti gli altri devono trovare un lavoro.

Lo svantaggio sarebbe che se tu avessi un grado CS e non avessi avuto un certo livello, potresti essere considerato come a bassa potenza. Ammettiamolo, se non lo prendi in 4 anni di alimentazione con il cucchiaio, non lo capirai da un lato mentre tieni premuto e lavori a tempo pieno. Eccezioni, naturalmente.

    
risposta data 06.01.2011 - 18:16
fonte
1

Se vuoi davvero guadagnarti da vivere nel campo dello sviluppo software senza una laurea, ti suggerisco di contattare la tua università locale. Ottieni da loro un elenco dei corsi che ti sarebbero richiesti se ti fossi laureato. La maggior parte delle università avrà queste informazioni disponibili su richiesta, nonché una sinossi / programma / elenco di libri per ciascuno dei corsi. Vai in quella lista. Guarda i libri in questione. Scopri quali argomenti trattano. Se vedi qualcosa di coperto che non capisci, acquista / controlla il libro e imparalo. Alla fine di questo processo, dovresti per lo meno sapere cosa sai e cosa non sai, ed essere abbastanza competitivo con il tuo laureato medio (che potrebbe aver dormito / ingannato attraverso alcuni di quei corsi comunque).

    
risposta data 06.01.2011 - 21:23
fonte
1

Suppose I take my time to study the very basics, like discrete maths, algorithm design, programming logic, computer architecture, Assembly, C programming, databases and data structures - mostly using books,online resources and lots of coding. Say I spend 1-2 years covering those basics.

Sì e no. Alcune cose sono brutalmente difficili da comprendere senza un insegnante. Di solito è la cosa più mistica.

Credo - e continuo a credere dopo che aiuta ad iniziare CS major come un TA - che chiunque senza ritardo mentale possa imparare a programmare a livello di PHP / Java / C #. Non è, fondamentalmente parlando, difficile.

Né, del resto, l'assemblaggio e le altre aree tecnologiche che menzioni. Questi sono dettagli di implementazione che sono da conoscere.

Strutture dei dati, algoritmi, progettazione digitale, architettura dei computer e algebra dei database sono abbastanza difficili, se l'apprendimento è profondo.

    
risposta data 06.01.2011 - 23:27
fonte
0

Non ho dubbi sul fatto che una persona motivata e dedicata possa raggiungere una solida base, ma se scegli di non frequentare un corso perderai molti aspetti che miglioreranno il tuo sviluppo. Una di queste cose e forse la più importante è l'esposizione a persone con mentalità affini con cui è possibile scambiare idee e concetti. È anche molto bello essere in grado di ascoltare le esperienze di istruttori che hanno saggezze preziose da impartire e possono talvolta raddrizzare concetti fraintesi in una o due frasi. È bello essere in grado di chiarire i concetti al momento dell'esposizione iniziale piuttosto che avere le idee sbagliate che affondano e devono risolverle in un secondo momento. Queste cose non sono del tutto necessarie ma certamente possono darti un vantaggio rispetto a qualcuno che è rinchiuso nella loro stanza del computer con una pila di manuali tecnici arcani ... anche se questo ha i suoi meriti.

    
risposta data 10.01.2011 - 22:57
fonte

Leggi altre domande sui tag