Ash*_*rma 8 math computer-science
我在软件行业工作了两年.让我困惑的一些事情如下:
当前软件行业缺乏数学应用.
例如:当机械工程师设计电线杆时,他通过使用应力分析技术(读取数学方程式)来计算基础上的应力,以确定应该使用何种钢材和钢材等级,但是当软件开发人员部署网络时服务器应用程序,他只是猜测他的服务器上的估计负载,其余的运气和上帝,他没有什么可以用来模拟数学来回答他的问题(我的观察).
伟大的软件(风洞模拟器等)和计算程序(如matlab等)可以模拟现实世界的问题(因为它们有他们的数学方程式)但我们在软件行业仍然无法知道在内存,计算方面有多少实际资源当我们的服务器端应用程序实际部署时,将需要资源,时钟速度,RAM等.我们只是继续猜测解决方案并通过或多或少的"命中和试验"来解决这个问题(我的观察).
编程是在API上进行的,无论是在c,C#,java等中.我们永远无法准确地检查代码的复杂性,从而无法检查效率,因为我们正在使用其他人编写的抽象,其源代码我们要么没有或者我们没有时间检查它.
例如,如果我用C#或java编写一个简单的客户端服务器应用程序,我无法事先计算出这个代码的效率和复杂程度,或整个客户端服务器应用程序需要的最小值(我的观察结果) ).
负载平衡和可伸缩性分析过于模糊,仅在服务器上的请求增加时添加更多节点才能解决(我的观察).
请发布以上任何令人费解的观察结果的答案.请发布相关参考资料.
如果有人证明我错了并且表明正确的方式,我会很高兴.
提前致谢
阿希什
我认为这有几个原因.一个是,在许多情况下,简单地完成工作比使其尽可能好地完成更重要.我编写的很多软件只会在小数据集上运行,或者性能影响非常小的东西(它是一个对每个元素进行固定计算的循环,所以它通常是O(n) ).对于大多数此类软件,花时间详细分析运行时间是愚蠢的.
另一个原因是软件以后很容易更改.一旦你构建了一个桥梁,任何修复都会非常昂贵,所以在你做之前确定你的设计是件好事.在软件中,除非你早期做出了糟糕的架构选择,否则一旦你掌握了一些关于它的表现的更真实的数据,你通常可以找到并优化性能热点.为了避免那些可怕的架构选择,您通常可以进行近似的,包络后的计算(确保您不在大型数据集上使用O(2 ^ n)算法,并在一个因子内进行估计10个左右你需要多少资源来满足你预期的最重负荷.这些确实需要进行一些分析,但通常它可以非常快速地脱离袖口.
然而,在某些情况下,您确实需要从系统中挤出最终性能.在这种情况下,人们经常会坐下来,计算出他们正在使用的系统的性能特征,并进行非常详细的分析.例如,请参阅Ulrich Drepper非常令人印象深刻的论文"每位程序员应该了解的记忆"(pdf).