The best way to prepare [to be a programmer] is to write programs, and to study great programs that other people have written. In my case, I went to the garbage cans at the Computer Science Center and I fished out listings of their operating systems.
My first program taught me a lot about the errors that I was going to be making in the future, and also about how to find errors. That's sort of the story of my life, making errors and trying to recover from them. I try to get things correct. I probably obsess about not making too many mistakes.
Programmers are not to be measured by their ingenuity and their logic but by the completeness of their case analysis.
If you're as clever as you can be when you write it, how will you ever debug it?
It's probably fair to say that the ratio of time our Connector developers spend in the debugger versus the Emacs buffer is higher than with most software.
Real programmers can write assembly code in any language.
It's hard enough to find an error in your code when you're looking for it; it's even harder when you've assumed your code is error-free.
Adjusting to the requirement for perfection is, I think, the most difficult part of learning to program.
Accidental stacks considered harmful.
The most effective debugging tool is still careful thought, coupled with judiciously placed print statements.
There is an incredibly large spectrum of possible causes for program bugs, including simple typos, "thinkos," hidden limitations of underlying abstractions, and outright bugs in abstractions or their implementation.
If you want more effective programmers, you will discover that they should not waste their time debugging, they should not introduce the bugs to start with.
It is a shame that homebrew development can't be officially sanctioned and supported, because it would be a wonderful platform for a modern generation of programmers to be able to get a real feel for low level design work, to be contrasted with the high level web and application work that so many entry level people start with.
All real programs contain errors until proved otherwise which is impossible.