2011-03-06 10 views
64

Mi rendo conto che per diventare un programmatore migliore, è necessario programmare! Quindi ovviamente più pratica, meglio diventi.Programmi molto piccoli per migliorare le capacità di programmazione?

Il mio problema è questo. Sono attualmente all'università, e trovo che il mio corso sia un po 'scoraggiante e non ho molto tempo libero. Non penso di poter affrontare un grande progetto, in particolare non penso che avrei bisogno di motivazioni per vederlo, sarebbe più facile per me continuare a rimandarlo a favore del lavoro che è dovuto scuola.

Ma voglio ancora esercitarmi. Quindi sono alla ricerca di risorse che abbiano sfide di programmazione che possono essere completate in un tempo piuttosto ridotto. Idealmente qualcosa che potrei fare in meno di 10 ore di lavoro (quindi poco più di un'ora di lavoro ogni giorno), se non più piccolo.

Ho sentito parlare di Google Code Jam, ma non sono sicuro della lunghezza dei programmi che specifica, né del livello di abilità.

Qualcuno ha suggerimenti? Anche forse un compendio di tutorial per diverse funzioni potrebbe essere utile. Ad esempio, un tutorial su file IO sarebbe utile (se non lo sapessi già), anche se può essere un argomento abbastanza piccolo.

+0

Hello World è sempre un piccolo progetto. Su una nota più seria, prova a costruire scacchi o dama. È un progetto abbastanza semplice nel complesso, ma la logica che entra in ogni pezzo ti consente di imparare un bel po '... C'è molto da imparare anche su OOP (ad es.polimorfismo, un Rook è un'estensione di un pezzo, che ha una riga e una colonna). –

+2

+1 per la realizzazione molto vera. :-) A proposito, Google Code Jam è un evento annuale, ma il concorso è co-organizzato da [TopCoder] (http://www.topcoder.com/tc), che organizza contest simili _each week_ . È molto divertente, ma è necessario conoscere bene gli algoritmi. –

+0

@Aasmund, stavo pensando più a usare i loro concorsi passati. – Blackbinary

risposta

3

http://codegolf.stackexchange.com potrebbe avere alcune sfide di programmazione a proprio piacimento. Molte risposte su quel sito sono giocate a golf (implementano il programma nel minor numero di personaggi) ma ci sono sicuramente alcuni esempi interessanti da cui imparare.

+2

Questa non è sicuramente una buona pratica, dal momento che il codice breve non è nulla di cui hai bisogno nella vita reale, è soprattutto contro tutti gli stili di codifica. –

+0

@user sconosciuto, ma le sfide attuali sono interessanti. Grazie mootinator. – Blackbinary

+1

Chi ha detto qualcosa sull'apprendere qualcosa dallo stile delle risposte? Il sito è ancora pieno zeppo di decenti puzzle di programmazione breve. * Alcune * risposte * sono * scritte bene o con spiegazioni dettagliate. Benvenuto @Blackbinary. –

20

Project Euler ha alcuni problemi relativi alla matematica/ai numeri che sono molto interessanti e vanno da facili a molto impegnativi. Puoi scegliere la lingua che preferisci e inviare solo la soluzione (un numero intero di grandi dimensioni). Dopo aver inviato la soluzione corretta, hai accesso a una pagina di forum/commenti in cui altri hanno pubblicato i loro commenti e soluzioni.

33

Si dovrebbe esaminare code katas, fanno esattamente quello di cui si sta parlando. Brevi esercizi che sono progettati per perfezionare le tue capacità di codifica/abilità.

Altri riferimenti:

  1. http://kata.coderdojo.com/wiki/Overview_of_Learning_Resources
+0

Mi piace molto Coding Kata, perché separa le sfide con 'cintura', che è davvero molto più bello di dover guardare attraverso ogni singolo vedere se è troppo difficile o meno. – Blackbinary

+0

I collegamenti di riferimento sono interrotti. – Kasisnu

+0

@Kasisnu a quanto pare quel sito è andato giù. Ho trovato un'alternativa abbastanza buona. – Nix

5

Code Jam è un buon concorso di programmazione, anche se, come lei ha ricordato, la maggior parte dei problemi non ci sono per i principianti.

C'è una buona selezione di problemi rispetto alle passate competizioni con algoritmi di topcoder. (Si tengono ~ 2 volte al mese già da quasi 10 anni, quindi ce ne sono parecchio.)
I problemi vanno da very simple (ma comunque interessanti) problemi nella 2a divisione a molto difficili. Inoltre, ci sono editorials con soluzioni e ambiente live in cui è possibile inviare e testare il codice. Puoi anche imparare dalle presentazioni di altre persone.

Controllare the problem listing.
Un altro vantaggio di topcoder sono i normali concorsi online in loro possesso. Trovo che competere contro altre persone in tempo reale sia un grande stimolo per la motivazione.

Ci sono molti altri archivi di problemi, come SPOJ, UVA e Timus, anche se raramente forniscono soluzioni o suggerimenti.

+0

Grazie per i suggerimenti, sono archivi come quello che sto cercando. In particolare, però, mi piacerebbe che fosse risolto in diverse difficoltà. – Blackbinary

+0

@Blackbinary Topcoder fornisce molti filtri, tra cui difficoltà e argomenti (vedi il link nel post). In altri archivi, puoi spesso giudicare la difficoltà del problema in base al numero di persone inviate (ad es. [Su timus] (http://acm.timus.ru/problemset.aspx?space=1&page=1)). –

1

Dato che ci si trova nell'università e si sta cercando di migliorare le proprie capacità di codifica, il libro cartaceo Cracking the Coding Interview potrebbe essere adatto a voi. Ha grandi domande di programmazione generale e curiosità sull'intervista con alcune delle migliori aziende tecnologiche. Non solo ci sono grandi domande, ma ci sono anche problemi di problemi decenti.

[Disclosure:. Ho possedere il libro ma per il resto non hanno alcuna associazione ad esso]

+0

Hmm, questo libro sembra molto interessante, grazie! – Blackbinary

9

mi piace SPOJ e Project Euler a prendere le sfide programmazione rapida ed esercizi.

17

Per esperienza, consiglio di cercare un'attività che si ripete ripetutamente e trasformarla in un programma. Raccomando anche, seriamente, di reinventare la ruota per fare pratica con la programmazione. Non lasciare che la gente ti dica di non fare qualcosa solo perché esiste già. Se non sai come funziona, prova a scrivere da solo.

Non so esattamente a quale livello di programmazione ci si trova, ma non provare a fare qualcosa di troppo pazzesco, è solo un demotivator (come provare a scrivere un gioco per PS3).

Se già puoi orientarti con I/O, allora dovresti imparare davvero come utilizzare le raccolte in modo efficace. Penso che uno degli incarichi di miglior pratica che abbia mai fatto fosse la riscrittura della classe TreeMap Java. È stata una grande sfida e ho imparato molto facendolo.


Ecco alcuni suggerimenti per le assegnazioni di pratica:

Prendere un file di testo che ha una discreta quantità di informazioni in esso, afferrare qualsiasi cosa, si può ottenere qualcosa da qui se vuoi: http://www.gutenberg.org/ e fare un programma che farà il seguente:

  1. Read nel file
  2. Creare una raccolta di parole e le loro occorrenze
  3. Creare una raccolta di anagrammi
  4. Creare una raccolta di parole e le posizioni in cui si presentano (linea #, posizione di parola)
  5. elaborare statistiche sulle parole nel file - che significa - il trattamento di ogni parola come un individuo - che le parole si presentano prima e dopo.
  6. rimuovere tutti gli spazi bianchi dal file
  7. Scrivi tutti i dati di cui sopra per i propri file

Una delle cose che preferisco fare è pasticciare con i dati web, andare in un sito polling, trovare una pagina che ha i dati del sondaggio in forma tabellare e procedere come segue:

  1. Scarica i dati
  2. Parse attraverso i dati e girare il dati tabulari in un file CSV
  3. aprirlo in Excel senza errori

O semplicemente cercare qualsiasi sito e estrarre i dati da esso, basta assicurarsi che il sito è il robot amichevole http://www.robotstxt.org/, non si vuole nessuno sito per sentirsi come se fosse sotto attacco. La maggior parte delle volte però questo non è normalmente un problema perché se leggi i termini di utilizzo del sito afferma chiaramente che sei autorizzato a scaricare 1 copia di qualunque cosa tu stia visualizzando finché non intendi venderla. Ovviamente questo cambia per ogni sito.


Vai a un sito Web e ottenere tutti i collegamenti fuori dalla pagina di programmazione.


Ecco un divertente uno, il programma di Susan (non mi ricordo il motivo per cui prende il nome Susan), che inizialmente ho scritto utilizzando un programma C e due script di shell Bourne in un ambiente Unix. L'idea in questo programma è di forgiare 4 processi figlio e dare loro ognuno un compito in questo modo:

Figlio 1: legge in un file, crea un dizionario di ogni parola e la sua posizione nel file, questo viene emesso in un file.

Child 2: Prende l'output di Child 1 e ricostruisce il documento, che viene emesso in un file.

bambino 3: Prende l'uscita bambino 2 di e fa ciò bambino 1 ha fatto di nuovo

bambino 4: Prende l'uscita del bambino 3 e fa quello che bambino 2 ha fatto di nuovo

L'obiettivo qui è quello di avere una replica esatta di il file originale quando Child 4 lo emette. Questo è impegnativo e alquanto inutile, ma il punto di questo esercizio è ottenere la pratica.

Nel tuo caso, non senti di dover utilizzare thread diversi per questo, puoi semplicemente usare un singolo programma con due funzioni diverse e chiamarli semplicemente in ordine.


Anche in questo caso, non è sicuro se si è a questo livello ancora, ma tenta di sostituire qualsiasi "per" o loop "foreach" avete nel vostro programma con la ricorsione, proprio come la pratica. La ricorsione è un dolore nel sedere, ma è prezioso sapere e capire.

Questi sono alcuni suggerimenti che ritengo possano aiutarti ad affinare le tue capacità.

Divertiti

0

Puoi provare a risolvere i problemi di ACM.Ci sono migliaia di problemi lì e puoi trovare il livello di difficoltà in modo da poter scegliere quali problemi fare per primi. Il sito ufficiale per questo è:

http://uva.onlinejudge.org/. Puoi saperne di più lì.

riguarda Arefin

2

Ho sempre pensato che la pratica con domande di intervista del campione è stato un ottimo modo per affinare le proprie competenze e ottenere esposti a tipi di problemi che normalmente non risolverebbe. Inoltre, se stai cercando un lavoro ti aiuta ancora di più.

Ecco una bella semplice che ho fatto per divertimento, l'altro giorno:

scrivere una routine per stampare i numeri 1 a 100 e di nuovo a 1 ancora una volta, senza utilizzare alcun loop.

Glassdoor.com ha una buona domanda di intervista presentata da persone che li hanno effettivamente ottenuti in un'intervista.

0

Può sembrare un po 'ovvio, ma ho notato un vero miglioramento nelle mie abilità di espressioni regolari recentemente solo dalla risposta alle domande di regex su Stack Overflow. L'insegnamento ti costringe a scomporre i problemi in brani facilmente spiegabili e guiderà la tua ricerca anche in quelle occasioni in cui sai di più, ma non del tutto, una soluzione.

Ti suggerisco di trovare un argomento in cui sei già un po 'esperto, dal momento che questo tipo di cose non è buono come un tutorial per principianti. Cerca SO per le domande contrassegnate con tale argomento e cerca di capire le risposte. Non limitarti a codificarli nella tua testa; andare avanti e scriverli, testarli e spiegarli. Se non sei sicuro che la tua risposta sia corretta, basta scriverla senza pubblicarla.

1

Se ti piace programmare e vuoi migliorare le tue capacità di programmatore, devi provare cocode.co. È un sito social giovane, simile a StackOverflow ma basato sul posting e sulla risoluzione di problemi di programmazione, invece di chiedere e rispondere alle domande. Dalle sfide molto facili a quelle molto difficili.

http://cocode.co

3

Prova iscriversi su qualsiasi corso IT sui seguenti siti:

Questi siti offrono la connessione programmi informatici educativi da pr scuole di religione in cui ci sono molti esercizi stimolanti per affinare le tue abilità di programmazione. Ho imparato a programmare percolazione, riconoscimento dei pattern, palla rimbalzante e tante altre cose interessanti a causa di questo. Caricherai il tuo programma al completamento degli esercizi e sarai valutato di conseguenza (in pratica il tuo programma verrà controllato).

Alla fine di ogni corso, riceverai anche un certificato di completamento. Cool, giusto?

Problemi correlati