Sequenza ideale di apprendimento della lingua di programmazione? [chiuso]

Che ne pensi? Qual è la sequenza di apprendimento della lingua di programmazione ideale che coprirà la maggior parte dei linguaggi e dei paradigmi utilizzati intensamente oggi e aiuterà a cogliere concetti, idee e pratiche di programmazione comuni? Puoi anche suggerire una sequenza di apprendimento per paradigmi piuttosto che lingue.

NB. : Questa è la porta della domanda che ho posto in stackoverflow ed è stata chiusa per essere soggettivo e argomentativo.

    
posta Gulshan 23.05.2017 - 13:33
fonte

19 risposte

Python, Lisp, C, Haskell

Supponendo che la domanda riguardasse una sequenza di apprendimento ideale per i principianti alla programmazione (poiché le vecchie maniere della programmazione avrebbero avuto una loro sequenza di apprendimento probabilmente accidentale), suggerirei di leggere Il saggio di Norvig su come imparare a programmare in 10 anni , quindi:

  1. Python : inizia con un OO & dinamico di alto livello linguaggio funzionale Perché è veramente importante per i principianti sentirsi produttivi al più presto e non essere disattivati dalla sintassi aliena, dalla mancanza di librerie, dalla mancanza di multi-piattaforma, dalla mancanza di risorse di apprendimento e dalla mancanza di comunità. Python è altamente leggibile, ha un sacco di buone librerie (specialmente biblioteche scientifiche - un moderno scienziato / ingegnere deve sapere come programmare), è facilmente gestibile dalla maggior parte dei sistemi operativi, ha tonnellate di tutorial e interi libri gratuiti ed è generalmente user-friendly - il tutto pur essendo abbastanza potente da crescere con te mentre diventi un programmatore avanzato che lavora su grossi problemi. È anche importante rinforzare importanti + utili convenzioni per un principiante: la leggibilità del codice conta molto, e dovresti scrivere codice per te stesso e gli altri per capire prontamente.

  2. Lisp: In particolare, almeno skim La struttura e l'interpretazione dei programmi per computer o guarda i video SICP , e hai gli occhi aperti molto largo vedendo le basi e il potere espressivo della programmazione - si può fare così tanto con così poco. Scopri come Lisp può esprimere non solo il paradigma funzionale, ma OO, logico / dichiarativo e altro ancora - come la creazione di nuovi linguaggi specifici del dominio. Leggi PAIP di Norvig per vedere cosa può fare un master con la lingua. Quindi controlla Clojure , un moderno dialetto Lisp che potrebbe essere uno dei Next Big Things.

  3. C: Solo perché è la lingua-franca dell'informatica. :) Forse facoltativo in questi giorni se uno è principalmente un programmatore in un particolare dominio non software. Lo trovo brutto, ma vale la pena sapere per ottenere un apprezzamento per l'hardware sottostante. Vai con K & R , ovviamente.

  4. Haskell : puro potere funzionale. Dove attuale Com.Sci. la teoria e il potere espressivo pratico si incontrano. Vedi Real World Haskell .

Dopo il tour di cui sopra, si sarebbe molto abili nell'affrontare i problemi e nell'esprimere soluzioni nel codice, ed essere totalmente a proprio agio con paradigmi qui :

    
risposta data 09.10.2010 - 20:25
fonte

Ecco come lo farei io:

  1. Python (o Ruby o Lua): un linguaggio interpretato, nessun tipo, puoi fare cose fatte in poche righe. Libreria enorme (Python è il migliore per questo immagino). Puoi approfondire gli algoritmi perché non ci sono distrazioni. Nessuna compilazione necessaria, basta eseguire. Inoltre, con Python si insegna implicitamente un buon stile, poiché l'indentazione in Python è obbligatoria. Puoi anche insegnare l'Orientamento agli oggetti (in Lua è più un problema). Lo scopo qui è quello di divertirsi molto e mostrare allo studente che cosa si può fare.

  2. C ++ (o forse Java): un linguaggio digitato e veloce. Se hai bisogno dell'Orientamento degli oggetti, conosci già alcuni concetti. L'idea principale è "tradurre" ciò che hai fatto in Python e farlo con i nuovi vincoli (principalmente i tipi). Ora se hai i concetti giusti, l'aggiunta di tipi non è un problema. Il prossimo passo è pensare a un livello più basso (Java non aiuta qui) e insegnare ai puntatori bene . Con questo intendo spiegare lo spazio degli indirizzi, la CPU, il sistema operativo, un po 'in modo da poter iniziare a vedere sotto il tuo programma. Un linguaggio compilato introduce la distinzione tra interpretazione e compilazione, molto utile per spiegare quale linguaggio macchina è, ecc.

  3. Assemblea : Infine, nessuna magia, parli solo con la macchina. C'è un dibattito sulla sintassi Intel e GAS, non è importante. Se si dispone di MIPS, credo che sia meglio per l'insegnamento, ma suppongo che x86 sia più conveniente in quanto è più diffuso (x86_64 meglio dal momento che ha più registri e sottigliezze). Devi solo rimuovere parte della complessità e consentire agli studenti di approfondire ulteriormente se lo desiderano.

(Questi primi 3 sono la "profondità". Fino ad ora, siamo andati giù fino a toccare il fondo, che è "vicino al metallo", come si suol dire. Penso che questo sia molto importante, molte domande nella programmazione vengono risolte quando hai un'idea chiara di ciò che sta accadendo. Quando lo sai, puoi acquisire ulteriore conoscenza con sicurezza.)

  1. Schema (o Common Lisp o Clojure): come detto da @dukeofgaming, le lingue Lisp ti consentono di insegnare bene la ricorsione (per questo Schema è preferibile, poiché non ha cicli espliciti). Ma andrei a insegnare altre due cose: chiusure e macro. I macro sono ciò che separa le lingue Lisp dagli altri. Personalmente non mi piacciono i macro Scheme ma questo non è troppo importante. Penso che le macro Clojure siano belle, ad esempio (ma la ricorsione in Clojure non è così pulita, dal momento che la JVM non ha una ricorsione in coda). Le chiusure sono un concetto molto importante, una volta che le fai clic "vedi" Javascript all'istante. Avendo studiato C ++, Python e Lisp, Javascript diventa "banale".

  2. Haskell : per un linguaggio funzionale, non penso che tu possa battere Haskell. Lisp e Scheme sono considerati funzionali, ma per enfatizzare la programmazione funzionale, devi costringere gli studenti a pensare senza stato. Haskell ha anche altre cose molto carine, come il currying e il pattern matching per "destrutturare". Non conosco molto Haskell, ma la concisione del codice che puoi scrivere è semplicemente bellissima. Conoscere Haskell rende molto più facile il percorso per capire Erlang.

  3. Forth : un linguaggio stack. Rompe totalmente la tua logica (se Lisp e Haskell non fossero abbastanza). Vorrei arrivare ad insegnare Jones's Forth dal momento che conoscono l'assemblaggio e quindi puoi capire completamente cosa sta succedendo. (Sapendo che Forth apre PostScript, per esempio.)

(Quindi questi ultimi 3 sono l'ampiezza che stavi dicendo.Per me, questi linguaggi sono abbastanza strani da cambiare il tuo modo di pensare.Mi hanno fatto almeno per me.E penso che con questi, capisci abbastanza paradigmi da imparare una nuova lingua molto rapidamente.)

Se lo desideri, puoi studiarli:

  1. SmallTalk : un linguaggio puramente orientato agli oggetti. Per vedere cosa succede quando si prende seriamente l'Orientamento sugli oggetti, il linguaggio non ha bisogno di "se", "per". Tutto è un messaggio: grande realizzazione ancora. (Questo renderebbe Objective-C facile ora.)

  2. Vai : una (bellissima) lingua con enfasi sulla concorrenza. Trovo che sia molto bello e comodo programmare con.

  3. Prolog : un altro paradigma di programmazione. Non ho scritto alcun Prolog, ma capisco che è l'ennesimo linguaggio per piegare la mente.

risposta data 31.01.2011 - 22:26
fonte
  • Quello di cui hai bisogno ora
  • Quello di cui hai bisogno dopo
  • Quello che ti serve dopo

Seriamente, potrei aver imparato BASIC, COBOL, Fortran, Forth, Pascal e Prolog ai miei tempi, ma non ho mai avuto particolarmente bisogno di usarli e non riesco davvero a vedere in alcun modo in cui abbiano influenzato il mio uso di altre lingue, ad eccezione forse di un errato utilizzo di paradigmi da uno in un altro. Mi ci sono voluti anni per disimparare BASIC abbastanza da scrivere effettivamente Pascal strutturato, un paio di anni per smettere di scrivere il codice Pascal in C, e un altro paio di anni per in realtà ingannare OOP quando ho iniziato ad usare Objective-C e Java. D'altra parte, dal momento che ho lavorato (quasi) esclusivamente in lingue OO, sono stato in grado di concentrarmi sul miglioramento del mio uso dei linguaggi OO, senza cercare di farli apparire come Scheme o PostScript.

    
risposta data 03.11.2010 - 11:16
fonte

È difficile affermare che qualsiasi sequenza sia ideale, ma proporrò un piano che posso giustificare:

  1. C

    L'apprendimento C richiede pazienza e diligenza e ti introdurrà ai modi basilari in cui i computer gestiscono i dati e ti mostrano quasi la più ampia serie di responsabilità che un programmatore può accettare per gestire tale macchina.

  2. Perl

    Come antidoto al rigore richiesto da C, prova il Perl incredibilmente clemente. Quello che è durato una settimana per scrivere in C è possibile scrivere in un'ora in Perl. Introduce un diverso tipo di piacere nella programmazione e mostra come escludere determinate preoccupazioni e dettagli libera il programmatore di concentrarsi su cose diverse.

  3. C ++ , o forse Java

    Successivamente, vediamo come l'attenzione di C sugli aspetti di programmazione di basso livello e primitivi serva da base per elevare il livello di astrazione, osservando le operazioni che si fanno in termini di efficienza quando ci si muove in astrazione. Scopri come creare astrazioni che possono ancora conservare le efficienze che contano per il tuo programma.

  4. Common Lisp

    Questa è la ricompensa per lo slog precedente. Troverai l'eco di ciò che hai imparato in tutte le lingue precedenti e vedrai quanto siano sciocche tante delle precedenti concessioni quando programmate in Lisp. I modelli di preprocessor e C ++ di C preparano uno ad apprezzare il sistema macro di Lisp. Riuscirai a riconquistare la facilità di espressione di Perl, le opportunità di ottimizzazione a basso livello da C, le capacità di creazione di astrazione di C ++ o Java, e andare ben oltre tutte. Nessuno dei precedenti tre - forse tranne il debugger di Perl - ti avrà preparato per l'esperienza di programmazione interattiva con un REPL ("read, eval, print loop") capace. Lavorare con un ambiente basato su immagine - che modifica la relazione tra il codice sorgente e l'idea di un "programma eseguibile" - cambierà la tua idea di cosa significhi costruire un programma.

Oltre a questi quattro, esplorare altri stili di programmazione, come la programmazione funzionale in Haskell, o la programmazione logica in Prolog, rende più comprensibile la comprensione della gamma di conoscenze a livello di programmazione, se vuoi, ma a quel punto il tuo tempo è meglio servire migliorando il tuo mestiere - conoscenza profonda - con qualsiasi lingua tu conosca.

Dopo aver assaggiato un numero sufficiente di lingue distinte, la tua opinione aumenterà per concentrarsi sulle idee che trascendono ognuna di esse. È un po 'come la differenza tra imparare a guidare l'auto di tuo padre e sapere come guidare qualsiasi auto: potresti non divertirti a guidare il minivan da noleggio per qualche giorno, conoscendo molto bene i piaceri di guidare una macchina sportiva preferita, ma capirai come farla funzionare e sicuramente riuscirai a convincere di più della povera bestia di un dilettante.

    
risposta data 09.10.2010 - 17:34
fonte

1. Smalltalk

Progettato originariamente almeno in parte come metodo per insegnare ai bambini a usare il computer. La sintassi è abbastanza semplice da descrivere in un paragrafo. Esso, come il LOGO, esemplifica il principio di "barriera bassa all'entrata, soffitto alto"

Smalltalk è un puro linguaggio OO nel senso che "tutto è un oggetto".

Insegna anche molte tecniche funzionali, in particolare nella sua API Collection: concatenare messaggi, funzioni di ordine superiore, mappare, ridurre e così via.

La Squeak community è vivace e accogliente. Vedrai anche molte discussioni sulle tecniche avanzate: molto simile alla comunità Lisp, ci sono molti Smalltalker molto esperti su mailing list disposti a condividere le loro conoscenze. (Non fa male che la comunità di Squeak abbia una grande sotto-popolazione di educatori professionisti.) C'è anche altro elenca per i principianti.

2. PROLOG

Un linguaggio di programmazione logica che ti darà una visione del calcolo molto diversa da qualsiasi altra lingua. Anche Prolog è molto dichiarativo (ma non completamente: il ! o l'operatore di taglio può avere un significativo effetto semantico su un predicato).

3. Common Lisp

Schema sostitutivo qui se ti piace. Common Lisp supporta diversi paradigmi, in particolare OO e funzionali. Ha anche una lunga storia (il Lisp è la seconda lingua ancora più usata ancora: solo i vecchi di FORTRAN).

4. Haskell

(Caveat: ho appena iniziato ad impararlo). Probabilmente il linguaggio funzionale più puro del pianeta. Ha un sistema di tipo statico molto avanzato. Sono disponibili intro libri .

5. C o Delphi

Devi sapere come funzionano i computer. Hai bisogno di sapere come funzionano effettivamente la memoria e la CPU. Entrambi sono tradizionalmente "vicini al metallo" e hanno comunità che incoraggiano a pensare a come il loro linguaggio viene compilato per l'assemblaggio.

Perché questo ordine?

Smalltalk è molto facile da imparare, quindi puoi iniziare rapidamente a concentrarti sulla risoluzione dei problemi piuttosto che combattere un compilatore ("barriera bassa per entrare"). Una volta che inizi a programmare, non ci sono limiti artificiali su ciò che puoi fare: "soffitto alto".

Una volta che hai una buona idea di come funziona OO (e - a condizione che ci siano MOLTE diverse interpretazioni su cosa significhi "OO" - è giusto dire che OO domina il mercato), passare a Prolog ti assicura che tu non iniziare a pensare che OO sia l'unico modo. Prolog è molto diverso dalla maggior parte delle lingue e stirerà i tuoi muscoli mentali in modo da non iniziare a pensare di sapere tutto.

Il Common Lisp, a sua volta, è un linguaggio per adulti. Ha uno standard maturo, è stato leader del design linguistico per decenni (insieme a Smalltalk) - tutte quelle nuove fantasiose funzionalità che hai appena acquisito nella tua lingua preferita? Le probabilità sono le idee incubate in Lisp o Smalltalk. Il Common Lisp è anche un po 'verrucoso, e troverai malignità ovunque tu vada.

Haskell è il quarto della lista perché (mi hanno detto: ho appena iniziato a impararlo) la sua purezza significa che alcune cose molto comuni (come I / O) sono più difficili da fare rispetto a linguaggi meno puramente funzionali. Gli Haskell usano anche delle terminologie abbastanza esotiche (parole come "catamorfismo", per esempio), e probabilmente starai meglio con qualche esperienza di programmazione sotto la cintura prima di affrontarla. (Ma devo ripetere, ho appena iniziato ad impararlo! Prendi questa opinione con un pizzico di sale!)

E perché C / Delphi dura? Perché, a meno che tu non lavori nei sistemi embedded, non dovresti davvero imparare a pensare alla programmazione che la gestione della memoria manuale è tutto lì. La raccolta dei rifiuti ha funzionato abbastanza bene per una macchina di livello anni '80. Il tuo telefono è così potente!

Infine, non ho inserito Erlang nell'elenco precedente anche se dovrei davvero.

    
risposta data 09.10.2010 - 21:42
fonte
  1. Python. Un'ottima introduzione alla programmazione. Questo si collegherà anche con qualsiasi precedente esposizione alla programmazione.

  2. Scheme. Anche un'eccellente introduzione alla programmazione. Se hai a che fare con i novizi della programmazione, potresti voler insegnare prima questo e Python. Un'alternativa sarebbe prima Python e poi Common Lisp invece di Scheme: più lavoro, ma più ricompensa.

  3. C. Un linguaggio di basso livello che rimane vicino al silicio. Buono per imparare ciò che un computer può fare. Potresti sostituire una qualche forma di linguaggio assembler, ma C è abbastanza vicino alle basi e molto più facile da usare.

  4. Prolog. In alternativa, sostituisci qualsiasi linguaggio generico in stile dichiarativo, se riesci a trovarne uno che ti piace di più.

  5. Haskell. Per il tipo di sistema e la pura funzionalità, se non altro.

  6. Ci sono molti candidati qui, perché è impossibile coprire tutti i concetti con sei lingue. Il Common Lisp vale la pena imparare, se non altro per il sistema macro e il sistema oggetto (che è diverso dalla maggior parte degli altri che ho visto). Forth, Tcl e APL sono tutti linguaggi strani che hanno visto un certo successo, e uno di questi sarebbe buono per impedire allo studente di sentirsi come se avesse imparato tutto. Erlang andrebbe bene per la concorrenza.

risposta data 31.01.2011 - 16:31
fonte

Sono state fornite molte buone risposte, ma non ho visto nessuno che offrisse SQL. È un animale completamente diverso rispetto alla maggior parte degli altri elencati e molto importante per qualsiasi programmatore che abbia a che fare con i database.

Potresti anche prendere in considerazione alcuni "linguaggi" di scripting a livello di sistema operativo, come Batch, grep, awk, ecc. Anche 'Make' potrebbe rientrare in questa categoria.

Un'altra lingua che potresti prendere in considerazione (se non è ancora completamente morta) è COBOL. È sufficientemente diverso dalle altre lingue procedurali che merita di essere menzionato. Le variazioni di C, Fortran, Basic, ecc. Sono diventate così simili che una volta acquisita familiarità con uno, il passaggio a un altro non è un grosso problema, ma a COBOL mancano molti dei concetti dati per scontati negli altri. (Sono passati almeno 20 anni da quando ho fatto qualcosa con COBOL, quindi le mie osservazioni potrebbero non essere più valide riguardo a questo linguaggio.)

Potresti parlare di APL solo da un punto di vista storico o lasciarlo riposare in pace. La tua scelta.

    
risposta data 31.01.2011 - 16:15
fonte

Suggerisco prima di leggere Eric Raymonds "Come diventare un hacker" poiché ha alcuni punti molto interessanti su come iniziare, incluso Lisp che ha il "codice è dati e dati è codice "nozione.

Per la programmazione suggerisco anche Haskell, Prolog, SQL e linguaggio assembly (solo alcuni).

Indipendentemente da ciò che vuoi imparare, prenditi il tempo necessario per apprenderlo correttamente e scrivere quantità di codice non banali. È come andare in bicicletta - non si può imparare da un libro.

    
risposta data 09.10.2010 - 14:28
fonte

Prima > Cosa vuoi fare quando inizi a programmare? Imparare ad essere un programmatore di giochi è diverso da imparare come essere un programmatore di database per un'azienda ... è diverso da un programmatore basato sul web ...

Secondo > Una volta che inizi a studiare, vuoi iniziare in alto e scendere? O inizia a basso e fatti strada. L'apprendimento di C # (livello alto) è molto diverso rispetto all'apprendimento dell'Assemblaggio (livello basso).

Una scelta enorme dipenderà da cosa vuoi fare. La programmazione di un driver includerà molto probabilmente C o Assembly ... La programmazione di un sito Web sarà PHP, C #, asp, ecc ... Non toccherete l'assembly per la programmazione Web ... ecc ...

Per quanto riguarda le basi ... una volta che decidi COSA vuoi fare, è più facile scegliere una lingua. Io, ad esempio, sono diventato un analista di dati in un ospedale. Quindi la mia "scelta" di linguaggi è SQL / TSQL / DB2 per l'accesso ai dati, C # WPF per i client Windows, Silverlight per i client Web, alcuni RPG / CL per la logica di back-end IBM ...

Personalmente mi attengo a un buon libro + costruisci il tuo programma per praticare la lingua. Mi piace APress e mi è piaciuto leggere C # 2008 Illustrated durante l'apprendimento di C #. Hanno altri libri che comprendono le nozioni di base per gli inesperti e per gli esperti.

    
risposta data 09.10.2010 - 19:50
fonte

Un nuovo arrivato ha bisogno solo di una lingua con cui iniziare, dopo aver appreso la seconda lingua, stanno già superando molti sviluppatori concorrenti. Imparerei nel seguente ordine:

  • Smalltalk - questo è il miglior OO, e un'esposizione semplice ti aprirà gli occhi sul modo in cui le cose dovrebbero essere fatte. Meglio imparare i concetti OO.
  • Java o C #: fornisce un approccio più architettonico e pianificato a OO, introducendo i tipi di controllo statico.
  • Ruby o Python - Non puoi apprezzarlo finché non hai sentito Java o C #
  • Erlang: la concorrenza viene eseguita in un modo che sembra facile. È molto meglio delle tue lingue OO o C può fare.
  • Lisp, Haskell o un altro linguaggio funzionale: è un approccio diverso alla risoluzione dei problemi.
  • C - Costruendo estensioni native per Java o implementando algoritmi di livello inferiore, questo è il più vicino possibile al montaggio di cui qualcuno ha bisogno fino a quando non scrivono i compilatori

Potresti chiedere "dov'è il C ++?" e che mi dici di X? Onestamente, l'apprendimento di più lingue fa un paio di cose: arricchisce la tua esperienza e fornisce un disco per imparare più lingue. L'elenco delle lingue che conosco bene (Java, C #, Ruby, C ++, Javascript) sono tutti orientati agli oggetti, ma soprattutto perché è quello che devo fare ogni giorno al lavoro. L'elenco delle lingue a cui sono stato esposto (Smalltalk, Python, Erlang, JESS, C, Assembly [Motorola 6502/6510], Go) mi hanno insegnato lezioni preziose. Posso almeno capire cosa sta succedendo con quelle lingue. C'è molto che non ho esplorato, ma molto bene potrebbe in futuro. Esistono anche alcuni linguaggi di markup: HTML, XSL: FO, XSLT, CSS, XML, SGML a cui la gente deve essere esposta se collaborano con il Web in qualsiasi modo.

Dopo aver appreso almeno due lingue diverse, non penso davvero che dovresti limitare ciò che qualcuno che ha il desiderio di imparare decide di raccogliere in seguito. L'apprendimento dovrebbe essere un'esperienza organica, e troppa struttura nel processo crea un gruppo di persone che pensano esattamente allo stesso modo. Una monocultura per così dire.

    
risposta data 31.01.2011 - 16:05
fonte

La maggior parte di queste risposte sembra più o meno la stessa quindi offrirò un'opinione diversa. Per molto tempo ho creduto che la migliore prima lingua fosse Tcl.

Perché? Per uno, è molto facile da imparare. Non c'è molta sintassi sulla lingua in modo che lo studente possa concentrarsi maggiormente sui concetti di programmazione e meno sulle peculiarità sintattiche di un particolare linguaggio. Al momento della stesura di questo manuale, Tcl ha esattamente 12 regole che governano l'intera lingua (dalle undici negli ultimi due decenni).

Per altro, Tcl è dotato di un fantastico linguaggio GUI integrato, in modo da poter ottenere una gratificazione relativamente immediata e imparare le basi della programmazione guidata dagli eventi.

Terzo, è estensibile. Vuoi insegnare un ciclo ripetuto? Puoi scrivere un comando che fa un ciclo di ripetizione in modo che non solo tu possa imparare come usare repeat ... finché, puoi imparare come è diverso da un ciclo while perché lo hai scritto tu stesso.

Inoltre, poiché è estendibile, c'è un facile seguito in C. Puoi imparare le basi del C e imparare come a) estendere Tcl con nuovi comandi scritti in un'altra lingua, oppure b) impara come aggiungere un linguaggio di scripting ad un programma scritto in C.

Una volta che hai imparato Tcl e C, la maggior parte delle altre lingue si trova tra questi due estremi e dovrebbe essere relativamente facile da imparare. La mia lista completa, con i quattro che insegno dopo Tcl e C sono:

  1. Tcl
  2. C
  3. Python - per i concetti di OO, in più è il comportamento define-by-indentation per contrastare con altri linguaggi.
  4. Ruby - per una versione diversa di OO, oltre a guide per informazioni sui framework
  5. java - è usato ovunque, devi conoscerlo e devi conoscere la JVM
  6. groovy - torna alle lingue dinamiche
risposta data 17.06.2011 - 18:16
fonte

Assembly Language, C, SQL, C #

Lo so, noioso e vecchio-skool. E l'intera domanda ignora la parte veramente difficile della programmazione, che è la risoluzione dei problemi, la modellazione del dominio e la costruzione dell'algoritmo. Ma ecco perché:

  1. non puoi fingere la tua strada attraverso il linguaggio assembly; o lo capisci o non lo fai. il compilatore non ti salverà, non ci sono overhead di strutture o librerie e non puoi nasconderti dall'architettura della macchina; è pura programmazione (al livello di aggiunta di due numeri addizionali)

  2. dopo aver scritto alcuni programmi in linguaggio assembly di più di poche centinaia di righe, i puntatori e la gestione della memoria non sono più misteriosi, e dovresti aver iniziato a notare i pattern nel codice (se, passa, array, loop, ecc.). C porta questi modelli nella luce del sole e li fa brillare. La libreria standard è utile senza essere immensa, ma non preoccuparti di macro / modelli / ecc. in questa fase.

  3. ora salta nei database con SQL. Non esagerare con le stored procedure, ottieni solo le basi delle tabelle e delle query.

  4. dopo aver scritto alcuni programmi in C di più di poche centinaia di righe, i puntatori, le strutture e la gestione della memoria sono una seconda natura e i costrutti procedurali sono vecchi amici. Inizierete a notare i modelli di ordine superiore: queste funzioni vanno sempre con questa struttura dati, questa parte del codice è esattamente come quella parte del codice tranne per i metodi X, Y e Z, e così via. Aggiungi a questo la tua conoscenza dei dati relazionali e ora sei pronto per un linguaggio orientato agli oggetti. Con una struttura massiccia e documentazione generalmente ottusa. Benvenuto nel mondo reale! Esplora le GUI, scrivi app desktop, scrivi siti web, scrivi servizi web, scrivi ciò che vuoi. Vai a trovare un lavoro se sei così inclinato.

Ora sei un Jedi di programmazione? Un codice ninja? No , ora sei semplicemente competente. Ma hai una base solida per affrontare le nuove e splendide cose divertenti.

    
risposta data 04.11.2010 - 01:27
fonte

Hai bisogno dei fondamentali:

  1. Codice macchina
  2. linguaggio assembly
  3. C
  4. Lisp

Dopo questo probabilmente non ha importanza.

    
risposta data 13.11.2010 - 17:56
fonte

OK, questo è l'ultimo giorno per la taglia. E sto aggiungendo la mia risposta. La mia sequenza suggerita -

C, C ++, JAVA / C #, Python / Ruby, Qualsiasi altra lingua (Assembly / Lisp / Prolog ecc.)

  • Non credo che la prima lingua debba essere la più semplice. Piuttosto penso che dovrebbe dare l'idea generale di come funziona il computer mantenendo una certa astrazione.
  • La transizione da C a C ++ sarà più semplice. Ci sarà OOP, il paradigma più usato in questi giorni.
  • La transizione da C ++ a C # / Java sarà più semplice. Preferisco C # perché incorpora molti paradigmi come la programmazione funzionale.
  • Quando qualcuno ora viene in lingue dinamiche come Python o Ruby, ci sarà un " WoW ". Sarà più facile sentire la bellezza della digitazione dinamica. Ma l'apprendimento delle lingue dinamiche prima e quelle statiche successive causerà " Oh! Perché devo aggiungere tutto questo? "
  • Ora, i paradigmi e i linguaggi più usati sono quasi terminati. Quindi, esplora quello che vuoi. Dall'assemblaggio a Lisp, Prolog o Haskell. E scopri nuovi contesti e caratteristiche dei vari linguaggi di programmazione.
risposta data 03.11.2010 - 10:46
fonte

Schema, C, C ++

Sarò di parte e utilizzerò il modello che la mia università attualmente utilizza per il suo curriculum di informatica di base. Ero contrario durante il mio primo anno, ma nei miei ultimi anni ne sono grato. Il modello si basa sul non richiedere alcuna esperienza di programmazione ma richiede la capacità di apprendere.

  1. Schema
    Stiamo imparando per la prima volta a programmare, meno magia, meglio è. Il linguaggio di insegnamento di Scheme presenta una definizione chiara e ragionevole di una lingua, un insieme davvero piccolo di assiomi (la "magia") che puoi costruire ed espandere. Chiunque possa capire le funzioni matematiche può rintracciare e ragionare programmi Scheme. A partire da Scheme fornisce un modo pulito ma potente di pensare al calcolo senza preoccuparsi dei dettagli specifici della lingua.

  2. C
    Passare dallo schema a C è molto drastico, ma consente di conoscere l'importantissima mappatura dei linguaggi di alto livello ai linguaggi di basso livello. Imparare il modello di memoria (puntatori, heap, stack ecc.) E come i programmi sono compilati ed eseguiti, come funzionano i puntatori, lo stack e lo heap sono competenze essenziali. Attraverso questa comprensione di basso livello è possibile iniziare ad analizzare i programmi a un livello superiore (Big O). Puoi iniziare a stampare i tuoi tipi di dati astratti, giocando con diverse implementazioni (ad esempio una semplice tabella hash o un albero binario per un set).

  3. C ++
    Attraverso l'apprendimento di C e Scheme iniziamo a vedere diversi paradigmi dei linguaggi di programmazione e come possono applicarsi a diversi problemi. Ora puoi affrontare gli aspetti più spaventosi della programmazione: scelta e compromessi. La scelta del linguaggio di programmazione può influenzare le prestazioni, la leggibilità, la manutenibilità, la robustezza, ecc. Per risolvere problemi più grandi di quelli che puoi tenere a mente, questa scelta è ottima ma anche pericolosa. C ++ tenta di fare il minor numero possibile di scelte per il programmatore. Attraverso l'apprendimento del C ++ imparerai come fare questi trade off e le tue scelte per risolvere i tuoi problemi.

Non puoi utilizzare nessuna di queste lingue nell'industria o mai toccarle di nuovo, ma il processo di apprendimento ti aiuta a capire altre lingue che utilizzerai. Un altro aspetto è che impari gli strumenti attorno a una lingua specifica. Esecuzione di gcc tramite la riga di comando, apprendimento di Vim, passaggio da un programma tramite GDB, creazione di file Make, controllo del codice tramite SVN, scrittura di script di shell per automatizzare i test ecc.

Ricorda che il curriculum di base ha anche altri corsi (architettura del computer, strutture dati e algoritmi, compilatori, sistemi operativi, ecc.). Quindi, solo imparare semplicemente queste lingue non è abbastanza per essere abile a programmare.

    
risposta data 04.11.2010 - 00:46
fonte

Passare da una lingua di base ad una di alto livello è la strada da percorrere. In questo modo hai ancora un'idea di cosa sta succedendo nella parte posteriore.

  • C - Puntatori e amp; gestione della memoria
  • C ++ - Nozioni di base OO e ancora molto popolari
  • Java / C # - Le lingue più popolari
  • Alcuni assembly di base
  • Linguaggio funzionale - Es. Haskell
  • Lingua dello script - Es. Python
risposta data 31.01.2011 - 10:49
fonte
  1. Python. Per fare le cose, fai la programmazione ordinaria. Procedurale, OO e (in una certa misura) funzionale.

  2. Espressioni regolari. Sono nella libreria Python, ma è un DSL separato.

  3. Shell (BASH o qualsiasi altra cosa). Il "&", "|", ";" gli operatori per la combinazione dei processi sono critici e spiacevoli in Python.

  4. SQL. Questo è - per ora - la lingua franca per l'accesso ai dati.

  5. XHTML. Questo è - per ora - la lingua franca per la presentazione dei dati.

  6. CSS.

Forse C se fosse diventato necessario.

    
risposta data 31.01.2011 - 14:41
fonte

Inizia vicino al metallo:

  1. Assembler
  2. C
  3. C ++
  4. C #
  5. Lisp
  6. Python o Ruby

Ora il problema con un approccio così ampio è che nessuno può diventare persino remotamente capace in queste lingue senza anni di studio.

  1. Assembler: 3 mesi
  2. C: 6 mesi
  3. C ++: 2 anni
  4. C #: 6 mesi
  5. Lisp: 3 mesi
  6. Python / Ruby: 3 mesi

A meno che il tuo intento non sia quello di insegnare loro "Hello world", che dovrebbe richiedere circa un mese per tutti e 6.

    
risposta data 19.09.2012 - 18:00
fonte

Perché non andare dritto e imparare VB o C #. Entrambi a mio parere sono lingue complete che vanno dal principiante all'avanzato, imho.

    
risposta data 31.01.2011 - 11:04
fonte

Leggi altre domande sui tag