K&R is a book that influenced me a lot, but its most important lesson is not laid down very explicitly. IMHO, this lesson is its notion of programming style: terse, small, efficient. It permeates the whole book and C/Unix design but the book is not explicitly about it.
Unfortunately it is a lost lesson. Today, programming became just the act of gluing bloated frameworks, libraries and doing severs configuration. The small, simple and powerful K&R approach is totally lost in a world dominated by bloatware (e.g: Java/.Net/Boost).
I firmly believe that every programmer should be able to read and write C to some extent, and to learn it one must read K&R. So, yes, I agree that it is also one of the books that every programmer should read.
What does learning C provide that other programming languages (majority of which have some basis in C) don't teach you?
Memory management (allocation, pointers, etc)?
Pipes and buffers?
They are present in other languages, and one could argue with memory management why 'every' programmer must learn those techniques even if they are never really applicable to them.
I'm really trying to think back to my C days (I haven't done it in a long time) as to why it is so important to know? What is unique about it?
I think I am a better programmer for having used C.
C is interesting because like php it is very easy to end up with an unmanageable code base (but of course C is a lot more powerful than php).
I learnt a lot from good C code, the best C libs I have seen use a pseudo version of objects. They create a data structure to hold state and pass that as the first parameter to each function that can be used on it. Once I got my head around that I found I had a better understanding of the concept of object orientated programming.
One good reason is that by writing algorithms and data structures in C, you can see them in all the detail, see how the memory is laid out and how it's managed, and understand their costs and benefits.
I used ANSI C to implement most of the algorithms we studied at the university and I can say that it helped me understand them better.
Plus, an understanding of what happens on the lower level can be quite handy when debugging some software written in a more high-level language.
C and some limited amount of assembly are what drive most of the electronics that surround you; most of the of "smart" devices in your house, car and pocket contain large amounts of code written in C. The phone infrastructure you use, the traffic signals, the network you get news from, the browser you're using right now? C.
Scripting languages and bytecode-driven languages? Their interpreters and jitters are likely written in C.
There are exceptions. I understand that some Java-based systems are built in Java, all the way to the metal. Apple was a Pascal shop until it turned to C in the late 80s. By and large these are systems on the fringe, and the bulk of the heavy lifting today is done in C.
Same reason you can't be a mechanical engineer without having taken a shop class.
You can sit in front a CAD and FEM package all day - but if you don't appreciate how the things will actually be built you aren't going to be a really good engineer.
I often recommend K&R, even to those who aren't primarily learning C.