Образ мышления или поговорим о видении кода

Кому интересно дойти до сути статьи сразу читать следующую часть (ниже по тексту)
Скажу честно: первым опытом программирования у меня был не при написании программы рисовалки шарика, который летает по экрану и отбивается от краев (как я люблю говорить), а несколько раньше. В классе 4-5 (не помню точно) я рисовал с помощью команд Line и графического режима QBasic собачек, домики и т.п. Но я не считаю это своим первым опытом. Почему? Это то время, когда производя «кодинг» я почти совсем не понимал, чего пишу и как это все происходит «под капотом». Поэтому и считаю своим первым опытом написание шарика.. когда уже «сознательно» писал… Это период времени (после шарика) когда программирование носило характер вполне долгого «раздумывания» над очередной строчкой программы, копание в том, почему так будет работать . В это время у меня не было «увлечения» программированием.. просто как опыт.
Другой опыт был уже в классе 9-10 – в это время я начал увлекаться программированием, в голове создавал структуру переменных, мог «смоделировать» в голове простейшие ситуации, в это время при написании программ обычные ошибки были в логике программы, в непродуманности ее архитектуры, из-за чего получались неудобные и громоздкие части кода. В это время я наткнулся на goto, которые могли присутствовать в большом количестве и делали чтение\\работу с кодом очень сложными..
В 11 классе на меня приходит «озарение» работы СП и вместе с этим попытки переписать программы с goto и причудливыми связями между функциями на нормальный стиль. Это не удается, так как в голове не получается создать образы программы.

Уже в настоящем времени (и чуть раньше) я заметил, что написание программ для меня начинает делиться на несколько этапов:
1) Обдумать модель, связи будущего ПС
2) Спроектировать архитектуру ПС
3) Начать с создания логики ПС, построения образа работы ПС
4) Собственно кодинг теперь является интерпретацией образа на язык программирования.
В написании программы, конечно это важная часть, но имея образы, архитектуру, модель (которая часто может обдумываться неделю, полторы), ошибки возникают при опечатках в наборе кода и т.п.
5) Тестирование ПС. Данным этапом раньше не занимался, наивно полагая, что «я такой крутой» и ошибок быть не может. =)

Чем удобно мышление образами при построении ПС?
(разберем на примере ООП)
Итак. Мы продумали модель, описали ее.
Мы создали образы. Каждый образ мы претворяем в отдельный класс. Такой подходи позволяет нам избежать как чрезмерного создания классов (класс-метод) так и создать на выходе единое, функционирующее целое «без костылей» (либо с меньшим количеством оных)
Создание (представление) образов позволяет нам абстрагироваться от «обработки» каждой переменной. При моделировании образов необходимо помнить только цели класса, и его данные.
Упрощается преобразование данных. (здесь могут быть проблемы только в незнании языка, его конструкций, но уже никак не с архитектурой ПС)
И на последок задам себе вопрос: «а почему я сделал такие выводы?»
Дело в том, что недавно я разбирал свои архивы на ПК и наткнулся на старые программы. Мне вспомнилось, как я пытался иметь представление о каждой переменной и писал по принципу – «что пишешь? Сейчас скомпилирую – узнаем!».
И как итог – абстрагирование от уровня наблюдения за переменные на уровень образов, модели позволяет писать цельные, «логически обоснованные» ПС.
2012-09-18