it-swarm.it

Ideale sequenza di apprendimento del linguaggio di programmazione?

Cosa ne pensi? Qual è la sequenza ideale di apprendimento del linguaggio di programmazione che coprirà la maggior parte dei linguaggi e dei paradigmi più utilizzati oggi, oltre a contribuire a comprendere le basi, le idee e le pratiche di programmazione comuni? Puoi anche suggerire una sequenza di apprendimento per paradigmi piuttosto che per le lingue.

N.B. : Questa è la porta della domanda che ho posto in stackoverflow ed è stata chiusa per essere soggettiva e polemica.

17
Gulshan

Python, LISP, C, Haskell

Supponendo che la domanda riguardasse una sequenza di apprendimento ideale per i neofiti della programmazione (poiché gli esperti della programmazione avranno avuto la loro sequenza di apprendimento (probabilmente accidentale)), suggerirei di leggere il saggio di Norvig su come imparare la programmazione in 10 anni , quindi:

  1. Python : inizia con un linguaggio dinamico, di alto livello, OO e linguaggio funzionale. Perché è molto importante perché i principianti si sentano produttivi APPENA POSSIBILE , e non essere disattivato da sintassi aliena, mancanza di librerie, mancanza di multipiattaforma, mancanza di risorse di apprendimento e mancanza di comunità. Python è altamente leggibile, ha tonnellate di buone librerie (specialmente biblioteche scientifiche - uno scienziato/ingegnere moderno deve sapere come programmare), è facilmente gestibile dalla maggior parte dei sistemi operativi, ha tonnellate di tutorial e interi libri gratuiti ed è generalmente facile da usare - pur essendo abbastanza potente da crescere con te mentre diventi un programmatore avanzato che lavora su grandi problemi. È anche importante rafforzare convenzioni importanti + utili 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 sfoglia La struttura e l'interpretazione dei programmi per computer o guarda i video SICP , e tieni gli occhi ben aperti vedendo le basi e il potere espressivo di 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 - come la creazione di nuovi linguaggi specifici del dominio. Leggi PAIP di Norvig per vedere cosa può fare un maestro con la lingua. Quindi controlla Clojure , un moderno dialetto LISP che potrebbe essere una delle prossime cose importanti.

  3. C: Solo perché è la lingua-franca dell'informatica. :) Possibilmente 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 : pura potenza funzionale. Dove attuale Com.Sci. teoria e 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, e ci si sentirebbe totalmente a proprio agio con il paradigmi qui :

alt text

26
limist

Ecco come lo farei:

  1. Python (o Ruby o Lua): un linguaggio interpretato, nessun tipo, puoi fare cose in pochi righe. Enorme libreria (Python è la cosa migliore per questo immagino). Puoi approfondire gli algoritmi perché non ci sono distrazioni. Nessuna compilazione necessaria, basta eseguire. Inoltre, con Python you insegnare implicitamente un buon stile, poiché il rientro in Python è obbligatorio. Puoi anche insegnare Orientamento agli oggetti (in Lua è più un problema). Lo scopo qui è divertirti molto, e mostra allo studente cosa si può fare.

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

  3. Assemblaggio : Infine, niente magia, basta parlare con la macchina. C'è un dibattito sulla sintassi Intel e GAS, non è importante. Se hai MIPS, credo che sia meglio per l'insegnamento, ma suppongo che x86 sia più conveniente poiché è più diffuso (x86_64 meglio poiché ha più registri e contenuti). Devi solo rimuovere parte della complessità e lasciare che gli studenti indagino ulteriormente se lo desiderano.

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

  1. Schema (o Common LISP o Clojure): Come diceva @dukeofgaming, le lingue LISP ti consentono di insegnare bene la ricorsione (per questo schema è meglio, poiché non lo è hanno loop espliciti). Ma andrei a insegnare altre due cose: chiusure e macro. Le macro sono ciò che separa le lingue LISP dalle altre. Personalmente non mi piacciono le macro Scheme ma questo non è troppo importante. Penso che le macro di Clojure siano belle, per esempio (ma la ricorsione in Clojure non è così pulita, poiché la JVM non ha ricorsione della coda). Le chiusure sono un concetto molto importante, una volta che le hai individuate "vedi" Javascript istantaneamente. Dopo aver studiato C++, Python e LISP, Javascript diventa "banale".

  2. Haskell : per un linguaggio funzionale, non credo che tu possa battere Haskell. LISP e Scheme sono considerati funzionali, ma per enfatizzare la programmazione funzionale, è necessario forzare gli studenti a pensare senza stato. Haskell ha anche altre cose molto belle, come il curry e il pattern matching per "destrutturare". Non conosco molto Haskell, ma la concisione del codice che puoi scrivere è semplicemente meravigliosa. Conoscere bene Haskell rende molto più semplice il percorso per comprendere Erlang.

  3. Forth : una lingua dello stack. Rompe completamente di nuovo la tua logica (se LISP e Haskell non fossero abbastanza). Andrei fino all'insegnamento Jones's Forth dato che conoscono l'Assemblea e quindi puoi capire totalmente cosa sta succedendo. (Conoscere Forth apre PostScript, per esempio.)

(Quindi questi ultimi 3 sono l'ampiezza che stavi dicendo. Per me, queste lingue sono abbastanza strane da cambiare il tuo modo di pensare. Hanno fatto almeno per me. E penso che con queste, capisci abbastanza paradigmi per imparare una nuova lingua molto velocemente.)

Opzionalmente, puoi studiare questi:

  1. Smalltalk : un linguaggio puramente orientato agli oggetti. Per vedere cosa succede quando prendi sul serio l'orientamento agli oggetti, la lingua non ha bisogno di "se", "per". Tutto è un messaggio: grande realizzazione di nuovo. (Ciò renderebbe semplice Objective-C ora.)

  2. Vai : un linguaggio (bello) con enfasi sulla concorrenza. Trovo che Go Very Nice sia comodo da programmare.

  3. Prolog : un altro paradigma di programmazione. Non ho scritto alcun Prolog ma capisco che è ancora un altro linguaggio strabiliante.

28
Pau Fernández
  • Quello di cui hai bisogno ora
  • Quello che ti serve dopo
  • Quello che ti serve dopo

Seriamente, avrei potuto imparare BASIC, COBOL, Fortran, Forth, Pascal e Prolog ai miei tempi, ma non ho mai avuto particolare bisogno di usarli e non riesco davvero a vedere in che modo hanno influenzato il mio uso di altri le lingue, tranne forse l'applicazione errata di paradigmi l'uno nell'altro. Mi ci sono voluti anni per disimparare BASIC abbastanza da scrivere effettivamente Pascal strutturato, un paio d'anni per smettere di scrivere il codice Pascal in C, e un altro paio d'anni per davvero grok OOP quando ho iniziato a usare Objective- C e Java. D'altra parte, dato che ho lavorato (quasi) esclusivamente in OO lingue) sono stato in grado di concentrarmi sul miglioramento del mio uso di OO linguaggi, senza cercare di farli apparire come Scheme o PostScript.

12
user4051

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

  1. [~ ~ #] c [~ ~ #]

    L'apprendimento di C richiede pazienza e diligenza e ti introdurrà ai modi di base con cui i computer gestiscono i dati e ti mostrerà quasi il più ampio insieme di responsabilità che un programmatore può accettare per gestire una macchina del genere.

  2. Perl

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

  3. C++, o forse Java

    Poi vedrai come l'attenzione di C sugli aspetti primitivi e di basso livello della programmazione serve come base per aumentare il livello di astrazione, notando i mestieri che si fanno in efficienza quando si sale in astrazione. Scopri come formare astrazioni che possano ancora conservare l'efficienza che conta per il tuo programma.

  4. LISP comune

    Questa è la ricompensa per lo slogan precedente. Troverai echi di ciò che hai imparato in tutte le lingue precedenti e vedrai quanto stupide appariranno così tante concessioni precedenti durante la programmazione in LISP. Il preprocessore di C e i modelli di C++ preparano ad apprezzare il sistema macro di LISP. Riacquisterai la facilità di espressione di Perl, le opportunità di ottimizzazione di basso livello di C, le capacità di costruzione dell'astrazione di C++ o Java e supererai tutte. Nessuno dei tre precedenti - forse tranne il debugger di Perl - ti avrà preparato per l'esperienza di programmazione interattiva con un capace [~ # ~] repl [~ # ~] ("read, eval, print loop"). Lavorare con un ambiente basato sull'immagine - che modifica la relazione tra il codice sorgente e l'idea di un "programma eseguibile" - cambierà l'intera idea di cosa significa 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 gamma di programmazione - ampia conoscenza, se vuoi - ma a quel punto il tuo tempo viene servito meglio migliorando il tuo mestiere - profonda conoscenza - con qualsiasi lingua tu conosca.

Avendo assaggiato abbastanza lingue distinte, la tua opinione si alzerà per concentrarsi sulle idee che trascendono una qualsiasi 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 mini noleggio furgone per qualche giorno, conoscendo appieno i piaceri della guida di un'auto sportiva preferita, ma capirai come gestirla e sicuramente convincerai più dalla povera bestia che da un dilettante.

8
seh

1. Smalltalk

Progettato originariamente almeno in parte come un modo per i bambini di utilizzare i computer per imparare. La sintassi è abbastanza semplice da descrivere in un paragrafo. Come LOGO, esemplifica il principio "barriera bassa all'ingresso, 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 comunità Squeak è vibrante e accogliente. Vedrai anche molte discussioni su tecniche avanzate: proprio come la comunità LISP, ci sono molti Smalltalker molto esperti sul mailing list disposti a condividere le loro conoscenze. (Non fa male che la community di Squeak abbia una grande sottopopolazione di educatori professionisti.) C'è anche n altro elenco per i principianti.

2. PROLOG

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

3. LISP comune

Sostituisci lo schema qui, se lo desideri. Common LISP supporta più paradigmi, in particolare OO e funzionale. Ha anche una lunga storia (LISP è il secondo linguaggio più antico ancora più usato: solo il più vecchio di FORTRAN ).

4. Haskell

(Avvertenza: ho appena iniziato a impararlo.) Probabilmente il linguaggio funzionale più puro del pianeta. Ha un sistema di tipo statico molto avanzato. Handy introbooks esiste.

5. C o Delphi

Devi sapere come funzionano i computer. Devi 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 si compila in Assemblea.

Perché questo ordine?

Smalltalk è molto facile da imparare, quindi puoi iniziare rapidamente a concentrarti sulla risoluzione dei problemi piuttosto che sulla lotta contro un compilatore ("bassa barriera all'ingresso"). Una volta che inizi a programmare, non c'è limite artificiale a ciò che puoi fare: "soffitto alto".

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

Il LISP comune, a sua volta, è la lingua di un adulto. Ha uno standard maturo, ha guidato la progettazione del linguaggio per decenni (insieme a Smalltalk) - tutte quelle nuove fantasiose funzionalità che la tua lingua preferita ha appena acquisito? Le probabilità sono le idee incubate in LISP o Smalltalk. LISP comune è anche un po 'verrucoso, e troverai la verruche ovunque tu vada.

Il quarto di Haskell nella lista perché (mi hanno detto: ho appena iniziato a impararlo) la sua purezza significa che alcune cose molto comuni (come l'I/O) sono più difficili da fare rispetto a linguaggi meno puramente funzionali. La gente di Haskell usa anche alcune terminologie abbastanza esotiche (parole come "catamorfismo", diciamo), e probabilmente staresti meglio con qualche esperienza di programmazione sotto la cintura prima di affrontarla. (Ma devo ripetere, ho appena iniziato a impararlo! Prendi questa opinione con un pizzico di sale!)

E perché C/Delphi dura? Perché se non lavori nei sistemi embedded, non dovresti davvero imparare la programmazione pensando che la gestione manuale della memoria sia tutto ciò che c'è. 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 sopra, anche se dovrei davvero.

6
Frank Shearar
  1. Pitone. Un'ottima introduzione alla programmazione. Ciò si collegherà anche a qualsiasi precedente esposizione alla programmazione.

  2. Schema. Ottima anche la programmazione. Se hai a che fare con la programmazione dei principianti, potresti voler insegnare prima questo e Python secondo. Un'alternativa sarebbe Python prima 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 cosa può fare un computer. Potresti sostituire qualche forma di linguaggio assembler, ma C è abbastanza vicino alle basi e molto più facile da lavorare.

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

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

  6. Ci sono diversi candidati qui, poiché è impossibile coprire tutti i concetti con sei lingue. Vale la pena imparare LISP comune, anche se solo per il sistema macro e il sistema a oggetti (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 utile per impedire allo studente di sentirsi come se avesse imparato tutto. Erlang sarebbe utile per la concorrenza.

5
David Thornley

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

Potresti anche considerare 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 dagli altri linguaggi procedurali che merita una menzione. Le variazioni di C, Fortran, Basic, ecc. Sono diventate così simili che una volta acquisito familiarità con uno, spostarsi su un altro non è un grosso problema, ma COBOL manca di molti costrutti 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 voler menzionare APL solo da un punto di vista storico o lasciarlo riposare in pace. La tua scelta.

4
oosterwal

Un nuovo arrivato ha bisogno solo di una lingua per iniziare, dopo aver appreso la seconda lingua, stanno già progredendo oltre molti sviluppatori concorrenti. Vorrei imparare nel seguente ordine:

  • Smalltalk: questo è il migliore OO e una semplice esposizione ti aprirà gli occhi sul modo in cui le cose dovrebbero essere fatte. Meglio imparare OO concetti su.
  • Java o C #: fornisce un approccio più architettonico e pianificato a OO, introducendo tipi controllati staticamente.
  • Ruby o Python - Non puoi apprezzarlo finché non ti senti Java o C #
  • Erlang - concorrenza fatta in un modo che sembra semplice. È molto meglio di quanto le tue OO lingue o C possano fare.
  • LISP, Haskell o altri linguaggi funzionali: è un approccio diverso per risolvere i problemi.
  • C - O costruendo estensioni native per Java o implementando algoritmi di livello inferiore, questo è tanto vicino a Assembly quanto serve a qualcuno fino a quando non scrivono compilatori

Puoi chiedere "dov'è il C++?" e che dire di X? Onestamente, l'apprendimento di più lingue fa un paio di cose: arricchisce la tua esperienza e fornisce un impulso per imparare più lingue. L'elenco delle lingue che conosco bene (Java, C #, Ruby, C++, Javascript) sono tutte orientate agli oggetti, ma principalmente 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. Ci sono molte cose che non ho esplorato, ma molto bene in futuro. Ci sono anche alcuni linguaggi di markup: HTML, XSL: FO, XSLT, CSS, XML, SGML a cui le persone hanno bisogno di essere esposti se lavoreranno con il web in qualche 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 dopo. L'apprendimento dovrebbe essere un'esperienza organica e troppa struttura nel processo crea un gruppo di persone che la pensano esattamente allo stesso modo. Una monocultura per così dire.

2
Berin Loritsch

La maggior parte di queste risposte sembrano più o meno le stesse, quindi offrirò un'opinione diversa. Ho a lungo creduto che la prima lingua migliore fosse il Tcl.

Perché? Per uno, è molto facile da imparare. Non c'è molta sintassi del linguaggio, quindi lo studente può concentrarsi maggiormente sui concetti di programmazione e meno sulle peculiarità sintattiche di un particolare linguaggio. Al momento della stesura di questo documento, Tcl ha esattamente 12 regole che governano l'intera lingua (rispetto alle undici degli ultimi due decenni).

Per un altro, Tcl viene fornito con un fantastico linguaggio GUI integrato, in modo da poter ottenere una gratificazione relativamente istantanea e apprendere le basi della programmazione guidata dagli eventi.

Terzo, è estensibile. Vuoi insegnare un ciclo ripetuto? Puoi scrivere un comando che esegue un ciclo di ripetizione in modo che non solo tu possa imparare come usare la ripetizione ... fino a quando, puoi imparare come è diverso da un ciclo while perché in realtà l'hai scritto tu stesso.

Inoltre, poiché è estensibile, si può facilmente seguire C. È possibile imparare le basi di C e imparare a) estendere Tcl con nuovi comandi scritti in un'altra lingua oppure b) imparare come aggiungere un linguaggio di scripting a un programma scritto in C.

Una volta che hai imparato Tcl e C, la maggior parte delle altre lingue si trovano da qualche parte tra questi due estremi e dovrebbe essere relativamente facile da imparare. Il mio elenco completo, con i quattro che vorrei insegnare dopo Tcl e C sono:

  1. Tcl
  2. C
  3. Python - for OO concetti, oltre al comportamento di definire i blocchi per rientro in contrasto con altri linguaggi.
  4. Ruby - per una versione diversa di OO, più Rails per conoscere i framework
  5. Java: viene utilizzato ovunque, è necessario conoscerlo e conoscere la JVM
  6. groovy - torna indietro a linguaggi dinamici
2
Bryan Oakley

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

Per la programmazione suggerirei anche il linguaggio Haskell, Prolog, SQL e Assembly (solo alcuni).

Indipendentemente da ciò che vuoi imparare, prenditi il ​​tempo per impararlo correttamente e scrivere quantità di codice non banali. È molto simile alla bicicletta: non puoi impararlo da un libro.

2
user1249

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

Secondo> Dopo aver iniziato l'apprendimento, vuoi iniziare in alto e scendere verso il basso? Oppure inizia in basso e fatti strada. L'apprendimento di C # (alto livello) è molto diverso dall'apprendimento dell'Assemblea (basso livello).

Un'enorme scelta dipenderà da ciò che vuoi fare. Molto probabilmente la programmazione di un driver includerà C o Assembly ... La programmazione di un sito Web sarà PHP, C #, asp, ecc ... Non toccherai Assembly per la programmazione web ... ecc ...

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

Personalmente mi attengo a un buon libro + costruisco 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 racchiudono le nozioni di base per i non esperti e per gli esperti.

2
WernerCD

Assembly Assembly, C, SQL, C #

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

  1. non puoi fingere la tua strada attraverso il linguaggio Assembly; o lo capisci o no. il compilatore non ti salverà, non c'è un sovraccarico di framework o librerie e non puoi nasconderti dall'architettura della macchina; è pura programmazione (a livello di principiante aggiungere due numeri)

  2. dopo aver scritto alcuni programmi in linguaggio Assembly di più di qualche centinaio di righe, i puntatori e la gestione della memoria non sono più misteriosi e dovresti aver iniziato a notare gli schemi nel codice (if, switch, array, loop, ecc. ). C fa risaltare quei motivi alla luce del sole e li fa risplendere. La libreria standard è utile senza essere immensa, ma non preoccuparti di macro/template/ecc. in questa fase.

  3. ora passa ai database con SQL. Non esagerare con le procedure memorizzate, basta ottenere le basi di tabelle e query.

  4. dopo aver scritto alcuni programmi in C di più di qualche centinaio di righe, puntatori, strutture e gestione della memoria sono una seconda natura e costrutti procedurali sono vecchi amici. Inizierai a notare modelli di ordine superiore: queste funzioni si adattano sempre a questa struttura di dati, questa parte del codice è proprio come quella parte del codice ad eccezione dei 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 enorme e documentazione generalmente ottusa. Benvenuto nel mondo reale! Esplora GUI, scrivi app desktop, scrivi siti web, scrivi servizi web, scrivi quello che ti piace. Vai a cercare lavoro se sei così propenso.

Ora sei un Jedi programmatore? Un codice ninja? No, ora sei semplicemente competente. Ma hai una solida base da cui partire per esplorare le nuove splendide cose divertenti.

1
Steven A. Lowe

Hai bisogno di fondamentali:

  1. Codice macchina
  2. Linguaggio assembly
  3. C
  4. LISP

Dopodiché probabilmente non ha importanza.

1
Scott Whitlock

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 remotamente capace in queste lingue senza anni di studio.

  1. Assemblatore: 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 "Ciao mondo", che dovrebbe richiedere circa un mese per tutti e 6.

0
SnoopDougieDoug

Schema, C, C++

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

  1. Schema
    Per prima cosa stiamo imparando la programmazione, meno magia, meglio è. La lingua di insegnamento di Scheme presenta una definizione chiara e ragionevole di una lingua, un insieme veramente piccolo di assiomi (la "magia") su cui puoi costruire ed espandere. Chiunque sia in grado di comprendere le funzioni matematiche può tracciare e ragionare sui programmi Schema. Iniziare con Scheme fornisce un modo pulito ma potente di pensare al calcolo senza preoccuparsi dei dettagli specifici della lingua.

  2. [~ ~ #] c [~ ~ #]
    Il passaggio dallo Schema a C è drastico, ma ti consente di conoscere l'importantissima mappatura delle lingue di alto livello su lingue di basso livello. Imparare il modello di memoria (puntatori, heap, stack ecc.) E come vengono compilati ed eseguiti i programmi, come funzionano i puntatori, lo stack e l'heap sono abilità essenziali. Attraverso questa comprensione di basso livello puoi iniziare ad analizzare i programmi ad un livello superiore (Big O). Puoi iniziare a creare i tuoi tipi di dati astratti, giocando con diverse implementazioni (ad esempio una semplice tabella di hash rispetto a un albero binario per un set).

  3. C++
    Attraverso l'apprendimento del C e dello Schema iniziamo a vedere diversi paradigmi di linguaggi di programmazione e come possono applicarsi a problemi diversi. Ora puoi affrontare gli aspetti più spaventosi della programmazione: scelta e compromessi. La scelta del linguaggio di programmazione può influire sulle prestazioni, sulla leggibilità, sulla manutenibilità, sulla solidità, ecc. Per risolvere problemi più grandi di quelli che puoi tenere in testa, 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 compromessi e le tue scelte per risolvere i tuoi problemi.

Potresti non usare nessuna di queste lingue nell'industria o mai toccarle di nuovo, ma il processo di apprendimento delle lingue ti aiuta a capire le altre lingue che utilizzerai. Un altro aspetto è imparare gli strumenti intorno a una lingua specifica. Esecuzione di gcc attraverso la riga di comando, apprendimento di Vim, passaggio a un programma tramite GDB, creazione di file, controllo del codice tramite SVN, scrittura di script Shell per automatizzare i test, ecc.

Intendiamoci, il curriculum di base ha anche altri corsi (architettura informatica, strutture dati e algoritmi, compilatori, sistemi operativi ecc.). Quindi semplicemente imparare queste lingue non è abbastanza per essere abili nella programmazione.

0
Kirk Fernandes

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

  • C - Puntatori e gestione della memoria
  • C++ - OO nozioni di base e ancora molto popolare
  • Java/C # - Lingue più popolari
  • Qualche assemblea di base
  • Linguaggio funzionale - Es. Haskell
  • Linguaggio di script - Es. Pitone
0
Carra

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

C, C++, Java/C #, Python/Ruby, qualsiasi altra lingua (Assembly/LISP/Prolog ecc)

  • Non penso che la prima lingua debba essere la più semplice. Piuttosto penso che dovrebbe dare l'idea generale di come funziona il computer mantenendo un po 'di 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 verrà a linguaggi dinamici come Python o Ruby, ci sarà un "WoW". Sarà più facile sentire la bellezza della digitazione dinamica. Ma imparare prima i linguaggi dinamici e quelli statici in seguito causeranno "Oh! Perché devo aggiungere tutti questi?"
  • Ora, i paradigmi e le lingue più utilizzati sono quasi terminati. Quindi, esplora quello che vuoi. Da Assembly a LISP, Prolog o Haskell. E scopri nuovi contesti e funzionalità di vari linguaggi di programmazione.
0
Gulshan
  1. Pitone. Per fare cose, fai la normale programmazione. Procedurale, OO e (in una certa misura) funzionale.

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

  3. Shell (BASH o altro). "&", "|", ";" gli operatori per combinare i processi sono critici e spiacevoli in Python.

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

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

  6. CSS.

Forse C se fosse necessario.

0
S.Lott