Разработчики черпают информацию из нескольких основных принципов
- декомпозиция - разбиение больших частей на составные части. Например: нужно сделать гостевую книгу. В гостевой книге есть страница, которая отображает записи и есть та, через которую они добавляются. Т.е. первый уровень декомпозиции - страница отобразить записи и страница добавить запись. Далее каждая страница бьется дальше. Например отображение - где-то надо записи хранить, значит у нас будет база данных, как-то отображать, значит будет какой-то шаблон для страницы. Раз записи повторяются, то у всех записей будет одинаковый шаблон отображения. Данный принцип применятся до тех пор, пока не достигается конечная глубина, после которой становится очевидна тривиальность реализации. Если представить все эти шаги разбиений в виде дерева - мы получим дерево декомпозиции.
- системный подход - когда будущее приложение разбивается на подсистемы (это как декомпозиция, но с другой стороны), например подстема отображения записей, подсистема хранения записей и т.д.
Приведенные выше принципы результат последовательного изучения информатики, программирования и проектирования систем. Каждый разработчик проходит через стадии, на которых он не знает, как реализовать или решить ту или иную проблему, поэтому он всегда находится в непрерывном изучении, как технологий, языков программирования, так и подходов к разработке, и, помимо этого, он изучает предметную область.
Имея разносторонний набор знаний человек прибегает к синтезу, в результате которого появляется некоторое обобщенное представление решения той или иной задачи. Как правило этот синтез является неопосредованным актом интеллектуальной деятельности (тупо человек не думает особо, а решение всплывает как бы само собой). Хотя на самом деле это результат высшей интеллектуальной деятельности.
Чтобы перейти от "я не могу это сделать" к "я справился" необходимо изучить опыт других людей, решавших подобные проблемы в прошлом и ознакомиться с тем, что они изучали - какие книги читали, какие науки постигали, курсы или обучение в университете (колледже). Не следует пренебрегать формальным обучением, оно закладывает базу, с котором можно развиваться впоследствии.
Обучение помогает приобрести некоторый опыт в решении задач и сформировать подходы к их решению.
После обучения следуют начинать работать по специальности, не перебирать места, а идти в любое место и набираться опыта. Опыт поможет сформировать представление о реальном положении вещей и том, как правильно применять полученные знания на практике. В общем, чем больше вы работаете, тем больше решений прийдется создать и тем более сложные задачи вы сможете решать.
Не стремитесь сразу браться за сложные задачи, начните с простых, тех, которые как вам кажется, вы сможете решить. И работайте.
Все приходит постепенно. Просто нужно движение. Учитесь, пробуйте применять изученное. И так по кругу. А потом сами не заметите, как спрогрессируете.