– Act with prudence :
No matter how comfortable a schedule looks at the beginning of an iteration, you can’t avoid being under pressure some of the time. If you find yourself having to choose between “doing it right” and “doing it quick,” it is often appealing to “do it quick” with the understanding that you’ll come back and fix it later. When you make this promise to yourself, your team, and your customer, you mean it
– Don’t be cute with your test data :
when writing any text in your code whether comments, logging, dialogs, or test data always ask yourself how it will look if it becomes public. It will save some red faces all around . you will save troubles like a customer having a welcome message that says ” hello , moron !”
– Encapsulate behavior not just state :
don’t break the encapsulation, and use the power of your programming language to maintain it.
– Fulfill your ambitions with the open source :
There are thousands of open source projects out there, many of them quite active, which offer you any kind of software development experience you could want. If you love the idea of developing operating systems, go help with one of the dozen operating system projects.
– Know well more than two programming languages :
Every programmer starts with one programming language. That language has a dominating effect on the way that programmer thinks about software . No matter how many years of experience the programmer gets using that language, if she stays with that language, she will know only that language . A one-language programmer is constrained in her thinking by that language . A programmer who learns a second language will be challenged, especially if that language has a different computational model than the first .
– Make interfaces easy to use correctly and hard to use incorrectly :
One of the most common tasks in software development is interfacespecification. Interfaces occur at the highest level of abstraction (user inter-faces), at the lowest (function interfaces), and at levels in between (class inter-faces, library interfaces, etc.). Regardless of whether you work with end usersto specify how they’ll interact with a system, collaborate with developers to specify an API, or declare functions private to a class, interface design is animportant part of your job. If you do it well, your interfaces will be a pleasureto use and will boost others’ productivity. If you do it poorly, your interfaceswill be a source of frustration and errors.