Impara a programmare all'indietro, o “quindi ho fallito il test FizzBuzz. E adesso? ”[Chiuso]


94

Un piccolo sfondo

Oggi ho 28 anni e non ho mai avuto una formazione formale nello sviluppo di software, ma ho due gradi di istruzione superiore equivalenti a una laurea in relazioni pubbliche e un Executive MBA focalizzato sulla gestione dei progetti. Ho lavorato su questi campi per circa 6 anni in totale e, 2,5 anni fa, ho lasciato / perso il lavoro e ho deciso di cambiare direzione.

Dopo un mese di riflessione ho deciso di iniziare a lavorare come freelance sviluppando piccoli siti Web in WordPress. Mi sono autodidatta e oggi posso dire di avere una carriera umile ma di successo, sviluppando da zero temi e plugin per i miei clienti, principalmente agenzie che esternalizzano parte del loro lavoro di sviluppo per siti Web medio / grandi.

Ma a volte sento solo che non aver studiato abbastanza matematica o non avere una comprensione formale delle cose mi tiene davvero indietro quando devo competere o lavorare con sviluppatori più esperti. Sono costantemente alla ricerca di modi per saperne di più, ma mi sembrano mancare le basi.

Sfortunatamente, passare altri 4 anni in Informatica non è un'opzione in questo momento, quindi sto cercando di imparare tutto ciò che posso da libri e risorse online. Questo metodo non mi farà mai impiegare dalla NASA, ma al momento non mi interessa. Il mio obiettivo è quello di passare prima la barra e di potermi definire un vero programmatore.

Attualmente sto trascorrendo il mio tempo libero a studiare Java per programmatori (per ottenere una sospensione su una lingua che tutti dicono sia difficile / impegnativo), leggendo brani di Code Complete (per acquisire le migliori pratiche) e anche Code: The Hidden Language of Computer Hardware e software (per comprendere il funzionamento interno dei computer).

TL; DR

Quindi, la mia situazione attuale è questa: sono sostanzialmente in grado di scrivere qualsiasi sistema completo in PHP (con l'aiuto di Google e alcuni libri), integrando Ajax, SQL e quant'altro, e forse un po 'più lentamente di quanto un sviluppatore esperto si aspetterebbe grazie a tutte le ricerche coinvolte.

Ma ieri sono rimasto bloccato cercando di capire (non Google) una soluzione per il test FizzBuzz perché non avevo memorizzato l' operatore del modulo di if($n1 % $n2 == 0) metodo .

Cosa suggeriresti come un buon modo per risolvere questo dilemma? Quali argomenti / libri dovrei studiare per farmi risolvere i problemi più velocemente e forse di più "in modo programmatore"?

EDIT - Sembra che ci fosse un po 'di confusione su ciò che non sapevo per risolvere FizzBuzz.

Forse non mi sono espresso bene: sapevo i passaggi necessari per risolvere il problema. Ciò che non ho memorizzato è stato l'operatore del modulo. Il problema era nel trasporre la matematica di base al programma, non nel conoscere la matematica di base.

Ho fatto il test per divertimento, dopo averlo letto su Coding Horror . Ho appena deciso che era una buona linea di confronto di base tra me e gli sviluppatori formalmente addestrati.

Ho appena usato questo come esempio di come non aver affrontato la matematica in un ambiente informatico prima di farmi perdere tempo a cercare cose di base come gli operatori di moduli per essere in grado di risolvere semplici problemi.


63
Quando leggo questo: I'm basically capable of writing any complete system in PHP (with the help of Google and a few books)e lo combino con te non sapendo if($n1 % $n2 == 0), mi chiedo l'esposizione che hai avuto alle cose scritte in PHP. Penso che la maggior parte delle cose che fai vadano oltre un semplice calcolo del modulo. Potresti dare qualche informazione in più su ciò che pensi di essere in grado di fare?
phant0m

10
Sono anche un programmatore autodidatta .. ci provo da più di 10 anni, tutto il web, tutto il tempo .. all'epoca non c'erano lezioni di sviluppo web ... penso che ci sia qualche vantaggio nell'apprendimento da soli. vorrai davvero conoscere i principi fondamentali di OO e i modelli di progettazione. ti aiuteranno molto ad averli nella parte posteriore della tua testa quando attaccano i problemi .. In genere trovo che non ho sempre il vocabolario degli altri, ma se ti piace scrivere codice e ti piace scrivere soluzioni eleganti, alla fine tu Sarai in grado di programmare la tua strada in qualunque cosa tu voglia
hanzolo,

56
In relazione al stuck b/c I didn't memorize %problema, vale la pena notare che ci sono altri modi per farlo: (assumendo $ n2! = 0) if (is_int ($n1 / $n2))o if (($n1 / $n2) == (int) ($n1 / $n2))Conoscere le parole chiave è una cosa e sapere come esprimere le idee sottostanti in assenza di una soluzione integrata è un altro.
Grossvogel,

18
@grossvogel Exactly! Uno dei motivi per cui persone come Fizzbuzz è che ci sono molti modi per risolverlo. Non è solo un trucco per vedere se conosci l'operatore del modulo. Un'abilità di programmazione chiave è la capacità di tradurre un problema dal modulo in cui è indicato nel modulo migliore per le tue conoscenze / strumenti / risorse / ecc.
12:00

18
Non conoscere l'operatore del modulo non è un motivo per fallire FizzBuzz. Quando trovi qualcosa che manca devi essere in grado di aggirare il problema.
Loren Pechtel,

Risposte:


144

Nel tuo caso, poiché sei autodidatta e hai già quello che sembra essere un approccio all'apprendimento buono, sano e senza BS. Ancora qualche suggerimento ...

La pratica rende perfetti

Penso che dovresti immergerti in esercizi di programmazione, come il:

Prendi anche le domande d'esame precedenti di università conosciute intorno a te o di competizioni di programmazione locali (o remote). Ad esempio, ne abbiamo uno bello in Francia per aspiranti programmatori delle scuole superiori che si chiama Prologin , e fornisce ogni anno una buona serie di enigmi da grattarsi la testa (probabilmente solo per il francese, scusa, ma è il genere di cose che intendo ).

Per di più: dove posso trovare enigmi e sfide di programmazione?

Libri classici e riferimenti

Potremmo anche raccomandare un lungo elenco di libri fantastici , ma direi che la risposta Zen è che non esiste un modo giusto per illuminare.

Sarebbe difficile dirti quali sono in cima alla lista. Quindi continua a leggere un sacco di cose per imparare le insidie ​​generali da evitare e le migliori pratiche da seguire, come stai facendo correttamente ora.

Per più:

Spingendo i limiti

Inoltre, cerca materiale che graffi la testa, come:

Non necessariamente da prendere come esempio delle cose da fare al giorno d'oggi, ma vale la pena provare a capire cosa diavolo sta succedendo lì dentro.

I sistemi peer sono motivazionali

Potresti anche voler nasconderti (ed essere coinvolto) nelle seguenti comunità per migliorare le tue abilità in modo incrementale confrontandoti con gli altri.

Istruzione part-time

Se non hai il tempo o la motivazione per partecipare a un altro corso di 4 anni o qualcosa di simile (che potrebbe non essere nemmeno necessario o gratificante e costoso), potresti prendere in considerazione la ricerca di materiale didattico online. Naturalmente, questi non si limitano all'informatica.

Grazie allo sforzo originale del MIT OpenCourseWare , ora ci sono tonnellate di università che ne hanno seguito l'esempio , e puoi trovare molti materiali per corsi a livello universitario gratuitamente. Non è sempre facile navigare e leggerlo da soli, ma alcuni sono abbastanza ben fatti. Per iniziare da zero e andare piuttosto in alto, considera anche la Khan Academy .

Alcuni vanno un po 'oltre e offrono veri e propri corsi online gratuiti, in cui si ha anche accesso al materiale del corso, ma in cui forniscono anche lezioni stimolate e autovalutazioni regolari. Ad esempio, visita Coursera o Udacity .

La maggior parte di quanto sopra spesso pubblica le loro lezioni su Youtube o iTunesU, quindi troverai un sacco di materiale se la tua sete di conoscenza non fosse già dissetata da tutti i link precedenti.

Se desideri qualcosa che fornisca un'esperienza più vicina alla "vera" università, puoi prendere in considerazione università remote, che ti consentono anche di lavorare part-time, ma richiedono di seguire il ritmo e di avere sia autovalutazioni che fine esami dell'anno (a volte sul posto), come con OpenUniversity e le sue varianti internazionali.

La passione ti fa andare avanti

  • Trova un progetto per animali domestici: creane uno tuo o unisciti a uno o più progetti software esistenti e contribuisci.
  • Codice, codice, codice. E poi codifica ancora un po '.

(e ottieni abbastanza occhi che guardano il tuo codice per criticare te e avere diverse prospettive)

I francesi dicono:

Vieni e dimenticati che è un falso falsario.

Continua a fare quello che stai facendo e alla fine sarai un esperto. Richiede tempo e lavoro.

Vedi anche Sto avendo problemi di apprendimento per ulteriori suggerimenti.


PS: Anche se è uno strumento molto controverso per le interviste e non aiuta a identificare i buoni candidati, uso spesso FizzBuzz per eliminare almeno quelli "cattivi". Quindi inizia a fare pratica su questa cosa pratica! :)


3
C'est super ça! :) Grazie per l'elenco. Project Euler e gli enigmi sembrano molto belli. E utilizzo già alcuni altri siti SE. Ci si tufferà dentro.
moraleida,

@moraleida: Sono contento che ti sia piaciuta la risposta. Prego.
haylem,

Informazioni sul tuo PS: non sono davvero preoccupato per le interviste in questo momento, dato che non voglio tornare a essere un dipendente. Ho fatto il test per divertimento, dopo averlo letto su Coding Horror. Ho appena deciso che era una buona linea di confronto di base tra me e gli sviluppatori formalmente addestrati. :)
moraleida,

4
+1 solo per il motivo per cui FizzBuzz viene utilizzato alla fine ... Troppo spesso vedo commenti qui o sui blog sulle persone che lo criticano perché presumono che le aziende lo utilizzino per identificare i supercodificatori. (Per quelle compagnie: stai sbagliando!)
Izkata,

1
Questo è elencato su alcuni dei link, ma penso che meriti un richiamo: guarderei anche rosettacode.org . Ha molti problemi diversi risolti in un gran numero di linguaggi di programmazione. È buona pratica leggere il codice, che è importante quanto scriverlo, nonché un ottimo modo per vedere molti approcci diversi per risolvere lo stesso problema. E se trovi un problema che non è stato ancora risolto in una lingua che conosci o desideri imparare, questa è una sfida di programmazione per te.
Mark Reed,

60
I didn't have the if($n1 % $n2 == 0) method memorized.

Non sto programmando da molto tempo (ho iniziato a insegnare me stesso SQL circa 27 mesi fa e ho iniziato a scrivere codice in Perl circa 20 mesi fa), ma la citazione sopra suona come alcune cose che ho sentito da ex studenti:

Come dovrei memorizzare la tecnica di integrazione da utilizzare per ogni problema?

Non ho memorizzato se avrei dovuto aggiungere o moltiplicare le probabilità, o usare "n scegli k" o usare fattoriali.

Apetta un minuto! Hai detto che x è uguale a 2 ieri! Ora è uguale a zero ?!

Ok, l'ultimo è stato probabilmente un po 'duro ... ma il punto che sto cercando di sottolineare è che la risoluzione dei problemi non è la memorizzazione . Se lo fosse, allora un genio potrebbe programmare un computer per risolvere ogni problema, e nessuno di noi dovrebbe mai ripensarci (che mondo infernale sarebbe ...).

Ora, è vero che ogni sforzo intellettuale consiste almeno in un po 'di memorizzazione. In particolare, se hai intenzione di scrivere codice in PHP, dovresti capire i tipi di dati di base (numeri, stringhe, array), le cose di base che puoi fare con loro (per i numeri: addizione, sottrazione, moltiplicazione, divisione e modulo; per stringhe: concatenazione, sottostringhe, sostituzione e almeno una certa conoscenza delle espressioni regolari; per array: concatenazione, virata su elementi, giunzione di elementi, loop, elementi di conteggio, ecc.) e le strutture logiche di base che è possibile utilizzare (istruzioni if ​​/ then / else, foreach loop, while loop, ecc.).

Quindi, quando si verifica un problema, utilizzare il problema per fornire il contesto per gli strumenti necessari. Per FizzBuzz, devi dire quando un numero è divisibile per 3, 5 o 15. Va bene, quindi abbiamo a che fare con i numeri .... quali strumenti di base ci permettono di dire quando un numero intero è divisibile per un altro? Bene, l'operatore del modulo. Quindi, usalo. (Certo, se il tuo numero è $n, potresti essere fantasioso e vedere se l'ultima cifra di $nè 0 o 5, e / o se le cifre di $nsommano a qualcosa di divisibile per 3, ma sto divagando ...) Devi fai questo per ogni numero tra 1 e 100, quindi per evitare di ottenere tunnel carpello, usa un foreachanello.

Il morale della storia è che se da un lato dici "Sono fondamentalmente in grado di scrivere qualsiasi sistema completo in PHP" e dall'altro non puoi codificare FizzBuzz, allora la prima affermazione è errata. Alcuni dei miei ex studenti di calcolo hanno giurato su e giù di aver compreso i concetti, ma semplicemente non potevano fare i problemi dell'esame ... o i problemi dei compiti ... o i problemi del quiz. Si sbagliavano anche sulla loro comprensione.

Smetti di inventare scuse e impara le basi.


6
Non memorizzo, metabolizzo e faccio di queste cose una parte del mio intuito. Cerca sempre di espanderlo.
ncmathsadist,

@ncmathsadist - Sì, l'intuizione in espansione è la chiave, ma anche l'intuizione deve fare affidamento sulla memorizzazione di un piccolo numero di concetti e fatti molto basilari.

per la cronaca, non devi moltiplicare un numero per 3 e quindi aggiungere le cifre per vedere se è divisibile per 3, puoi semplicemente aggiungere i numeri. per esempio, 864, 8 + 6 + 4 = 18 che è divisibile per 3 e così è 864
Oztaco

@ leaf68 - Duh! [schiaffeggia la fronte] hai assolutamente ragione ... lasciami modificare!

27

Potresti pensare che FizzBuzz sia un problema giocattolo; quando avrò mai bisogno di usare l'operatore modulo in un vero programma. Ma davvero lo usi sempre. Tre esempi comuni:

  1. Stai visualizzando una tabella e desideri alternare i colori di sfondo per diverse righe. Verifica se una riga è pari ( row_number % 2 == 0) e visualizzi un colore per le righe pari e uno per le righe dispari.
  2. Hai una raccolta di oggetti che stai eseguendo il ciclo continuo e vuoi stampare una tabella con N oggetti per riga; quindi il criterio per quando aggiungere un'interruzione di riga è (item_number% N == 0). In realtà avevo una domanda SO su questo comportamento esatto sebbene in quel linguaggio esemplare la condizione if item_number % N == 0fosse scritta come equivalente ( if item_number|divisbleby: N).
  3. Stai eseguendo diverse operazioni che desideri raggruppare in una transazione che viene impegnata solo quando il gruppo raggiunge una determinata dimensione per motivi di efficienza. Forse stai utilizzando l'API di dati di Google e non desideri il sovraccarico dell'intestazione / autenticazione HTTP per creare una nuova transazione per ogni operazione, quindi le stai raggruppando in gruppi di 50 operazioni. Oppure stai salvando i record nel tuo database e vuoi impegnare la transazione quando ha dimensioni ragionevoli. Qualcosa del genere if cur_item_number % 50 == 0 then commit_data.

Certo, ci sono altri modi per fare tutte queste cose. Ma puoi fare un brusio senza usare l'operatore del modulo o confrontare la divisione float con la divisione intera. Ad esempio, per FizzBuzz potresti fare qualcosa come il seguente pseudo-codice.

div_by_3_rem = 0
div_by_5_rem = 0
for(i = 0; i< 50; i++) {
    if(div_by_3_rem == 0 && div_by_5_rem == 0) {
       print "FizzBuzz"
    } elif(div_by_3_rem == 0) {
       print "Fizz"
    } elif(div_by_5_rem == 0) {
       print "Buzz"
    } else {
       print i
    }
    div_by_3_rem += 1
    div_by_5_rem += 1
    if(div_by_3_rem == 3) {
       div_by_3_rem = 0
    }
    if(div_by_5_rem == 5) {
       div_by_5_rem = 0
    }
}

Per concludere, se un giorno vuoi diventare un grande programmatore, non saltare ad imparare un libro di lingue. Sì, un libro PHP / Java ti consentirà di ottenere risposte da google / stackoverflow e programmi di metà lavoro molto più velocemente di ogni altra cosa. Ma per essere davvero in grado di sapere come scrivere programmi ottimali di qualità e pensare come un programmatore è necessario un po 'di esposizione a veri e propri libri CS.

Inizia con un libro CS che introduce un linguaggio di programmazione e lo sfondo CS, con il famoso esempio di Struttura e interpretazione dei programmi per computer (che insegnerà Scheme - un dialetto Lisp) o forse qualcos'altro come Think Python Come pensare come un computer Scienziato (che non ho letto). Entrambi sono gratuiti online.

Alla fine devi leggere un buon libro sugli algoritmi, il migliore dei quali è l'algoritmo di CLRS (non gratuito), sebbene questo libro di algoritmi online gratuitopotrebbe essere una sostituzione a basso costo (anche se puoi semplicemente acquistare CLRS). Il libro sugli algoritmi ti insegnerà come pensare a risolvere i problemi del computer e ti introdurrà a una varietà di strutture di dati (array / liste collegate / heap / alberi binari / alberi B / tabelle hash) e importanti algoritmi che devi sapere come usare in modo ottimale . Non è necessario memorizzare tutte le prove o saper scrivere perfettamente ogni algoritmo (chi usa mai un heap di Fibonacci); ma dovresti sapere intuitivamente che due loop nidificati sono O (N ^ 2); le specie di confronto sono nella migliore delle ipotesi O (N lg N), la ricerca binaria è O (lg N), può trovare la mediana in O (N), perché i database del disco rigido usano B-Tree, ecc.). Come minimo, una forte conoscenza del libro sugli algoritmi ti aiuterà a realizzare interviste di programmazione tecnica sulla varietà google / facebook. Quando leggi libri di programmazione, non limitarti a sfogliare / leggere; voi'

Consiglierei anche un libro sull'ingegneria del software (programmatore di codice completo o programmatore pragmatico) dopo aver passato il libro CS e algoritmi, che insegnerà le migliori pratiche su come scrivere un buon codice che sia mantenibile (nomi chiari; commenta solo quando necessario ; mantenere insieme il codice; refactor quando necessario; utilizzare il controllo della versione; ecc.).


4
Il miglior commento ancora; mentre vedo molte persone dire pratica, pratica, pratica, non è questa la strada da percorrere. La pratica rende perfetti, dicono, ma ciò impone solo comportamenti scorretti. All'OP: esponiti ad altri concetti, impara perché è preferibile un quicksort a uno bolle. Solo la pratica perfetta rende perfetti. Ottieni quel corso CS.
Pieter B,

2
Grazie per aver pubblicato quel codice di esempio, ho già pensato che avrei dovuto farlo da solo. - Possiamo costruire qualsiasi circuito logico complesso usando solo porte NAND; abbiamo lingue con pochissime semplici operazioni completate da Turing; non abbiamo bisogno di quegli operatori fantasiosi per risolvere i problemi. Risolvere un problema non è solo conoscere gli strumenti giusti, essere in grado di lavorare su un problema, capire una soluzione che funziona per le tue conoscenze è ciò che rende un programmatore.
colpì il

22

Ma ieri sono rimasto bloccato nel tentativo di capire (non google) una soluzione per il test FizzBuzz perché non avevo memorizzato il metodo if ($ n1% $ n2 == 0).

Nessuno memorizza quella cosa. Dovresti inventartelo da solo. Se conosci l'operatore del modulo e sai cosa fa, allora è banalmente un'ottima soluzione al problema FizzBuzz.

Ho intenzione di uscire su un arto qui e generalmente suggerisco che il problema è PHP. Mi piace dire che Java è il peggior linguaggio mai progettato e PHP è il peggior linguaggio di sempre , perché anche i suoi creatori ammettono che non è mai stato progettato. È difficile apprendere buone pratiche di ingegneria del software quando il tuo ambiente è praticamente la definizione di come non farlo. E dipendere da un framework per fare tutto non significa molto.

Attualmente sto trascorrendo il mio tempo libero a studiare Java per programmatori (per ottenere una lingua che tutti dicono sia difficile / impegnativo)

Java è una delle lingue più semplici e peggiori esistenti. Ha solo una cosa: eredità manuale raccolta immondizia. Se i tuoi amici o consulenti affermano che Java è difficile, trova nuovi amici. Il C ++ è un linguaggio difficile che include molti concetti e che nessuno contesterà. Potresti anche fare C #, che almeno ha alcuni generici e lambda.

Come imparerai a programmare, quando le tue lingue saranno progettate e implementate da persone che non sanno programmare e dipenderai dai framework per tutto ciò che fai?


14
@moraleida: Non c'è vergogna nel cercare la sintassi per un operatore che non hai avuto motivo di usare.
DeadMG

2
@moraleida: in tal caso concordo sul fatto che non ci sono problemi reali. Non credo che nessun professionista, intervistatore o altro, dovrebbe preoccuparsi se non riesci a mettere il dito sulla sintassi esatta per una lingua diversa, purché tu possa esprimere chiaramente qual è il tuo intento.
Hayylem,

5
Concordato sulla maggior parte dei punti, ma perché consideri Java "il peggior linguaggio mai progettato"? Non sono un grande fan di Java, ma sembra molto supponente.
Casey Kuball,

7
-1 per usare la domanda come scusa per scuotere il PHP quando ha una relazione zero con ciò che è stato chiesto.
StasM,

1
@Darthfett: potrei scrivere un saggio al riguardo. Vieni alla chat SO C ++ e puoi leggerlo: P
DeadMG

11

Penso che devi dare una occhiata al perché sei rimasto bloccato cercando di capire FizzBuzz. Quindi, supponiamo, ti ricordi che c'è un operatore che $nti ha detto di dirti se è divisibile per un numero. E hai la sfortuna di dimenticare di cosa si tratta. Bene, perché non continui a provare a farlo in nessun altro modo? Se conosci qualcosa sul codice, dovresti essere in grado di trovare una dozzina di altri modi per farlo. Alcuni possono sembrare strani - come, ad esempio, mettere ogni multiplo di 5 in un array e quindi verificare se $nè tra questi - ed è una cattiva soluzione, ma sarebbe comunque una soluzione. Tuttavia, stai dicendo che non ne avevi, sei rimasto bloccato. Potrebbe essere un sintomo di un problema più grande.

Ci sono due cose nella programmazione che devi imparare.

  1. Borsa di trucchi. Come leggere il file in PHP, come analizzare XML in Java, come connettersi al database in Python. Alcune persone lo memorizzano, ma in realtà vale la pena memorizzare queste cose solo se le usi tutti i giorni. Altrimenti, vai semplicemente alla documentazione e cerca. Queste cose non hanno alcuna sostanza tranne che per la loro forma letterale - devi solo sapere come suona l'incantesimo magico particolare e quale sarà il risultato.
  2. Mentalita. Questa è la cosa più importante Questo è il modo in cui si programma e questo non ha nulla a che fare con la memorizzazione. Devi capire come spiegare le cose che vuoi fare al computer, quali modi ci sono per farlo e quali di esse usare in ogni caso particolare. Ora, dati gli strumenti moderni e la documentazione moderna, è plausibile che si possa scrivere un intero CMS in PHP usando l'approccio "bag of tricks", ma una volta che si incontra un compito che non ha una soluzione pronta, si è "bloccati".

Dalla tua descrizione sembra che tu abbia iniziato con la prima parte, ma in qualche modo manca nella seconda parte. Un buon corso CS di solito aiuta molto in questo, ma non è l'unico modo. Cercare di risolvere diversi problemi e leggere come questi problemi devono essere risolti, leggendo i libri fondamentali citati qui - tutto ciò che aiuterebbe. Una volta presa la mentalità del programmatore, scoprirai che entrare in una nuova borsa di trucchi non sarà un grosso problema. Dovresti google qua e là, ovviamente, ma non sarai mai bloccato.


1
"E leggi come questi problemi devono essere risolti" - In effetti, guarda diverse soluzioni per lo stesso problema. Cerca di capire ognuno di essi, confronta ciò che hanno in comune e ciò che fanno in modo diverso. Comprendi queste cose e acquisirai automaticamente diversi modi di pensare allo stesso problema.
colpì il

Sono completamente d'accordo sulla mentalità. Una volta acquisita la mentalità e i concetti, l'apprendimento dei costrutti linguistici sottostanti è molto più semplice e inizierai a pensare a modi alternativi per fare le cose come una cosa ovvia. (Come per fizzbuzz, tutti i numeri divisibili per 5 finiranno in 5 o 0, quindi non è necessario l'operando del modulo su quella porzione)
Giovanni

9

Si diventa bravi nello sviluppo come si diventa bravi in ​​qualsiasi altra cosa: la pratica. C'è un bel concetto nel mondo della programmazione chiamato codice kata . Questo è essenzialmente un esercizio in cui si codifica una soluzione a un problema relativamente piccolo, si analizza ciò che è buono e ciò che è cattivo, si scarta tutto e lo si fa di nuovo. FizBuzz è un kata a sé stante. Quindi, fallo e fai di più. Quando trovi cose che non sembrano essere molto buone o semplicemente non funzionano, fai delle ricerche e approfondisci. Poni domande su siti di domande e risposte, leggi articoli e blog, vedi come gli altri gestiscono questo, e poi fai pratica con ciò che hai imparato.

Nel corso di questa pratica, imparerai quanto ulteriore background matematico / teorico potresti aver bisogno. Se ti imbatti in concetti che non riesci a avvolgere la testa, leggi su di loro e sulla loro conoscenza dei prerequisiti e decidi caso per caso se vuoi seguire un corso o cosa hai per espandere il tuo background teorico.


1
Anche questo codice kata sembra fantastico!
moraleida,

8

... perché non avevo memorizzato il metodo if ($ n1% $ n2 == 0).

Lo sto interpretando nel senso che non sapevi e / o non ricordavi l'operatore del modulo. In questo caso, il punto di partenza è quello di rivedere i costrutti della lingua nella lingua che si sta utilizzando. Rivedi tutto ciò che non "conosci il freddo" e impara tutto ciò che non conosci.


4
+1. Mentre le altre risposte parlano di come diventare un artigiano migliore, è forse ancora più importante sapere quali strumenti esistono realmente. Hai mai provato a rimuovere una vite rotta senza una fuoriuscita ? Ci sono altri modi per farlo, ma è uno schiaffo sulla fronte quando finalmente apprendi lo strumento che è stato creato per questo. Direi che l'OP avrebbe dovuto esaminare un elenco di operatori PHP molto tempo fa e giocare con quelli che non conoscevano.
Tim Lehner,

5

Continua a programmare, continua a imparare. Alla fine, con sufficiente dedizione, guarderai FizzBuzz e ti chiederai perché ci hai persino pensato. Molte aziende fanno una domanda in stile FizzBuzz come una parte molto precoce delle loro interviste, quindi fallire questa volta significa che hai almeno imparato qualcosa sul processo di assunzione.

Continua a scrivere codice, a elaborare idee per progetti e a fare ricerche.


4

Posso raccomandare di imparare JavaScript prima di Java, C ++? Ragioni per te:

  1. Utilizzato nella progettazione front-end (jQuery, alcuni dei tuoi plugin WordPress, feed Twitter, caricamento di database nel browser tramite JSON con lavoro back-end minimo o nullo, convalida dei moduli, ecc.)
  2. Può essere utilizzato sul lato server tramite Node.js
  3. Può essere utilizzato per creare app ibride per iOS, Android, Win8, ecc
  4. Studiare JS ti aiuterà a capire meglio le prestazioni della pagina web in diversi browser e dispositivi
  5. JS è stato progettato per essere più adatto ai principianti
  6. Conosci già HTML e CSS (spero;), quindi questo aiuta con JS

Risorse per principianti gratuite

http://www.codecademy.com/tracks/code-year
https://stackoverflow.com/tags/javascript/info
Avevo circa 10 link in più, ma SE non mi lasciava pubblicare fino a quando non ho colpito 10 rep.

Anche l'apprendimento di C ++, Java, ecc. È utile, ma non IMHO non ha alcun impatto sulla programmazione Web come JS, poiché è possibile utilizzarlo sia sul front-end che sul back-end. Divertiti!



1
e quando sei pronto per ottenere un lavoro: jobety.com
imns

3

Potresti trovare e aiutare gli altri, ad esempio giving.code (divulgazione: il mio sito) o Code for America o altro. Questo è un modo eccellente per ottenere maggiore esposizione a problemi di creazione di pagine Web non PHP e sentirsi bene.

Quando hai un problema da risolvere - o aiutare a risolvere, o semplicemente capire - la raccolta del codice arriva naturalmente lungo la strada. Avere un obiettivo è il modo migliore per imparare qualcosa.


1
Eccezionale! Questo è davvero un bel modo di studiare!
moraleida,

0

Quindi non è stato possibile risolvere il problema FizzBuzz. Grande affare. Ora puoi, e scommetto che non dimenticherai mai tutte le miriadi di modi. Cerca di non essere così ansioso di marchiarti come un cattivo programmatore semplicemente perché non puoi risolvere uno stupido problema dalla cima della tua testa.

Questo è un problema. L'altro è che ti senti un po 'indietro rispetto alla curva di apprendimento della programmazione. Come altri hanno già detto, continua a scrivere codice e continua a leggere. Più fai, meglio otterrai. E 'così semplice. Inizia con quello che ritieni sia il buco più grande del tuo background e procedi da lì.


(Questo doveva sembrare edificante. Non sono sicuro di esserci riuscito. Lol.)
Nick Spreitzer,

0

Non credo che mi rifiuterei di raccomandare qualcuno a noleggio perché non sapevano che era l'operatore del modulo a condizione che:

  1. Sapevano che era un operatore di qualche tipo.
  2. Potevano dirmi quale "modulo" era una volta che li avevo sollecitati.

Non è sempre (anche se di solito)% e alcune lingue sono strane. E diavolo, dopo un decennio, non posso onestamente dire che conosco tutti gli operatori del Perl (e cosa fa di nuovo l'astronave?), Né posso sempre ricordare perfettamente gli operatori bit per bit. Sono passati alcuni anni da quando ho fatto qualsiasi cosa che potesse richiedere anche quelli.

Ciò che potrebbe farmi esitare a raccomandare qualcuno sarebbe se ciò causasse loro un attacco di panico per aver perso quella domanda / test. Questo potrebbe darmi l'impressione che fossero un po 'troppo verdi (a meno che non fosse una posizione molto entry level). Nessuno ha bisogno di qualcuno che (o sente il bisogno di) memorizzare quelle cose. Hai bisogno di qualcuno che comprenda concetti molto più ampi. A nessuno importa se lo cerchi su google, ma dovrai essere sicuro nell'intervista che sapere% non è stato un grosso problema e che sai di usare "operatore" come parola chiave quando fai un rapido google ricerca.

Inoltre, questa è solo un'idea ... ma se il college della tua comunità locale ha un programma compsci, tutti gli altri tuoi crediti verrebbero trasferiti e probabilmente avresti bisogno di circa 20 crediti per la laurea di 2 anni. Potrebbe quasi finire in un semestre. Ti farebbero fare un corso sulle strutture di dati, anche speriamo che gli algoritmi ... potrebbero renderti un po 'più forte.


-1

Ecco un corso di esempio: http://www.ox.ac.uk/admissions/undergraduate_courses/courses/computer_science/computer_science_.html

Suggerisco di leggere prima quanto segue: Programmazione orientata agli oggetti (molto comune, usata ovunque, è qui che entra in gioco Java) Concorrenza (per scrivere programmi Java che non si schiantano misteriosamente nel mondo reale, conoscere i deadlock) Concetti relativi al database (la maggior parte delle applicazioni ha bisogno di salvare i dati, la teoria è importante qui) Paradigmi di programmazione (leggi almeno una lingua non oops, preferibilmente funzionale, per espandere il tuo pensiero e imparare nuove cose)

Quando guardo i 4 anni di educazione scientifica comp, sinceramente penso che ci siano solo una manciata di corsi che devi prendere sul serio.

Strutture di dati e algoritmi (e qui hai bisogno di matematica per diventare davvero bravo ed essere preso sul serio da altri programmatori), la rete di computer e i sistemi operativi vengono considerati come i più importanti. Altri argomenti che si occupano di codice di livello inferiore, come la possibilità di scrivere codice in assembly, non sono probabilmente così importanti per te. L'ingegneria del software e i test ti espongono a concetti utili e puoi prenderli in considerazione nel tempo.

Basta scaricare un pdf che spiega questi concetti in modo intuitivo e sarai sulla buona strada.

In alcuni corsi di informatica, almeno nei miei, il primo anno è un'introduzione a tutti i campi dell'ingegneria, come meccanica, elettrica, civile, ecc. C'è molta matematica complicata, intendiamoci, che di nuovo può essere o non essere rilevante per la maggior parte dei programmatori di applicazioni oggi. Quindi, molti degli ingegneri oggi hanno in realtà solo 3 anni di vera educazione scientifica (spero che questo ti faccia sentire meglio :)

Punto cruciale della risposta: puoi dedicare un po 'di tempo allo studio di tutti i giorni, ad esempio circa un'ora, e per un periodo di tempo diventare un programmatore abbastanza bravo. Continua a imparare. E ricorda di scrivere un po 'di codice ogni giorno.


-3

Per me, la mia strategia è quella di attaccare solo il problema rilevante per quello che sto lavorando, quindi il mio consiglio è che non devi imparare tutto, basta leggere quelle cose che sono rilevanti per quello che stai lavorando, perché se hai provato a imparare tutto in una volta, allora c'è la tendenza a prostrarti e finire per odiare la programmazione.

Pace

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.