Many, many of the legendary programmers know many programming languages. What they know from one language helps them write better code in another one. But it’s not really the language that matters: adding knowledge of C# to your knowledge of Java doesn’t make you much better. The languages are too similar: they encourage you to look at problems in pretty much the same way. You need to know languages that conceptualize problems and solutions in substantially different ways.
Once upon a time, object-oriented programming was a radical departure from what most programmers knew. So learning it was both hard and mind-expanding. Nowadays, the OO style (or some approximation to it) is the dominant one, so ambitious people need to seek out different styles.
The functional programming style is nicely different from the OO style, but there are many interesting points of comparison between them. This book aims to teach you key elements of the functional style, helping you take them back to your OO language.
Brian Marick first learned to program in 1976, using the Tutor language. He has since done real programming in C, Common Lisp, Java, Ruby, Clojure, Elixir, and Elm. Much of his career, though, has been spent consulting, first on software testing, then–after he lucked into being one of the authors of the Manifesto for Agile Software Development–on testing and programming on Agile teams. He's written four books, three of which you can still buy: The Craft of Software Testing (horribly out of date), Everyday Scripting with Ruby, and Functional Programming for the Object-Oriented Programmer (almost entirely about dynamically-typed functional languages). He's currently trying to make a modest living writing webapps for schools of veterinary medicine, deliberately using advanced languages and techniques so that he has real-world examples to use in books, training, and consulting.
This book was written by the Midje’s author. This lib is one of the main options for testing in Clojure. Some well-known people in software development industry has endorsed this book.
FP-OOP book starts with a quick Clojure intro. Then, it goes to an OOP implementation using Clojure. It’s theoretical and don’t connect OOP programmer with the language, ending this chapter without any conclusion whatsoever. Later, he introduces some FP concepts focusing in Clojure which give to the reader more context. Following chapters keep diving into FP techniques without giving much explanation about Clojure API. In the end, he wraps up talking about Monad API in Clojure and some “optional” chapters.
I’d recommend this book for who already have experience with Clojure API and some Ruby/Python or Java exp.
This material is very theoretical and there is no intent to serve as Clojure nor FP introduction material. I would recommend to people with more experience who would like to improve his/her knowledge by analysing the author’s theoretical examples/experiments.
It is an great material for dive into FP theory applied to Lisp, yet complex and ‘unpractical’.
This book contains a lot of exercises which could be a plus for some people.
This book tries to explain functional programming with a lot of code examples using Clojure. Although the first chapter introduces the reader to Clojure (which was very enlighting), the fact that this was my first adventure into the language got constantly in my way of understanding the bigger picture. After reading this book halfway through, I was totally lost. Perhaps picking up another book on Clojure before reading this book is a much better approach in order to get the most out of it.
This book is OOP applied to the book Structure and Interpretation of Computer Programs (SICP). It's interesting to see how OOP can be applied in a language that doesn't support constructs such as classes.
A great intro to functional programming. The overall organization is good, and I liked the level of detail for an introductory book. Marick does a good job of systematically introducing functional principles through theory, well-constructed examples, and exercises. The book uses Clojure for most of its examples, and although it is a bit frustrating when you're reading along about a concept and then hit something along the lines of "hold on, now I have to teach you some new Clojure syntax," it probably works better than trying to front-load all of the language constructs would have. Marick is also enthusiastic and convincing about the merits of functional programming without being all fanboy about it.
In one other note, Chapter 7, which deals with the "flow" of functional-style programs, seemed to be the most important chapter, to me. Consequently, perhaps, it was also the most difficult for me. Interestingly, I made some significant mental progress when I read the chapter backward. I think I (unsurprisingly) just need more time with functional programming to feel comfortable thinking the right way.
Read the unfinished version. Loved the parts with simple, concrete examples, but the "this is how you would implement Java in Clojure" parts felt too superficial and extensive to be enjoyable.