Looking for a practical standards course
Archive - Originally posted on "The Horse's Mouth" - 2009-08-05 06:01:13 - Graham EllisI'm a great believer in coding standards. In well commented code. In a good choice of variable names, of code re-use, and of thinking before you write. There are points which I stress on every course, even if the majority of the time I spend is on the actual language. So I should not have been surprised to have been asked if I could provide a "Good Practice Course" along the lines of the specification below.
I applaud the customer who has asked, I think it will be very worthwhile for them ... BUT I myself don't have the training / knowledge of the formal skills and more academic issues (nor course notes) to deliver, and I have "no bid". I'm very happy to overview / spend a day on these topics. But not a week. Which brought the question "do you know anyone who CAN help?". I know this gets read / found - please get in touch (graham@wellho.net) if you can help - I'll pass on your details and let you talk direct.
Source Code Control
Distributed Version Control (DVC)
[Setup, users, locks, branches, logs, merges]
Testing
TATFT (Test All The $&?#+[\] Time)
BDD/TDD (Behaviour Driven Development / Test Driven Deveopment)
Unit tests
Continuous Integration
Naming conventions
[variables, functions, filenames]
Code Inspections
Design
Unified Modelling Language (UML)
Design Patterns
[Factory, Memoization, Facade, Singleton, Strategy]
MVC (Model, View, Controller)
Documentation
Design documents
Code Structure
DRY principle (Don't repeat yourself)
Code smells
WTF/s
Demeter's Laws
Running Well
Serviceability and efficiency
Analysis of Algorithms
[IO bound, Memory bound, Performance analyisis]
Code to handle code
Metaprogramming
2nd order functions
Continuations
Convention over configuration
DSL (Domain Specific Languages)
I would personally add the following to a genaral programming techniques course:
User support and user documentation. Team communications and co-ordination. WIBNIF (Wouldn't it be nice if). Extreme and pair programming. Library design and maintenance. Backup and contingency. Requirement specification and portability. Security of code - legal and abuse prevention. Inherently stable code. Algorithm design.
Final note - the examples illustrating this course should be in an appropriate Open Source language - I am happy to talk with anyone who's interested in delivering the course about where it would be (long way from Melksham) when it's needed (very soon!) and which language it's in.