Structured Programming это классика программирования. Несмотря на то, что эта книга опубликована 30 лет назад, её стоит прочесть! Есть русское издание 1975 года, "Структурнoe программированиe"
Dijkstra, as usual, delivers a great treatise in his part of the book. Hoare's chapter on data structuring covers much of the same ground that Stepanov does in his various writings; but he does so about forty years earlier. I wasn't familiar with much of Hoare's work, with the exception of Communicating Sequential Processes, so now I will make a significant effort to fix that.
Dahl isn't as famous as his various coworkers. His chapter is on Simula and early versions of object oriented programming. Simula also had coroutines in the language, and the discussion on using them was enlightening. I will start digging to see if I can find anything else by Dahl. Overall a great book, very much applicable to the programming world forty years after publication.
To paraphrase Tony Hoare: this book is not only an improvement on most of its predecessors, but also on nearly all its successors. I'm exaggerating, but only slightly.
Of the three chapters, I enjoyed Dijkstra's ---the first one--- the most. Despite his sometimes baroque prose, the technical content is wonderful. It's not only a lucid and honest look at what it means to be a programmer, but also a brilliant effort to make programming more systematic and manageable. While we take for granted most of the ideas in Dijkstra's monograph, a good deal of them were new and very controversial at the time (some still are).
While admittedly small, the sample programs are some of the best examples of incremental development I've seen: from problem analysis, through incremental refinement and judicious use of abstraction, to finished programs. That being said, Dijkstra's method of guiding the reader through the incremental refinement of the program can end up being confusing and hard to follow. Knuth's literate programming is a welcome refinement.
The second chapter, Tony Hoare's, is a catalogue of (mostly) elementary data structures. The systematic approach and breadth of coverage makes it a worthwhile read. As another reviewer noted, this can be seen as a precursor to Stepanov's later Generic Programming. The hypothetical programming language Hoare uses for his examples feels strikingly contemporary. Keep in mind that this is the late 60s/early 70s. Fortran still insists on guessing the types from the first letter of the identifier and C is probably still called B.
The third and final chapter is a monograph on object oriented programming in Simula 67. It's not called as such, but that's what it is. You can witness the genesis of OOP: classes, instances, inheritance, mixins, modules, pass by reference, garbage collection, it's all there. And on top of all that, Simula 67 had first class support for both symmetric and asymmetric coroutines.
Yes, the book has its shortcomings, viz. Dijkstra's occasionally baroque English; Hoare's somewhat hand wavy treatment of hairier aspects of data structure representation which are either summarily dealt with in a couple of sentences ---where Knuth gives them considerably more space--- or left as exercises to the reader; and the somewhat haphazard nature of Dahl's monograph. But these issues don't detract from what this book fundamentally is: groundbreaking. It lays the foundations for the next half a decade of computing.
A 3 course meal: the entree was interesting, the main course was outstanding and the desert pretty useless.
Now reading a tech book from 1972 could be seen as pretty perverse but it is surprising just how much the subjects of this book are identifiably relevant even today.
Dijkstra's piece suffered from his struggle with English - a record use of the word viz.! and has been arguably the most assimilated in today's programming world.
Hoare's piece was really eye opening. His definition of an array was like a shock of cold water - that something so mundane and taken for granted could be treated as a mathematical object like a mapping function. But the best bit had to be his use of formal expressions in defining the exam timetable problem.. Though the actual axiomisation at the end - his central theses - left me a bit cold. In no way was this easier than the alternatives.
Dahl's bit was probably the one most overtaken by time - object-orientation without much of the theoretical underpinnings we take for granted today.
All in all a worthwhile exercise.
This entire review has been hidden because of spoilers.
The only technical book that made me sad. Sad due to the lack of progress in the last 40 years.
The book is a very introspective into computer science and the approach the authors took to figure out the things they did. A very rigorous approach that people today do not necessarily do.
The book is from 1972. Is split into 3 sections by three different authors: 1) Dijkstra: covers programming with functions, why goto is bad. Most importantly how to analyse how you program, and what considerations to take into account. 2) Hoare: covers structures, enumerations, flags enumerations, unions, strings, AST, sparse arrays, hashsets, and garbage collection. High level understanding and different ways to store them down to the bits. 3) Dahl and Hoare: covers classes, inheritance, yield returns (C# term), round robin scheduling, trees.
This entire review has been hidden because of spoilers.
The first part - Dijkstra's Structured Programming - still has, I think, a lot of value from a modern programming perspective. The other two haven't fared as well, in part because the ideas in them have become incorporated into mainstream languages and platforms, so they're extremely familiar.