Writing good methods/functions: * Naming * Give descriptive names that say exactly what the routine does (usually verb-noun) * The name should include or imply the return type * Lines of code * Functions over a couple hundred lines of code tend to be more error-prone * Otherwise, no hard constraints on method length - whatever is natural for the situation * Parameters * Use parameter order consistently among different functions * Document assumptions on parameters * Document units * Document zero-based-counting vs one-based-counting if not obvious * Error handling * Check values of input parameters * Use assertions to check for bugs. Use error handling to check for bad input. * Techniques for error handling: * Return null or neutral value * Print or log the error and continue execution * Throw an exception/error * Terminate the program