Vous parlez de plus de génie logiciel que de programmation. C’est un peu l’architecture, un peu les «meilleures pratiques» et les «modèles de conception», un peu en collaboration avec d’autres. Bien que certains livres puissent aider, l'essentiel provient de l'expérience. Personne ne commence à écrire, disons, Microsoft Word.
Pensez à un grand "vrai" programme que vous voudriez écrire. Pensez maintenant aux différents éléments à construire pour que votre travail fonctionne comme vous le souhaitez. Par exemple, dans un jeu à la première personne moderne, vous aurez besoin d’un moteur graphique 3D, d’une intelligence artificielle non-joueur, d’un module de musique / son, d’un moteur physique et d’un module de niveau supérieur appliquant les règles du jeu. "carte", comment les différents personnages interagissent, etc.). Et puis, il y a les œuvres d'art et la conception des personnages et la musique, dont aucun n'est du code mais qui sont nécessaires pour que le jeu soit complet.
Maintenant: Lesquels construirez-vous vous-même et lesquels obtiendrez-vous ailleurs? La plupart des grands projets logiciels ne sont pas programmés à partir de rien. Peut-être utiliserez-vous un moteur 3D standard et un module musique / son pour ne programmer que les éléments qui rendent votre jeu unique. OK, vous devez donc déterminer quels modules tiers vous allez utiliser, ce qui implique des facteurs tels que le coût, les langues avec lesquelles ils travaillent, les fonctionnalités dont ils disposent, la manière dont leur API est conçue (c.-à-d. comment cela s’adapte-t-il à votre style de programmation personnel, etc.). Vous pourrez peut-être écrire des "preuves de concept" ou tester des programmes en utilisant un ou deux candidats pour les différents modules tiers, afin de vous assurer qu'ils feront tout ce dont vous avez besoin et qu'il est facile à utiliser.
En outre, même le code que vous voulez écrire vous-même peut être un travail trop gros pour que vous puissiez le faire seul dans les délais que vous avez en tête. De combien d'autres programmeurs avez-vous besoin pour travailler sur le projet? Comment allez-vous diviser le travail? Comment les différents modules seront-ils conçus de manière à ce qu'ils s'intègrent bien, même s'ils ont été écrits par des personnes différentes? Comment allez-vous tous travailler sur le même code source sans effacer les modifications des autres (answer: control de version, ce qui est extrêmement utile lorsque vous travaillez en solo mais qu'il est indispensable lorsque vous travaillez avec d'autres).
Une fois que vous avez déterminé quels modules vous souhaitez écrire en interne, vous effectuez le même processus. Déterminez les éléments de chaque module, comment ils doivent s'emboîter et que vous écrirez vous-même et que vous obtiendrez ailleurs. Continuez à décomposer les choses jusqu'à ce que chaque pièce soit suffisamment petite pour que vous puissiez la retenir, pour que vous puissiez dire: "Ouais, je pourrais écrire ça!" Et ensuite le faire. Ce faisant, vous rencontrerez des obstacles imprévus quant à la manière dont les différentes composantes de votre programme s’harmonisent. C’est frustrant, mais c’est une opportunité pour vous d’en apprendre davantage sur votre métier et vous devriez le voir de cette façon.
Au départ, vous ne pourrez garder dans votre esprit que de très petites parties de votre programme (par exemple, des fonctions individuelles). Vous devrez donc décomposer beaucoup de choses avant de commencer à coder. À mesure que vous gagnerez de l'expérience, vous réfléchirez aux fonctions plutôt que d'avoir besoin de penser à des fonctions et de commencer à penser à des objets. Et ensuite, vous allez penser à des objets et à des modules plus grands. Enfin, vous réfléchirez à des modules et à des programmes entiers, volumineux et réels.
Et ensuite, vous découvrirez que vous avez encore beaucoup à apprendre ... mais c'est tout. Si, en tant que programmeur, vous arrêtez d'apprendre, vous êtes obsolète et vous serez remplacé par un modèle plus récent.
Quoi qu'il en soit, n'ayez pas peur et ne vous inquiétez pas si cela sonne ... horrible ou impossible et vous ne voulez vraiment pas être programmeur après tout. Ce n'est pas pour tout le monde. J'aime la musique et les desserts, et je peux jouer un peu des touches et cuisiner des plats, mais je ne suis pas prêt à mettre le temps qu'il faut pour devenir un grand musicien ou un grand chef.
S'il s'avère que vous ne voulez pas être un programmeur écrivant de grandes et vraies applications de bureau, il existe d'autres types de tâches de programmation. Vous pourriez par exemple devenir un programmeur intégré. L’écriture de programmes intégrés pose des défis intéressants et intéressants, et vous faites un travail utile, mais en général, les programmes sont plutôt plus petits que les applications de bureau. Ou vous pourriez écrire des applications Web. Sur le Web, il est facile de coller des petites fonctionnalités, vous pouvez donc écrire (par exemple) un système de commentaires Web, ce qui serait utile même s'il ne s'agit pas d'une application Web complète. Il est également facile d’améliorer progressivement le contenu Web, vous pouvez donc commencer avec un client de messagerie Web de base et, au fil du temps, le transformer en quelque chose comme Gmail. (Mais ne faites pas cela, car vous serez alors en concurrence avec Gmail.)
Si vous ne voulez pas du tout être programmeur, mais que vous voulez tout de même travailler avec des ordinateurs, vous pourriez peut-être vous lancer dans l'informatique ou dans un autre domaine technique. Dans ces cas, connaître autant de programmation que vous le faites déjà est très utile, car vos pairs n'en auront peut-être même pas autant. Ou bien, vous savez, devenir musicien si cela vous tente, car (comme dans la plupart des domaines), il implique les ordinateurs aujourd'hui. Ecrivez de petits programmes qui manipulent des fichiers audio ou MIDI de différentes manières, faisant de vous un meilleur musicien. Vous constaterez que toutes les compétences en programmation que vous possédez peuvent être appliquées dans de nombreux domaines pour vous rendre meilleur dans votre travail.