Classic Coding Tome Updated
Tim Halloran writes "Steve McConnell has updated his book 'Code Complete' a 960 page language agnostic tome about code construction. This is the best book of its type I've ever encountered and the update is welcome (as the first edition is over a decade old...I suddenly feel as I'm getting old :-). More information, and a sample chapter are here. As a programming team lead I have provided this book to team members to get them critically thinking about how they write code."
It's published by Microsoft Press. BFD. Read up on the author, then come back and tell us he's not eminently qualified to write a book on the subject. Of course, this is an update, the original from 1993 has already been widely acclaimed for a decade so you're going to have to come up with a more convincing argument than "d00d, M$ iz teh sux0r!"
To me, the book looks like a big disappointment. I downloaded Chapter 5. There are numerous obvious statements like these:
Design Is About Tradeoffs and Priorities
And:
How to Attack Complexity
Overly costly, ineffective designs arise from three sources:
A complex solution to a simple problem
A simple, incorrect solution to a complex problem
An inappropriate, complex solution to a complex problem
If I were you I would just try to write as much code as possible. Studying CS theory will make you good at CS theory. Studying project management will make you good a project management. Continuing to write more code and possibly learn more programming paradigms (logic, functional, etc.) will make you a better coder.
If you wanted the body of an olympic swimmer would you practice basketball or swimming?
Maybe you are asking the wrong question. Maybe you want ot be good at proj. man. or theoretical CS.
Getting back to books, I've never read a book on general programming technique that was any good. You have to be the sort of individual who doesn't learn from mistakes if you get anything useful out of those books. The only computer book passage that floated my boat was the intro to the Gödel language book. Basically, it was an apology for logic programming that hit all the right buttons for me and convinced me that social proof was saying Turing/von Neumann but my heart was saying Prolog. Two years later I'm only now planning to wean my income off C and PowerPC assembler and start problem solving with Prolog.
I can also strongly recommend McConnell's Software Project Survival Guide (amazon link). I think all software team leaders and project managers should read this book as it packs a lot into a small number of pages. Amazon link: Software Project Survival Guide
The old version of this book was used as a textbook for CS 240 at BYU, which is an advanced programming /slash/ C++ course.
I find it great that some professor is actually teaching coding standards. Imagine my surprise of discovering JavaDoc commenting after haven taken 3 Java classes and not one of them ever mentioned JavaDoc.
I haven't taken CS 240 yet, but I plan to this fall. I already talked to the professor about the textbooks he plans to use, and he said that if they came out with the new edition (which they did) then he would probably use the new edition for class. This means though that current students with the book now will have a hard time selling the book, and future students will have a harder time finding used book deals on it. I guess I should start saving my college student pennies.
This book is the best programming book I have ever read.
;-)
I believe that my own productivity increased by about 50% at least after reading it.
Code Complete answers many of the questions that nag the working programmer, and busts through much of the BS that people spout about programming.
The book covers a huge range of material, from code formatting and style, to how to build teams. Clue: don't put all the programmers no one else wants in a team to build an important project
The writing style is friendly and peppered with hilarious case studies such as 'Escape from Gilligan's Island', where the same mistakes happen over and over again.
Everyone who has worked on large programming projects will recognise some of these anecdotes. In one case I watched from start to finish as an 'experienced consultant' ruined a perfectly good project with secrecy over his bad and undocumented code. All the warning signs were there. If the manager had read this book, a programming catastrophe might have been averted.
I have bought this book a few times, and given it to management in-duh-viduals to read. Sometimes it helped.
If you are a programmer or a manager, or just interested in software, buy this book and read it. I guarantee you will learn something.
-- "It's not stalking if you're married!" My Wife.
Is UML useful?
It depends on what you mean by "useful." If you're working in a shop that requires UML, and you need to communicate with people, then it's useful. The big problem with UML is that a truly bad design looks just the same as a good design. A much better test of the quality of design is to describe it in English. If it can't be done easily, then it's probably a bad design.
How about books on secure programming?
I haven't met any of these that I like. There are lots that tell how to secure against various exploits, but few that explain the basics.
Are design patterns a good tool?
They aren't a tool. They are an attempt at establishing a common vocabulary. The worst thing you can do with a design pattern is think, "That's cool! I'll implement it."
Will learning things like assembly or Lisp teach me anything useful?
Yes, definitely. Both will make you a better programmer no matter what language you use. Assembly because it gives you a feel for what a compiler can do directly and what takes work, and LISP because it encourages a way of looking at tasks that you probably haven't thought of.
Donald Knuth's The Art of Computer Programming should be in your library, even if you don't read it cover-to-cover. Donald Norman's The Design of Everyday Things should also be there. And, of course, the revised edition of The Mythical Man-Month
The thing is that most of the ideas in programming are quite old, but they get repackaged as new things. Once you understand the old stuff, the new stuff all falls into place.
There are a few invaluable things that CS can give you. Algorithms, for instance. There exist plenty of classical solutions to everyday problems that most modern programmers just don't know about. Proving the complexity of algorithms is also incredibly useful. You won't prove every algorithm you produce in your life, but it will give you a feel for it. Graph theory is also quite useful.