To describe something as a craft is to describe it as lying somewhere between an art (which relies on talent and technique) and a science (which relies on knowledge). In this sense, the English word craft is roughly equivalent to the ancient Greek term techne.
[1]
Craft: An occupation or trade requiring manual dexterity or skilled artistry. [2]
I talked to a friend about Coding as a Craft the other day and we worked out together that programming is taught very little all-in-all and that the teaching that is done is rather academic and not geared towards practicality.
Even more importantly, I posited, the majority of programming mistakes are made within 10 minutes of starting a project, and that it would be incredibly helpful to establish and convey best practices about those first 10 minutes (in no particular order):
General Skills
- use of a suitable environment (editor, REPL, highlighting, lint, plugins, etc.) and good skills in using it
- good knowledge of your language, libraries and frameworks
- good knowledge of existing algorithms
- use of a version control system
- clear separation of prototyping, exploratory programming and production code
- “Premature optimization is the root of all evil”
Problem-specific Skills
- proper understanding of the problem
- research of viable solutions
- ability to apply your solution manually (where applicable)
- implementing the first approach at the right level of complexity/abstraction
- suitable choice of data types. good separation of logical modules
- suitable choice of programming language
- use of automatic testing and writing testable code
- visualization of your program process/outcome
Other skills come in later in the act of programming
- structured debugging skills
- structured profiling skills
- good use of deployment systems
- regression testing
- documentation of sources, algorithm, motivation, etc.
- ability and willingness to refactor code
Of course this is a blanket list of arbitrary skills, but I will outline possible best practices for each of these in the coming weeks and would welcome your feedback.