CDN$ 73.76
  • List Price: CDN$ 89.04
  • You Save: CDN$ 15.28 (17%)
Only 3 left in stock (more on the way).
Ships from and sold by Amazon.ca.
Gift-wrap available.
Quantity:1
Have one to sell?
Flip to back Flip to front
Listen Playing... Paused   You're listening to a sample of the Audible audio edition.
Learn more
See this image

Concepts, Techniques, and Models of Computer Programming Hardcover – Feb 20 2004


See all 2 formats and editions Hide other formats and editions
Amazon Price New from Used from
Kindle Edition
"Please retry"
Hardcover
"Please retry"
CDN$ 73.76
CDN$ 73.76 CDN$ 34.96

Best Books of 2014
Unruly Places, Alastair Bonnett’s tour of the world’s most unlikely micro-nations, moving villages, secret cities, and no man’s lands, is our #1 pick for 2014. See all

Special Offers and Product Promotions

  • Join Amazon Student in Canada


Customers Who Bought This Item Also Bought


Product Details

  • Hardcover: 936 pages
  • Publisher: The MIT Press; 1 edition (Feb. 20 2004)
  • Language: English
  • ISBN-10: 0262220695
  • ISBN-13: 978-0262220699
  • Product Dimensions: 20.3 x 4.7 x 25.4 cm
  • Shipping Weight: 2 Kg
  • Average Customer Review: 5.0 out of 5 stars  See all reviews (2 customer reviews)
  • Amazon Bestsellers Rank: #79,324 in Books (See Top 100 in Books)

Product Description

Review

This book follows in the fine tradition of Abelson/Sussman and Kamin's book on interpreters, but goes well beyond them, covering functional and Smalltalk-like languages as well as more advanced concepts in concurrent programming, distributed programming, and some of the finer points of C++ and Java.

(Peter Norvig, Google Inc.)

In almost 20 years since Abelson and Sussman revolutionized the teaching of computer science with their Structure and Interpretation of Computer Programs, this is the first book I've seen that focuses on big ideas and multiple paradigms, as SICP does, but chooses a very different core model (declarative programming). I wouldn't have made all the choices Van Roy and Haridi have made, but I learned a lot from reading this book, and I hope it gets a wide audience.

(Brian Harvey, Lecturer, Computer Science Division, University of California, Berkeley)

About the Author

Peter Van Roy is Professor in the Department of Computing Science and Engineering at Université catholique de Louvain, at Louvain-la-Neuve, Belgium.

Seif Haridi is Professor of Computer Systems in the Department of Microelectronics and Information Technology at the Royal Institute of Technology, Sweden, and Chief Scientific Advisor of the Swedish Institute of Computer Science.

Inside This Book (Learn More)
Browse Sample Pages
Front Cover | Copyright | Table of Contents | Excerpt | Index
Search inside this book:

Customer Reviews

5.0 out of 5 stars
5 star
2
4 star
0
3 star
0
2 star
0
1 star
0
See both customer reviews
Share your thoughts with other customers

Most helpful customer reviews

2 of 2 people found the following review helpful By ROBERT B CALCO on March 22 2004
Format: Hardcover
This book is a real mind-bender that illuminates paths for computer design at both the conceptual and practical levels I'd never travelled down before.
The notion that one language can be so flexible as to accomodate both the syntax and semantics of so many different computational models, or paradigms, took some unlearning of bad programming practice before its power, elegance and potential began to sink in.
It also explodes the myth that "pure" languages -- i.e., pure OO, or pure functional, etc., languages--have some kind of innate advantage over so-called "hybrid" languages. In fact, "hybrid" (or as the authors would prefer to call them, "multi-paradigm") languages come out of this book looking even more powerful than the "pure" ones, insofar as they allow the programmer to use the right model for each task, instead of trying to make OO fit, for instance, in places where it doesn't fit so well.
The idea here is that each computational model represents a completely different way of approaching a domain problem. Used by themselves, each has its niche. For instance, everybody knows OO is good for domain modelling and busines objects. Prolog-type languages are good for applications that need to apply rules over a set of data. Functional languages are great in mathematical applications. And so on. What is new here is that one can program in an environment in which all of these tools are available in a single core semantics that seamlessly weaves these computational models into a complementary whole. Used together judiciously, with an eye toward program correctness, they make things possible that have long been considered very hard -- for instance, constraint programming.
Read more ›
Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback. If this review is inappropriate, please let us know.
Sorry, we failed to record your vote. Please try again.
Format: Hardcover
In 1976 Edsger W. Dijkstra elevated programming to an intellectual discipline and taught us how to reason about what we now call "imperative programming". To illustrate his methodology Dijkstra solved challenging problems with unforgetably beautiful, yet simple and powerful example programs that are as relevant today as they were forty years ago. Since then, programming has splintered into paradigms, methodologies and suffers from baroqueness, perpetuation of obsolete conventions and other practices that restrict the full expressive power of programming "as a whole".
In 2004 Van Roy and Seif Haridi have given us a glimpse of what programming can be like without unnecessary restrictions imposed by paradigms and other heavy baggage caused by politics, ideology and historical inertia. Using the remarkably mature implementation of the Mozart system and the conceptually clean, simple, elegant, yet powerful programming language Oz, Van Roy and Haridi show us how dogmatic heavy baggage falls away when we can look at programming as a whole and choose the best programming concepts that the solution of a problem requires. Such a program becomes simpler, more elegant and therefore less error prone than an equivalent solution that is restricted to a specific paradigm.
Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback. If this review is inappropriate, please let us know.
Sorry, we failed to record your vote. Please try again.

Most Helpful Customer Reviews on Amazon.com (beta)

Amazon.com: 11 reviews
108 of 110 people found the following review helpful
Will change how you think about program design completely March 22 2004
By ROBERT B CALCO - Published on Amazon.com
Format: Hardcover
This book is a real mind-bender that illuminates paths for computer design at both the conceptual and practical levels I'd never travelled down before.
The notion that one language can be so flexible as to accomodate both the syntax and semantics of so many different computational models, or paradigms, took some unlearning of bad programming practice before its power, elegance and potential began to sink in.
It also explodes the myth that "pure" languages -- i.e., pure OO, or pure functional, etc., languages--have some kind of innate advantage over so-called "hybrid" languages. In fact, "hybrid" (or as the authors would prefer to call them, "multi-paradigm") languages come out of this book looking even more powerful than the "pure" ones, insofar as they allow the programmer to use the right model for each task, instead of trying to make OO fit, for instance, in places where it doesn't fit so well.
The idea here is that each computational model represents a completely different way of approaching a domain problem. Used by themselves, each has its niche. For instance, everybody knows OO is good for domain modelling and busines objects. Prolog-type languages are good for applications that need to apply rules over a set of data. Functional languages are great in mathematical applications. And so on. What is new here is that one can program in an environment in which all of these tools are available in a single core semantics that seamlessly weaves these computational models into a complementary whole. Used together judiciously, with an eye toward program correctness, they make things possible that have long been considered very hard -- for instance, constraint programming.
Mozart-Oz, the underlying technology, is a strange language when you first look at it. It's hard at first to get used to concepts like "higher-order programming" or "by need execution" or "lazy execution" if you are the programming grunt in the field of most modern IT shops, forced by bosses to code in your standard fare -- Java, C#, VB, etc. If OO in Java is like the hammer that makes everything look like a nail, in Mozart-Oz you have a language that is like walking into Ace hardware store, a swiss army knife of a language (conceptually speaking) that challenges you to become a highly skill code craftsman, not just a programmer.
But, if only for the personal growth you will experience grappling with the concepts in this book, I recommend it very highly even to "non academic" programmers (like myself) as well as to any advanced student of computer science. It may be painful, you may scratch your head in places where the concepts just seemed to leap over your cranium, but if you are patient, do the exercises (and at least think about what it would take to tackle some of the research projects), you will grow.
Unfortunately, you may find the languages you work on to be rather confining, and maybe even boring, after you get a whiff of what multi-paradigm programming can do. More likely, however, is that you will grasp very clearly how the language you code in today works, and that can only make you a better software engineer. So do it-buy this book!
54 of 54 people found the following review helpful
Integrated view of programming Oct. 22 2005
By A. McInnes - Published on Amazon.com
Format: Hardcover
Modern programming has become fragmented into a variety of computational models (OO, functional, imperative, etc), and a variety of languages supporting those computational models. Neophyte programmers are typically introduced to just one of these models, and only learn the other, "less natural" models later. With CTM, Van Roy and Haridi take an alternative approach. They teach programming as an integrated discipline, and demonstrate the underlying links between the different computational models. By the time the reader is done with the book they will have a much better understanding of the discipline of programming, and will be well-equipped to decide which model is best suited to the task at hand. Reading CTM is an extremely worthwhile experience for anyone wishing to achieve a deep understanding of the art and science of programming.

CTM has been compared to Abelson and Sussman's "Structure and Interpretation of Computer Programs". They are similar, in the sense that they both provide the reader with a deeper understanding of programming than most programming texts. However, the content of both books is quite different, and it is definitely worth reading both.

Another book that I feel makes a good companion to CTM is Hoare's (sadly hard to come by) "Unifying Theories of Programming". It covers a lot of the same material as CTM, but in a much more theoretical sense. Where CTM is concerned with practical programming, Hoare is concerned with mathematical underpinnings. The two complement each other nicely.
43 of 47 people found the following review helpful
The Power of Programming Without Dogmatic Restraints March 2 2004
By Juris Reinfelds - Published on Amazon.com
Format: Hardcover
In 1976 Edsger W. Dijkstra elevated programming to an intellectual discipline and taught us how to reason about what we now call "imperative programming". To illustrate his methodology Dijkstra solved challenging problems with unforgetably beautiful, yet simple and powerful example programs that are as relevant today as they were forty years ago. Since then, programming has splintered into paradigms, methodologies and suffers from baroqueness, perpetuation of obsolete conventions and other practices that restrict the full expressive power of programming "as a whole".
In 2004 Van Roy and Seif Haridi have given us a glimpse of what programming can be like without unnecessary restrictions imposed by paradigms and other heavy baggage caused by politics, ideology and historical inertia. Using the remarkably mature implementation of the Mozart system and the conceptually clean, simple, elegant, yet powerful programming language Oz, Van Roy and Haridi show us how dogmatic heavy baggage falls away when we can look at programming as a whole and choose the best programming concepts that the solution of a problem requires. Such a program becomes simpler, more elegant and therefore less error prone than an equivalent solution that is restricted to a specific paradigm.
18 of 18 people found the following review helpful
An enriching read about program design and language features June 10 2010
By Tahir Hashmi - Published on Amazon.com
Format: Hardcover
Ever wondered why it takes so long to pick up your first programming language, when it's C++ or Java? Ever wondered why Object-oriented Programming feels so difficult to get right, even after years of experience?

This books is an amazing study of various programming paradigms (or models, as the authors call them). It starts with the most minimal features required in a programming language, discusses their impact on how you write small programs and then moves on to bigger concepts.

Until you've read this book, you might not realise that multi-threaded object-oriented programming is such a powerful model that it can be used to easily write a lot of real-world applications but this power also makes it tough to master the model because of the many ways you can abuse it. The more powerful a model gets, the more difficult it becomes to verify its correctness without additional tools like debuggers, profilers, etc.

Most importantly, this book can teach you two important things:

* Multi-paradigm programming is more natural (i.e. easier to understand and model real-world concepts in) than 'pure' programming
* Use the least powerful model that can solve the problem at hand naturally (i.e. you don't end up writing a lot of code to work around the model's limitations)

A third thing that they don't enumerate but imply quite obviously is a program design methodology that involves writing large parts of the application using a less powerful and more deterministic model, while harnessing the power of more capable models only for those few components of the application that absolutely need them.

The popular "shared-nothing" architecture for web applications, backed by a concurrent shared-state store (RDBMS, mostly) is one example of such an approach.

The only shortcomings of this book that I found were the rather difficult installation of Mozart programming environment used to illustrate the book's concepts, and IMHO a shortage of sample problems that illustrated the usage of more advanced models.
11 of 11 people found the following review helpful
An eye opener, even when I thought I knew it all Aug. 22 2011
By Lyle Kopnicky - Published on Amazon.com
Format: Hardcover Verified Purchase
I love this book so much, I'm buying it again. After having spent years reading it on and off, and working every problem, I've managed to wear out the spine. Since I intend to continue to work with Oz, the fascinating language that is used as the main example, I'm going to get myself a fresh copy!

Before I read this book, I had already been blown away by Scheme, C++, ML, and Haskell. I had studied Java, C#, Ruby, Perl, and a smattering of Lisp, Prolog, Erlang, and historical languages. I thought I knew just about everything about programming languages, and just wanted to learn more about constraint programming. But I found that every chapter of this book, even the ones on paradigms I thought I knew well, was fascinating.

Much of the book is concerned with dataflow programming, which is a refreshing and clever addition to functional programming that works very well with concurrency. I learned a lot about different forms of concurrency, and the tradeoffs between analyzability and expressiveness. The exercises on transactions were illuminating, and relational (logic) programming suddenly makes a lot more sense.

My only regret is that the chapter on constraint programming is a bare introduction. After the thorough coverage of other topics, I was left wanting to know more.

I will also point out that some of the code is a bit terse, doing a little too much in too little space, with too-simple variable names, often single letters. I suspect this may have been done to fit code samples on the page. I'd like to see longer, more clearly explained versions posted on the web site. The authors were ambitions with the scope of the book, so it's hard to imagine cramming in even more careful explanations. The reader will be rewarded by exploring the exercises, and asking questions on the mailing list.


Feedback