计算机科学中的数学探索

8
我在软件行业工作了两年。以下是我困惑的一些事情:
1. 当前软件行业缺乏数学应用。 例如:当机械工程师设计电力杆时,他使用应力分析技术(阅读数学方程式)计算基础上的应力,以确定应使用何种类型和等级的钢材。但是,当软件开发人员部署Web服务器应用程序时,他只是猜测服务器上的估计负载,并将其余的留给运气和上帝,没有任何他可以用来模拟数学上回答他的问题的东西(我的观察)。
2. 有很多优秀的软件(如风洞模拟器等)和计算程序(如MATLAB等),可以模拟现实世界中的问题(因为它们有它们的数学方程式),但我们在软件行业仍然不知道我们的服务器端应用程序实际部署时需要多少实际资源,例如内存、计算资源、时钟速度、RAM等等。我们只是继续猜测解决方案,并通过更多或更少的“试错”来解决这些问题(我的观察)。
3. 编程是在API上完成的,无论是在C、C#、Java等语言中。我们永远无法准确检查我们的代码复杂性和效率,因为我们在某个地方使用了由其他人编写的抽象层,其源代码要么没有,要么我们没有时间去检查它。 例如,如果我在C#或Java中编写一个简单的客户端服务器应用程序,我永远无法预先计算出这段代码的效率和复杂性将是多少,或者整个客户端服务器应用程序将需要的最低要求是什么(我的观察)。
4. 负载平衡和可扩展性分析过于模糊,仅通过添加更多节点来解决服务器上的请求增加问题(我的观察)。
请回答我上述令人困惑的观察。请附上相关参考资料。
如果有人证明我错了并展示了正确的方法,我会很高兴。
提前致谢,
Ashish

应该是社区维基。 - Paul Sasik
3
这是一个真正的问题,非常合理。 - Eric J.
2
Eric J.,这涉及编程且可能适合社区Wiki,但是没有明确的问题。我不喜欢纠缠于语义,但它们在了解如何回答问题方面起着重要作用。"我困了"和"我怎么才能不那么困?"或者"为什么我经常感到困倦?"或者"人们通常如何预防瞌睡?"是不同的问题。 - Drew Dormann
1
我认为这是一个值得讨论的合理话题,尽管有些宽泛和模糊。它可能应该是社区维基,因为它不是一个具有明确定义正确答案的问题。 - Brian Campbell
12个回答

0

软件工程与典型的工程领域非常不同。在“正常”的工程中,我们受到物理宇宙及其中已知的法则的限制,而在软件世界中却没有这样的边界。

编写软件通常是试图将现实世界的一个子集映射到虚拟现实中。在这里,我们自己定义法则,只选择需要的部分,并使它们变得足够复杂。由于这种根本性的差异,您需要从不同的角度来看待问题解决。我们试图进行抽象,以使复杂的部分变得简单,就像我们教孩子黄色+蓝色=绿色一样,实际上是纸张上反射的光波长发生了变化。

然而,有时我们会受到不同的法律约束。例如,大O表示法、测试覆盖率、复杂度测量、UI测量等都是数学法则的模型。如果您深入研究数字信号处理、实时编程和函数式编程,您会发现程序员经常使用方程式来找出实现他们想要的功能的方法。但是,这些技术并不真正(在某种程度上)有用于创建一个可以解决复杂逻辑、分支和与用户交互的虚拟域。


我经常发现红色+绿色=黄色。 - outis

0
在工程领域中,为什么需要风洞、模拟等技术呢?因为制作一个缩小版的原型比制造完整的产品并进行测试要便宜得多。此外,在全尺寸桥梁上进行失败测试是具有破坏性的,每次测试都需要建造新的桥梁。
在软件方面,一旦您拥有通过要求的原型,您就拥有了完整的解决方案。没有必要构建全尺寸版本。在启动服务器应用程序之前,您应该对其运行负载模拟,但由于负载是可变且常常不可预测的,因此最好通过添加更多硬件来使应用程序能够扩展到任何大小,而不是针对特定负载进行设计。桥梁建造者需要处理给定的目标负载。如果他们预测每次使用10辆车,然后一年后桥梁的流行度飙升到每天100万辆车,如果它失败了,没有人会感到惊讶。但是对于Web应用程序来说,这种扩展是必须发生的。

构建原型或理解所有扩展问题并非总是可能的。这就是为什么计算机模拟物理问题如此受欢迎的原因。该软件广泛可用,而硬件足够强大,使得非常复杂的解决方案成为可能。人们始终需要注意黑天鹅、非线性效应和数学的局限性。 - duffymo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接