Monday, February 11, 2013

Tips on learning [unformatted draft]

[Any questions, or categories or detail I overlooked in this post, just email me]
[TODO: nice markup, like haskell girl]

Install Platform, cabal-dev, {vim, emacs, eclipse/sublime/textmate} plugins

- Ippolito's writeup

- There's heaps of plugins for vim and emacs, the Eclipse FP project. Not so many bundles for Sublime and Txmate (yet)

- cabal-dev on hackage: In the past, has lagged latest version on github, but seems current now.

- cabal-meta + hsenv to avoid cabal hell altogether: this isn't a perfect solution if you have a lot of projects. Example snap app . I haven't heard of anybody using cabal-meta, let's call it a hibernating project.


Read good code:

reddit/SO thread, Feb 2012


Ask questions, ask for refactorings

- Where should I ask?
- Google+ Beginners community

- stackoverflow,
- Reddit/r/haskell

- IRC freenode channel,
- beginners mailing list



type signatures, and "data", "instance", "class", "type", "newtype" definition/declarations: Learn to read fluently

the wiki entry ... and ... EZYang blog

The Gentle Intro is not so gentle, goes the common complaint



Exercises:

Project Euler; Alonso, Bird and Thompson's 3 books; 99 prolog problems



Suggested first projects

Think of the analytics, data cleaning/reformatting, spider/scraping, or sysadmin tasks you normally do in python or ruby. Probably there will be easily googled examples in Haskell



GHCi REPL: Master it from the wiki:

Users guide



Space leaks, heap profiling, lazy eval

- Slides by Sergey:

- Donsbot on profiling/reduction, hunting thunk/concealed retained threads/stack etc...

- N. Mitchell on same

- Simon M on same. Frank disclosure: something that takes him a few hours is going to take you ... longer

- EZYang has some excellent posts on this

Tools:

- ghc-vis .............. hood (not sure how updated this lib is)

- heap-view

- Threadscope, HEC's, execution contexts (roughly, operating system threads)



GHC compiler internals

Scala learners, one of the trickier things is learning to read bytecode (the "javap" output), to see where inlining, tail recursive, specialization of type parameters etc happens. I'm not sure digging through Core can be made easier for Haskell/GHC, but here's a link dump:

dig into AST

read Core (not terribly easy)



Books:

Besides Learn You A and RWH (Real world haskell), which everybody knows, look at the books by Prof. Graham Hutton and Prof. Simon Thompson (co-author of the excellent OReilly Erlang text)

- list of free books

- Hudak, Haskell Music

- Exercises by J.A. Alonso in Spanish

- Updated material ....... and ........ more advanced topics for RWH?

- If I had written the index for RWH (ok, ignore the orange, red, blue and green, you get the idea)

- Bird, Functional Pearls

- Amazon's listing



Search engines,

Hoogle .... and ....... Hayoo search engine

At some point Google and github may start "symbolic operator searches" in repo's, until then, there's

- Stackoverflow search, which is pretty useful

- symbolhound, which mostly scrapes Stackoverflow

- searchco.de lets you look up usages, but you don't get explanations back, usually.

- Of course, I should mention my own hand-curated topic map/ontology, raw data and minimal rails app with Sphinx/SOLR/lucene plugins at github. (If you'd like to see updated scala, F#, clojure datasets, email me)



Other resources

- SO answer by Miani "Getting started"

- Wiki: Keywords ...... and .......... GHC lang extensions ......... and ......... GHC Pragmas ...... and ........... List of Learning Resources

- typeclassopedia

- 2010 Haskell Report (basically, the language spec)

- CS240 at Stanford: course notes (which are outstanding)

- Yorgey, Intro to Haskell, UPenn (also outstanding)

- Shukla's UVa lecture slides

- FP Complete School of Haskell: interactive exercises and IDE

- from Wash U in St. Louis ..... and ....... Breadcrums

- EZ Yang blog (basically, he read RWH and Typeclassopedia)



What inspired this: I meant to fill out this /r/scala blurb but not got around to it http://www.reddit.com/r/scala/comments/175krl/tips_for_getting_proficient_with_scala/