Critical developer skills in 5 minutes or less.
Half my own learning journey, half experiment to improve software education. These posts attempt to extract best practices from, and connect readers to, leading software literature.
I was “raised” on the iDesign school of architecture. To me architecture meant the high-level separation of concerns into clients, managers, engines, accessors, and resources.
“The need for reviewing was so obvious to the best programmer that they rarely mentioned it in print, while the worst programmers believed they were so good that their work did not need reviewing” – Daniel Freedman and Gerald Weinberg IBM found that every hour of code inspection saved 100 hours of related work (Code Complete, p.480). Pair programmers produce higher quality, more maintainable, code in only 15% more time than an individual (Pair Programming Benefits), and inspected systems require 1/10th the maintenance of non-inspected systems (Code Complete, p. 485).
“Program specification is the process of taking a requirement and reducing it down to the point where a programmer’s skill can take over. It is an act of communication, explaining and clarifying the world in such a way as to remove major ambiguities” –The Pragmatic Programmer
“Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan” – Agile manifesto Agile (in its many flavors) is the de facto standard for work management in software. It identifies core priorities for software collaboration and outlines a flexible structure for managing requirements. This facilitates best practices and a shared methodology.
The most important single aspect of software development is to be clear about what you are trying to build. - Bjarne Stroustrup (inventor of c++) Plans are worthless, but planning is everything. - Dwight D. Eisenhower
“…the incompletenesses and inconsistencies of our ideas become clear only during implementation.” – Fred Brooks (Mythical Man-Month) “It is widely accepted that creative design is not a matter of first fixing the problem and then searching for a satisfactory solution concept; instead it seems more to be a matter of developing and refining together both the formulation of the problem and ideas for its solution, with constant iteration of analysis, synthesis, and evaluation process between the two “spaces” – problem and solution.” - Nigel Cross and Kees Dorst
“Tools amplify your talent. The better your tools, and the better you know how to use them, the more productive you can be.” – Andrew Hunt (The Pragmatic Programmer)
“Coding ain’t done ‘til the tests run” - The Pragmatic Programmer “The act of writing a unit test closes a remarkable number of feedback loops, the least of which is the one pertaining to verification of the function” – Robert Martin
“.. the high-level language embodies the constructs wanted in the abstract program and avoids all the lower ones, it eliminates a whole level of complexity that was never inherent in the program at all” – Fred Brooks, No Silver Bullet
“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.” – C.A.R. Hoare