开发方法是否应该压制开发人员的个人主义?


9

我正在大学的最后一个学期,正在学习软件工程课程。在课堂上,我们学习各种软件开发方法。我们关注并用于开发项目的方法是瀑布方法。

我觉得教练可能执行错误。在我们的类图中,我们必须列出所有属性和方法,包括私有属性和方法。我读过几本书,即“清洁代码”,该书说,要使功能尽可能简短和集中。如果它们不能帮助其他开发人员列出所有小功能,这似乎很麻烦(它们是私有的,没有其他人可以使用它们)。另外,在设计程序时,我可能不会想到每个微小的功能,在重构时它们可能会出现。

讲师是否要求我们列出所有功能,以告诉我们错了?而且,这些设计方法是否压制了开发人员的个人主义以编写代码,从而使他们更好地理解代码?


20
这很糟糕,您的课堂上正在教授Waterfall方法,这是软件开发不良流程的典型示例。
whatsisname 2011年

6
我想说这堂课教了你很多东西。
JeffO 2011年

7
实际上,原始瀑布具有相互反馈的迭代。多年来,瀑布的错误教学破坏了它的用处。即使使用诸如Scrum之类的东西,故事在Sprint中经历的步骤也会模仿瀑布本身。UML图仅对高级设计有用。编写代码后,在该代码之前编写的所有文档将立即过期。这是工程学的实现。最后,代码必须是文档。
Andrew T Finnell

10
几乎每个开发人员都应该看到开发人员个人主义的案例。(尽管可能不是通过瀑布方法论)。
psr

2
@whatsisname,我非常不同意。每个开发人员都应该学习Waterfall开发,以便他们了解和体验Waterfall作为不良软件开发的典范示例。此外,许多商店仍然是对还是错的大瀑布,为此准备毕业生很重要。
maple_shaft

Answers:


10

您是否问过老师为什么必须列出所有方法?

就像在教室环境中需要的很多东西一样,其目的可能不是使您的类图对开发人员更有用,而是帮助您和您的同学考虑如何设计您的类。当学生学习如何将较大的问题分解为较小的问题时,考虑可能需要的私人方法可能对他们有所帮助。这对于教师更好地了解学生正在考虑采用哪些方法,以便在未认真考虑某人的设计的情况下尽早介入过程中可能有所帮助。课堂环境中的文档通常比现实环境中的文档涉及更多的内容,因为讲师的

当然,导师也有可能认为此文档水平对实际项目很有帮助。在这种情况下,讲师可能会过时或来自于适合该级别计划和文档的特定细分背景。例如,如果要为航天飞机构建导航系统或设计医疗设备,通常更适合的是在开发前投入大量资金进行前端设计,而不是重构代码。另一方面,如果您正在开发一个社交网站,则更敏捷的方法更合适。


+1指出用于不同目的的不同设计需求。关于课堂设计的要点也;问老师是个好主意
Ethel Evans

1
记住通过大学课程的规则:找出教授想要的东西,然后交付。
Christopher Mahan

9

不,如果您使用瀑布方法,则指导老师会正确地告诉您列出所有属性和方法。 Wikipedia注意到对瀑布的批评:

许多人认为瀑布模型在实践中是个坏主意-认为任何不平凡的项目都不可能在进入下一阶段并向其学习之前完美地完成软件产品生命周期的一个阶段。例如,客户可能在审查可用的原型并对其进行评论之前并不确切知道他们需要什么要求。他们可能会不断更改他们的要求。设计师和程序员对此几乎没有控制权。如果客户在完成设计后更改其要求,则必须修改设计以适应新要求。这实际上意味着使大量工作时间无效,这意味着成本增加,尤其是如果已经在Big Design Up Front中投入了大量项目资源。

这些设计方法不会压制设计个人主义的实现者,因为仍有很多部分需要解释,并且可以在结构上施加独特的触感,例如,给图片加上骨骼,并添加肌肉和其他组织以创造出动物,想知道多少你有自由设计那种动物吗?

您已经找到瀑布的缺点,是的,但是一切都有其优点和缺点。


4

在课堂上,我们学习各种软件开发方法。我们关注并用于开发项目的方法是瀑布方法。

您可能已经学习了经典的Waterfall模型,该人从一开始就将其介绍给软件开发人员,这被认为不适合开发大型软件系统。您可能会对阅读Winston Royce的论文《管理大型软件系统的开发》感兴趣,以了解更多有关许多人认为是瀑布模型的问题的信息。

但是,瀑布模型非常适合教您进行软件开发的整个生命周期,并且可以花费时间来学习和执行需求工程,体系结构设计,详细设计,实现,测试和维护的过程非常清晰,不同。

在我们的类图中,我们必须列出所有属性和方法,包括私有属性和方法。我读过几本书,即“清洁代码”,该书说,要使功能尽可能简短和集中。如果它们不能帮助其他开发人员列出所有小功能,这似乎很麻烦(它们是私有的,没有其他人可以使用它们)。另外,在设计程序时,我可能不会想到每个微小的功能,在重构时它们可能会出现。

这些都是非常有效的观点。

列出设计阶段中的所有属性和方法,即使在使用Waterfall时,也可能会过大。您绝对应该列出所有公开的内容以及基本属性。实际上,其他所有内容都是实现细节,您可以通过将实现反向工程到图中来获得。

Clean Code的建议(我从未读过-我只是按照您发布的内容)似乎是公平的,并且即使在使用Waterfall方法时也适用。您可以根据“ 单一职责原则”关注点分离SOLID的其他原则设计类和方法。Waterfall不会告诉您如何设计,只是在您需要进行设计时。就是说,在您学习和思考在实施过程中实现此目标的更好方法时,这很困难。

我认为这指出了一个事实,即设计和实现之间必须非常清楚地进行迭代,这是传统的Waterfall无法解决的问题。


1
@pillmuncher很少有人读过它,这让人很难过。
Thomas Owens

3
关于该论文的最可悲的事情是,大多数人实际上是通过瀑布发现瀑布的,而它却是使实践完全失误的论文。
Joeri Sebrechts

3

如果它们不能帮助其他开发人员列出所有小功能,这似乎很麻烦(它们是私有的,没有其他人可以使用它们)。

如果您认为这很乏味,请等到完成真正的工作编程。考虑一下,对于您来说,软件可能不是一个可行的职业。

另外,在设计程序时,我可能不会想到每个微小的功能,在重构时它们可能会出现。

所以?

讲师要求我们列出所有功能,是否告诉我们错误?

不,这是常见的要求。

而且,这些设计方法是否会挤压设计的实现者(开发人员的个人主义)来编写代码,从而使他们更好地理解代码?

是。令人心碎的是软件开发的重要组成部分。任何时候都将以所有可能的方式击败所有程序员的所有个性。它说,在“上帝的编程规则”中,某处从一座山传给了一位先知。

不,你只是在沉闷中停滞。克服它,重新开始工作。


1
@FreshDaddy。“(大多数情况下)他们永远不会看到私有功能。” 假。赢得彩票后,其他程序员将接管您的代码并查看私有功能。也。一些语言(例如Python)回避这种隐私。
S.Lott

2
@ S.Lott-列出每个私有函数根本不是普遍要求。确实发生了,请不要误会我,但是全面的“在编写代码之前列出每个私有函数”当然很少见。有“必要的泰迪乌斯”,然后有“毫无价值的泰迪乌斯”。考虑到程序员正致力于消除“毫无价值的烦恼”,因此,除非是“生与死”类型的代码,否则现实世界中的客户几乎不会要求如此昂贵且毫无意义的东西。
Morgan Herlocker 2011年

1
@ironcode:'“在编写代码之前列出每个私有函数”确实很罕见。根据我的经验。这是人们学习设计的方式。初级程序员通常会遵循此标准,直到他们能够证明自己的工作不需要这种级别的监督为止。一般不到一年。一个从学校拿走n00bs并在没有监督的情况下将它们扔到编程中的组织,大多数情况下只是在制造大问题。此级别的监督对于确保代码具有有效的工作机会至关重要。
S.Lott

1
@S Lott-我的座右铭是,如果软件开发乏味,那么您做错了。我们是程序员。我们使乏味的工作自动化。我们不会在代码中重复我们自己,也没有理由在文档中重复我们自己。
凯文·克莱恩

1
@kevin:这个答案纯属讽刺。因此,这是完全不合适的,我已对其进行了标记。
Michael Borgwardt

1

编程是在约束内工作的艺术。CPU提供了有限的指令集。IO受硬件设计的约束;创建OS API是为了鼓励某些行为并限制其他行为;高级语言通常被设计为促进一套习惯用法超越其他语言。

方法也被精心设计来限制。

在开发过程的所有方面,您面临的挑战是这些约束条件下实现自己的愿景。您是否会在硬件,语言,API和方法论引发的每一堵墙上ash之以鼻?还是您会找到一种方法,使您希望实现的目标与允许和鼓励的目标相协调?

你做 真的认为您的老师希望阅读无休止的细节吗?然后测试该理论:分解程序,并记录每个原子。当他的书桌在沉重的压力下垂时,我宁愿怀疑您会发现他的真实愿望与您的期望有所不同。

或者像准备的文档,你认为合适的。讲清楚,理解,读起来像达西耶尔·哈米特小说。然后坐下来与他交谈,向他展示您的所作所为,使他信服它的优点。


1

我认为讲师很有才华,可让您执行此项目,从而教会您Waterfall开发的优缺点(主要是缺点)。


1

衡量项目分析复杂性的简单经验法则是:“开发人员或他所工作的公司是否可以对所创建的软件所发生的足够戏剧性的事情(通常包括死亡或大量金钱损失)负责?”

我的某些课程与您有相同的经历。有军事背景的人会教我们分析。这将是完整而详尽的分析,甚至在最小的细节中都计划整个项目的过程。这种项目无法承受很多迭代(炸弹爆炸也可以,预算爆炸也不行),因此在这里没有创造力的地方,您必须按计划进行。

另一方面,如果您已经阅读了一些,那么您肯定会读到有关敏捷方法论的文章。通常,文档减少了,开发人员在开发解决他确实遇到的问题的解决方案时可以发挥自己的创造力的空间更大。

总之,您获得的经验越多,越好,并且您的教练向您展示的内容的确适用于整个行业。只是要知道,管理和设计项目的方式肯定有与编码方式一样多的方式。您会发现所有捍卫者和批评者。在学习时对它们进行测试,然后选择自己喜欢的一种。


并且要注意“如果崩溃,它会杀死人吗?”还有另一种类型,“如果打印出错误的数据,有人会入狱吗”,而且通常会回到那个指法键盘的家伙,所以最好非常详细要求,以最小的细节。
Christopher Mahan

@Christopher:据此调整了我的答案,谢谢您的评论:)
Matthieu

0

有些软件工程课程(例如我所修过的课程)以一种奇怪的方式教授,其中“失败就是成功”,成功是从失败中学习的浪费机会,而且越来越少,越来越多。如果这是其中之一,那么只需坚持做作业并享受怪异。


0

我认为您的老师与您联系不上。商业软件很少设计或记录到这种程度。它太昂贵了,并且如果没有更多的花费就无法维护最终的文档。自从通常使用汇编语言进行编码的日子以来,IMO的此类惯例已成为历史。您最好将时间花在尝试更敏捷的实践上:测试驱动的开发,结对编程,连续重构。

老师有没有“告诉你错”?

我认同。

将无聊的工作分配给知识产权工作者是浪费的。在学校里,无聊的工作几乎没有教学价值,只是为了确保学生从事无聊的工作。这样的练习对学生和整个行业都有负面影响。由于浪费时间,学生受到伤害。该行业受到损害,因为一些学生可能会得出这样的乏味是必要且有用的结论。两者都不是。在软件开发的30年中,我能想到的唯一工作既无聊又有用,那就是更换备份磁带。有机器人可以做到这一点,但它们的价格过高。


2
敢于敢说,您从未在一家从政府合同中赚钱的公司工作过。(编辑)您确实说过商业软件。
Andrew T Finnell

@安德鲁·芬纳尔(Andrew Finnel):真相是如此之多,令人痛苦。
彼得·罗威尔

2
@Andrew-我曾为DOD2167工作。在实践中,这是可怕的,没有生产力。后来我在另一家公司工作,该公司为频繁交付的政府进行敏捷开发。客户非常高兴。他们在六个月内有了一个有用的应用程序,并且每季度获得新功能。
凯文·克莱恩

@Andrew我在美国国防部的工作有2年以上的经验,担任过政府雇员和承包商。敏捷方法正在被采用。我工作的一个团队正在积极使用Scrum,“及时”生成了“足够”的文档。是的,文档(甚至是“足够多”的文档)比许多其他地方要广泛得多,但这通常是由参与方的数量(合同可以易手,其他方可以开发其他系统,等等)和/或安全或生命的重要性以及正在开发的系统的重要性。
Thomas Owens

2
@安德鲁(Andrew)不只是政府。我看过40页的“产品”规范;通常,您可以从此表中选择所有内容并将其交给我,请以管道定界。没有人能永远懒得读他们...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.