日更127天 - (翻译) 编程是否需要数学 (上)

这是一篇翻译的文章。这也是程序员的经典问题:一个好的程序员是否要具备好的数学基础,或者说数学不好能否成为一个好的程序员?特别是这几年,高工资的程序员竞争也激励。估计为了更快,高标准化低筛选人才,各个IT公司特别是大厂也把算法作为面试的必选项。从各个大厂的算法面试题库中也产生了LeetCode这样程序员入职前必刷网站。甚至很多非程序员也能通过速刷LeetCode进入这个行业。算法实际快成为了这个行业的入门砖。但对于不少程序员,在日常工作中似乎又很少用到算法,这就是比较让人困惑的地方,也是为什么网上有那么多关于这个话题的原因所在吧。


每当我想学习算法时,数学就会是个门槛。我承认我的数学不是很好,但也不是很差,但这种 "不差 "的水平不足以通过大厂的面试。这样的面试会有的算法所涉及的时间和空间的复杂性,以及排序和搜索技术的比较。我需要学习所有这些内容。在这个学习过程中,我搜索到了几篇关于此主题的文章,其中最有名的就是Steve Yegge(前Google程序员)。以下是我搜到的几篇相关的文章:

  1. Steve Summit写的C语言里用到的数学知识
  2. Steve Yegge 写的《Math Everyday》和 《Math for Programmers》
  3. Eric S. Raymond 成为黑客需要多少数学知识《How much Math》
  4. Paul Graham 《on Math》
  5. Evan Miller’s 回复上面三位的文章
  6. Steven Noble 回复 Evan Miller 关于斐波那契数的文章

如果你没有阅读以上所有的内容,那么你可能就不能很好理解本文。按照Steve Summit、Eric Raymond和Paul Graham的说法,要想成为一名出色的程序员,即黑客,你不需要太关注数学。Steven Noble说你应该学一点数学,而Evan Miller似乎也同意他们的观点,但又有一点不同。

我自己开始编程只是为了热爱它。自2009年以来,我主要用C语言进行专业编程,有时用C++,几乎总是在Linux上,有时在UNIX上。我对编程的热情使我在许多不同的语言中阅读和编写代码,我不得不学习不同的思维方式。写代码很容易,但沿着某种特定语言的模式进行思考是一项艰难的、艰巨的、非常耗时的任务。我所经历的是:计算机编程不是数学。让我再说一遍,计算机编程不是数学,而且永远不会是。你想学习计算机编程,那就学习计算机编程。不要翻阅数学书,阅读某个特定新闻组(例如comp.lang.c、comp.lang.lisp)上的任何内容就可以。

阅读所有来自GNU的软件,并在日常工作中专门使用Linux发行版。如果你因为想学习计算机编程而学习大量的数学,那么你就会感到困惑,走向错误的方向,你反而不会学到很多编程知识。

作为计算机程序员,我们写程序,但为什么?我们写程序是为了解决这个世界的问题。这就是计算机程序员的工作,他们解决了问题。

现在,数学家是做什么的?他试图理解自然,并使用数学作为一种语言来做这件事。数学已经帮助解决了这个世界上的许多问题。例如量子物理学,物理学的一个分支,实际上已经改变了我们几千年来对原子的假设,它在很大程度上依赖于数学。数学无处不在,从化学工业到社会问题,我们都在使用统计学。从你日常生活的任何部分来看,你会发现它对数学的影响有多深。数学已被用作最突出的工具,不仅用于理解自然,而且用于解决这个世界的问题。这是有原因的,所有这些特性都是数学中固有的。

image.png

日更126天 - 知识付费是士力架还是人参果
日更125天 - 整理下自己的手机,别让它碎片化了我们的生活
日更124天 - 打造自己小环境
日更123天 - 杠杆
日更122天 - 收入的四个象限
日更121天 - 时光穿梭,回顾和展望
前日更120天索引

你可能感兴趣的:(日更127天 - (翻译) 编程是否需要数学 (上))