math - 探索计算机科学的数学

标签 math computer-science

很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center .




11 年前关闭。




我在软件行业工作了两年。一些让我感到困惑的事情如下:

  • 目前的软件行业缺乏数学的应用。
    例如:当机械工程师设计电线杆时,他通过使用应力分析技术(阅读数学方程式)来计算地基上的应力,以确定应使用哪种钢材和什么等级,但是当软件开发人员部署网络时服务器应用程序他只是猜测他的服务器上的估计负载,剩下的就靠运气和上帝了,他没有什么可以用数学模拟来回答他的问题(我的观察)。
  • 伟大的软件(风洞模拟器等)和计算程序(如 matlab 等)可以模拟现实世界的问题(因为它们有自己的数学方程),但我们软件行业的人仍然不知道在内存、计算方面有多少实际资源当我们的服务器端应用程序实际部署时,将需要资源、时钟速度、RAM 等。我们只是继续猜测解决方案,并通过或多或少的“命中和试验”(我的观察)来解决此类问题。
  • 编程是在 API 上完成的,无论是在 c、C#、java 等中。我们永远无法准确检查我们代码的复杂性和效率,因为在某处我们使用了由其他人编写的抽象,我们没有源代码或者我们没有时间检查它。
    例如如果我用 C# 或 java 编写一个简单的客户端服务器应用程序,我永远无法事先计算出这段代码的效率和复杂性会有多少,或者整个客户端服务器应用程序需要的最低限度是多少(我的观察) .
  • 负载平衡和可扩展性分析太模糊了,如果服务器上的请求增加(我的观察),则只能通过添加更多节点来解决。

  • 请张贴对我上述任何令人费解的观察结果的答案。
    也请张贴相关引用资料。
    如果有人证明我是错的并以正确的方式展示,我会很高兴。
    提前致谢
    阿西什

    最佳答案

    我认为这有几个原因。一是在许多情况下,简单地完成工作比让它表现得尽可能好更重要。我写的很多软件都是偶尔在小数据集上运行的东西,或者性能影响非常微不足道的东西(它是一个对每个元素进行固定计算的循环,所以它是微不足道的 O(n) )。对于大多数这种软件,花时间详分割析运行时间是很愚蠢的。

    另一个原因是软件以后很容易更改。一旦你 build 了一座桥梁,任何修复都可能非常昂贵,所以在你做之前非常确定你的设计是很好的。在软件中,除非您在早期就做出了糟糕的架构选择,否则一旦您拥有更多有关其性能的真实数据,您通常可以找到并优化性能热点。为了避免那些可怕的架构选择,您通常可以进行近似的粗略计算(确保您没有在大型数据集上使用 O(2^n) 算法,并在一个因子内进行估计大约 10 个左右,您需要多少资源才能实现您期望的最重负载)。这些确实需要一些分析,但通常它可以非常快且不加分。

    在某些情况下,您确实确实需要从系统中榨取终极性能。在这些情况下,人们经常会真正坐下来,计算出他们正在使用的系统的性能特征,并进行非常详细的分析。例如,请参阅 Ulrich Drepper 令人印象深刻的论文 What Every Programmer Should Know About Memory (pdf) .

    关于math - 探索计算机科学的数学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1970994/

    相关文章:

    r - 有没有办法对 log(x+1) 进行反向转换?

    c# - 如何将值 C# 舍入到最接近的整数?

    python - 返回 如果变量 = 0,则将 "change"更改为 : How do I remove a variable (dollars, 25 美分、一毛钱、镍币、便士)?

    html - 如果HTTP是超文本传输​​协议(protocol),我们如何上传文件和图片呢?

    algorithm - SiftDown 算法比较次数

    ruby - Ruby 如何允许方法参数默认值从早期参数派生?

    c++ - 数学将1970年以来的秒转换为日期,反之亦然

    java - 将二维数组分成不相等的矩形和正方形

    javascript - JavaScript 中的正数到负数?

    computer-science - 创建最短的图灵完备解释器