Tecniche per decollare in qualsiasi lingua [chiuso]

27

Quando inizio a imparare una nuova lingua, ho un paio di semplici implementazioni che mi piacerebbe completare per familiarizzare con la lingua. Attualmente scrivo:

  1. Fibonacci e / o fattoriale per ottenere il blocco dei metodi di scrittura e chiamata e ricorsione di base
  2. Djikstras percorso più breve (con un tipo di nodo) per comprendere come rendere le classi (o qualunque sia l'equivalente del linguaggio) con metodi e proprietà e anche utilizzarle in un codice leggermente più complesso.

Mi stavo chiedendo: qualcun altro ha qualche tecnica o strumento che preferisce usare quando si decollano in una nuova lingua? sono sempre alla ricerca di nuove cose da aggiungere al mio "inizio -up routine ".

    
posta Andy Hunt 08.04.2012 - 21:51
fonte

12 risposte

12

Ho costruito un piccolo compito "ciao, mondo" che ho usato per assicurarmi di imparare alcune parti importanti delle lingue. Il programma ha bisogno di leggere e analizzare un file CSV (mi assicuro di usare regex se disponibile), e poi - basato su argomenti della riga di comando - ha bisogno di generare i dati in un formato json, yaml o XML in un nuovo file. Per costruire l'output di solito cerco di non usare molti loop, ma invece di trovare gli equivalenti linguistici della mappa e di ridurli.

Ho scoperto che modellare questo problema è abbastanza complesso da essere abbastanza prezioso. Ad esempio, cerco di non utilizzare un interruttore / caso, ma in qualche modo applicare il principio di apertura / chiusura e quindi renderlo estendibile (polimorfismo basato sugli oggetti, tabella di distribuzione dinamica ecc.)

    
risposta data 08.04.2012 - 22:44
fonte
29

Tendo a cercare un progetto adatto al mondo reale, qualcosa che la lingua in questione dovrebbe essere particolarmente adatta.

Poi gioco con il linguaggio, vedo come i problemi più cruciali per quel particolare progetto possono essere risolti da soli, e quando mi sento un po 'a mio agio, mi tuffo nel vero progetto. Il più delle volte, finisco per riscrivere la cosa da zero almeno una volta, ma considero quella parte dell'esperienza di apprendimento.

    
risposta data 08.04.2012 - 22:49
fonte
17

Risoluzione dei problemi nei progetti Project Euler o simili specifico per la lingua aiuta molto a comprendere le funzioni e le librerie linguistiche, e le sue capacità e debolezze in diverse aree. (come trovare il motivo per cui un ciclo di ordinamento che usi per risolvere il problema nella nuova lingua funziona molto più lentamente di quello in un'altra lingua)

Modifica:

Inoltre, confrontare la lingua che vuoi imparare con le lingue che già conosci aiuta molto a capire cosa è diverso e cosa dovresti cercare nella nuova lingua. Il collegamento di nuovi concetti con quelli vecchi facilita la curva di apprendimento. Googling old language vs new language generalmente ti dà molto da leggere in questo aspetto.

    
risposta data 08.04.2012 - 22:01
fonte
9

Sono piuttosto parziale con Conway's Game of Life e il buon vecchio Mandelbrot Set come primi progetti in qualsiasi nuova lingua (preferibilmente come app GUI). Quando avrai terminato, avrai acquisito una visione approfondita delle loro prestazioni di elaborazione, impadronendoti del supporto multithreading della lingua (o della sua libreria standard) e implementato un'app GUI minima vitale (un'immagine che risponde ai clic del mouse).

Alcuni anni fa volevo imparare Scala e ho deciso di utilizzare Project Euler per farlo. 200+ ha risolto i problemi più tardi e non mi sento davvero di conoscere la lingua così bene oltre le basi (io uso Scala quasi esclusivamente per PE); tuttavia ho imparato molto molto di matematica (più su questo qui ).

Aggiornamento 2012-11-30 : guarda il video (20 minuti) sul "Global Day of Code Retreat" sito , e lieto di vedere che il loro focus per il giorno è Conway's.

    
risposta data 09.04.2012 - 01:04
fonte
5

C'è un sito web chiamato Project Euler che contiene un gran numero di problemi matematici / algoritmici. La cosa interessante è che ha algoritmi che richiedono di gestire diverse strutture dati e tecniche diverse (iterazione, ricorsione).

L'ho fatto per F # e mi è stato di grande aiuto.

    
risposta data 08.04.2012 - 22:00
fonte
2

Utilizzo Project Euler per questo tipo di cose, ma al momento penso che dovresti pensare ad alcune semplici app e usare la lingua in una soluzione pratica.

Puoi scrivere qualcosa come Todo list.

Dai un'occhiata a questo sito. link

    
risposta data 08.04.2012 - 22:21
fonte
2

Oltre al progetto Eulero, mi piace fare alcuni di questi problemi link

Molti di questi problemi sono stati utilizzati nella programmazione di competizioni come link e altri.

Per me, i principali vantaggi di SPOJ rispetto a Project Euler è che spoj valuta il tuo codice e ha una classifica di tutti gli utenti inviati. Come nota, oggi accetta le lingue da ADA, Brainfuck e bash, a TCL e Haskell

E, naturalmente, un motore di blog.

    
risposta data 09.04.2012 - 06:59
fonte
1

Uso Project Euler e talvolta realizzo semplici giochi basati su testo, oltre alla cosa fibonacci che hai detto. Vado anche a guardare il codice di altri principianti e provo a scrivere il loro codice ... eccetto che meglio. Inoltre, prova a fare alcune semplici routine di I / O.

    
risposta data 08.04.2012 - 22:25
fonte
1

Quando provi una nuova lingua, ad esempio provando un nuovo framework PHP, mi piace creare un Guestbook.

I libri degli ospiti erano di gran moda quando stavo iniziando, creare un blog di base sarebbe probabilmente un equivalente moderno.

In ogni caso, penso che la creazione di qualcosa come questo insegna le basi, compresa la creazione di un modulo, la convalida, il salvataggio dei suoi contenuti in una tabella di database e il caricamento dei record da quella tabella per mostrare le voci precedenti.

Questi sono i fondamenti di cui avrai bisogno se continui a svilupparti in quella lingua.

    
risposta data 09.04.2012 - 01:29
fonte
1

Anch'io ho un piccolo set di programmi che scrivo quando apprendo una nuova lingua. I miei sono:

  1. Pentominoes - soluzioni di output per le 12 forme di 5 quadrati ortogonali unici posizionati nelle aree rettangolari di 3x20, 4x15, 5x12, 6x10. E poi con una singola tessera rimossa da ogni angolo, 8x8. Per un bonus, considero ogni pentomino con un colore (blu) in alto e un altro in basso (bianco). E poi contrassegno ogni soluzione sul fatto che si tratti di un singolo colore. Per un bonus extra, inserisco i 12 pezzi in modo tale che una delle soluzioni 3x20 sia di un solo colore.
  2. Dama - genera una scacchiera (o bozze), un giocatore di scacchi che genera casualmente una mossa dall'insieme di tutte le mosse attualmente legali dato uno stato di bordo e poi un manager che poi gioca e trasmette ogni partita per un certo numero di iterazioni. A proposito, questo sembra apparentemente semplice. {smirk} Per un bonus, implemento quindi un semplice selettore di spostamento alfa-beta somma-valore-somma e poi lo gioco contro casuale e contro se stesso a varie profondità.
  3. Boggle / Scramble - data una scheda 4x4 o 5x5 di lettere generate casualmente, usa un dizionario per trovare tutte le parole valide possibili. Per un bonus, utilizza punti lettera Scramble / Scrabble e / o moltiplicatori di parole per generare punteggi e ordinare l'elenco restituito di parole valide in valore decrescente.
  4. La vita di Conway - versione iniziale, evidente. Per un bonus, migliora il gioco in un ambiente triangolare ed esagonale (leggera regolazione delle regole necessarie). Per un bonus extra, modifica il Boolean on / off su un vero / float e poi usa un'area espansa per determinare le soglie per il passaggio verso la vita e la morte cellulare. Ho finito per giocare un sacco a giocare una volta arrivato qui. {Sorriso}

Ciascuno di questi richiede una "fetta" diversa di logica e ricerca di base. Ho trovato che ognuna di queste funzioni è molto importante per spingere la mia mente a capire le sfumature di ogni lingua partendo da uno standard di base "fare le cose in modo efficace". Ognuno può essere fatto da un prompt dei comandi (nessuna dipendenza UI pazzesca). Ognuno offre un feedback abbastanza immediato e accurato su dove si potrebbero aver fatto ipotesi sbagliate e / o errori di codifica. Ognuno offre una buona piattaforma da cui eseguire alcuni benchmark per sentire i problemi di prestazioni. E, cosa più importante, ho trovato che ognuno è divertente nella natura e mi ispira ad esplorare e giocare con il linguaggio, le sue librerie e il dominio del problema stesso.

    
risposta data 09.04.2012 - 20:39
fonte
1

Parlando per me, sto quasi sempre imparando una nuova lingua per lavorare su una base di codice esistente. Quindi preferisco di gran lunga i compiti che contemporaneamente mi insegnano il linguaggio e il codice (piuttosto che un compito artificiale come Fibonacci).

Quindi, di solito è qualcosa di simile a questo:

  1. Apporta una piccola modifica che produce un effetto visibile (solitamente negativo)
  2. Apporta una piccola modifica che produce un miglioramento
  3. Identifica un bug minuscolo e risolvilo
  4. Passa a bug più grandi ...
  5. Aggiungi eventualmente nuove funzionalità ...

Di solito imparo il linguaggio per osmosi, tagliando / incollando bit da altrove nel codice e modificandoli. Quando voglio aggiungere nuove funzionalità, inizio a googling. Questo mi porta alle funzioni e alle funzionalità della libreria che sono utili, e di solito alle funzionalità linguistiche di cui non ero a conoscenza, che inizierò a rilasciare quando ne avrò bisogno.

Sono curioso del motivo per cui così tante persone hanno risposto con questa preferenza simile per lo sviluppo di piccoli progetti di "apprendimento" che non hanno valore per se stessi.

    
risposta data 11.04.2012 - 04:35
fonte
0

Non ho un approccio standard. Dipende dal motivo per cui imparo la lingua.

Ad esempio:

Quest'anno ho imparato C # e C ++ / CLI per il mio lavoro al fine di lavorare su una grande applicazione commerciale, quindi avevo bisogno di familiarizzare con quelle lingue. Per ogni lingua ho semplicemente preso un libro, l'ho letto copertinalmente e ho fatto (quasi) tutti gli esercizi del libro in circa una settimana.

L'anno scorso ho imparato Python, solo per conoscere alcuni Python e creare alcuni piccoli script per costruire e mantenere un mio progetto di hobby. Ho letto alcuni tutorial e poi sono saltato dritto a scrivere gli script di cui avevo bisogno e ho imparato Python al volo.

    
risposta data 30.11.2012 - 12:20
fonte

Leggi altre domande sui tag