2009-03-02 8 views
20

Come trovate problemi interessanti da risolvere?Come trovate problemi interessanti da risolvere?

Spesso desidero imparare nuovi linguaggi di programmazione. Tuttavia, ritengo che a davvero capire, devo scrivere qualcosa che è:

  • reale si deve risolvere alcuni problemi del mondo reale. Questo problema non deve essere nuovo (infatti, avere una soluzione di riferimento potrebbe essere una buona idea), ma deve essere qualcosa che mi costringa a elaborare alcuni dettagli sporchi e sporchi. Non voglio risolvere i puzzle matematici o implementare algoritmi e strutture dati, perché questo mi insegna solo come risolvere i problemi matematici (o A & DS) in 'new-language.

  • Qualcosa su cui posso appassionarmi: ci vuole tempo per imparare i dettagli di un nuovo linguaggio di programmazione. Ciò significa che devo inserirmi in quel momento. Per aiutarmi a rimanere motivato, voglio risolvere i problemi che mi attirano a un certo livello. Penso che questa parte sia la più difficile, almeno per me, a giudicare da tutti i miei progetti a metà finito; è anche la parte più importante. Non importa quanto sia reale un problema, se non ci lavori non ne impari.

  • Finissable-connesso all'aspetto passionale, voglio qualcosa che sono sicuro di poter portare a uno stato di spedizione quando lavoro solo nel mio tempo libero. Anche se "C compiler" è il molto reale nel mondo reale e mi piacciono molto i compilatori, è un po 'grande. Anche un semplice valutatore di espressioni è qualcosa che puoi ridisegnare, eseguire il debug e ottimizzare molte volte quando non hai familiarità con gli idiomi di una particolare lingua.

Quindi, come risolvete (o vorreste) risolvere il problema di trovare qualcosa di interessante da utilizzare?

Le soluzioni particolari, ovvero i problemi su cui lavorare, saranno molto apprezzate, ma (perdonate l'arroganza) sono solo "stupide conoscenze". Quello che mi impressionerà di più sono nuovi modi di pensare e attaccare il problema (ad esempio algoritmi >> dati: D).

EDIT: i vincitori finora sono "fare un gioco" e "fissare qualcosa che ti infastidisce circa (programmazione | usando comptuers)".

Il suggerimento del gioco è che ci sono un sacco di giochi ragionevolmente semplici che posso reimplementare (dandomi una vasta gamma di problemi da attaccare), sono sicuramente mondo reale, e io sono un giocatore così io m appassionato di buoni giochi.

Il "aggiustare qualcosa di noioso" ha la passione e l'integrazione nel mondo reale, ma richiede che io non sia rovinato dal fatto che le cose funzionano e che la correzione non modifica qualche programma non scritto nel lingua che voglio imparare.

(È sia guadagnato un upvote. Un accetta può essere sulla buona strada)

+0

dovrebbe essere wiki della comunità – Malfist

risposta

2

Ogni volta che vedo qualcosa che viene fatto più e più volte vedo l'opportunità di creare qualche pezzo di codice riutilizzabile. Era quello con il mio DAL e molti altri progetti su cui ho lavorato.

+0

Dayam: questa è stata la mia risposta ... quindi è +1! –

0

Di solito trovo che c'è già un problema che ho riscontrato che potrebbe essere più facilmente svolto in una lingua diversa. Esempio: lavoro con PDF in più lingue.

3

ho raccolto questo problema "standard" che ho usato diverse volte per imparare una nuova lingua.

http://homepage.mac.com/s_lott/books/oodesign.html

E 'vero. Ha un valore tangibile. È finibile

+0

Il problema potrebbe essere interessante, ma ho la sensazione che il design proposto nel libro contenga molte generalizzazioni YAGNI e un sacco di classi che semplicemente fanno saltare il disegno. –

+0

Alcune delle generalizzazioni sono lì per aiutare ad apprendere le caratteristiche della lingua. Alcuni sono lì per insegnare i principi di progettazione OO. Quindi, puoi obiettare che sono "troppo generalizzati". L'estensibile di una persona è sempre YAGNI di un'altra persona. L'estensibile è sempre discutibile finché non ne hai effettivamente bisogno. –

0

Hmm. Se questo è il tuo obiettivo, potresti provarlo in due fasi ... per quanto riguarda gli algoritmi, ti consiglio caldamente di guardare alcune delle sfide di programmazione out there, e farlo insieme alla lettura del libro di Skeina Programming Challenges. Fornisce una grande quantità di teoria su come affrontare i problemi da un punto di vista di algoritmi e struttura dei dati, e quindi ti indirizza a una serie di domande campione in cui puoi provare a mettere in pratica queste idee da solo. In definitiva, ti metterà decisamente alla larga dallo strizzatore mentale, in un modo molto buono. Molto simile a Project Euler, ma per gli algoritmi hard-core e le persone con strutture dati piuttosto che per i matematici.

Solo per "imparare la lingua abbastanza da sentirsi in grado di usarla davvero", beh, ci sono molte idee per questo ... per me, solo per usare un esempio, mi piace costruire un database sito web guidato. Mi costringe a fare un sacco di cose che devi fare per entrare in una lingua in una certa ampiezza/profondità.

Se hai bisogno di un esempio specifico di un sito e vuoi essere spinto a fare qualcosa di reale, puoi contattare alcuni enti di beneficenza a cui sei affezionato, e vedere chi ha bisogno di un sito Web o di un'altra applicazione fatta per loro gratuito. Sei costretto a imparare, e hai una ragione per farlo in tempi ragionevoli, e ricevono un'app utile gratuitamente. Win-win.

+0

"potresti contattare alcune organizzazioni di beneficenza a cui sei affezionato [...]" - sarei più motivato a provare un senso di obbligo (evitando la punizione di avere persone che sono deluse) rispetto all'interesse intrinseco (essere ricompensato realizzando ciò che Volevo per qualche ragione personale). –

+0

Esattamente! Funzionerebbe come un motivatore eccellente, se la persona si sentisse come se avessero bisogno di una buona ragione per superare alcune difficoltà. Ovviamente, una volta finiti, avrebbero raccolto i frutti di entrambi avendo fatto una buona azione, e imparato ciò che volevano imparare. – Beska

3

Trova un "problema" nella tua vita che puoi risolvere con la programmazione. Mentre è più facile a dirsi che a farsi, ti darò un esempio. Ho ricevuto uno di quei calendari con una parola jumble su di esso per ogni giorno dell'anno (reale). Mi piacciono i puzzle di parole e così (passione) e al momento volevo un progetto con cui tuffarmi in python. Così ho creato un semplice script da riga di comando per risolvere i problemi con un back-end in sqlite, e da allora ho lavorato un po 'con Python. Il progetto è finito come voglio, aggiungo ancora cose e continuo a migliorarlo e ad aggiungerlo, ma è servito per me come progetto iniziale. Quindi penso davvero che il trucco sia trovare qualcosa in cui puoi lavorare e che sia facilmente e direttamente connesso alla tua vita di tutti i giorni.

12

Per generare idee, trovo che sia sempre utile chiedere "cosa mi infastidisce della programmazione" e "cosa mi dà fastidio di lavorare con il computer".

Finire le cose è un'altra storia. Finire cose è davvero difficile. Penso che sarai più felice se accetti di avere un portafoglio di progetti, molti dei quali rimangono incompiuti. Se finisci tutto, avrai l'opportunità di esplorare molte meno idee e tecnologie.

Scegli con attenzione quali progetti si desidera terminare, e ricordare le parole di Piet Hein:

presentate in un luogo
dove è facile vedere
l'ammonimento criptico

T. T. T. 

Quando si sente quanto deprimente
lentamente si sale,
E 'bene ricordare che

Things Take Time. 
+1

+1, la pazienza è acquisita e sfortunatamente non contagiosa. –

7

fare un gioco. Imparerai tantissimo su qualsiasi lingua. Non deve essere elegante. Effettua un dungeon crawl o qualcosa del genere.

+0

+1 :) Il mio gioco preferito di tutti i tempi è "la favola del bardo" ..è divertente implementare qualcosa di simile quando si impara una nuova lingua. –

+0

Il mio esercizio standard per l'apprendimento di una nuova lingua o piattaforma è l'implementazione di un simulatore di video poker. È abbastanza complesso da non essere banale, ma è fattibile in un weekend. –

1

non vado in cerca di problemi, nel codice o in altro modo. Invece tengo gli occhi aperti il ​​più possibile per non perdere l'ispirazione per soluzioni più semplici ai vecchi problemi :)

A volte guardo le persone essere persone ... o uno scarafaggio che fa le sue attività quotidiane.

Spesso, se lo fai, incontrerai nuovi problemi da risolvere. Non cercare di pensare a problemi complessi, in questo modo si ottengono soluzioni complesse. Ogni pensiero che pensi ti allena il cervello, sei tanto ciò che mangi quanto lo sei quello che pensi.

1

Un'altra fonte di "ispirazione" per i bit di software da sviluppare (o solo per esplorare come funziona la tecnologia) è "Perché non ce la fa?" o "Dovrebbe funzionare con quello!" momenti. Ho avuto alcuni di quei momenti con cose come la generazione di codice da XSD.

Un'altra fonte sono quelli "Ci deve essere un modo più elegante per farlo!" momenti. Semplici piccoli elementi come il C# "if (x è typea) do_a else if (x è type_b) bo_b else ....". Inizimi a pensare a modi migliori di fare le cose.

Un'altra fonte, che alcuni hanno menzionato prima, è "Posso scrivere un sistema per farlo?" momento (o la domanda retorica). Conosco programmatori che hanno lavorato su un sistema ISAM per anni, modificando qui e là solo perché ci piace giocare con esso. Non ho idea nemmeno di finire il progetto, solo giocando con idee e implementazioni diverse.

0

Gestisco un elenco di progetti/classi/funzioni da creare "quando ottengo il tempo e l'inclinazione". Mantengo elenchi simili per altri hobby. Poi c'è sempre qualcosa da fare se mi sento annoiato o voglio una sfida.

1

Anche se non apparentemente del mondo reale, ho avuto un'idea per una buona fonte di progetti che sono almeno finishable, e probabilmente qualcosa che si dovrebbe essere motivati ​​a fare (poi di nuovo, si dovrebbe filo interdentale ogni giorno: p).

Per rivedere e testare la comprensione, implementare vari algoritmi appresi come parte della formazione CS.Alcuni progetti:

  • implementare una libreria di automi a stati finiti, con test di appartenenza linguistica, costruzione del prodotto e riduzione del brzozowski.
  • implementazione portata massima, flusso di costo minimo e un programma di risoluzione lineare.
  • implementa riduzioni tra i problemi NP completi, le approssimazioni del tempo polinomiale e i risolutori di forza bruta.
  • lascia la propria implementazione di algoritmi crittografici (ma non vengono utilizzati: D)

IIRC, mona è una macchina a stati finiti thingie utilizzato per verificare la correttezza di un circuito elettrico; ISTR è il mio docente che parla delle applicazioni della programmazione lineare in economia, e gcc esegue la registrazione dell'allocazione (che è la colorazione del grafico, che è NP-completa). Crypto protegge in modo sicuro tutte le transazioni con carta di credito online. Quindi non è completamente irreale-mondo :)

1

Sono in ritardo? qui è un problema "sub-reale". Dal momento che ti è piaciuta la cosa del gioco. Controlla questo Java4K, dovresti fare un gioco solo in 4096 byte. Imparerai molto su Java, molto codice di ottimizzazione e, sicuramente, come pensare in modo semplice.

E alla fine della giornata, si avrà un nuovo gioco :)

0

Si potrebbe provare codifica una soluzione ad un problema vero e proprio un amico o un familiare ha un computer. Questo potrebbe essere un modo particolarmente valido per esercitarsi con il codice se si sta creando la soluzione per qualcuno che è relativamente inesperto con i computer - questo tipo di persone ti farà domande che un altro programmatore non farebbe mai. Queste domande del mondo reale sulla tua soluzione potrebbero essere le seguenti: "Perché compare in una finestra nera con tutto questo scritto?" - in riferimento a uno script eseguito da un prompt dei comandi DOS. Quando vieni colpito da domande del genere, devi avere una solida comprensione della tua comprensione della lingua e devi essere in grado di rispondere in parole povere per essere in grado di rispondere.

Sono in procinto di imparare perl al momento e lo sto usando per progettare un sistema di gestione della proprietà per un membro della famiglia che gestisce un complesso di appartamenti.

Costruendo qualcosa per qualcuno che è vicino a te e aspettandoti di finirlo, potresti trovarti più motivato a scrivere l'intera soluzione invece di fermarti a metà strada.

Problemi correlati