Most newbies confuse coding with programming. As soon as an idea for a program comes to mind, they think in terms of coding it.
Coding is a very small part of programming. Programming is building a software engine. It starts from an idea, designed and documented like a blueprint, then implemented in a programming language.
Before a motor car is built, it is first designed. Each and every part is identified, and its function documented. The connections between the parts and the sequence of operations are shown as drawings. All the parts are then assembled into a single unit. It is then that fuel is taken in and the battery charged, before it is launched on a road with ignition and acceleration.
The development of software has long ago moved out of the studios of coding artists to the factories of practising engineers. The rigor of the engineering discipline has transformed software development from an art form to engineering technology.
The initial idea for a software program is elaborated in a document called Requirement Specification (RS). This document expresses the idea in a formal structured manner and outlines the scope to limit it to a precisely known functionally.
The functionality is furthered elaborated in a document called Functional Specification (FS). This document defines the users of the software program, their roles and the details of the operations (a.k.a. functions) they are going to perform.
The components of the software system under development are identified and expressed as object and data models in a document called Detailed Design (DD). This document lays out the framework for development. It helps produce the Application Programming Interface (API) that glues all the components into a single functional entity.
It is now time for coding the software application. This phase of the software project is called the implementation. It is what brings the framework to life. It is like the fuel for the car.
Testing is finally performed to ensure that all functional interfaces as outlined in FS are implemented and working as specified. Test cases are written prior to testing so that no tests are ignored or overlooked.