То, о чем вы говорите, это больше программная инженерия, чем программирование. Это немного архитектура, немного "лучшие практики" и "шаблоны проектирования", немного работа с другими. В то время как есть книги, которые могут помочь, большинство из них приходит из опыта. Никто не начинает писать, скажем, Microsoft Word.
Подумайте о большой, «настоящей» программе, которую вы хотели бы написать. Теперь подумайте о различных частях, которые вам нужно собрать, чтобы они работали так, как вы хотите. Например, в современной игре от первого лица вам понадобится движок трехмерной графики, ИИ не для персонажа, музыкальный / звуковой модуль, физический движок и модуль верхнего уровня, который обеспечивает соблюдение правил игры (знает «карта», как взаимодействуют различные персонажи и т. д.). И затем есть художественное оформление и дизайн персонажей и музыка, ни один из которых не является кодом, но которые необходимы для завершения игры.
Теперь: что из этого вы создадите сами, а что получите в другом месте? Большинство крупных программных проектов не программируются с нуля. Возможно, вы будете использовать стандартный 3D-движок и музыкальный / звуковой модуль и программировать только то, что делает вашу игру уникальной. Итак, вам нужно выяснить, какие сторонние модули вы собираетесь использовать, что будет включать такие факторы, как стоимость, с какими языками они работают, какими функциями они обладают, как разработан их API (то есть, насколько он завершен) насколько это соответствует вашему личному стилю программирования и т. д.). Возможно, вы напишете «доказательства концепции» или протестируете программы, используя одного или двух кандидатов на различные сторонние модули, чтобы убедиться, что они будут выполнять все необходимые вам действия и просты в использовании.
Кроме того, даже код, который вы хотите написать самостоятельно, может оказаться слишком большой работой для вас одной, чтобы выполнить ее в предусмотренные вами сроки. Сколько еще программистов вам нужно для работы над проектом? Как вы разделите работу? Как будут разработаны различные модули, чтобы они все сошлись вместе, даже если они были написаны разными людьми? Как вы все будете работать над одним и тем же исходным кодом, не стирая изменения друг друга (ответ: контроль версий, который чрезвычайно полезен, когда вы работаете соло, но незаменим при работе с другими).
После того, как вы выяснили, какие модули вы хотите написать самостоятельно, вы выполняете тот же процесс. Выясните части каждого модуля, как они должны сочетаться друг с другом, и что вы напишите сами, и что вы получите в другом месте. Продолжайте разбирать вещи до тех пор, пока каждый кусок не станет достаточно маленьким, чтобы вы могли держать его в уме, чтобы вы сказали: «Да, я мог бы написать это!» А потом сделай так. При этом вы столкнетесь с непредвиденными препятствиями в том, как различные части вашей программы сочетаются друг с другом. Это будет неприятно, но они дают вам возможность узнать больше о вашем ремесле, и их следует рассматривать именно так.
Изначально вы сможете хранить в памяти только очень маленькие фрагменты вашей программы, скажем, отдельные функции, и вам придется много разбирать, прежде чем начинать кодировать. По мере приобретения опыта, вы будете думать , в функции , а не необходимости думать о функциях и начать думать о объектах. И тогда вы будете думать в объектах и думать о больших модулях. Наконец, вы будете думать в модулях и думать о целых, больших, реальных программах.
И тогда вы обнаружите, что у вас еще есть чему поучиться ... но так оно и есть. Если, как программист, вы когда-нибудь перестанете учиться, вы устареете и будете заменены более новой моделью.
В любом случае, не бойтесь, и не волнуйтесь, если это звучит ... ужасно или невозможно, и вы действительно не хотите быть программистом в конце концов. Это не для всех. Я люблю музыку и десерты, и я могу немного играть на клавишах и готовить некоторые блюда, но я не хочу тратить время на то, чтобы стать великим музыкантом или шеф-поваром.
Если оказывается, что вы не хотите быть программистом, пишущим большие, настоящие настольные приложения, есть другие типы заданий программирования. Например, вы можете стать программистом встраиваемых систем. Есть определенные интересные задачи, связанные с написанием встроенных программ, и вы выполняете полезную работу, но обычно программы меньше, чем настольные приложения. Или вы могли бы написать веб-приложения. В Интернете легко склеить маленькие кусочки функциональности, чтобы вы могли написать (например) систему веб-комментариев, и это было бы полезно, даже если это не целое веб-приложение. Также легко постепенно улучшать вещи в Интернете, поэтому вы можете начать с (скажем) обычного почтового веб-клиента и со временем превратить его в нечто вроде Gmail. (Но не делайте этого, потому что тогда вы будете конкурировать с Gmail.)
Если вы совсем не хотите быть программистом, но все же хотите работать с компьютерами, возможно, вы могли бы заняться ИТ или какой-либо другой технической областью. В этих случаях знание столько программирования, сколько вы уже делаете, очень полезно, потому что ваши коллеги могут даже не иметь этого. Или, вы знаете, станьте музыкантом, если это нравится, потому что (как и большинство областей) это касается компьютеров сегодня. Пишите небольшие программы, которые манипулируют аудио или MIDI-файлами различными хитрыми способами, что делает вас лучшим музыкантом. Вы обнаружите, что все ваши навыки программирования могут быть применены во многих областях, чтобы сделать вас лучше на работе.