Бьёрн Страуструп, описывая C++, говорил: "Язык программирования служит двум связанным между собой целям: он является выразительным средством программиста для указания действий, которые надо выполнить, а также набором концепций, которыми пользуется программист при решении проблемы." Но язык программирования точно не является решением проблемы, он только средство выражения и инструмент. Поэтому для начала давайте оставим в стороне программирование.
С остальным всё просто. Программисту часто не хватает некоторой "прелюдии", позволяющей перебросить мостик между идеей программы и написанием кода. Мостик этот строится так:
- Имеем некоторую идею: "а хорошо бы написать программу, которая делала бы...".
- Определяете предметную область с теми процессами, которые имеют отношение к разрабатываемой программе.
- Формулируете цель проекта: как программа должна повлиять на предметную область (не вдаваясь в реализацию).
- Формулируете бизнес-задачи, решение которых позволят достичь поставленной цели.
- Указываете ограничения, в рамках которых будет создаваться программа.
- Создаёте концепцию - некое видение того, какой будет новая программа, без технических деталей.
- Решаете, а нужна ли такая программа?
- Если нужна, то прорабатываете одно или несколько технических решений, как можно сделать программу. Делаете оценки реализуемости и оставляете одно решение.
- Разрабатываете детальные требования к вашей программе.
- Создаёте архитектурное решение, логическое и физическое.
- Проводите детальное проектирование каждого компонента вашей архитектуры.
- Программируете, тестируете, отлаживаете код.
- И - ура! - внедряете программу.
Это выглядит сложным. Но не очень сложно.
Как я смотрю на весь этот процесс, можете посмотреть тут:
Обзор процесса разработки программного обеспечения. Краткий академический обзор всего процесса можно найти в книге Макконнелла "Остаться в живых. Руководство для менеджеров программных проектов" - книга небольшая, для начала самое то.