The Psychology of Computer Programming
In many ways, this is the book that started the "meta" trend in computer science. Most books that discuss the mental side of CS have their roots here. Unfortunately, that also means that you've heard it all before.
BackgroundLong time, no talk! Unfortunately, my reading schedule didn't exactly go as planned (for various and sundry reasons, like slackness), and thus my reviews have not been coming as fast and furious as before. It's good to be back in the saddle again, however, dispensing syrup and vitriol as required.
What's the book about?The original preface to POCP says it best: "to trigger the beginning of a new field of study: computer programming as a human activity...." Before the original edition, most books viewed programming in a mechanical fashion, in terms of how better to turn a crank. Weinberg, however, deliberately took a different approach: programming is done by people, as part of a thought process, and should be studied as any other thought process. This book focuses on the people aspects of programming, and how people think about doing programming. It discusses how to study programming, how people work together on programming projects, how people program alone, and what tools people use to get their work done. In short, it discusses how people program, not how code is best churned out.
What's Good?Even though this is the original book on programming psychology, Weinberg managed to hit most of the important facets of the subject. Now, 25 years and many books later, he has come back to the subject. The book itself consists of all of the original work, annotated with chapter-ending notes and reflections. In other words, you read the original chapter, and then Weinberg's thoughts on it. This is not unlike the anniversary edition of Mythical Man-Month, although there is much less new material here. As with most meta-books, the ideas have aged well. People don't change much over 25 years, even though their surroundings do. Egoless programming, the passing around of code for peer analysis, was pioneered in the original work, proven over the years, and still needs to be implemented in more ways. Generally, Weinberg introduces the entire field of computer psychology, laying the groundwork for an entire area of research.
What's Bad?Well, to be perfectly honest, I didn't enjoy the book that much, at least in terms of enjoying the reading. I feel that I learned some things, but I don't think the book has aged well in certain areas, and additionally I felt that much of the material was covered elsewhere. MMM taught me things that I had never thought of before, and in fact have not been well covered elsewhere since then. Plus, there was a huge section analyzing the entire book. TPOCP, on the other hand, has pages and pages devoted to annoying PL/I details, while adding only a few blurbs here and there. Note that the ideas themselves are still important, there's just a lot to wade through to get to them. In addition, I think this material has been well covered by books such as Peopleware and others. The book is enough of a classic that nothing can be said to be "bad," but I question if it hasn't been superceded.
What's In It For Us?It's always important to look at we do on a metaphysical level. Computer science and software engineering are some of the most non-physical work areas known, and because of that can be difficult to analyze. Whether you choose this book, or one of the others mentioned above, do read up on how people deal with programming. It's just as important, if not more so, than language syntax or new IDE's.
Purchase the book over at Computer Literacy.
Preface to the Silver Anniversary Edition
Original
Preface
Comments on the Original Preface
Suggestions for
Course Use
Part 1: Programming as Human Performance
- Reading Programs
- What Makes a Good Program?
- How Can We Study Programming?
Part 2: Programming as a Social Activity - The Programming Group
- The Programming Team
- The Programming Project
Part 3: Programming as an Individual Activity - Variations in the Programming Task
- Personality Factors
- Intelligence, or Problem-Solving Ability
- Motivation, Training, and Experience
Part 4: Programming Tools - Programming Languages
- Some Principles for Programming Language Design
- Other Programming Tools
Part 5: Epilogue
Index
The basic problem is that managers don't care. They want the results they've promised at the widest possible profit margin. They don't care if it's possible, or if it's the best long term solution.
Look at most IDEs -- they're focused on getting clickable GUI controls on the screen. Testing? HAH! Testing is for those "ivory tower academics", right? No one cares if the code works.
It also doesn't help that most managers haven't heard of titles like TPOCP, MMM, and Peopleware. They are under the impression that managing a team of programmers is like managing a McDonald's.
[Bitter? Me? No!]
I haven't read the anniversary edition, only the original. However, I think one of the most striking things about this book is how relevant it still is. Most software organizations still do not practice the approaches suggested in this 25 year old book: egoless programming, code reviews, etc.
The software industry still has very little understanding of how software is actually created. That contributes to the constant schedule slipping and buggy releases.
This book could have helped to solve the problem. Unfortunately, it turned out to be just a voice in the wilderness. Perhaps this new edition will help remind people that the problems of 25 years ago are still with us today.