哪些特定的实践可以称为“软件技巧”,而不是“软件工程”?[关闭]


11

尽管这不是一个新主意,但在过去几年中,人们对软件工艺的兴趣似乎已大大增加了(特别是经常被推荐的书Clean Code的全书是Clean Code:A Agile Software Craftsmanship)。

我个人认为软件工艺是一种很好的软件工程,并且对确保最终结果感到高兴(无论是作为最终用户还是作为维护该软件的人)都很感兴趣,并且也将重点放在编码级别上事物比上级过程事物更重要。

打个比方-许多建筑物都是在50年代和60年代以非常现代的风格建造的,很少考虑居住在其中的人或这些建筑物随着时间的流逝如何。这些建筑中有许多迅速发展成贫民窟,或者在其预期寿命很久之前就被拆除了。我相信大多数有几年经验的开发人员都会经历过类似的代码库。

软件工匠可能会做哪些软件工程师(可能是坏人)可能不会做的具体事情呢?


1
这个比喻似乎不合适。软件工艺和软件工程都具有提高软件的长期实用性的相同目标(和既得利益)。
rwong

3
我认为这主要是您是否将“工程师”或“工匠”视为更酷的标题,而当前的答案似乎证明了这一点。无论标题你喜欢显然意味着人知道他们在做什么,毕竟。
本·布罗卡

我想说两者之间的区别在于,一个工匠是一个人工作,一个工程师是一个团队的一部分。从广义上讲,这似乎满足了对这两个角色的主要描述,并不是两个人的技能都不同,而是他们的方法来自不同的职位。
gbjbaanb

听起来这真像是一个自命不凡的称呼。
michaelsnowden '16

Answers:


13

我要说专业和工匠之间的唯一区别是关心一点点的热情。没有一种具体的,可观察的做法可以将一个人归类为工匠,而是将其归为一类品质:

  • 工匠关心的是作品的实际质量,而不仅仅是关注的质量。
  • 工匠对自己的手艺感兴趣,而不仅仅是完成工作,而是自然而然地倾向于自己的手艺。
  • 工匠在乎自己的职业,渴望提高自己的技能,不仅要发展自己的职业
  • 工匠会在带薪工作时间之外花费一些时间(即使是很少的时间)来做手艺,无论是讨论,学习还是思考。
  • 工匠知道他实际上所知不多,对此感到谦卑。
  • 工匠愿意教那些愿意学习的人,为那些寻求指导的人提供指导,并在需要时亲自寻找那些东西。

一点点的热情就涵盖了所有这些,而又不费吹灰之力。


我觉得最后一个是特别重要
洛维斯

7

我个人认为软件工艺是一种很好的软件工程,并且对确保最终结果感到高兴(无论是作为最终用户还是作为维护该软件的人)都很感兴趣,并且也将重点放在编码级别上事物比上级过程事物更重要。

正如我的一位教授曾经说过的:“作为一名软件工程师,交付软件不仅是您的工作。交付软件可以使您的客户满意是您的工作。”

软件工匠可能会做哪些软件工程师(可能是坏人)可能不会做的具体事情呢?

没什么-工程师是工匠...但是更多。工程以工艺为基础。

作为手工艺者和工程师,您是一些有经验的人,他们经过教育和经验的结合。您遵循既定程序。您也很务实,意识到什么是坏的,需要做得更好。

但是,工程师在此基础上增加了对经济学,理论和科学的关注。您担心以最少的成本获得最大的收益。您想应用心理学,社会学,管理,人机交互和计算机科学的理论来解决您的问题(人际和技术问题)。而且您肯定受过教育以备份您的经验。


2
而且您肯定受过教育,可以备份您的经验 -很高兴您没有说“正式”。
treecoder

@greengit在许多地方,必须使用正规教育才能使用标题“ engineer”。在欧洲,这意味着要获得工程学学位。意大利还增加了通过认证考试的要求。在北美,德克萨斯州,佛罗里达州和加拿大,要求使用“工程师”头衔的人员(包括软件工程师)通过许可考试。
Thomas Owens

尽管这并不意味着没有受过正规教育的人就不能练习工程。他们只是不能称自己为工程师为专业头衔。
Thomas Owens

1
我不同意,工程师是不是一定是工匠。
妮可(Nicole)

2
@Renesis根据定义,工程是一种技巧。工艺的定义:“需要特殊技能,特别是手工技能的艺术,行业或职业”。工程是需要特殊技能的职业,因此它是一种手工艺。但是,这也是科学理论的应用(除其他外),这使其变得更加有用。
Thomas Owens

2

软件技艺运动的发起是对“传统”软件工程的失败和令人不满意的结果的回应,“当今”软件工程(以及一些开发人员的粗心大意)如今导致了利益相关者和用户对我们专业的不信任。

它的目的是双重的:恢复对程序员的信任,并为此目的,提高软件质量和开发人员技能的标准。

Sw工艺精湛的技术实践包括:

  • SOLID设计原则
  • 设计模式
  • TDD(“双重记帐”隐喻)
  • ...

和团队/组织实践:

  • 配对编程
  • 指导
  • 代码片
  • Dojos /代码撤退
  • ...

因此,我想说两者之间的区别很明显:软件工艺试图解决软件工程在40多年来存在的大部分问题,这些问题如今使我们的学科显得不可靠,并且因失败的历史而受挫。


1
我不同意-软件工程失败的原因是因为它没有工程师,只有工匠才装作工程师。美国国家航空航天局没有使用工匠将飞船送入月球!
gbjbaanb

@gbjbaanb我认为这是完全相反的-我们确实有工程师,这就是为什么他们试图将其他行业的传统工程模型和思维定律应用到软件上,但是却没有用。
guillaume31 '01

航天器不是由无形的东西制成,可以无休止地进行改造,重新设计和重新部署。他们遵守的法律与软件程序大不相同。
guillaume31

航天飞机至少可以重新部署助推器,毫无疑问,它们可以重用以前火箭的钻头(或至少是知识)。航天器中包含许多软件。我不认为它们是从头开始使用每一个新的卫星或探针,并且一旦部署就几乎不会应用更新。软件工程可以而且显然确实可以工作-但前提是您要以工程师而非工艺师的心态来对待软件工程。
gbjbaanb

请在软件的上下文中定义“工程师的思维方式”。
guillaume31

1

通过http://manifesto.softwarecraftsmanship.org/可以得出以下结论。

工匠不同于传统的“工程师”观念,因为

  • 他们注重价值,而不仅仅是满足要求。
  • 他们甚至以代码风格来关注质量,而不仅仅是满足要求。
  • 他们参与了更广泛的软件开发社区,而不仅仅是他们的工作场所。
  • 他们不仅了解当今的最新技术是明天的垃圾,而且还积极地将其推向一个新的高度。
  • 这不只是一份工作,这是他们谁

4
老实说,所有这些要点都描述了一个好的工程师。尤其是1,2,和4
托马斯欧文斯

@ThomasOwens那坏工程师呢?他也是手工艺人吗?还是好工与坏工匠?
欣快的2016年

@Euphoric我认为没有出色的工匠就无法成为一名优秀的工程师。就像上演了。在获得“优秀工程师”之前,您必须具有“优秀工匠”的才能。但是,您可以成为优秀的工匠而不是优秀的工程师。
Thomas Owens

1

鲍伯叔叔以某种方式暗示编程是一门非常年轻的学科,尚没有政府认可的稳定法律或规则(或者是弗雷德里克·布鲁克斯?)。我不是在这里引用动词。

由于渎职行为,您不能撤销任何人的编程许可。程序设计缺乏法律和规则,而法律和法规则不符合符合“职业”的法律。医生会因无能杀死一名患者,并冒着被剥夺其医生职称或许可的风险。

程序员编写有缺陷的程序或由于能力不足而使项目失败,他可以自由继续编程。

我认为这几乎就是使编程成为技术的原因。陶壶制造商不会制造两个相同的陶壶。您也从未听说过有一家陶罐制造商被迫召回有缺陷的陶罐。编程仍然是非常手动的个人工作。有时,您甚至可以根据代码的样式判断是谁编写了一段代码。


0

重构为模式。

也就是说,构建满足90%的软件需求的东西,然后将整个项目重构为一些简洁,优雅的设计。

通常,软件工程会阻止您执行此操作,因为满足90%的要求意味着该软件对客户具有足够的商业价值,因此不应以任何重大方式对其进行修改(高优先级的错误修正除外)。

相反,软件工程会建议您此时稳定软件。

此外,根据软件工程的说法,如果一个项目从一开始就不以优雅的设计作为开始,那么它将被视为执行不佳的项目(无论项目的结果如何)。

峰值解决方案。

根据流行的软件工程方法,通常无法接受受峰值解决方案启发的设计。

不论出于何种原因,都不要使用

在软件工程中,仅在软件系统生命周期结束时才允许进行任何弃用。这必须作为SDLC的一部分进行计划。

在实践中,相当普遍的情况是,软件接口的特定部分的缺陷会在生产几年后被发现,并且该特定部分可以在生命周期中途弃用,而不会使软件的其余部分无效。根据软件工程,在弃用之后,这将需要对整个软件系统进行重新认证。

归根结底,软件工艺是个人努力做出的良好判断,而软件工程则是保守的知识体系。允许对项目的决策做出好的判断是将软件工艺与软件工程区分开来的原因。


-1

我想说,进行覆盖100%代码的单元测试将是一个很好的选择。这样就可以去除多余的东西。

我有时将软件开发与雕塑进行比较。这不是您添加的内容,而是您带走的内容。

显然,您可以将它推得太远。没有人会说一个闪亮的小卵石是一个很好的雕塑:S


3
我们在这里谈论有多闪亮?:-)
克里斯

1
大多数时候,我都同意这一点-但我不确定严格地100%总是值得的-例如,没有逻辑的吸气剂/塞特剂。一般情况下,生成的代码最好不进行单元测试(尽管可能需要集成测试)
FinnNk 2010年

@FinnNk-我同意。我最近使用过dotCover,它说如果在另一项测试中使用了getter / setter,则可以使用它。所以,我真的不意味着每个吸气和二传手的测试方法
安东尼·斯科特
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.