Те, про що ви говорите, - це більше інженерія програмного забезпечення, ніж програмування. Це трохи архітектури, трохи "кращих практик" та "моделей дизайну", трохи роботи з іншими. Хоча є книги, які можуть допомогти, більшість з них походить з досвіду. Ніхто не починає писати, скажімо, Microsoft Word.
Подумайте про велику, "справжню" програму, яку ви хотіли б написати. Тепер подумайте про різні деталі, які вам потрібно побудувати, щоб змусити його працювати так, як вам хочеться. Наприклад, у сучасній грі від першої особи вам знадобиться 3D-графічний двигун, AI, який не належить до гравців, музичний / звуковий модуль, фізичний двигун та модуль вищого рівня, який виконує правила гри (знає "карта", як взаємодіють різні символи тощо). А далі - художній твір та дизайн персонажів та музика, жодна з яких не є кодом, але необхідна для завершення гри.
Тепер: що з них ви побудуєте самі, а які ви отримаєте в іншому місці? Більшість великих програмних програм не запрограмовані з нуля. Можливо, ви будете використовувати позаштатний тривимірний двигун та музичний / звуковий модуль та програмувати лише те, що робить вашу гру унікальною. Гаразд, тому ви повинні розібратися, які сторонні модулі ви збираєтеся використовувати, які включатимуть такі фактори, як вартість, якими мовами вони працюють, якими функціями вони володіють, як розроблений їх API (тобто, наскільки повно його тобто, наскільки це добре відповідає вашому особистому стилю програмування тощо). Можливо, ви напишете "докази концепції" або тестові програми, використовуючи одного або двох кандидатів для різних сторонніх модулів, щоб переконатися, що вони виконають усі необхідні речі та прості у використанні.
Крім того, навіть код, який ви хочете написати самостійно, може бути занадто великою роботою для вас одного, щоб виконати його у визначений термін. Скільки інших програмістів вам потрібно працювати над проектом? Як ви розділите роботу? Як будуть спроектовані різні модулі, щоб вони всі поєднувалися разом, навіть якщо їх написали різні люди? Як ви працюватимете над одним вихідним кодом, не витираючи зміни один одного (відповідь: контроль версій, що надзвичайно корисно, коли ви працюєте соло, але неодмінно під час роботи з іншими).
Після того, як ви зрозуміли, які модулі ви хочете написати вдома, ви виконуєте той самий процес. З’ясуйте фрагменти кожного модуля, як вони повинні поєднуватися разом, і які ви самі напишете та які ви отримаєте в іншому місці. Продовжуйте розбивати речі, поки кожен твір не буде достатньо малим, щоб ви могли мати його в думці, щоб ви сказали: "Так, я можу це написати!" А потім зробіть так. У той же час ви зіткнетеся з непередбаченими перешкодами в тому, як різні частини вашої програми поєднуються між собою. Це буде неприємно, але вони дадуть вам можливість дізнатися більше про ваше ремесло, і на це слід дивитися.
Спочатку ви зможете утримувати у своїй свідомості лише невеликі шматочки програми - скажімо, окремих функцій, і тому вам доведеться багато розбити, перш ніж розпочати кодування. За міру набуття досвіду, ви будете думати , в функції , а не необхідності думати про функціях і почати думати про об'єктах. І тоді ви будете думати в об'єктах і думати про великих модулях. Нарешті, ви будете думати в модулях і думати про цілі, великі, реальні програми.
І тоді ви виявите, що вам ще дуже багато чому навчитися ... але так і йде. Якщо ви, як програміст, ви коли-небудь припините навчання, ви застаріли і заміните його на новішу модель.
У будь-якому разі, не бійтеся і не хвилюйтесь, якщо це звучить ... жахливо чи неможливо, і ви насправді не хочете бути програмістом. Це не для всіх. Я люблю музику та десерти, і можу трохи грати на клавішах і готувати деякі страви, але я не бажаю вкладати час, який потрібен, щоб стати чудовим музикантом чи майстром-шеф-кухарем.
Якщо виявиться, що ви не хочете бути програмістом, який пише великі, реальні, настільні програми, існують інші види завдань програмування. Ви можете, наприклад, стати вбудованим програмістом. Існують певні цікаві завдання, пов'язані з написанням вбудованих програм, і ви робите корисну роботу, але зазвичай програми є значно меншими, ніж настільні програми. Або ви можете написати веб-додатки. В Інтернеті легко склеїти невеликі шматочки функціональності разом, щоб ви могли написати (наприклад) систему веб-коментарів, і це було б корисно, навіть якщо це не вся веб-програма. Покращити речі в Інтернеті також легко, тому ви можете почати з (скажімо) основного клієнта веб-пошти та з часом перетворити його на щось на зразок Gmail. (Але не робіть цього, оскільки тоді ви будете конкурувати з Gmail.)
Якщо ви взагалі не хочете бути програмістом, але все ще хочете працювати з комп’ютерами, можливо, ви можете зайнятися інформатикою чи іншою технічною сферою. У цих випадках дуже корисно знати програмування, як ви вже робите, тому що ваші однолітки можуть навіть не так багато. Або, знаєте, стати музикантом, якщо це сподобається, бо (як і більшість полів) у ньому сьогодні входять комп'ютери. Пишіть маленькі програми, які керують аудіо- чи MIDI-файлами різними розумними способами, тим самим роблячи вас кращим музикантом. Ви побачите, що будь-які навички програмування у вас можуть бути застосовані у багатьох сферах, щоб покращити свою роботу.