The process of writing source code requires expertise in many different subjects, including knowledge of the application domain, specialized algorithms and formal logic.