Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I want to improve my programming knowledge - filling in holes and working out what I don't know - and a good way to do that seems to be understanding all the different programming paradigms that are out there.

Wikipedia lists a lot of them and provides some information, but it's not all well-written, I'm finding that difficult to digest, and hard to understand how they inter-relate (i.e. which ones are complementary, competing, or completely separate ideas).

Can anyone recommend a good place I can read up on all these concepts, in a way that is consistent, interesting and engaging, and will help me to ensure I understand it all?

(To be clear, I'm not looking for language recommendations - rather, what I'd like is explanations and general information about paradigms themselves, 'untainted' by a particular implementation.)

share|improve this question

closed as primarily opinion-based by ChrisF Sep 25 '13 at 11:34

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.If this question can be reworded to fit the rules in the help center, please edit the question.

2  
You would be better off writing code in said paradigms. Book knowledge is easily forgotten while experience sticks around. –  ChaosPandion Oct 9 '10 at 19:39
    
Sure, I'll be doing that. But I can't practise what I don't know in the first place. –  Peter Boughton Oct 9 '10 at 19:45
    
But you can't know what you don't practice. Reading Van Roy might be a good academic exercise, but actually writing programs in Prolog (logic), Haskell (functional), Erlang (concurrent) and Smalltalk (OO) will teach you much more. –  Frank Shearar Oct 10 '10 at 7:46
add comment

4 Answers

Be sure to check this map, from the book Concepts, Techniques, and Models of Computer Programming:

alt text

share|improve this answer
1  
Yeah, seen that, but - although it's pretty - it doesn't really tell me anything. It seems that it might help clarify other explanations, but on its own it's not much use. Might be the book (which the chart is inspired by; not directly from) is worth reading... will be investigating that. –  Peter Boughton Oct 9 '10 at 20:25
add comment

The Structure and Interpretation of Computer Programs. You can get Abelson and Sussman's lectures on the first edition here and UC Berkeley's paradigms course with SICP here. I've also heard very good things about Concepts, Techniques, and Models of Computer Programming by Peter Van Roy and Seif Haridi, but I haven't had a chance to go through it yet.

share|improve this answer
add comment

I know this isn't exactly the answer you're looking for, but as ChaosPandion said, you'd really be better off just picking a language using a paradigm you don't know and using it.

By way of example, I read about functional programming for a while in school, but I never really got what is was about and what elements of it were present in other languages until I taught myself Lisp and did a few small projects in it.

share|improve this answer
1  
And yet, had you learnt Lisp without first having that prior knowledge of functional programming, would you still have 'got' it? Having a context before learning something helps a great deal more than just wading in. Which is why I want to ensure I have a solid grounding in all the paradigms before considering which ones interest me and which different implementations (languages) to play with. –  Peter Boughton Oct 9 '10 at 21:50
    
Actually, along this line, it might be valuable to pick a language you like and google for "Paradigm-X in Language-Y". For example, you can find numerous tutorials on doing functional programming in C# or JavaScript, and JS even has a project (Joose) that adds a complete object system with code-contracts. Seeing how the principles apply in a language not designed around it can be constructive in seeing what the actual core of the paradigm is about, especially because you hit the limits of the language for that paradigm and see why specialized languages exist. –  CodexArcanum Nov 10 '10 at 15:44
add comment

I don't think you're going to be able to find a book that discusses the various paradigms without using any particular implementation. If you do, it's likely to be filled with complex mathematical notation because, really, all programming languages (especially the non-imperative ones) are just math.

A new book just came out called Seven Languages in Seven Weeks which introduces you to seven programming languages that cover a good portion of the spectrum. You probably won't be able to "get" any particular language until you've used it for at least a few months, but this may be a good start to get you interested in a couple of them.

Other programming language books stay "language agnostic" by using only one language to illustrate the concepts in the others. These tend to use the functional languages such as Lisp, Scheme, Haskell, and ML because their syntax semantics can be re-programmed to act like object-oriented, declarative, or imperative languages.

share|improve this answer
    
That book sounded interesting initially, but after reading the sample chapters ... well, I find myself wanting to whack the author round the head. :S It's not what I'm after anyway - I'm not opposed to code in a particular language being used as an example, once it's not as a main focus. (What I'm trying to avoid is people saying "learn Lisp for FP" or "learn Smalltalk for OOP", and so on.) –  Peter Boughton Oct 9 '10 at 23:27
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.