Sono certamente d'accordo con la spinta principale della risposta accettata, e dato che in pratica ti stai immergendo a fondo nelle cose facendo una prova a Erlang sembra che tu abbia una buona comprensione di come impari e hai solo bisogno di un po 'di spinta nella giusta direzione, così chiaramente è stata una buona risposta per te ... Ma, penso che avrei affrontato la domanda in modo leggermente diverso, dal momento che vedo che questa risposta non mi avrebbe aiutato molto; Codice sempre per imparare! Quindi, ecco i miei pensieri ...
(A proposito, tendo ad andare avanti nei dettagli più adatto, per esempio, ai capitoli di un libro, e sono sicuro di non poter soffocare completamente il mio istinto qui, ma proverò una virata diversa; riassumendo semplicemente i miei pensieri qui, e nel caso qualcuno volesse maggiori dettagli su qualcosa, o pensi che qualcosa che dico sia fuorviante in questo formato, farò del mio meglio per ricordare di passare attraverso i promemoria di risposta ...)
Per cercare di mantenermi in attività ecco la mia comprensione delle domande spinte poste nel PO; Terrò il margine laterale al minimo, se necessario, per spiegare ....
Innanzitutto le risposte rapide:
ero in una situazione simile? Almeno era simile; Ero in una posizione di testa facendo molti progetti vari che erano comunque correlati ... (CRM / Web / DB / Integrazione dei dati / ecc.)
come / perché ho fatto il salto funzionale? " Ho visto alcuni esempi LINQ e sebbene avessi sicuramente sognato una sorta di linguaggio di query integrato, tipicamente statico [come avevo usato principalmente linguaggi tipicamente statici (principalmente C ++, e successivamente C # )] per tutta la mia carriera ... Ma ero in un ambiente a fuoco piuttosto rapido, e anche se spesso ero riuscito a vedere cosa stava succedendo in passato, non ci avevo mai pensato, quindi non l'ho mai previsto potrei / consentire le operazioni su Plain Old Objects (lol!) altrettanto facilmente; quando l'ho visto sapevo che dovevo averlo ... quindi, questo è il perché e l'inizio del come: mi sono concentrato sull'imparare a capire LINQ .
Quattro pensieri ... errr, no non è giusto ... Pensieri
Quando ho letto la risposta di Martijn Verburg , la menzione della funzionalità aziendale mi fa subito venire in mente di iniziare a implementare il codice per tutto quello su cui sto lavorando ... A seconda di quanto superficialmente quella sperimentazione iniziale potrei rispondere diversamente, ma supponendo che fosse solo immergendomi nell'alluce, non sono sicuro di avere qualcosa direttamente per lavoro (o lavoro a breve) che mi avrebbe fornito l'eccitazione / passione che penso dovresti avere per i primi problemi che inizi ad affrontare ...
Ero quasi interamente radicato in linguaggi tipicamente statici + metafore e schemi OOP + qualunque cosa avessi finito per avvolgere il mio cervello accidentalmente mentre risolvevo i miei problemi reali nel corso degli anni ... Indica che, se sei come me, probabilmente avrai molto cervello dedicato a cose che non ti aiuteranno molto con LINQ / FP.
Ci penso un po 'come pura programmazione procedurale rispetto a OO: ci sono molte cose procedurali che finirai per usare in OOP, ma quelli che arrivano in C ++ da C senza renderlo una priorità per grok / ken / "get" OO finiscono per essere molto male in C ++. In realtà ho intervistato moltissimi sviluppatori (15+) di firmware e driver di dispositivo di lunga data che credevano davvero di conoscere il C ++, ma che, al massimo , avevano una comprensione terribilmente di base / manuale del C ++, praticamente senza comprensione o esperienza in OOP — perché non hanno mai effettivamente fatto OOP ... Hanno scritto classi multiuso singleton con membri statici e funzioni statiche con una quantità di classi non statiche / non singleton che sono state usate come strutture.
E FP ha alcuni concetti allo stesso modo strabilianti (per coloro che non sono cresciuti sul paradigma) e altre cose che lo accompagnano, e (anche se ho trovato l'ibridazione di molte tecniche ideale per me), capisco di più e più col passare del tempo, esattamente quanto limitato era il mio pensiero prima di ottenere reali capacità funzionali nel mio set di strumenti; In passato ero riuscito a implementare molte cose in un modo un po 'più creativo che forse la maggior parte dei programmatori OO, ma mentre uso i concetti di come il mio pensiero fosse stentato prima ... Ci sono intere classi di problemi che possono essere risolti in poche righe che un tempo richiedevano moltissime contorsioni in C ++ / C #.
improvvisamente ti ritrovi ...
In un post "troppo lungo"
Sei in un labirinto di contorti "non letti", tutti uguali.
Vedi una teleconferenza nel prossimo futuro, in rapido avvicinamento.
> terse
Uh Huh. Sicuro. Ok, diremo che la modalità "terse" è "on".
Vedi una teleconferenza nel prossimo futuro, in rapido avvicinamento.
> cosa dovrebbe significare?
Sto solo dicendo. Non hai dovuto fare qualcosa stamattina?
Vedi una teleconferenza nel prossimo futuro, in rapido avvicinamento.
> ehi, è una grinta dietro di te?
Che cosa!? DOVE?! [scappa urlando]
> Scusa, non ho capito COSA DOVE, riformulare?
[continua a correre e urlare, il sarcasmo inosservato]
Quindi ... Cosa dovrei imparare, caro PSE, caro PSE?
Ho iniziato personalmente in C # con LINQ. Mi ha permesso di introdurre alcuni concetti alla volta, e mentre leggevo costantemente di FP e dei suoi concetti, e più LINQ, e la relazione tra i due, mi ha dato una via da seguire mentre continuavo a lavorare in modo produttivo. Ho aggiunto alcune cose alla volta, le query sui dati sono diventate rapidamente uno strumento utile per me senza dover capire un sacco.
Ora, ripensandoci, vorrei che fossi stato in grado di fare il mio prossimo progetto (affrontato circa un anno dopo) per primo; Ho acquisito una discreta familiarità con F # (che, per inciso, mi ha dato un grande vantaggio nell'apprendimento della ML (metalinguaggio) e dei suoi derivati (ad esempio, anche OCaml ).
Fondamentalmente, penso che una risposta decente a "cosa" dipenda dalla ricerca di un buon abbinamento di alcuni problemi di programmazione che ti interessano, ma ovviamente deve accoppiarsi con un po 'di FP che vuoi imparare ... (e puoi sciacquare / ripeti / insapona dopo aver eliminato qualcosa dall'elenco ...) E, naturalmente, finisci sempre per imparare un po 'di più rispetto alla cosa principale che hai deciso di fare; all'inizio ho fatto alcuni piccoli passi, ma poi ho finito per fare cose più grandi e lasciare che le cose più piccole andassero a posto mentre le facevo.
Innanzitutto, cosa fa galleggiare la tua barca? Soprattutto all'inizio è meglio avere qualcosa di divertente ed eccitante (per te) e che manterrà il tuo interesse abbastanza da renderlo utile per te. Quindi, IOW problemi su cui lavorare e tecniche che risolvono questi problemi ... LINQ e inline query di dati per me all'inizio. La ricorsione era un'altra per me, inclusa la ricorsione della coda, ne scavavo la GodelEscherBach-ness; e avevo letto della ricorsione della coda. In questo periodo, le cose a cui stavo lavorando sono state messe in attesa, e alla fine ho avuto un grande intervallo di tempo, quindi sono stato in grado di continuare a lungo. È stato più facile con meno interruzioni, ma poiché ho scelto cose che pensavo fossero divertenti, non è stato poi così difficile anche con l'interruzione del lavoro. :)
E anche se non ho trovato niente di interessante di cui posso parlarti come il programma Crab autocosciente, sono riuscito a farlo abbastanza bene.
E ... Con cosa dovrei impararlo, caro PSE, caro PSE, con cosa?
Per questo, ho usato vari algoritmi a cui mi è capitato di essere comunque interessato, oltre a varie cose che mi chiedevo se avresti potuto fare in F #, e quando sarei rimasto senza idee avrei affrontato cose come 99 bottiglie di birra e il Project Euler problemi ...
Sono sicuro che puoi trovare molte cose che ti interessano per le quali FP è rilevante; offre di tutto, dai miglioramenti a OOP che ti aiutano a dire le cose in modo un po 'più succinto fino a distorcere il modo in cui avresti pensato prima in una forma che non riconosci e probabilmente non aveva nemmeno il modello mentale da esprimere prima.
Ma ... c'è un buco nel mio modello, caro PSE un buco ...
Ed è per questo che è importante che, specialmente all'inizio, ma in realtà durante tutto il tuo tempo imparando (e non è sempre vero quando stai imparando qualcosa?) Almeno prenditi un po 'di tempo tra i problemi per leggere cose non correlate ma ancora FP e tempo per leggere il codice sorgente scritto da esperti, preferibilmente risolvendo gli stessi problemi o simili; così come le loro spiegazioni delle cose ...
E nel frattempo, devi sforzare il tuo cervello per capirlo tutto, non dalla tua vecchia prospettiva ma dall'interno dello stesso FP ... Ad un certo punto per me, ha fatto clic e ... la cosa che posso meglio mettere in relazione con esso sta diventando più o meno fluente in olandese; ad un certo punto sono riuscito a mettermi abbastanza nella mentalità (l'ho fatto tramite immersione, che è fondamentalmente ciò che ho descritto qui; immergersi in FP piuttosto che cercare di impararlo solo attraverso "libro di larnin" ...
E alla fine l'ho fatto; Sono riuscito a interiorizzare tutto e girare il cervello fino a quando non ho iniziato a far scoppiare FP / LINQ senza di me nemmeno dover fare uno sforzo per tradurlo in OOP. (Sì, l'ho fatto; dovevo avere qualcosa su cui appendere la gonna. Cappello. Qualunque cosa.)
Pensieri finali...
Mio, mio, sembra che tu stia perdendo la tua capacità di pensare alla tua firma intelligente
titoli di sezione. Che peccato.
La teleconferenza si sta ancora avvicinando rapidamente. Sembra molto più grande ora.
> si, si, beh .. conciso e tutto. Vedo che sei riuscito a perdere quella grinta.
vicino, che ... beh, sì, sono ter ... OH NO È TORNATO!
AAAAAAAHHHHHH !! [scappa urlando, ancora una volta]
La teleconferenza si sta ancora avvicinando rapidamente.
Assomiglia in qualche modo a Sir Lancyjohn Cleezewiz.
È quasi alle tue spalle.
> ehi, sbrigati a tornare! Ho un esperimento da provare con te! (e un po-ta-to)
Puoi trovare molte informazioni online su FP, naturalmente. La cosa principale è capire i concetti di base e quindi imparare ad applicarli. Ad esempio, scopri l'immutabilità e perché è importante / utile per FP. Consiglio vivamente di apprendere un po 'di teoria per andare d'accordo con tutto, ad esempio come il PQ puro può essere molto più suscettibile alla prova formale. Questa era una forza trainante dietro il progenitore di F #, ML. YMMV, ovviamente, potresti essere qualcuno annoiato dalle lacrime, nel qual caso, molti esempi, molte prove ed errori per vedere esattamente perché le tecniche utilizzate sono ciò che sono ti aiuteranno ad avere questo "Ah!" momento della lampadina.
Quindi, per ora lo lascerò a quello. Spero che questo sia di qualche utilità per qualcuno. Volevo approfondire un po 'le cose specifiche da imparare, ma per il momento non sono in tempo. Spero di trovare un po 'di tempo per tornare presto, anche se sta cercando di essere una settimana lunga per me, quindi probabilmente sarà almeno il fine settimana.
<3 "Presentazione di GRUEBOL, un punto fermo; solo fino alla fine di SnozzML. Dovrebbe essere presto; ho avuto un enorme comitato che mi ha aiutato questa volta." --Grace Hopperwit Egghead, Famous Last Words , XX97 GUE <3