Apprendimento di Haskell e C # simultaneamente [duplicato]

5

Sono un programmatore che è ancora adolescente. Ho fatto un po 'di programmazione per un paio d'anni, ho iniziato su Ruby e in seguito sono passato a Python a causa della massiccia quantità di risorse di apprendimento lì. Non ho mai veramente creato qualcosa di utile con Python, ma mi sento come se avessi imparato una discreta quantità di principi di programmazione che attraversavano il Learn Python The Hard Way di Zed Shaw

.

Negli ultimi mesi ho cercato oltre le lingue per imparare, poiché provavo una mancanza di interesse per Python. Alla fine ho deciso di voler imparare sia C # che Haskell come le mie prossime lingue. Mio fratello, un ingegnere del software, mi consiglia di non apprendere ancora Haskell, poiché pensa che mi farò inciampare con alcune delle idee ad esso associate, come se fosse pura. Inizialmente mi sarei limitato ad imparare C #, dato che ho alcuni libri su di esso e su framework come XNA, ma Haskell continua a trascinarmi indietro. Ho anche una copia di Learn You A Haskell per il grande bene che sembra un ottimo inizio per Haskell.

Mi sento come se potessi imparare C # insieme a Haskell allo stesso tempo, anche se potrebbe richiedere più tempo. Una delle mie preoccupazioni per non imparare C # velocemente è che con il ritmo veloce dello sviluppo di C # /. NET / XNA che i libri che ho saranno superati dal momento in cui sono veramente pronto ad usarli. (Non ho direttamente a che fare con C #, solo C # in Depth, un paio di ASP.NET e un libro XNA 4.0.) Inoltre, ho accesso a Visual Studio Ultimate, che sembra possa essere utile nell'apprendimento come programmare pur ottenendo l'accesso a Intellisense e ad altre funzionalità di VS.

Haskell d'altra parte sembra estremamente allettante in quanto sono davvero interessato ad alcune delle cose che è meglio, come algoritmi / problemi in siti come Project Euler. I vantaggi dell'apprendimento di due linguaggi paradigmatici molto diversi all'inizio della mia carriera di programmatore sembrano molto vantaggiosi.

La mia domanda è questa, sarebbe meglio (considerando la mia situazione) di imparare C # e scrivere alcuni programmi non banali, qualcosa che devo ancora fare davvero, quindi provare ad imparare Haskell e scrivere alcuni programmi in esso ? Oppure potrei apprendere in modo imparziale allo stesso tempo e allo stesso tempo essere fluente in entrambi e riuscire a scrivere progetti in entrambi?

Modifica: ho scelto la risposta di tdammers perché le domande rispondono per il fatto che ha riconosciuto entrambe le opzioni e ha fornito i motivi per cui entrambi potrebbero funzionare. In qualche modo sono d'accordo con Sayem, che in genere è meglio imparare solo una lingua e padroneggiarla. Tuttavia, ho anni prima che entrerò nel mondo del lavoro come programmatore, e dal momento che è una delle cose che amo di più, mi sento come se non fosse un fardello avere il tempo di imparare entrambi e padroneggiare entrambi contemporaneamente. Detto questo, potrei ancora scegliere di concentrarmi principalmente su una lingua e imparare l'altra dalla parte.

Modifica 2: ho scelto di imparare sia C # sia Haskell allo stesso tempo. Userò risorse online insieme a un paio di libri che ho. Di seguito è riportato un elenco delle risorse che utilizzerò per ciascuna lingua.

C # -

Haskell -

posta PardonMyRhetoric 05.07.2011 - 05:55
fonte

8 risposte

5

In entrambi i casi può funzionare.

Se raccogli una lingua alla volta, sarai in grado di apprenderla in modo più approfondito e otterrai risultati tangibili prima, il che è un grande incentivo alla motivazione. Imparare un'altra lingua sarà più facile, più lingue conosci, quindi il tempo dedicato all'apprendimento della prima lingua non è completamente perso per il secondo; e vv., l'esposizione a una lingua diversa amplierà la tua mente e ti renderà un programmatore migliore nella prima lingua. Alcuni dettagli possono essere confusi all'inizio, come il fatto che entrambe le lingue hanno una parola chiave 'classe', ma il concetto corrispondente non è lo stesso (in C #, una classe è un tipo, mentre in Haskell una classe è un gruppo di tipi, più come un'interfaccia).

Tuttavia, imparare due lingue in parallelo è anche un percorso perfettamente fattibile e interessante. Avrai più difficoltà a tenerli separati nella tua testa, ti ci vorrà un po 'di più per entrare in quello stato in cui i pensieri fluiscono direttamente dalla tua mente nell'editor di testo, ma se questo metodo si adatta al modo in cui la tua mente funziona, poi sarai in grado di guardare entrambe le lingue da più angolazioni e trasportare concetti da una lingua all'altra mentre impari. La combinazione Haskell / C # è particolarmente interessante IMO, perché Haskell è un linguaggio così insolito con la sua purezza e valutazione pigra, mentre C # è abbastanza tradizionale nelle sue radici OOP, ma prende in prestito molto dalla programmazione funzionale, orientata all'aspetto e basata sui dati paradigmi. Programmando in C #, è facile dimenticare che OOP non è l'unico modo per risolvere i problemi di programmazione, un fatto di cui Haskell ti ricorderà.

Per quanto riguarda l'argomento della "lingua emergente": non penso che dovresti attribuire troppo valore a questo. Se sei bravo, dovresti essere in grado di diventare produttivo in qualsiasi linguaggio di programmazione (beh, ad eccezione di Malbolge e così via) entro poche settimane al massimo.

    
risposta data 05.07.2011 - 09:09
fonte
8

Imparare più lingue è buono. Tuttavia, sarà meglio se ti concentri con una lingua alla volta.

In primo luogo, impara C # e impara davvero bene. Diventa un maestro di esso perché questa lingua sta emergendo come una delle lingue più importanti in questi giorni. Quando hai finito, inizia ad imparare Haskell.

Concentrarsi su più lingue allo stesso tempo ha i suoi vantaggi e svantaggi. Il vantaggio è che puoi confrontare il modo in cui le cose vengono fatte in diverse lingue allo stesso tempo, il che ti aiuterà a impararle in modo efficace. Lo svantaggio è che dovrai dedicare più tempo all'apprendimento delle lingue piuttosto che impararle una alla volta. Inoltre, padroneggiare una lingua richiede molto tempo.

Il mio suggerimento sarebbe quello di imparare C # e diventare un maestro di esso. Successivamente, inizia ad imparare Haskell.

P.S. : tutte le precedenti sono le mie opinioni personali. Le cose potrebbero funzionare in modo diverso per te.

    
risposta data 05.07.2011 - 06:04
fonte
7

Impara entrambi allo stesso tempo! Sono animali molto diversi, e dato che hai già i concetti base di programmazione giù da Python, gli approcci contrastanti ti daranno spunti in entrambe le nuove lingue.

Un'occasione unica da non perdere, direi.

    
risposta data 05.07.2011 - 06:38
fonte
3

L'apprendimento dei linguaggi di programmazione è una lunga strada. Ci vorrà un sacco di tempo prima che tu diventi un vero maestro. Il modo migliore per imparare è scrivere piccoli progetti solo per divertimento. Potresti provare a scrivere un progetto che userà entrambe le lingue per parti diverse.

I discorsi di C9 di Erik Meijer potrebbero essere utili per te nell'apprendimento del punto di vista degli sviluppatori di Haskell da C #. link

    
risposta data 05.07.2011 - 06:31
fonte
2

Dipende da come vedi il tuo percorso da qui. Se prevedi di spedire roba, ti verrà meglio servito con C #. Per imparare Haskell ti sarà sicuramente utile come programmatore.

La mia raccomandazione è di iniziare con Haskell finché è divertente e scorrevole. Non pensarci due volte a mettere giù il libro e produrre qualcosa di tangibile in ruby o in c #.

    
risposta data 05.07.2011 - 06:39
fonte
2

Sembra esserci la percezione che Haskell sia un linguaggio "duro" che dovrebbe essere appreso dopo aver acquisito esperienza con altre lingue. Sono completamente in disaccordo. Haskell è solo "difficile" perché è altamente dichiarativo, mentre i linguaggi più popolari in questi giorni sono molto imperativi (Java, Python, sapori di C).

Raccomando vivamente di imparare sia Haskell che C #, ma non penso che l'ordine sia importante (imparare allo stesso tempo va bene, ma quando arriva il momento critico non è possibile leggere due libri al esatto la stessa ora, puoi comunque interlacciarli). Imparare ciascuno espanderà la tua mente. Se Haskell ti eccita, direi iniziare con Haskell. LYAH è un ottimo modo per iniziare. Dato che sei un adolescente, non dovresti davvero preoccuparti troppo delle capacità di formazione professionale, imho. Goditi la dolcezza della programmazione hobbista prima che venga contaminata dal codice di "produzione".

La cosa principale da capire è che Haskell è molto diverso. Ogni volta che programmi in Haskell, prova a dimenticare tutto ciò che sai sulla programmazione imperativa. O almeno la maggior parte di esso. Come è stato detto, Haskell cambia il tuo cervello e ti aiuta a programmare meglio. Ruby, Python e C # hanno tutti aspetti funzionali che Haskell ti aiuterà a capire e ad apprezzare.

    
risposta data 05.07.2011 - 20:26
fonte
2
risposta data 06.07.2011 - 13:39
fonte
0

La mia esperienza è stata la seguente:

Pascal > Haskell (presso uni) > Java (yuk!) > C #

Ho trovato le seguenti cose utili su questo viaggio

  1. Pascal come linguaggio imperativo ha fatto le basi di Java & C # è facile da cogliere ma rende più difficile l'apprendimento di Haskell
  2. Imparare Java ha reso l'apprendimento C # abbastanza facile in quanto sono abbastanza simili anche se trovo C # molto più veloce da codificare.
  3. Apprendimento Haskell mi ha dato una buona conoscenza dei concetti di programmazione di ordine superiore che hanno cambiato il modo in cui scrivo algoritmi in C #.
  4. Ci sono molti concetti funzionali comuni in Haskell che sono stati introdotti in C #.

Potresti leggere il seguente articolo di uno degli autori del linguaggio che descrive le caratteristiche di Haskell che sono state inserite in C #: dovrebbe aiutarti a vedere la comunanza in alcune funzioni (Linq & Lambdas in particolare)

Confessioni di un venditore di linguaggio di programmazione utilizzato Ottenere le messe agganciate su Haskell Erik Meijer link

David

    
risposta data 05.07.2011 - 10:35
fonte

Leggi altre domande sui tag