在我的职业生涯中,我遇到了两大类理论:物理理论和教育/管理理论:
根据物理世界的判断,物理理论要么是正确的(在适当的条件下),要么是不正确的。
教育/管理理论看起来像物理理论,但缺乏严格的测试。他们充其量只是提出了解决问题的新方法。多种理论很有用,因为其中一种理论可能会以正确的方式与您交谈。
作为软件工程的业余爱好者,似乎有很多软件工程理论(如敏捷编程,测试驱动设计,模式,极限编程)。我是否应该将这些理论视为类似物理或教育/管理?
或者我误解了软件工程并发现自己处于“甚至不错”的位置?
答案 0 :(得分:22)
软件工程最终是关于心理学,人类如何管理复杂性。因此,软件工程原理更像是教育和管理理论而非物理原理。
一些软件工程背后有坚实的数学:O(n log n)排序比O(n ^ 2)排序等更快。但大多数软件工程都是关于人类如何思考软件。如何组织事物,以便维护者不要发疯,预测可能会发生什么变化,什么不可能,预防和发现人为错误等等。它是心理学或社会学的一个分支。
答案 1 :(得分:4)
我认为适当的理论分裂是那些“更难”的科学(可以有证据)和更柔和的主题,定性答案和证据很少(如果有的话)。
软件对我来说主要是关于语言和沟通,这个主题主要是定性和主观的。我们时不时地触及算法和其他“硬”领域,其中存在证据和严谨的形式。所以,是的,请两个。
答案 2 :(得分:3)
甚至没错。
所有的软件工程“理论”似乎都只是对特定事物的建议,试图看看它们是否能让你和你的团队更有成效。即使人们可以像科学理论一样将它们设置为可证伪的,但对它来说却没什么意义。这并不是说要了解它们是不值得的 - 相反,你应该尽可能多地熟悉它们,并试着找出他们可以更好地工作的团队和环境。但要小心:避免教条,并认为有子弹。
答案 3 :(得分:3)
我不会称之为敏捷编程,测试驱动设计,模式,极限编程等“理论”,它们是方法论或工作方式。他们不做任何断言。
答案 4 :(得分:1)
它们就像食谱:它们是指导方针,其成功取决于:
答案 5 :(得分:1)
除了理论,还有框架,模型和经验法则。当然,这些想法基于一个不太严格的基础,它基本上属于你的教育/管理类别。
计算机科学有一些强有力的基础理论(根据你的定义是物理理论),但这些理论主要是将较小的元素联系在一起。
另一方面,软件工程是一门相对较新的学科,涉及利用计算机和偶尔的计算机科学来构建软件系统。该领域的大部分实践完全基于非严格的实验和轶事证据。由于陪审团仍然处于最简单的问题上,因此大多数通过实践的内容最好被描述为纯粹的猜测和非理性偏好。这是其中一个你真正需要了解很多的学科,以了解在非常不稳定的卡片上建造了多少。保罗。
答案 6 :(得分:1)
无形,编程是与另一个人,甚至其他程序员相关的非常困难的活动。软件工程试图在没有结构的地方添加结构,但这种结构并非根植于现实的必然性。因此,当试图安抚他们的技术神(或恶魔)时,所有这些方法都变成了一群人的行为方式。
答案 7 :(得分:1)
所有这些理论和最佳实践仍然没有让我们能够可靠和可预测地生产软件系统。 these surveys的最新版本是2001年; Jeff's column from 2006仍然感到高失败率。
看看是否有人正在进行最新调查,这很有意思。
航空电子设备和运行我的汽车的软件似乎没有在接近企业软件报价的任何事情上失败。企业开发人员为什么不密切关注他们的实践?也许我们都应该写Ada .... [开玩笑]
答案 8 :(得分:1)
对我而言,这是我自己的理论,许多其他人都被用作基础。我不知道任何使用单一特定理论的人。这不是一个警察的答案。
正如有不同的语言,理论/实践/方法论将在不同的情况下使用。结构,规则和定义是人们理解事物如何完成的所有方式,但要实现的是主观的。
适应,了解敏捷,极端或其他方法,由客户,项目,程序员,时间决定,尤其是使您成功/快乐的原因。成为一个团队,调整/适应您的团队为更大的利益所做的事情;只要记住你有自己定义的东西,或者不仅仅是混乱。
[肥皂盒] 我开始使用转换的平板键盘和64K升级对Atari 400进行编程。当我开始上大学时,就是VB 1.0,我看到我的经济学教师用它来构建教学工具,帮助人们使用图形和视觉输入来学习更多关于经济学的知识。那很酷!而且我知道我能做到这一点。
同样的经济学教师,后来成为一名IT老师(他很好),问我是否会教课程进行调试。他说,“我没有遇到能够理解这些概念的人,并且能够像你一样快速地进行调试,你能告诉我们你所知道的以及你是如何做到的。”当然,这对我的自我有所增强,但教导,指导和帮助他人。
这些事件中的每一个都激发了我帮助其他人的愿望。对我来说,我想要一台计算机完全按我的意愿行事,帮助商业和家庭生活中的其他人提高他们的生活资格,学习更多,并完成更多工作。
有人曾对我说过,“你的工具就像你的工具一样好”。学习,实践和成长。
如果你已经定义了某些东西,那就是有效的,有秩序的,它会拉伸你和界限,你没有错。
答案 9 :(得分:1)
一般来说,信息学领域分为4个领域(需要找到源的链接,SWEBOK?),虽然相关且相互关联,但它们是截然不同的:
Steve McConnel的“专业软件开发”对工程与科学进行了很好的分析。看看他的Software Engineering, Not Computer Science。
软件开发更多的是工程 - 找到实际问题的实用解决方案 - 而不是其他任何问题。软件工程依赖于计算机科学,数学,复杂性理论,系统学,心理学和其他学科是正确的,但它不能等同于它们中的任何一个,也不是它们中的任何一个。
答案 10 :(得分:1)
是否有像“软件工程”这样的想法?
或者软件开发是“工程”吗?
<强>事实:强>
现实还是幻想?选择一个: - )
有些人说我们没有“坚实”的实践和“理论”,因为我们是一个年轻的“工程”分支,我们将会有时间。那些人说我们需要更多工作“理论”或基础。
有些人说软件开发是“实验性社交活动”,因为我们的问题域的性质。我们将实践理论方法论过程,但它们总是具有二阶效应。独特的人,他们的感受品质以及他们与其他人的互动更具影响力。 那些人将软件开发视为复杂自适应系统
还有另一个现实
%80的软件开发活动真的不需要非常的思路。任何“普通”的人都可以做到。
但剩余的20%部分是艰巨而多元化的任务。
即使还有另一个新视角我的一个: - )
这种观点认为软件开发不是“工程”的分支。它是“自然科学与社会科学”的佼佼者。所以我们需要软件人类学和人类学家。
答案 11 :(得分:0)
理论:我认为理论是描述自然系统“如何”运作的任何东西,并且为了证明它,它具有基于先前知识的逻辑演绎,并通过使用实验进行的逻辑归纳来证实。
你将这些理论和实验的全部称为科学。
软件:软件是一个人造系统。一个工程系统。工程应用科学来创建新系统。在这方面,纯软件工程应用离散数学系统的科学。
但商业软件工程有一个不同的动机叫做经济学。 在这方面,它必须考虑影响经济学的所有因素,其中主要是人。因此,心理学起着重要作用。 但是,由于心理学本身只是一种“如何”人类思维基于模式识别而没有任何基于人类生物学的逻辑推论的理论,它有许多缺陷,如相关性意味着因果关系。
所以,是的,我想从上面的答案中,您可以更好地了解商业软件工程的总体情况。