您所说的是软件工程,而不是编程。它有点架构,有点“最佳实践”和“设计模式”,有点与他人合作。尽管有一些书可以提供帮助,但其中大部分都是来自经验。没人开始写Microsoft Word。
考虑一下您想编写的大型“真实”程序。现在考虑一下您需要构建的各种组件,以使其按您想要的方式工作。例如,在现代的第一人称游戏中,您将需要3D图形引擎,非玩家角色AI,音乐/声音模块,物理引擎以及执行游戏规则的顶级模块(了解(地图),各种字符之间的互动方式等)。然后是艺术品,角色设计和音乐,它们都不是代码,但对于完成游戏来说是必需的。
现在:您将建立其中的哪些,而将获得其他的?大多数大型软件项目不是从头开始编写的。也许您将使用现成的3D引擎和音乐/声音模块,并且仅对使您的游戏与众不同的内容进行编程。好的,因此您必须弄清楚将要使用哪些第三方模块,这将涉及诸如成本,它们使用的语言,它们具有的功能,API的设计方式(即,它的完整性)等因素。是,它与您的个人编程风格的匹配程度等)。也许您将为各种第三方模块编写一两个候选程序来编写“概念证明”或测试程序,以确保它们能够完成您需要的所有事情并且易于使用。
同样,即使您想编写自己的代码,对于您自己来说也无法完成您想要的时间范围内的工作。您还需要多少其他程序员从事该项目?您将如何分工?如何设计各个模块,以便即使它们是由不同的人编写的,它们也都可以组合在一起?你们将如何在不破坏彼此更改的情况下使用相同的源代码(答案:版本控制,当您独自工作时非常有用,而与他人一起工作时必不可少)。
一旦确定了要在内部编写的模块,就可以执行相同的过程。弄清楚每个模块的各个部分,如何将它们组合在一起,以及自己编写的内容以及在其他地方获得的内容。继续分解,直到每一个小到足以让您牢记在心,让您说:“是的,我可以写下来!” 然后这样做。当您这样做时,您将在程序的各个部分如何组合在一起时遇到无法预见的障碍。这些将令人沮丧,但它们是您了解更多有关手工艺品的机会,因此应以这种方式加以考虑。
最初,您只能在程序中保留很小的程序段(例如单个函数),因此在开始编码之前,您必须将事情分解很多。当你获得的经验,你会觉得在功能,而不需要考虑有关的功能,并开始思考有关的对象。然后你会想在对象和思维约大模块。最后,你会想在模块和思考关于全,大,真正的程序。
然后,您会发现您仍有很多东西要学习……但是事实如此。如果作为程序员,您曾经停止学习,那么您已经过时了,将被更新的模型取代。
无论如何,不要害怕,也不要担心这听起来...可怕或不可能,而您毕竟根本不想成为一名程序员。不是每个人都适合。我喜欢音乐和甜点,可以稍微弹奏琴键并煮一些菜,但我不愿意花时间成为一名出色的音乐家或大厨。
如果事实证明您不希望成为编写大型的,实际的桌面应用程序的程序员,那么还有其他类型的编程工作。例如,您可以成为嵌入式程序员。编写嵌入式程序会涉及很多有趣的挑战,您正在做有用的工作,但通常这些程序要比桌面应用程序小。或者您可以编写Web应用程序。在Web上,将少量功能粘合在一起很容易,因此您可以编写(例如)Web注释系统,即使它不是整个Web应用程序也很有用。同样,轻松地改进Web上的内容也很容易,因此您可以从(例如)一个基本的Web邮件客户端开始,然后随着时间的推移,将其演变为类似Gmail的客户端。(但不要那样做,因为那样您将与Gmail竞争。)
如果您根本不想成为一名程序员,但仍然想使用计算机,则可以进入IT或其他技术领域。在这些情况下,了解与您已有的编程一样非常有用,因为您的同辈甚至可能没有那么多。或者,如果您愿意,请成为一名音乐家,因为(像大多数领域一样)它涉及当今的计算机。编写一些小程序,以各种巧妙的方式处理音频或MIDI文件,从而使您成为更好的音乐家。您会发现,无论您拥有什么编程技能,都可以在许多领域中应用,从而使自己的工作变得更好。