3 ms·
A must-read if you're interested in the topic: Programming Paradigms for Dummies: What Every Programmer Should Know [1]. (Visual summary thanks to Wikipedia: [2
by TuringTest 10y ago
A must-read if you're interested in the topic: Programming Paradigms for Dummies: What Every Programmer Should Know [1]. (Visual summary thanks to Wikipedia: [2])
In short, in this view, programming paradigms are traits of languages, or more precisely a programming paradigm is the particular combination of traits that you include in your language.
A single addition or removal of one language trait can make the language feel quite different.
[1] http://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf http://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf
[2] https://en.wikipedia.org/wiki/File:Programming_paradigms.svg https://en.wikipedia.org/wiki/File:Programming_paradigms.svg
- nextos 10y agoThe related book, CTM, is fantastic.
- tmccrmck 10y agoHow does it compare to SICP?
- nextos 10y agoIn many ways it's a worthy successor or sequel. It walks you through different paradigms, and shows how everything works with Mozart/Oz. A fantastic language with big influences from Lisp and Prolog. CTM is a bit more focused on programming language theory, it even has a formal semantics appendix. CTM is highly regarded in Lambda the Ultimate as a basic primer to programming language theory. In contrast SICP is a bit more hacky. It shows you how to build some abstractions, whereas CTM is more about their semantics and how to build programs using different paradigms. Along with SICP, CTM is easily my favorite programming book. Close seconds are PAIP and TAOP (The Art of Prolog). I wish we could have a Lisp with Mozart semantics and a great ecosystem.
- Chris2048 10y ago> A single addition or removal of one language trait can make the language feel quite different. I agree with this, and in this is why I, to some degree, disagree with the idea of a 'polyglot programmer', in the sense of an experienced programmer having general "software engineering skills", appreciation of OOP principles etcetc with the idea that they can quickly pick up any language from having a base set of sw skills. In reality, understanding the specific implementation of many languages (all of which differ), and the nuances of the features of the languages are important. A single trait can make a significant difference the way you should use a language, not to mention differently-evolved community standards/expectations.
- jerf 10y agoI think most people mean "polyglot programmer" when they do in fact know several languages in detail. I've got a number of languages for which I am not "a world-class expert" but I am certainly an "expert", able to structure significantly-sized systems with best-practices and a fairly detailed understanding of all relevant costs and benefits I'll get from it. Precisely because I've picked up so many languages, I also know that the hardest part of that is what you point out, that every single difference ends up affecting the best practices. With the exception of the very heavily bondage-and-discipline languages (Haskell, Rust, Ada, Idris), the mere act of learning syntax and most of the semantics of most languages is often a less-than-one day task.
- Chris2048 10y agoTrue, but I've known people use it to mean something like language-agnostic technologist, with the idea that they have enough experience in one or two languages that they could pick up anything else at senior level. > Precisely because I've picked up so many languages, I also know that the hardest part of that is what you point out This is exactly it. The people I describe have a few similar languages under their belt, and simply extrapolate from this. I wouldn't, for example, assume a experienced senior java dev could pick up Scala at the same level within a few months, despite the similarities; they simply lack experience with the new traits.