UML 对业余程序员有用吗?
Can UML be useful for a hobby programmer?
我希望我已经解决了这个问题而不是基于意见。我不是在问 UML 是好是坏,因为我毫不怀疑它对专业使用它的人有用。
我想知道 UML 工具是否有某种临界质量(例如,以每周编码的小时数来衡量)对一个孤独的业余程序员有用。
当然这是假设我在 UML 上不成功的主要原因是缺乏实践。如果保持实践意味着将我 90% 的业余时间花在 UML 上,而没有获得太多的工作代码,那么我会认为这是一个 "below critical mass".
的例子
业余程序员的意思是:我的项目的典型源代码大小低于 1 MB。有时我会手工绘制继承树,但仅此而已。我有 35 年的编程经验,所以在没有明确设计过程的情况下写下代码(当然除了通常的 OOP 设计原则和模式)是我对项目的自然方法并且效果很好。
在过去的工作中,我对 UML 工具(Rhapsody、Enterprise Architect)有过一些肤浅的接触,主要是而不是软件开发。例如,有人曾要求我在 SYSML 中对机械概念进行建模。
我知道大部分语言结构,大概也知道它们的含义,但老实说,我真的不知道如何使用它们来为我谋利。只是花费了太多时间,感觉效率不高。更重要的是,与编写一些行并仅对其进行测试相比,没有直接的反馈。此外,在尝试使用 UML 时,我发现自己多次遇到这种情况,问题似乎变得更加复杂和过度设计,而不是变得更加清晰。就好像使用抽象语言让我看不到什么是真正必要和实际相关的。
另一方面,我有时觉得不使用 UML 可能会遗漏一些东西。
这是我的故事:多年来,我一直在该行业担任 UML 顾问和建模师。项目通常很大,需要各种 UML 语言来对这些项目进行建模。毫无疑问,UML 非常有效,有助于发现 user/customer 通信中的问题以及解决编码问题。我也基于爱好编程(例如,我已经建立了一个程序来管理我们的 Shotokan 俱乐部的会员资格和付款,并且曾经在 AppStore 上有一些程序)。这些程序大约在 7.5kloc Swift +- 左右。所有这些都是从头开始的,没有太多设计。现在,所有这些都处于没有适当 (UML) 文档的情况下维护开始变得棘手的状态。
为什么不从头开始使用 UML?好吧,像大多数程序员一样,开始做某事并快速看到投资回报率是很有趣的。因为你在处理它的时候手头有它,所以你可以一个接一个地添加功能。一段时间后,你开始想念你为什么按照你的方式做事以及它是如何运作的。咬牙片刻,几杯咖啡之后你就过去了,这种情况会持续一段时间。但是过了一会儿,这无济于事。这是我开始 re-documenting(至少部分)代码的地方。对于 Swift 它更难,因为没有可用的 RE 工具,我必须手动创建 class 图。
所以我只是为复杂的部分制作 class 图表以获得概览,并更详细地制作我遇到问题的部分。从那开始,我通常会创建几个 SD 来解决这个问题——这真的很有帮助。此外,有时甚至在编码(!)期间,我也会在某些情况下使用状态图。在解析 DSL 或类似的东西时,它们非常方便。
我没有为我的爱好项目记录用例。很简单,因为很少,而且你没有客户要打交道。
这取决于我认为你自己如何处理你的项目。
抛开可执行模型,UML 用于分析和设计工作,主要用于软件架构和工程(您可能知道)。正式的它对于涉及多人的项目非常有用,他们都受益于说和理解一种共同语言,其中复杂的软件结构被具体表达:工程(在任何学科)依赖于工程师的能力 cross-verify 每个别人的逻辑和发现差距,UML是软件工程必须做的一种语言集。
UML 也可能对您单独 有用,可以在编写代码之前思考复杂的问题,或者记录您认为无法在代码中正确注释的想法。和你一样,我已经编码了一段时间(自 80 年代以来)并从 1998 年左右开始使用 UML。我现在的职业是软件架构(因此我大量使用 UML)但我仍然进行大量编码 - 我经常构建 proof-of-concepts 并且我有自己的产品,一个大约有 250,000 行代码(为此我有时使用 UML,有时根据需要在没有模型的情况下编码)。
熟悉 UML 后,您可能会更好地参与其中的一件事是软件设计模式。这些通常(至少部分)使用 UML 进行记录,因为实现可能因编程语言而异,而模式概念和结构是常见的。
有点啰嗦,但我希望这对您的探索有所帮助。
我希望我已经解决了这个问题而不是基于意见。我不是在问 UML 是好是坏,因为我毫不怀疑它对专业使用它的人有用。
我想知道 UML 工具是否有某种临界质量(例如,以每周编码的小时数来衡量)对一个孤独的业余程序员有用。
当然这是假设我在 UML 上不成功的主要原因是缺乏实践。如果保持实践意味着将我 90% 的业余时间花在 UML 上,而没有获得太多的工作代码,那么我会认为这是一个 "below critical mass".
的例子业余程序员的意思是:我的项目的典型源代码大小低于 1 MB。有时我会手工绘制继承树,但仅此而已。我有 35 年的编程经验,所以在没有明确设计过程的情况下写下代码(当然除了通常的 OOP 设计原则和模式)是我对项目的自然方法并且效果很好。
在过去的工作中,我对 UML 工具(Rhapsody、Enterprise Architect)有过一些肤浅的接触,主要是而不是软件开发。例如,有人曾要求我在 SYSML 中对机械概念进行建模。
我知道大部分语言结构,大概也知道它们的含义,但老实说,我真的不知道如何使用它们来为我谋利。只是花费了太多时间,感觉效率不高。更重要的是,与编写一些行并仅对其进行测试相比,没有直接的反馈。此外,在尝试使用 UML 时,我发现自己多次遇到这种情况,问题似乎变得更加复杂和过度设计,而不是变得更加清晰。就好像使用抽象语言让我看不到什么是真正必要和实际相关的。
另一方面,我有时觉得不使用 UML 可能会遗漏一些东西。
这是我的故事:多年来,我一直在该行业担任 UML 顾问和建模师。项目通常很大,需要各种 UML 语言来对这些项目进行建模。毫无疑问,UML 非常有效,有助于发现 user/customer 通信中的问题以及解决编码问题。我也基于爱好编程(例如,我已经建立了一个程序来管理我们的 Shotokan 俱乐部的会员资格和付款,并且曾经在 AppStore 上有一些程序)。这些程序大约在 7.5kloc Swift +- 左右。所有这些都是从头开始的,没有太多设计。现在,所有这些都处于没有适当 (UML) 文档的情况下维护开始变得棘手的状态。
为什么不从头开始使用 UML?好吧,像大多数程序员一样,开始做某事并快速看到投资回报率是很有趣的。因为你在处理它的时候手头有它,所以你可以一个接一个地添加功能。一段时间后,你开始想念你为什么按照你的方式做事以及它是如何运作的。咬牙片刻,几杯咖啡之后你就过去了,这种情况会持续一段时间。但是过了一会儿,这无济于事。这是我开始 re-documenting(至少部分)代码的地方。对于 Swift 它更难,因为没有可用的 RE 工具,我必须手动创建 class 图。
所以我只是为复杂的部分制作 class 图表以获得概览,并更详细地制作我遇到问题的部分。从那开始,我通常会创建几个 SD 来解决这个问题——这真的很有帮助。此外,有时甚至在编码(!)期间,我也会在某些情况下使用状态图。在解析 DSL 或类似的东西时,它们非常方便。
我没有为我的爱好项目记录用例。很简单,因为很少,而且你没有客户要打交道。
这取决于我认为你自己如何处理你的项目。
抛开可执行模型,UML 用于分析和设计工作,主要用于软件架构和工程(您可能知道)。正式的它对于涉及多人的项目非常有用,他们都受益于说和理解一种共同语言,其中复杂的软件结构被具体表达:工程(在任何学科)依赖于工程师的能力 cross-verify 每个别人的逻辑和发现差距,UML是软件工程必须做的一种语言集。
UML 也可能对您单独 有用,可以在编写代码之前思考复杂的问题,或者记录您认为无法在代码中正确注释的想法。和你一样,我已经编码了一段时间(自 80 年代以来)并从 1998 年左右开始使用 UML。我现在的职业是软件架构(因此我大量使用 UML)但我仍然进行大量编码 - 我经常构建 proof-of-concepts 并且我有自己的产品,一个大约有 250,000 行代码(为此我有时使用 UML,有时根据需要在没有模型的情况下编码)。
熟悉 UML 后,您可能会更好地参与其中的一件事是软件设计模式。这些通常(至少部分)使用 UML 进行记录,因为实现可能因编程语言而异,而模式概念和结构是常见的。
有点啰嗦,但我希望这对您的探索有所帮助。