Che cosa fare quando ci si trova di fronte a un problema che non è possibile risolvere rapidamente?

5

Sono un principiante che apprende Java e dopo aver letto i documenti sto cercando di risolvere alcuni dei problemi di codingbat.com. Alcuni sono riuscito a risolvere abbastanza velocemente in pochi secondi, ma alcuni non proprio. I problemi stessi sono facili (esempio link ) ma a volte ho difficoltà a trovare le soluzioni. In parte perché penso alla migliore soluzione possibile e automaticamente scartare quelle che potrebbero funzionare ma non sono così eleganti e in parte perché non riesco a trovare l'algoritmo giusto. Questo è dovuto alla mia inesperienza (ho usato PHP per lo sviluppo web per circa 2 mesi quindi non sono un principiante assoluto - ho persino lavorato con un framework per costruire un sito web) o per la mia incapacità di pensare a un buon algoritmo.

Normalmente non guardo le soluzioni. A volte mi blocco anche per 1/5 ore a problemi semplici e alcuni di loro alla fine risolvo, ma alcuni non riesco a vedere la soluzione.

È normale / buono / cattivo concentrarsi così a lungo se trovo un problema che non riesco a risolvere? Potrei reagire in modo eccessivo ma dovrebbe essere così difficile per me? C'è qualcosa che non riesce a pensare ad algoritmi anche con molto apprendimento e lettura?

Grazie a tutti in anticipo.

    
posta Shog9 23.11.2010 - 18:56
fonte

5 risposte

8

In realtà è una situazione abbastanza facile da ottenere quando stai codificando per te stesso . È male passare molto tempo concentrandosi sul modo migliore di fare qualcosa quando alla fine non produci niente .

Tuttavia penso che sia anche male non fermarsi mai e riflettere. Sei praticamente un principiante con solo pochi mesi dev. esperienza se leggo correttamente la tua domanda. A questo punto dovresti concentrarti su scrivere qualcosa, qualsiasi cosa . Se scrivi per te stesso. Se non stai scrivendo da solo, imparerai a essere più veloce, come se il tuo lavoro non fosse nei guai.

Il mio consiglio è

  1. Scrivi codice . Codice cattivo / buon codice non importa in questa fase. Devi solo sapere che puoi battere qualcosa quando richiesto.
  2. Imposta te stesso scadenze . Cerca di essere ragionevole con loro ma non così sciolto come potresti anche non avere scadenze.
  3. Non cercare di alterare il codice funzionante per scrivere meglio a meno che.
    1. Hai un problema di prestazioni che devi correggere.
    2. Hai abbastanza tempo e ritieni che il tuo nuovo modo sia molto meglio.
    3. Senti di poter imparare qualcosa di nuovo provando a implementarlo in un modo diverso.
  4. Presta attenzione ai piccoli dettagli, come commenti . Può davvero aiutarti a risolvere i problemi e le soluzioni con il tuo codice quando lo commenta. Provalo, ti consente di uscire dalla soluzione e concentrarti sul problema .
  5. Chiedi ad altre persone di rivedere il tuo lavoro se possibile.
  6. Se lo fai da hobby divertiti . Se preoccuparti dei problemi ti sta allontanando dal tuo divertimento, significa che stai facendo qualcosa di sbagliato.
  7. Chiedi alle persone cosa farebbero con gli stessi problemi. Questo potrebbe essere il miglior sito per questo.

Il codice che funziona ma è scritto male è molto più utile di nessun codice.

Un ultimo commento che potrebbe aiutarti. L'interfaccia del tuo codice è molto più importante del codice stesso.

Finalmente nel tempo guadagnerai velocità e sicurezza. Se non puoi guardare indietro al tuo lavoro tra un anno e dire "Cosa stavo pensando?" allora non hai davvero imparato abbastanza.

    
risposta data 23.11.2010 - 22:49
fonte
9

Da quanto hai detto nella tua domanda, il problema non è che non puoi risolvere i problemi, è che non puoi pensare ad una soluzione elegante che funzioni, quindi ti arrendi. Il problema principale di questo approccio è che in realtà non stai imparando nulla.

Un approccio migliore sarebbe provare una delle soluzioni non eleganti possibili. Se non funziona, non è la fine del mondo, passa al piano B. Se funziona, ora hai la possibilità di renderlo più elegante. In ogni caso, avrai imparato qualcosa e questo approccio ti servirà meglio se e quando scriverai codice per vivere. Ricorda: non puoi migliorare ciò che non c'è.

    
risposta data 23.11.2010 - 19:06
fonte
7

Non mi piace davvero risolvere problemi difficili. Sono complicati, confusi e facili da rovinare. Quindi li suddivido in piccoli problemi, quindi risolvo quei problemi minori. Funziona piuttosto bene.

    
risposta data 23.11.2010 - 22:01
fonte
4

Fai una pausa ogni tanto. È positivo che tu non stia guardando le soluzioni subito, ma se sei davvero bloccato, vai avanti. Imparerai ancora anche se non hai trovato la soluzione da solo.

Ho sentito che ci vogliono 10 anni per padroneggiare un'abilità (non ho una fonte per questo, mi spiace). Quindi, non preoccuparti se all'inizio ti sembra che impieghi molto tempo. A proposito, 1,5 ore non è un tempo lungo per capire un problema. Se continui a programmare troverai problemi che potrebbero richiedere giorni, persino settimane per capirlo. Continua a guidare ai problemi e scoprirai che con il passare dei mesi diventa sempre più facile.

Per quanto riguarda "È possibile non pensare agli algoritmi anche con molto apprendimento e lettura?" è interessato, la pratica rende perfetti. Ci sono solo un numero limitato di strutture di dati di base e gli algoritmi per lavorare con loro sono gli stessi per qualsiasi implementazione. Una volta che impari, impara ad applicare alcuni algoritmi, li ricorderai e sarai in grado di usare la conoscenza in altri problemi. Con il passare del tempo questa base di conoscenze si sviluppa fino al punto in cui i problemi sembrano essere tutte variazioni su un tema piuttosto che disconnessi.

    
risposta data 23.11.2010 - 19:08
fonte
3

La cosa più importante nello sviluppo del software è lavorare con il software. Questo è particolarmente vero nello sviluppo commerciale.

Molte persone passano troppo tempo a cercare di essere intelligenti o escogitare una presunta soluzione "elegante" quando ciò che dovrebbero fare è produrre codice funzionante.

Quello che dovresti fare è risolvere il problema il più rapidamente possibile. Una volta che hai dimostrato che la tua soluzione funziona, allora è il momento di refactoring per renderlo elegante, veloce, ecc, se necessario. Spesso, una volta che hai codice funzionante di fronte a te, diventa più facile vedere la soluzione più elegante.

    
risposta data 23.11.2010 - 20:58
fonte

Leggi altre domande sui tag