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


28

Innanzitutto, ho già cercato nel sito e letto tutti i precedenti argomenti "autodidatta vs. college". La maggior parte delle risposte ha difeso che andare al college era la scelta migliore, per due motivi principali:

  1. Andare al college ti dà il documento, che è essenziale per l'atterraggio di posti di lavoro, soprattutto in periodi di crisi economica.

  2. Andare al college ti dà 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 il motivo 1, perché ho già la mia azienda (costruisco siti Web / faccio marketing di affiliazione) e una situazione finanziaria stabile, quindi sono abbastanza sicuro di non aver bisogno di guardarmi intorno per un lavoro.

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

Supponiamo che io prenda il mio tempo per studiare le basi, come matematica discreta, progettazione di algoritmi, logica di programmazione, architettura del computer, assemblaggio, programmazione in C, database e strutture di dati - principalmente usando libri, risorse online e molti codici. Suppongo che trascorri 1-2 anni coprendo queste basi.

Pensi che la mia fondazione sarebbe solida, o ancora carente rispetto a qualcuno che è andato al college?


2
Probabilmente c'è almeno una persona su questo pianeta che può. A proposito, la ragione 1 conta ancora. Quando tutto il resto è uguale, "loro" di solito preferiscono comunque qualcuno con un'istruzione più formale.
Giobbe

1
Posso dirti una cosa, non scoprirai cosa significhi solido in un'università.
Peter Turner,


Il punto è che ci vogliono dieci anni per imparare a programmare e passare alcuni di questi anni in alcune università può aiutare.
Basile Starynkevitch il

Risposte:


17

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

È difficile. Non avere illusioni al riguardo. Senza tutor dove andare quando le cose non funzionano, devi capire tu stesso i problemi. C'è molto da imparare e se non sei automotivato o non sei abbastanza dedicato, non sarai in grado di farlo. Per me, trovo difficile essere motivato su qualcosa, ma mi piace imparare e programmare così tanto che non devo combattere.

Alcuni suggerimenti:

  • Impara facendo! Vuoi sapere come funzionano gli alberi binari? Fai uno.
  • Fallo imparando. Preparati progetti ambiziosi in cui dovrai imparare nuove cose per completarle. Attenzione: se ti progetti troppo difficili, allora è facile scoraggiarti, ma se ti progetti troppo facili, non imparerai molto. Stai cercando una zona di burro.
  • Inizia con C. Le lingue di alto livello ti rendono pigro. Non avrei mai imparato C se prima avessi imparato 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 (dopotutto, cosa è finito). È molto più importante imparare cose nuove. Ciò non significa che non dovresti mai provare a finire un progetto. Può essere una grande spinta motivazionale vedere qualcosa che hai fatto funzionare. È facile essere tracciati lateralmente, non preoccuparti se lo fai.

Come fai a sapere quando hai finito? Bene, il motivo per cui ti assumi una laurea è che diventerai abile nella programmazione. Quando sei sicuro di poter scrivere qualsiasi software con un ragionevole lasso di tempo, sei un programmatore, ma ciò non significa che dovresti smettere di imparare.

Per inciso, ora soffro del primo punto. Essere lontani da qualsiasi società di sviluppo software non aiuta neanche.


Anch'io. Mi sono laureato per il giornale. Non ho imparato troppo, soprattutto tutto ciò che già sapevo. Ho imparato che odiavo davvero Java più di quanto pensassi inizialmente (dovevo usarlo per il mio progetto finale) e avevo un grande professore che ci ha insegnato dalla sua esperienza personale in cui ho imparato molte cose.
Echo dice di reintegrare Monica il

@Echo, ne è valsa la pena?
dan_waterworth,

@Dan_waterworth, mi piace pensarlo.
Echo dice di reintegrare Monica il

Penso che abbia molto più senso iniziare con un linguaggio di programmazione di alto livello, specialmente con Python. Naturalmente dipende dai tipi di attività che vorresti affrontare una volta che hai finito di imparare le basi: se vuoi fare la programmazione di sistemi hardcore, scegli la route C, se vuoi sviluppare applicazioni per l'utente finale, don ' non preoccuparti di C e cerca qualcosa come Python.
Zsolt Török,

non sono d'accordo con la parte C. vuoi rimanere ad un alto livello di astrazione. puoi sostenere che C ti rende pigro, impara il codice macchina! se non hai bisogno di prestazioni di tipo C, va bene stare con Python.
segfault

12

Penso che la designazione più importante di College / University sia di insegnarti come imparare cose da solo. Non importa se si tratta di programmazione, fisica, chimica, matematica, ecc. L'università mi ha insegnato come imparare senza l'aiuto di nessuno.


1
Beh, ho già una laurea in Economia Internazionale, quindi quella parte è coperta.
Daniel,

1
Ho un amico che ha una laurea in <nome>, ed è un programmatore Flash / PHP di successo. Immagino dipenda da te. Ad esempio ho una laurea in fisica, ma sono uno sviluppatore di software. Due anni fa ho deciso di ottenere un Master in CS, solo perché lo volevo, non perché ne avevo bisogno.
Sorantis,

5
La mia formazione universitaria mi ha insegnato a imparare un nuovo linguaggio informatico in 1-2 giorni dai tutorial online. Se puoi già farlo, avrai imparato un'ottima lezione.
apoorv020,

1
Sì, ma devi essere un autodidatta impegnato.
dietbuddha,

3
Alcune persone non hanno bisogno di imparare come imparare in modo indipendente.
dan_waterworth,

6

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

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 ha detto che la mia conoscenza del software e dell'informatica (i due non sono la stessa cosa!) Era facilmente equivalente ad avere un Master presso la Waterloo University (uno delle migliori scuole CS del Canada).

Ci sono alcune carenze, ovviamente, nel mio pool di conoscenze. Le mie abilità matematiche sono sufficienti per stare al passo con quello che sto imparando oggi. Odio la matematica pura e generalmente non riesco a tenermi aggiornato sulle ultime novità. Questo a volte ha messo a dura prova la mia comprensione delle cose (come, diciamo, Haskell) fino a quando non ho portato le mie abilità matematiche a un livello sufficiente per capire i concetti. Ma resta il fatto che le informazioni sono disponibili senza che io sia vicino a un CS universitario o al dipartimento di matematica. Tutto quello che posso davvero dire è che a volte la mia sequenza di apprendimento non è ottimale - a volte devo tornare indietro e riempire del materiale di base prima di continuare in quello che sto facendo.


4

Penso che le tue fondamenta saranno solide, a condizione che tu abbia la disciplina per sederti davvero e insegnarti tutte quelle cose e lavorare attraverso gli esempi. Ho una laurea, ma è in ingegneria, non in informatica. Ho lavorato con molti programmatori professionisti eccellenti che si sono insegnati tutto ciò che hanno bisogno di sapere. Lo studio autonomo è qualcosa che devi avere comunque per essere un buon programmatore, poiché esce sempre una nuova tecnologia che non hai imparato a scuola.


3

Come con la maggior parte delle cose nella vita, la mia risposta è solida , dipende dalla persona . Sono fermamente convinto che non sia necessario un diploma di laurea per essere programmatore; 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.

Al giorno d'oggi una persona motivata può andare online e, grazie a fonti come Open Courseware del MIT , ha messo insieme un corso di studio indipendente che fornirà loro una vastissima gamma di conoscenze ed è questa ampiezza di conoscenze che ritengo sia ciò che rende un buon sviluppatore. Tuttavia, qualcuno che non è auto-motivato potrebbe scoprire di essere in grado di imparare imparando una sola lingua e potrebbe essere in grado di ottenere solo in termini di carriera.

Come ho detto prima, sento che è l'ampiezza della conoscenza 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 è necessario andare a scuola per ottenere questa ampiezza di conoscenze, ma la scuola sicuramente aiuta in questo senso poiché un buon programma di laurea ti costringerà a sviluppare una vasta gamma di conoscenze.


2

Come programmatore trovo che gioco costantemente con API e lingue non correlate al lavoro (Ruby on Rails, Python, Node.js, ecc.). Lo faccio più per interesse che per lavoro. Ho 2 lauree associate, ma anche dopo 10 anni di programmazione in Java / JEE trovo che mi manca davvero la teoria di una laurea BS (Big O, algoritmi, matematica discreta, ecc.).

Sto prendendo lezioni serali part-time per ottenere il mio BS in Computer Info Systems, ma non c'è molta teoria CS offerta in questo programma. Mi sto laureando principalmente per avere la "carta" dal momento che è più un business che tecnico ma è la mia unica opzione per le lezioni serali.

Dai un'occhiata al MIT Open Coursware . È gratuito ed è un'ottima risorsa per colmare le lacune della teoria CS / matematica.


2

Credo che sia falso pensare che il college / università ti dia per definizione una buona base di programmazione. Ti insegneranno molta teoria e molti modi diversi di pensare a un problema. Va bene e va bene, ma trasformare questa teoria in pratica è una competenza diversa.

L'unico modo efficace per insegnare la corretta applicazione della teoria è attraverso il mentoring e il fare. In breve, devi cercare di applicare la teoria nel miglior modo possibile e fare affidamento su 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 essere migliore nel fare il tuo lavoro.

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

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


Essere d'accordo. Quasi tutta la programmazione aziendale che ho fatto è stata simile a lavorare in un mestiere come un falegname. Penso che un apprendista / giornalista / master programmatore sarebbe più utile di un'università per imparare a programmare.
cfeduke,

2

Le persone tendono a sopravvalutare l'importanza delle basi teoriche, della matematica e della conoscenza algoritmica dell'IMO. Le ragioni per cui i programmatori spingono e intervistano queste cose sono che sono loro stessi "appassionati" di matematica.

Ora ci sono ovviamente alcune programmazioni 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 veri calcoli matematici, ad esempio se stai lavorando con calcoli finanziari o simulazioni fisiche.

Tuttavia, la cosa è che il 90% della programmazione non è generalmente 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 autodidatta al 100% e non ho mai avuto problemi a conoscere gli algoritmi. Ho fatto un lavoro sui sistemi finanziari e anche questo era fattibile senza alcuna conoscenza matematica teorica più profonda.

Essere bravi a programmare non riguarda le basi, si tratta di espandere 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 essere risolto piuttosto che solo pura ricerca teorica.

Non è necessario conoscere tutto nei dettagli, ecco a cosa servono Google, StackOverflow e Wikipedia :) Tuttavia, è necessario conoscere l' esistenza di diversi strumenti e metodi per rendersi conto che sono utilizzabili e applicabili alla propria situazione. Devi anche avere l'esperienza di sapere quale strumento è meglio applicare. Le basi sono generalmente viziate per i principianti poiché non hanno esperienza del motivo per cui un determinato strumento sarebbe utile. Se hai molta esperienza, alcune cose semplicemente "faranno clic" in posizione.

Alcune cose che consiglierei comunque:

  • In caso contrario, inizia a conoscere i modelli di progettazione, è lo strumento più pratico e universale nella tua cassetta degli attrezzi.

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

  • Scopri la parallelizzazione e il multithreading (e alcune programmazioni funzionali). Essere in grado di supportare più core è importante oggi e presto diventerà insensibile, quindi è una conoscenza cruciale.

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


La tua stima di circa il 90% della programmazione che non ha un forte contenuto teorico è probabilmente giusta. Purtroppo la maggior parte dei programmatori si imbatterà periodicamente nell'altro 10%, quindi è necessario.
Orbling

2

Una cosa che il college ti aiuterà a trovare difficoltà a farti da solo è la capacità di leggere e comprendere documenti di ricerca accademica, in particolare la matematica. Tuttavia, anche questo può essere realizzato da solo, ma aiuta gli istruttori e i colleghi a guidarti nel processo di apprendimento per ottenere le conoscenze più rapidamente e più facilmente.

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

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

Per quanto riguarda la capacità di applicare la conoscenza, questo è molto individualistico. Le persone che vanno al college potrebbero non essere in grado di applicare i principi anche a qualcuno che non va al college. C'è un vecchio detto che dice: "non importa cosa succede ma cosa viene fuori".

Per riassumere, le conoscenze che acquisisci quando vai al college possono aiutarti a capire meglio e comunicare con il mondo accademico. Tuttavia, la conoscenza può essere raggiunta senza andare al college. Avere una laurea rende più facile convincere gli altri a sapere cosa stai facendo e a capire documenti di ricerca accademici.


2

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

Per non scoraggiarti, non sarebbe certo una perdita di tempo. Non sono terribilmente fiducioso 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.


L'ho fatto. In effetti, la maggior parte del mio studio è stata significativamente inferiore a 2 anni (circa 6 mesi), ma faccio regolarmente 60-70 ore settimane.
dan_waterworth,

Accetto con TMN. In GENERALE la tua educazione formale non ha idea di dove finirai, ha un certo stile di BREADTH (cioè tende a coprire molto territorio). Il mio esempio su un post precedente: non avrei mai pensato di usare Compiler Construction che faceva parte del mio corso. Si scopre che oltre 20 anni dopo è stato uno dei corsi più importanti che abbia mai fatto. Ora il problema è che per coloro che non hanno questa conoscenza nella parte posteriore della testa - non sai cosa non sai. E quel livello di ignoranza ti rende meno efficace, a lungo termine.
quick_now

1

Sto sviluppando professionalmente da un decennio senza una laurea. Quando intervisto le persone, sono interessato alla loro capacità di risolvere problemi e programmare. Detto questo, ci sono alcune aziende / ruoli per i quali non sono ammissibile solo perché insistono su una laurea. Alcune società di consulenza hanno questa politica perché possono venderti per più ai clienti.


Questo è principalmente un problema in cui l'assunzione avviene attraverso un dipartimento delle risorse umane (risorse umane). Il modo migliore per gestirlo è creare un social network aziendale di manager IT che ti conoscano o almeno di te, e provare a fare un passo avanti nel processo di "filtro" delle risorse umane. In altre parole, le persone senza laurea tendono a dover essere più brave a commercializzare le proprie competenze e i propri servizi, piuttosto che fare domanda per le posizioni pubblicizzate. La maggior parte dei responsabili IT competenti assumerà sulla base di una solida esperienza e reputazione (cioè riferimento da qualcuno di cui si fidano). Non aspettarti di ottenere un lavoro governativo. Al giorno d'oggi è raro
McTlr

1

Se giochi al gioco dei numeri, quelli con una laurea ottengono lavori migliori e pagano.

Non tutti coloro che hanno conseguito la laurea hanno imparato / ricordato qualcosa.

La maggior parte delle persone non si prenderebbe il tempo di imparare gran parte della teoria / background / basi come farebbero se andassero al college. Forse i tuoi genitori ti sosterrebbero attraverso 4 anni di studio autonomo; tutti gli altri devono trovare un lavoro.

Lo svantaggio sarebbe se tu avessi una laurea in CS e fallissi ad un certo livello, potresti essere visto avere una bassa potenza. Ammettiamolo, se non lo hai ricevuto in 4 anni di alimentazione con il cucchiaio, non lo capirai di lato mentre tieni premuto e lavoro a tempo pieno. Eccezioni ovviamente.


1

Se vuoi davvero guadagnarti da vivere nel campo dello sviluppo del software senza una laurea, ti suggerisco di fare ciò che è contattare la tua Università locale. Ottieni da loro un elenco dei corsi che sarebbero richiesti se dovessi ottenere una laurea. La stragrande maggioranza delle università avrà tali informazioni disponibili su richiesta, nonché una sinossi / programma / elenco di libri per ciascuno dei corsi. Scorri l'elenco. Cerca 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 quel processo, dovresti almeno sapere cosa sai e cosa non sai, ed essere abbastanza competitivo con il tuo grado medio di college (che potrebbe aver dormito / imbrogliato comunque attraverso alcuni di quei corsi).


1

Supponiamo che io prenda il mio tempo per studiare le basi, come matematica discreta, progettazione di algoritmi, logica di programmazione, architettura del computer, assemblaggio, programmazione in C, database e strutture di dati - principalmente usando libri, risorse online e molti codici. Suppongo che trascorri 1-2 anni coprendo queste basi.

Sì e no. Alcune cose sono brutalmente difficili da capire senza un insegnante. Di solito è la roba più matematica.

Credo - e continuo a credere dopo aver aiutato i maggiori CS come TA - che chiunque senza ritardo mentale possa imparare a programmare a livello di PHP / Java / C #. Fondamentalmente non è difficile.

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

Strutture di dati, algoritmi, progettazione digitale, architettura informatica e algebra del database sono piuttosto difficili, se l'apprendimento è profondo.


0

Non ho dubbi sul fatto che una persona motivata e dedita possa raggiungere solide basi, ma se scegli di non laurearti perderai molti aspetti che miglioreranno il tuo sviluppo. Una di queste cose e forse la più importante è l'esposizione a persone con mentalità simile 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 che a volte possono chiarire concetti fraintesi in una o due frasi. È bello essere in grado di chiarire i concetti al momento dell'esposizione iniziale piuttosto che avere idee sbagliate che affondano e devono risolverle in seguito.

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.