Last week I gave a talk at the Orlando .NET User Group on Practical Software Craftsmanship – 12 Practices to be a Better Developer. Most of these 12 are just things I have learned over my years of development. I promised I would put links to the slides and resources from my talk. They are in no particular order and I don’t claim they are nothing more than fortune cookie wisdom . I will try and write more about these in the future.
The 12 Practices
- Source Control – If you don’t store your code in source control, you’re putting your company at risk.
- Test-Driven Development produces higher-quality code. Behavior Driven Design – Behavior is documentation for other developers and users.
- Build Systems – Building is more than just compiling code.
- Continuous Integration – Check in early and often.
- Real Time Code Review – Two heads are better than one.
- Refactoring: Easy as red light green light.
- Read Code – “You don’t become a better writer by just writing.” Scott Hanselman
- Code In Increments – Real programmers work for hours and hours straight, without a break, without even looking up. Don’t break your ﬂow to stop and compile: just keep typing!
- Sharpen your skills by learning a new language.
- Learn SOLID
- Single Responsibility Principle – There should never be more than one reason for a class to change.
- Open Closed Principle – A class should be open for extension but closed for modification.
- Liscov Substitution Principle – Subtypes must be substitutable for their base types.
- Interface Segregation Principle – Clients should not be forced to depend upon interfaces that they do not use.
- Dependency Inversion Principle – High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.
- Know when to unlearn. The ways you learned when you ﬁrst started are clearly the best ways. Not much has changed since then, really.
- Be a Mentor
These are great places to pick up some of the key concepts: