Domanda

In questi giorni sto prendendo sul serio la programmazione funzionale.

Mentre sono davvero entusiasta di Haskell e delle possibilità che sembra offrire, posso anche vedere ora che mi ci vorrà un po 'per imparare. In una domanda SO su Come imparare Haskell una risposta afferma che ci vorranno mesi se no anni da "dominare" in realtà esso.

Ora conosco C, PHP, alcune cose orientate agli oggetti, ecc. E essendo stato detto che Haskell non è molto usato là fuori nel "mondo reale", starò meglio migliorando le mie abilità nel normale lingue che conosco? Haskell vale la lotta?

In questa domanda su Perché le persone pensano che la programmazione funzionale prenderà su la conclusione sembra essere che la programmazione funzionale "prenderà piede". Ma sicuramente la programmazione procedurale rimarrà in cima, giusto?

EDIT: keparo chiarisce bene la mia domanda a: A differenza dei linguaggi procedurali, sarà utile per me studiare Haskell e paradigmi di programmazione funzionale?

È stato utile?

Soluzione

Haskell non è così difficile come alla gente piace imparare a imparare. Haskell apre un nuovo mondo che non hai mai saputo esistesse per te. È prezioso da imparare come qualsiasi altra lingua. Potresti non trovare un lavoro che richiede di eseguire la programmazione Haskell, ma ciò significa davvero che una lingua non è preziosa?

Haskell ti insegnerà molte cose nuove e ti mostrerà come programmare ancora meglio nelle lingue con cui / lavori / lavori. Puoi realizzare i tuoi progetti personali nel tempo libero con esso.

Haskell non è molto usato molto nel "mondo reale" se definisci " mondo reale " come "generatore di cassa". Quindi, se questo è il tuo obiettivo, potresti dover ripensare gli obiettivi: p

Inoltre, non mi piace molto quella parte di " scelto come imparare l'hashell " risposta. Ci vogliono mesi o anni per padroneggiare qualsiasi lingua, non solo Haskell. A seconda di come definisci " master " ;. Posso usare Haskell con un buon grado di efficienza e lo sto imparando da solo un mese e lo sto prendendo anche lentamente.

Altri suggerimenti

Se non altro, il cambiamento nella mentalità fornita dall'apprendimento di Haskell ti aiuterà quando dovrai tornare a utilizzare quei linguaggi procedurali che sono ancora utilizzati sul posto di lavoro.

Il paradigma funzionale sta cominciando a farsi strada in varie applicazioni e linguaggi tradizionali - Anche C ++ aggiungerà un lambda (paralizzato) in C ++ 0x.

Potresti anche voler esaminare alcuni dei linguaggi ibridi come Scala o OCaml. Scala viene utilizzato su Twitter e OCaml viene utilizzato a Jane's Street in una piattaforma di trading finanziario.

Probabilmente non dovresti aspettarti di usare Haskell ovunque quasi spesso come un linguaggio della famiglia C in contesti professionali. Se la domanda è se sarà prezioso per te studiare Haskell e paradigmi di programmazione funzionale, la risposta è sì. Puoi applicare la tua comprensione arricchita della programmazione a tutto il tuo lavoro.

Ho imparato Haskell perché era di gran lunga il miglior linguaggio funzionale che ho provato con Scala, Clojure, OCaml e Scheme ma non mi aspettavo seriamente di usarlo per lavoro.

A quanto pare, è perfetto per quei tipi di lavori strani che sono troppo piccoli per un team e richiederebbero troppo tempo in Java. Finora l'ho usato per migrazioni di dati ad hoc, vale a dire la manipolazione delle esportazioni CSV in un altro formato, le conversioni batch di XML (HXT è più concisa e più potente di XSLT), la rimozione di schermate da Internet e la stima di progetti software, compresa la modellazione rischio usando la monade della probabilità e producendo diagrammi di gantt ottimali usando il backtracking Questo è tutto il vero lavoro che bisognava fare, che non mi sarei nemmeno preso la briga di provare a fare in Java come sarebbe un'impresa di più giorni.

Ora lo uso al posto di Excel per qualcosa di vagamente matematico in quanto è un po 'più di sforzo creare un elenco di valori nella sorgente haskell in un editor di testo piuttosto che digitarli in Excel. Una volta in haskell, posso quindi fare tutti i tipi di magia come backtracking, distribuzioni di probabilità ecc. Che Excel non può fare. Se ho bisogno di un grafico, sputo i valori come CSV (2 righe di codice) e li carico in Excel.

L'unico aspetto negativo è che ci vogliono diversi mesi per diventare esperti, ma vale la pena IMHO.

  

A differenza dei linguaggi procedurali, sarà prezioso per me studiare Haskell e paradigmi di programmazione funzionale?

Se avere un set di abilità ampliato è prezioso, allora: sì.

Un vantaggio che potresti cogliere: programmazione parallela e simultanea. I linguaggi procedurali del passato tendono a non avere una chiara nozione di effetti collaterali, di conseguenza è difficile scrivere correttamente programmi paralleli in essi. I linguaggi funzionali (in particolare quelli che limitano gli effetti collaterali come Haskell) hanno molto altro da dire sulla programmazione parallela produttiva.

Avere quell'abilità nella manica non può far male.

Vedo che la programmazione funzionale può essere un vantaggio in un ambiente di produzione se è molto facile da usare con un codice non funzionale. Anche MS potrebbe vederlo quando hanno inventato F # immagino.

Dato che entrambi si compilano in IL, è possibile gestire i problemi che richiedono un approccio funzionale funzionale e utilizzare tali soluzioni molto facilmente nel proprio codice procedurale.

In questo modo il codice funzionale può facilmente trovare la sua strada in un ambiente di produzione un po 'alla volta

Pertanto, e poiché la base di utenti di MS è così grande, la mia ipotesi è che se F # non accadrà nel prossimo futuro, neanche Haskell lo farà.

Penso che valga la pena. Ti aiuterà a capire come vengono risolti i problemi e non solo come funziona un computer.

Forse un problema particolare è lo stesso Haskell - Essendo un linguaggio puramente funzionale, è un po '"hardcore". che d'altra parte potrebbe persino complicare le cose.

La programmazione funzionale invece può essere estremamente utile in un modo molto pragmatico - Molti linguaggi OO / imperativi hanno ora incluso elementi funzionali per questo motivo (Linq, funzioni anonime, valori di sola lettura, puntatori / delegati di funzioni, inferenza di tipo): puoi concentrarsi su ciò che dovrebbe essere fatto che consente di esprimere di più con meno codice (che è anche meno soggetto a errori).

I linguaggi non puramente funzionali (linguaggi funzionali standard) come Scala o F # possono essere facilmente integrati in progetti Java o .NET esistenti, in modo da poter combinare i vantaggi di entrambi i paradigmi dove sono necessari. Per i vantaggi tipici dei linguaggi funzionali, vedere questa discussione . Basti pensare all'analisi estremamente potente (combinatori parser Monadic / Parsec) o alla programmazione concorrente possibile con linguaggi funzionali e vedrai quanto sono utili.

  

A differenza dei linguaggi procedurali, sarà prezioso per me studiare Haskell e paradigmi di programmazione funzionale?

A meno che tu non voglia essere infelice. Luke Plant dice, in Perché imparare Haskell / Python ti rende un programmatore peggiore :

  

Quindi, imparare Python e Haskell mi ha demoralizzato e incoraggiato   di scrivere un codice bizzarro e difficile da capire ...

(Questo non è del tutto uno scherzo.)

Ampliare i tuoi orizzonti ti aiuta a essere un programmatore migliore, indipendentemente dalla lingua che stai usando al momento. Non guarderai mai alla programmazione allo stesso modo dopo aver scritto le macro Lisp, per esempio. Dopo aver iniziato a pensare in termini Haskell, ti ritroverai a comporre funzioni e a desiderare chiusure in lingue meno avanzate.

A giudicare dalle chicche in C # come lambdas, tipo inferenza, chiusure, e così via , l'apprendimento di Haskell ti consentirà di trarre vantaggio dall'avanguardia di domani nelle lingue tradizionali.

Ad alcune persone piace programmare in Haskell. Se puoi scegliere il tuo ambiente e il divertimento è una considerazione, allora forse dovresti saltarci dentro.

Molti programmatori non sono in grado di scegliere i loro strumenti e il divertimento non è un fattore per le loro scelte. Molti di loro usano C / Java / etc sul posto di lavoro per la "fonte del progetto principale", ma poi scelgono o devono usare Python per "gli script". come build-script con SCons, altri script che generano codice Java / etc, sistemi di test, prove di concetti, ecc. E in altri luoghi Python è anche usato nel "core project".

Tra 8 anni, sarà Haskell, non Python, che "verrà da te". Ma puoi raggiungerlo prima.

Puoi combinare l'uso della programmazione funzionale e essere pragmatico sulla lingua.

Tutti i moderni linguaggi di scripting s.a. JavaScript o Lua consentono l'uso del paradigma funzionale.

Il concetto funzionale sta diventando forte. Nota la raffica di attività e interesse intorno a Ruby. Ho anche notato un po 'più di interesse per JavaScript oltre un semplice linguaggio di scripting del browser ultimamente. Puoi anticipare il gioco immergendoti ora, anche se il tempo investito potrebbe non ripagare quest'anno o il prossimo.

Dipende dal tuo piano di gioco generale. Ti piace programmare come un fine in sé o come mezzo per un fine? Se è il primo, impazzisci con Haskell. Se quest'ultimo, attenersi al mainstream, "utilizzabile". le lingue. Aspetta che Haskell decollino e poi balzi.

Perché procedurale e non orientato agli oggetti, non visto come procedurale usato per molti anni a parte C.

Commercialmente parlando. Vorrei andare con Java o C #. Non importa cosa paghino bene entrambi e le abilità sono intercambiabili con altri linguaggi simili come Python, Ruby e JavaScript.

Haskell vale il tempo e gli sforzi, anche se è molto accademico, alcune banche lo usano, anche se molti in Europa e nel Regno Unito stanno spostando la base di codice su F #.

Non credo che la FOP si muoverà a grandi velocità dal punto di vista commerciale. Ma le tecniche stanno sicuramente facendo la loro comparsa nelle principali lingue di soggiorno. Soprattutto con i progetti di chip multi-core e il funzionamento del codice in parallelo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top