<story><title>Programming Paradigms for Dummies: What Every Programmer Should Know (2009) [pdf]</title><url>https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf</url></story><parent_chain></parent_chain><comment><author>charlysl</author><text>I have read CTM, the author&amp;#x27;s book. He did in fact dislike the word &amp;quot;paradigm&amp;quot; and prefered &amp;quot;computation model&amp;quot; instead.&lt;p&gt;A model is a set of concepts. A concept is an orthogonal language feature, like closures, concurrency, explicit state (which he now calls named state), exceptions, etc.&lt;p&gt;His approach is not so much that you should select one language that supports a paradigm that seems the most suitable for a given project. Rather, what he advocates is that you should use a language that supports multiple cleanly separated concepts (close to what is called multiparadigm), and then you select the simplest set of concepts for each program component.&lt;p&gt;This is the principle of least expresiveness, you should choose the simplest model (simple meaning that it is easy to reason about and to get right) that keeps the code natural (meaning there is little code unrelated to the problem at hand, little plumbing).&lt;p&gt;Each model has an associated set of programming techniques, like accumulators for FP or transactions for stateful concurrency.&lt;p&gt;It is possible to mix and match components that are written in different models by using impedance matching, which consists of creating an abstraction  in the more expressive model that wraps the other component. An example would be a serializer, which allows you to plug a non concurrent component in concurrent program.&lt;p&gt;Basically, you should use FP as much as you can, but you can&amp;#x27;t if your program needs, say, visible non-determinism, like a server in a client-server application. But then you can add just one concept, ports, to the declarative concurrent model, and you have a new model that allows a whole constellation of new programming techniques, the concurrent message passing model, Erlang-like. The non-determinism in this model is restricted to the ports, the only place where it&amp;#x27;s required, the rest of the program can still be functional.&lt;p&gt;Other situations where FP might get stretched are when modularity or performance are a priority.&lt;p&gt;This book helped me realize the whole FP vs OO debate is sterile, the ideal is to have a language that allows you to use FP in a natural way, and switch to, say, OO, in a natural way in some cases.</text></comment>
<story><title>Programming Paradigms for Dummies: What Every Programmer Should Know (2009) [pdf]</title><url>https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf</url></story><parent_chain></parent_chain><comment><author>randcraw</author><text>Relevant references...&lt;p&gt;A 2004 textbook by the OP:&lt;p&gt;Concepts, Techniques, and Models of Computer Programming&lt;p&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.com&amp;#x2F;Concepts-Techniques-Models-Computer-Programming&amp;#x2F;dp&amp;#x2F;0262220695&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.amazon.com&amp;#x2F;Concepts-Techniques-Models-Computer-P...&lt;/a&gt;&lt;p&gt;And his 6 week edX course:&lt;p&gt;Paradigms of Computer Programming – Fundamentals&lt;p&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.edx.org&amp;#x2F;course&amp;#x2F;paradigms-of-computer-programming-fundamentals&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.edx.org&amp;#x2F;course&amp;#x2F;paradigms-of-computer-programming...&lt;/a&gt;</text></comment>