首先,我意识到这个问题可能会有些冗长和含糊,为此我深表歉意。对于任何“了解它”的人来说,这可能是一个简短的基本问题,但由于我发现自己在这方面缺乏经验,因此请在描述问题时请多多包涵。
从我11岁左右开始,我就一直以这种方式进行编程。这意味着我从一开始就一直在教自己。我接受了技术教育,但并非严格地学习计算机科学(我获得了光子工程学学位)。我们当然有编程课程,但这对我来说基本上是基本的东西,我没有学到很多新东西。我一直在为自己的快乐而进行自我教育,并且一直知道自己会从事编程事业,但是那时我的所有项目都还很小。我毫不费力地将它们牢记在心并加以维护。
现在,我发现自己是团队的领导者,而不是公司环境的领导者-我在大学工作,开发用于工程应用的科学软件(C ++)。突然间,这个项目正在(相对)变大,而且我大部分时间都无法解决这个问题。我主要在两件事上浪费了很多时间和精力:
- 当我不得不返回一段时间未使用的代码时,我很难记住它是如何工作的。我花了很多时间来查看相关类的头文件,并阅读在源文件中放置的注释。我希望我可以瞥见某种形式的“示意图”并更轻松地重获图片。
- 当我引入更改时,有时我会中途意识到,我试图做的事情会破坏其他地方的功能(或更糟糕的是,它只会在运行时显示出来,这是一个惊喜)。我还原并开始以不同的方式进行操作,结果发现我忽略了对其他组件的影响。我希望有一些“架构图”,在其中可以看到事情的完成方式,我要尝试做的事情将如何影响其他组件,以及为我提供一种在开始实施更改之前进行详细规划的方法。
与我一起工作的大多数人都有与我自己相似的故事-较强的技术导向,有时甚至是高超的技巧,但无法组织工作。但是,他们的项目通常比我的项目小得多,所以他们可以应付。无论如何,这对我来说意味着我一个人,没有人可以学习良好的做法。
我修了一个管理IT的研究生课程,尽管我觉得它很令人满意,但它主要针对非程序员,有关项目管理方法论,预算/进度估计,企业体系结构的教学,而不是软件设计和规划。没关系,我也在尝试学习这些东西。当然,引入了一些工具(例如UML)和软件开发过程的类型(级联,迭代,敏捷...),但是显然没有详细介绍,我很难决定我应该选择和使用的东西(以及达到什么程度)。
我一直在阅读有关SO上软件设计的许多问题和答案-有很多关于使用这种工具或特定工具或方法进行设计的问题,并且如果我确信UML文档可以解决我的问题-我会选择并开始使用它。但是有些人发誓,其他人则说它没用。我正在寻找更高层次的抽象的答案-有解决我所遇到的两个问题的方法吗,您个人怎么做?我应该学会什么才能做到这一点,而不必局限于某个特定工具?这些有时会变得过时,我希望它们的适用性会因项目类型而异。
非常感谢您的阅读,我无法简要地说出我的意思(缺乏软件设计经验和词汇)。