12

在我的职业生涯中,我遇到了两大类理论:物理理论和教育/管理理论:

根据物理世界的判断,物理理论要么正确(在适当的条件下)要么不正确。

教育/管理理论看起来像物理理论,但它们缺乏严格的测试。充其量,它们提供了思考问题的新方法。多种理论很有用,因为其中一种可能会以正确的方式与您交谈。

作为一名软件工程爱好者,似乎有很多软件工程理论(如敏捷编程、测试驱动设计、模式、极限编程)。我应该认为这些理论是类似于物理的还是类似于教育/管理的?

还是我误解了软件工程并发现自己处于“甚至没有错”的位置?

4

12 回答 12

22

软件工程最终是关于心理学的,即人类如何管理复杂性。因此,软件工程原理更像是教育和管理理论,而不是物理原理。

一些软件工程背后有扎实的数学:O(n log n) 排序比 O(n^2) 排序快,等等。但大多数软件工程是关于人类如何看待软件的。如何组织事物以使维护者不会发疯,预测哪些可能会发生变化,哪些不会,防止和检测人为错误等。它是心理学或社会学的一个分支。

于 2009-02-06T19:34:58.410 回答
4

我认为适当的理论分裂是那些“更难”的科学(可以有证据的地方)和具有定性答案的较软的主题,如果有的话,证据很少。

对我来说,软件主要是关于语言和交流的,这是一个主要是定性和主观的话题。我们时不时地触及算法和其他“困难”领域,其中存在证明和严格的形式主义。所以,是的,两者都请。

于 2009-02-06T19:37:44.160 回答
3

甚至没有错。

所有的软件工程“理论”似乎都只是对特定事物的建议,试图看看它们是否能让你和你的团队更有效率。即使可以将它们设置为像科学理论一样可证伪,也没有什么意义。这并不是说不值得了解它们——相反,您应该尽可能多地熟悉它们,并尝试弄清楚它们在什么样的团队和环境中可能会更好地工作。但要小心:避免教条和认为有灵丹妙药。

于 2009-02-06T19:35:45.147 回答
3

我不会将敏捷编程、测试驱动设计、模式、极限编程等称为“理论”,它们是方法论或工作方式。他们不做任何断言。

于 2009-02-06T19:36:45.490 回答
2

一般来说,信息学领域分为 4 个区域(需要找到源的链接,SWEBOK?),虽然相关且相互关联,但它们是截然不同的:

  • 计算机科学
  • 软件工程
  • 计算机工程
  • 信息系统

Steve McConnel 的“专业软件开发”中对工程与科学进行了很好的分析。查看他的软件工程,而不是计算机科学

软件开发更多的是关于工程——为实际问题寻找实用的解决方案——而不是其他任何事情。没错,软件工程依赖于计算机科学、数学、复杂性理论、系统学、心理学等学科,但不能等同于其中任何一个,也不是一批。

于 2009-12-13T00:04:55.890 回答
1

它们就像食谱:它们是指导方针,其成功取决于:

  • 部分原因在于配方的质量
  • 部分是关于成分的质量
  • 部分取决于从业者的技能(和可用时间)
于 2009-02-06T19:35:23.307 回答
1

除了理论,还有框架、模型和经验法则。想法,当然,但基于不太严格的基础,大致属于您的教育/管理类别。

计算机科学有一些强大的基础理论(根据您的定义是物理理论),但这些理论主要包括将较小的元素联系在一起。

另一方面,软件工程是一门相对较新的学科,涉及利用计算机和偶尔的计算机科学来构建软件系统。该领域的大多数实践完全基于非严格的实验和轶事证据。由于即使是最简单的问题也没有陪审团,所以大多数通过实践的东西可以最好地描述为纯粹的猜测和非理性的偏好。这是其中一个你真的必须知道很多才能意识到有多少是建立在一个非常不稳定的牌屋上的学科之一。

保罗。

于 2009-02-06T19:46:33.410 回答
1

由于是无形的,编程是一项很难与另一个人,甚至是其他程序员联系起来的活动。软件工程试图在没有结构的地方添加结构,但这种结构并非植根于现实的必然性。因此,在试图安抚他们的技术神(或恶魔)时,所有这些方法都变得像宗教一样。

于 2009-02-06T19:47:01.757 回答
1

所有这些理论和最佳实践仍未使我们能够可靠且可预测地生产软件系统。这些调查中最新的一次是 2001 年;杰夫 2006 年的专栏仍然感叹高故障率。

看看是否有人在进行更新的调查会很有趣。

航空电子设备和运行我汽车的软件似乎并没有在接近企业软件报价的情况下出现故障。为什么企业开发人员不更密切地遵循他们的实践?也许我们都应该写艾达……[开玩笑]

于 2009-02-06T20:08:10.793 回答
1

对我来说,这是我自己的理论,并以许多其他理论为基础。我不知道有人使用单一的特定理论。这不是一个逃避的答案。

正如有不同的语言一样,理论/实践/方法将在不同的情况下使用。结构、规则和定义都是人们理解事情如何完成的方式,但要完成什么是主观的。

适应,了解客户、项目、程序员、时间的敏捷、极端或其他方法,尤其是什么让你成功/快乐。成为一个团队并调整/适应您的团队为更大的利益所做的事情;只要记住有一些你已经在自己的脑海中定义的东西,否则它不仅仅是混乱。

[SOAPBOX] 我开始在雅达利 400 上编程,它带有转换后的平面键盘和 64K 升级。当我开始上大学时,我看到我的经济学老师使用 VB 1.0 来构建一个教学工具,以帮助人们使用图表和视觉输入来了解更多关于经济学的知识。那太酷了!我知道我能做到。

同一位经济学老师,后来也成为了一名 IT 老师(他很好),问我是否会教一堂调试课。他说:“我还没有遇到像你一样理解概念并具有天生调试能力的人,你能教我们你知道什么以及你是怎么做的吗?” 当然,这对我的自我来说是一种提升,但它是为了教导、指导和帮助他人。

每一个例子都满足了我帮助他人的愿望。对我来说,我想要一台电脑来做我想做的事,帮助商业和家庭生活中的其他人提高他们的生活质量,学习更多,完成更多工作。

有一次有人对我说,“你只有你的工具”。学习、实践和成长。

如果你已经定义了一些东西,它正在工作,有秩序,它延伸了你和界限,你就没有错。

于 2009-02-06T20:55:07.890 回答
1

有没有像“软件工程”这样的想法?

还是软件开发是“工程”?

事实:

  • 对于许多其他“工程”而言,我们的行业非常年轻。
  • 我们仍然没有“坚实的”实践和“理论”。
  • 所以说实话,如果我们从其他成熟的工程实践的角度来看,很难将我们所做的称为“工程”
  • 我们在失败方面的名声很差[我们的失败率在许多工程部门是不能接受的]

现实还是幻想?选一个 :-)

  • 有些人说我们没有“坚实的”实践和“理论”,因为我们是一个年轻的“工程”分支,到时候我们会有的。那些家伙说我们需要研究更多的“理论”或基础。

  • 有些人说软件开发是“实验性的社会活动”,因为我们问题领域的性质。我们将有实践理论方法论过程,但它们总是具有二阶效应。独特的人、他们的感受品质以及他们与其他人的互动更有影响力。那些人将软件开发视为复杂的自适应系统

还有另一个现实

%80 的软件开发活动真的不需要很聪明的头脑。任何“普通”人都可以做到。

但是剩下的 %20 部分是非常艰巨和多学科的任务。

甚至还有另一个新的视角我的一个:-)

这种观点说软件开发不是“工程”的一个分支。它是“自然科学与社会科学”的分支。所以我们需要软件人类学和人类学家。

于 2013-05-31T19:28:49.350 回答
0

理论:我认为理论是描述自然系统“如何”工作的任何东西,并且为了证明它,基于先前的知识进行逻辑推论,并通过使用实验进行的逻辑归纳来证实。

你把这些理论和实验的整体称为科学。

软件:软件是一个人造系统。一个工程系统。工程应用科学来创建新系统。在这方面,纯软件工程应用离散数学系统的科学。

但是商业软件工程有一个不同的动机,叫做经济学。在这方面,它必须考虑影响经济学的所有因素,其中最主要的是人。因此,心理学起着很大的作用。但是,由于心理学本身只是一种基于模式识别的人类思维“如何”工作的理论,没有任何基于人类生物学的逻辑推论,因此它存在许多缺陷,例如相关性暗示因果关系。

所以,是的,我认为从上面的答案中,您可以更好地理解商业软件工程是什么。

于 2016-09-29T18:32:56.030 回答