14 ms·
Functional programming books review
- bridger 13y agoIf anyone wants to read SICP and would like a buddy to read it with, let me know! I am working on an iPad app for people to study together and we are trying SICP as one of our first courses. I am reading it for my first time. It is an enlightening book! bridger@understudyapp.com
- ek 13y agoGreat list! A lot of the stuff there is to know about functional programming is still only contained in academic papers, and indeed many of these listed books are texts in programming languages that cite a great deal of the important literature. There is much about programming languages and functional programming that one might read interspersed with these books. Other than following references in the backs of many of these books, the Haskell wiki is a good place for starting to dig into literature on functional programming, as many articles link to important and interesting papers. On that note it's a bit strange not to see a few books on semantics, such as Transitions and Trees or Semantics Engineering with PLT Redex, listed among books like TAPL and Barendregt's Lambda Calculus. Especially now that DSL design is something many programmers are dabbling in, it makes sense to gain some background on operational semantics. I'd recommend either of these books to anyone working on DSLs, especially in a functional language. Finally, it might be worth adding Homotopy Type Theory to your list, especially since the list already contains several good books about Coq as well as works about type theory and type systems.
- platz 13y agoI'll second Haskell wiki. It has some of the most detailed explanations of functional concepts I've come across. http://www.haskell.org/haskellwiki/Fold http://www.haskell.org/haskellwiki/Fold http://www.haskell.org/haskellwiki/Monad http://www.haskell.org/haskellwiki/Monad http://www.haskell.org/haskellwiki/All_About_Monads http://www.haskell.org/haskellwiki/All_About_Monads http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minut... http://www.haskell.org/haskellwiki/Typeclassopedia http://www.haskell.org/haskellwiki/Typeclassopedia Also check out http://adit.io/ http://adit.io/ for some great tutorials with pictures
- codygman 13y agoThe functors, applicatives, and monads in pictures tutorial[1] just made so many things click for me. Those are all very very good resources indeed! 1. http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html http://adit.io/posts/2013-04-17-functors,_applicatives,_and_...
- mej10 13y agoWhy Homotopy Type Theory? It is cutting edge research and it doesn't seem clear to me that it is going to have an impact on functional programming (of the non-mathematical research type) any time soon. Am I mistaken?
- tel 13y agoIt seems to have quickly "infected" literature on dependent types at large---not to the point of having replaced the normal terminology, but instead as forming a sort of common framework for examining those fields. Which is definitely a point on the side of "has no impact". But on the other hand, I think studying dependent types is a fantastic way to get some perspective as an intermediate to advanced Haskell or OCaml programmer. Software Foundations and Certified Programming with Dependent Types are both great books to read. HoTT won't be on that list for some time if ever, but once you've got a good mental model for dependent types it's illuminating to see them worked out "from scratch" as HoTT does. So, the best I can say is that it can be influential in the way that you view types if you're someone who frequently programs and thinks in a nicely typed language like Haskell/OCaml and maybe Scala.
- ek 13y agoThe book on Homotopy Type Theory is quite readable even though the developments are quite new. The purpose of the book is to get the material into the hands of as many as it may be useful to as soon as possible. I would argue that the book is at least as useful as Categories for the Working Mathematician or Barendregt's Lambda Calculus are likely to be for your typical software engineer interested in functional programming. To be clear, someone interested only in learning how to program in functional languages is probably not going to get very much from either of those books, which are respectively an extremely technical mathematical text on topics in category theory, and a heavily logic-oriented, mathematical presentation of the lambda calculus and derivatives thereof. Not much of the material in either book would be directly applicable to the practice of software engineering using functional languages, but someone with a deeper interest would find them useful and interesting, and I think the same holds for the HoTT book. At the very least, as the other commenter alluded to, a novice reader would probably be able to glean a nice understanding of Martin-Löf dependent type theory from the first chapter.
- alexott 13y agothanks - I'm usually updating this list every 2-3 months, when I have long weekend or something like...
- frrp 13y agoNice and useful! If you are in Hong Kong, we have a meetup group here: http://www.meetup.com/HK-Functional-programming/ http://www.meetup.com/HK-Functional-programming/ We are mostly working on Martin Odersky's Coursera courses and SICP book exercises.
- eru 13y agoI should have know about that meetup the last time I was in Hong Kong. We have also revived the FP meetup in Singapore. Drop me a line, if you are interested, dear reader. (Email in profile.)
- dschiptsov 13y agoThis is excellent review, no doubt, by a well known scholar.) The only problem is that there are so many books and so little time. So, to get a quick and productive crash-course I would recommend just a few selected resources. * SICP based course CS 61A by Brian Harvey (Youtube) * HtDP2 and a wonderful course based on it - Introduction to Systematic Program Design by Gregor Kiczales (the author of The Art Of Metaobject Protocol) * Armstrong's thesys armstrong_thesis_2003.pdf and his Programming Erlang book. * Programming Languages course by Dan Grossman (also on Coursera) * Two Scala courses Martin Odersky * The classic Haskell tutorial http://www.haskell.org/tutorial/ http://www.haskell.org/tutorial/ * ANSI CL and On Lisp books by pg. This is a very decent start in my opinion. "To learn quickly read only the best ones".
- platz 13y agoGrossman's PL course is not the hardest of them all, but it did provide had the most value, compared to the other Coursera courses I've taken. Truly excellent.
- epsylon 13y agoI second that, it's been the best course I've taken up on coursera so far (with Dan Boneh's crypto). The lectures are great, but the best for me was the high quality provided course notes. I read those in my morning and evening commutes and I didn't even have to watch the videos! The exercises were well crafted, guiding you part by part to build your program, and challenging enough that you learned something valuable. It definitely made me interested in exploring more the three languages presented - ML, Racket and Ruby. I'm currently taking the second Scala course and I have to say it's a bit of a disappointment so far. Martin Odersky's part was good, but I didn't really like Erik Meijer's teaching style (I understood Futures and Promises better after reading a few articles about these). I haven't caught up with Roland Kuhn's part yet. However I've been incredibly frustrated with the exercises. They are tedious, but for the wrong reasons: you have to make a lot of guesses on what are exactly the semantics of what you're supposed to implement, sifting through the forum and the FAQ for relevant information. After you've submitted, you now have to wait for a long time (between 20 and 100 minutes) for the automatic grader to tell you whether your guess about what exactly you had to implement was right or wrong. It's still an interesting course, and it's worth just for the sake of getting your hands into some Scala code, but there's that caveat.
- iamabhishek 13y agoFunctional programming is the best, a classic approach for a smooth simple development. And this review was simply amazing. I saw this website a few days back, http://studytonight.com http://studytonight.com which is really nice, if we talk about simple lessons. I saw some really great videos there about concept of programming and data structures. {pretty impressed}
- OnionChamp 13y agoThis is a list of amazon referral links to books related to functional programming, with a ~2-sentence blurb about each that could be written in 10 minutes with the help of google. It's a nice way for him to make some referral money but otherwise it's nothing special. The guy probably hasn't opened half of the books here.
- alexott 13y agoplease, generate it yourself (without looking into this list) and track how much time you need to do this... I've compiled this list long time ago as an article for Russian FP journal, and it takes relatively much time to track new books, obtain them (paying myself or get through Safari Online), read or at least briefly go through it, and write a short review... P.S. regarding the referral money - don't think that it generates a ton of money - it's barely enough to buy one inexpensive book per year...
- eru 13y agoYou can get review copies for free from most publishers. (Though, if you are making decent money as a programmer, that's probably more effort than just buying the books.)
- alexott 13y agoYes, I sometimes receive the books from publishers, but the main resource is time :-(
- jacques_chester 13y agoI'll second this. I review books on my blog[1] and set it up so that visitors can choose whether or not to follow the referral link or a non-referral link. About 2/3rds of people follow the referral link. Out of the several thousand pageviews and several hundred clickthroughs, I've accrued a grand total of about $60. Unless you have thousands of clickthroughs, or you spruik products with high impulse value, Amazon referral links are not very lucrative. [1] http://chester.id.au/book-reviews/ http://chester.id.au/book-reviews/
- Kiro 13y agoNothing on JavaScript? I can recommend Functional JavaScript by Michael Fogus.
- bad_user 13y agoI don't like this article. Lots of people do a Google-search on books on various topics, then publish a blog article without having read them. I'm seeing books in there that are awful choices. And oh look, the Amazon articles are tagged, which means the author gets affiliate compensations. And what do you know, it's the hollyday season, so people buy stuff on Amazon. And don't get me wrong, I'm fine with that, I did it myself, but at least read the freaking books that you're recommending, before recommending them.
- alexott 13y agoWhy do you think that I didn't read the books? Do you know anything about me to make such comments? P.S. About affiliation links - it's written clearly in the 2nd paragraph of the page.
- bad_user 13y ago(1) $ curl http://alexott.net/en/fp/books/ 2>/dev/null | \ grep -o 'http://www.amazon.com/gp/product/[a-zA-Z0-9]*' | \ sort -u | wc -l 132 Seriously, you've read 132 technical books, for 10 different languages, going back to 2009? (2) I'm seeing books that have been OK-ish when they appeared and thus recommended by people, either because of lack of other choices, but also because the advice contained was the status quo, but right now are pretty bad choices. "Programming Scala", by Alex Payne, for example is an awful reference to put on any list of books for Scala. It contains bad practices, plus lots of references to obsolete parts of the standard library, not to mention its general flow is just awful. If you would have read it, you would have known. "Programming Scala" the one published by the Pragmatic Programmers, is another awful choice. Actually, all books on Scala published before 2010 are awful choices. (3) What the hell does a book on Scalatra has to do with Functional Programming? Is it because the association with Scala or something? (4) It's bad advice to tell people to buy books from Amazon. The E-Books are DRM-enabled Kindle versions, sometimes badly formated and you don't get the PDF. Many of those books have the same price if you buy straight from their publishers and you get both a DRM-free Kindle version and the PDF.
- 13y ago
- amirmc 13y agoTo the author: The section on 'Caml and Objective Caml' should be renamed to 'OCaml' as that's the official name of language in recent years. Also, the ordering of books is best done in reverse chronological order. Improvements are made in different compiler versions so it would cause frustration for a new reader if they come across a disconnect. I suspect the same is true for other languages listed. The most recent books are 'OCaml from the very beginning' [1] (released earlier this year) and 'Real World OCaml' [2] (released a few weeks ago). You can find these and other OCaml books listed at: http://ocaml.org/learn/books.html http://ocaml.org/learn/books.html [1] http://ocaml-book.com/ http://ocaml-book.com/ [2] https://realworldocaml.org/ https://realworldocaml.org/
- alexott 13y agothank you, I'll incorporate your suggestions...
- agumonkey 13y agoI remember a wonderful website about functional programming in python, not about the classic map/fold/list, but about solving numerical problems in a functional manner (somehow monadic in structure, without saying it). I could never find it again, maybe someone knows it.
- BellsOnSunday 13y agoThe classics section is missing one of my favourites, Recursive Programming Techniques by Wm Burge. A beautiful book that was ultra cutting-edge at the time (1975) but still a very effective exploration of the elegance of FP, techniques and patterns that are useful today, ideas with the potential to provide satori moments for anyone learning the paradigm, issues arising from laziness etc etc. You can read it today and treat the language used as a notation, like a dynamically-typed Haskell IIRC. The best £1.54 you'll ever spend! -- http://www.amazon.co.uk/Recursive-Programming-Techniques-systems-programming/dp/0201144506 http://www.amazon.co.uk/Recursive-Programming-Techniques-sys...
- alexott 13y agoThanks for the hint!
- kriro 13y agoI agree on the Prolog recommendations. My suggested path would be: (1) Prolog Programming for Artificial Intelligence (first half is sufficient to start) -> (2) The Art of Prolog -> (3) The Craft of Prolog As a first "get to know the language" I'd add: http://www.amzi.com/AdventureInProlog/a1start.php http://www.amzi.com/AdventureInProlog/a1start.php You build a basic old-school text adventure in Prolog which is more accessible than the traditionally boring introductions with family databases (imo). It's from amzi but should work with most Prologs, iirc I ran through it with GNU-Prolog (I'd recommend SWI though, it's the best open source implementation out there imo). Uses some metaprogramming that is usually not covered in introductory material (and often considered "use with care") i.e. dynamically updating code with assert/retract I have only browsed "Warren's Abstract Machine: A Tutorial Reconstruction" but it's on my to read list. Interesting for anyone that enjoys VM-design and the like.
- yfefyf 13y agoThere's a comment from Matthias Felleisen below the article.
- davidw 13y agoLearn You Some Erlang is truly a labor of love, and I can't recommend it enough: http://learnyousomeerlang.com/ http://learnyousomeerlang.com/ It can be a bit verbose if you just want a reference, but that's because he spends so much time teaching you the details.
- tfinch 13y agoNice list, will be referring back to this. Just a heads up the link to 'All About Monads' in the Haskell section is broken, think it should be http://www.haskell.org/haskellwiki/All_About_Monads http://www.haskell.org/haskellwiki/All_About_Monads
- alexott 13y agothank you, I'll update all the links with suggestions (I'll be able to make this only around Christmas)...
- tel 13y agoThe Pearls of Functional Algorithm Design is like the On Lisp of Haskell. It's a stunning, challenging intermediate FP programming book that focuses on how equational reasoning allows you to "automatically" move from unoptimized, unelegant, fragile code to optimal, beautiful code correctly. I cannot recommend it enough.