这是一篇翻译的文章。这也是程序员的经典问题:一个好的程序员是否要具备好的数学基础,或者说数学不好能否成为一个好的程序员?特别是这几年,高工资的程序员竞争也激励。估计为了更快,高标准化低筛选人才,各个IT公司特别是大厂也把算法作为面试的必选项。从各个大厂的算法面试题库中也产生了LeetCode这样程序员入职前必刷网站。甚至很多非程序员也能通过速刷LeetCode进入这个行业。算法实际快成为了这个行业的入门砖。但对于不少程序员,在日常工作中似乎又很少用到算法,这就是比较让人困惑的地方,也是为什么网上有那么多关于这个话题的原因所在吧。
每当我想学习算法时,数学就会是个门槛。我承认我的数学不是很好,但也不是很差,但这种 "不差 "的水平不足以通过大厂的面试。这样的面试会有的算法所涉及的时间和空间的复杂性,以及排序和搜索技术的比较。我需要学习所有这些内容。在这个学习过程中,我搜索到了几篇关于此主题的文章,其中最有名的就是Steve Yegge(前Google程序员)。以下是我搜到的几篇相关的文章:
- Steve Summit写的C语言里用到的数学知识
- Steve Yegge 写的《Math Everyday》和 《Math for Programmers》
- Eric S. Raymond 成为黑客需要多少数学知识《How much Math》
- Paul Graham 《on Math》
- Evan Miller’s 回复上面三位的文章
- 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发行版。如果你因为想学习计算机编程而学习大量的数学,那么你就会感到困惑,走向错误的方向,你反而不会学到很多编程知识。
作为计算机程序员,我们写程序,但为什么?我们写程序是为了解决这个世界的问题。这就是计算机程序员的工作,他们解决了问题。
现在,数学家是做什么的?他试图理解自然,并使用数学作为一种语言来做这件事。数学已经帮助解决了这个世界上的许多问题。例如量子物理学,物理学的一个分支,实际上已经改变了我们几千年来对原子的假设,它在很大程度上依赖于数学。数学无处不在,从化学工业到社会问题,我们都在使用统计学。从你日常生活的任何部分来看,你会发现它对数学的影响有多深。数学已被用作最突出的工具,不仅用于理解自然,而且用于解决这个世界的问题。这是有原因的,所有这些特性都是数学中固有的。
日更126天 - 知识付费是士力架还是人参果
日更125天 - 整理下自己的手机,别让它碎片化了我们的生活
日更124天 - 打造自己小环境
日更123天 - 杠杆
日更122天 - 收入的四个象限
日更121天 - 时光穿梭,回顾和展望
前日更120天索引