2009-02-09 9 views
8

Voglio insegnarmi a programmare. Per fare un po 'di storia, ho una laurea in storia e le mie abilità matematiche riguardano il livello di algebra del college (e probabilmente la sua fine piuttosto bassa). Sto cercando consigli per libri che insegnino come pensare alla programmazione, piuttosto che concentrarsi su un particolare linguaggio. Ho già stabilito che SICP è fuori dal mio campionato per ora.HtDP vs. Concrete Abstractions vs.?

Le due alternative principali sembrano essere Come progettare programmi e astrazioni calcestruzzo. Sarei interessato a sentire da chiunque abbia usato entrambi, o entrambi, con una discussione specifica sul perché uno potrebbe essere preferibile all'altro. Inoltre, se qualcuno potesse consigliare un corso di studio di base utilizzando materiali liberamente disponibili, sarebbe fantastico. Qualcosa come: inizia con HtDP-> SICP->?

Grazie per il vostro tempo.

risposta

1

"Come pensare come uno scienziato informatico" è un buon libro open source sulla programmazione in python. Trovo che HTDP e SICP siano un po 'accademici.

-1

Questo non significa essere in alcun modo cattivo, ma se volessi imparare come andare in bicicletta, inizieresti con un libro sulle leggi elementari della fisica (quantità di moto, forza centripeta, ecc.)? Se ti sei comprato un kit lego, inizieresti leggendo libri sulla teoria della muratura e della costruzione?

Scommetto che quando hai iniziato a imparare la storia, non hai iniziato con "come imparare la storia" - hai letto libri su periodi storici che ti hanno affascinato e mosso e ti hanno fatto riflettere.

Invece di una ricerca teorica, considera l'acquisto di un libro su Ruby, il download del programma e prima la sperimentazione della lingua. Comprendi i dadi e bulloni del linguaggio, come gli elementi sembrano collegarsi tra loro. E poi, dopo aver passato un po 'di tempo a costruire programmi semplici, allora leggi i tuoi libri teorici. Vai avanti e indietro tra pratica e teoria.

Le persone concesse sono diverse e non tutti prospereranno utilizzando questa tecnica. Ma penso che sporcarsi le mani renderà i concetti più chiari che imparare prima i concetti.

+2

Apprezzo quello che stai dicendo, ma non credo che l'analogia regga. Ho tentato di fare proprio questo, con Ruby e Python. Finisco per rinunciare alla frustrazione perché non capisco cosa sta succedendo. Quello che trovo con HtDP è che, dal momento che sto capendo meglio i concetti, sto imparando di più. –

+0

@Cena Hai guardato il libro "Dive Into Python"? – elviejo79

5

Non posso parlare con Concrete Abstractions, ma il mio corso introduttivo di CS è stato insegnato in HtDP da uno degli autori. Retrospettivamente, apprezzo molto l'esperienza. Incoraggia una serie di buone abitudini che ti serviranno bene come programmatore professionista - piccoli metodi, test prima - ed è un inizio ragionevolmente gentile.

Imparerai Scheme, che è un buon strumento di programmazione e di pensiero da tenere sotto controllo e ti aiuterà se e quando inizierai a esplorare altri linguaggi di alto livello. Potrebbe non aiutarti molto nell'immediato futuro se ti piacerebbe esplorare lingue come Java, ma Ruby è un salto relativamente amichevole.

Per poterlo utilizzare correttamente, è necessario scaricare Racket e utilizzare il suo IDE, DrRacket, che ti farà passare attraverso diversi linguaggi di programmazione degli studenti sempre più complessi man mano che avanzi nel libro.

+0

DrScheme non esiste più, ora dovresti scaricare Racket –

-1

Sempre buono per iniziare con Hello World e ulteriori informazioni da lì.

+1

Penso che questo non è il modo in cui molte persone possono imparare a programmare. Non dà alcuna idea di come funzionano i computer, né è di per sé così gratificante ("Guarda tesoro, il mio computer dice" Ciao mondo! "") Che può fornire la motivazione. Per molti (la maggior parte?) I nuovi arrivati, i libri o le classi sono IMHO meglio. – JDelage

+1

@JDelage Il mio punto era che dovresti imparare facendo. Impara come fare il programma più semplice nella nuova lingua come "ciao mondo" e poi costruisci da lì, imparando facendo. Almeno è così che funziona il mio cervello. –

+0

Imparare facendo meglio funziona se sei solo un bambino, quando fare un computer fare qualcosa è di per sé magico. –

1

So che questo non risponde direttamente alla tua domanda, ma potresti trovare utile il mio commento.

Ho uno sfondo in T-SQL, C# e un po 'di perl. Dal 1996 ho lavorato come DBA e sviluppatore di database e sono desideroso di affinare le mie capacità di programmazione.Sono in grado di imparare qualsiasi linguaggio in modo ragionevolmente veloce (eccetto perl e assembly) ma sono debole sul design. Così ho scelto SICP e l'ho trovato molto ripido e troppo concentrato sull'ingegneria/sul mondo accademico. Ora sto lavorando su HtDP e trovo che sia fantastico perché ci sono molti esercizi da seguire e il ritmo mi si adatta perfettamente. Ovviamente alcuni libri ti si addicono meglio di altri, ma quando hai finito questo libro, dovresti essere pronto per imparare qualsiasi altra lingua, che si tratti di Python, C, Java, qualunque cosa.

0

Acquista un decente 'Insegna te stesso' libro C++. Suggerisco C++ in 24 ore, era quello che usavo quando stavo imparando.

No, non impari in 24 ore. O 24 giorni. Forse un po 'di 24 settimane, però, e 24 mesi ti daranno sicuramente sulla strada giusta.

L'importante è che tu abbia bisogno di un libro che ti guidi sia come programmare che come programmare nella tua lingua. Raccomando C o C++. "The C Programming Language" è il libro su C; non lo hanno letto, però, quindi non posso commentare ulteriormente ...

+0

Non sono assolutamente d'accordo con questo - C++ in 24 ore per una nuova persona? Incredibile, ti strapperebbe la gioia di programmare da qualche parte. Perché non imparare C in 10 anni ;-) http://norvig.com/21-days.html – jQwierdy

+0

@jQwierdy - Scusa, mi sono insegnato il C++ e per lo più mi sono insegnato a programmare con 'C++ in 24 Hours'. Probabilmente ora ci sono risorse migliori, ma ... :: shrug ::. –

+0

:-) Nessun problema, sto solo dando il mio contributo. Il miglior libro ora è presumibilmente - "Introduzione al C++". L'ho letto di recente ed è davvero piccolo - consiso e ben strutturato. Probabilmente aiuta che sia scritto dal creatore di C++. Sfrutta anche C++ 14. – jQwierdy

0

A mio parere, ci sono tre modi per diventare un buon programmatore:

  1. attraverso la dedizione e rigoroso studio dei libri e materiali on-line ;
  2. Farlo e giocarci finché non lo capisci; oppure
  3. Viene insegnato da un buon programmatore.

L'opzione 1 funziona perché costretti coscientemente a pensare come un programmatore risolvendo i problemi che ti vengono dati. L'opzione 2 funziona perché sei inconsciamente condizionato a pensare come un programmatore risolvendo i problemi che tu stesso crei. L'opzione 3 funziona perché i programmatori davvero bravi sanno come spiegare la programmazione alle persone in termini non di programmazione.

Sembra che tu stia optando per l'opzione 1. Sono andato con l'opzione 2 da bambino e penso sia il migliore. Ora provo a fornire l'opzione 3 alle persone quando posso.

Credo che linguaggi di alto livello come Ruby, Python e Java siano univocamente cattivi come lingue introduttive. Portano le persone, nel peggiore dei casi, a fraintendere completamente o ignorare come funziona effettivamente la macchina, e nel migliore dei casi a dimenticarlo di strings are hard.

9

Ci sono molti approcci per imparare come programmare. Alcuni optano per ciò che viene attualmente utilizzato nel mercato. Preferisco suggerire un approccio che ti insegnerà come creare programmi strutturati, malleabili e comprensibili. Per questo, inizia con SICP (ottieni una versione usata per risparmiare qualche soldo). Ovviamente non avrai un lavoro di programmazione in Scheme o Lisp, ma non è questa l'intenzione alla base della mia raccomandazione. L'idea è di apprendere il processo di pensiero metodico che risolve i problemi e crea soluzioni componibili e manutenibili per loro.

Una volta che si lavora alla maggior parte del libro, ottenere un libro introduttivo su Python o Ruby. Lavora i concetti principali (procedure, strutture di controllo). Allo stesso tempo, cerca la "Teoria del programma strutturato" di Bohm e Jacobini e la programmazione strutturata di Jackson.

Si noti che non ho menzionato l'orientamento all'oggetto. Il fatto è che OO è eccellente per l'analisi e l'implementazione, ma difficile per la fase di progettazione. La programmazione procedurale, modulare e strutturata è più trattabile e, per essere onesti, è estremamente difficile imparare e utilizzare correttamente l'orientamento agli oggetti senza comprendere appieno i concetti di programmazione strutturata, procedurale e modulare.

Una volta che ottenere che fare, fare un tuffo in C (utilizzare il buon vecchio Kerninghan e Ritchie del libro C Programming Language.)

Una volta che si ottiene che a farsi, poi saltare in Java o C# al contenuto del vostro cuore. Quindi, leggere questo documento:

http://sdg.csail.mit.edu/pubs/2009/hoare-jsp-3-29-09.pdf

Come un mondo reale sviluppatore Java, mi troverei irragionevole suggerire chiunque è grave imparare a programmare per iniziare con Java o C#. Sono un ottimo strumento per il lavoro, ma non una grande lingua per l'insegnamento (a meno che la persona abbia già esperienza sostanziale o esposizione a programmazione procedurale e strutturata)

Anche se è fatto per il tempo libero, la programmazione è molto di più rispetto alla codifica con un linguaggio commercializzabile. Vuoi sviluppare lezioni e abitudini che ti aiuteranno a programmare in modo pulito ed efficiente in qualsiasi lingua. Vi consiglio caldamente di seguire lo schema che ho presentato qui. In bocca al lupo.

== EDIT - 2011-11-22 ==

Oltre alla carta seminale di Hoare cui sopra, vi consiglierei vivamente di ottenere Mitchel, McKim e Meyer di "Design by Contracts, by Example". In effetti, direi di leggere prima questo libro e poi leggere il documento di Hoare.

== EDIT - 2013/01/21 == Quando dico quanto segue:

Il fatto è che OO è eccellente per l'analisi e l'implementazione, ma difficile per la fase di progettazione.

Voglio dire che, per la non iniziati, la fase di progettazione è molto più difficile da capire e cogliere quando si utilizza OO OO e le tecnologie correlate. La fase di progettazione comprende gli elementi prescrittivi che mappano il "cosa" (dall'analisi) in un concreto "come" (l'implementazione) e l'implementazione si riduce in definitiva a elementi imperativi o funzionali.

Ovviamente, per non inizializzato, questo non viene mantenuto.

1

Accredito HTDP insegnandomi a pensare in modo ricorsivo, astratto in modo efficace e a rompere i problemi in parti più piccole. È un magnifico manuale di programmazione per principianti. Come qualcuno con un background di matematica, lo mangeresti per colazione.

Problemi correlati