posts - 218, comments - 61, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
转载请保留原帖地址:http://www.cnitblog.com/luckydmz/archive/2014/03/28/89365.html

我们可能都听过下面这个著名的公式

程序=算法+数据结构

而算法和数据结构的基础又是数学,我不想在此讨论这个公式在现如今还是否适用,但我认为数学、算法和数据结构对于成为一名优秀的程序员是必不可少的。软件开发工作分为很多种,而你对数学、算法和数据结构的掌握程度决定了或者说限制了你能从事的工作种类,如果你没有这些能力你就不能从事某些工作种类,并不是说你就不能从事程序员这个职业,这些种类包括但不限于游戏人工智能、3D图形算法、密码学、任何软件的核心代码的优化工作,或者给你一篇比较介绍新技术的论文要求你能够理解并用代码实现。

IBM、Sun、Microsoft每年都赞助ACM/ICPC国际大学生程序设计竞赛(比赛以3人为一小队,每队使用1台电脑需要在5个小时内使用C、C++、Pascal或Java中的任意语言编写程序解决7到11个问题,这是真正的纯算法竞赛,你甚至不需要为程序设计界面,而且无论你的代码写得多么难看难懂或者难以维护,只要能解决问题就可以)。可见大公司十分注重算法基础以及运用这些算法解决问题能力,而不是你是否会使用某个类库,是否掌握了某种框架,甚至你是否会使用某种语言也不是最重要的。

如果你不甘心只做一个ctrl+c ctrl+v的程序员,或者CRUD(CRUD是Create、Read、Update和Delete的首字母缩写,这里指使用数据库编程)的程序员,那么你必须掌握一定的数学、算法和数据结构。
在大学期间一定要学好这几门数学课程如果有开设的话,高等数学(或者数学分析),线性代数,离散数学,解析几何,概率论与数理统计。
如果你的学校有数学建模或ACM/ICPC编程竞赛类似的组织,一定要报名参加学习,即使不能代表学校参赛,它也能给你莫大的收获。
如果你在学习命令行程序,那么继续学,不要急着编写带有界面的程序,那些很简单。

下面是我推荐的一些书籍:
《算法导论》
这是ACMer必看的书,我想大多数人都听过这本书无需我多介绍,这是一本非常全面的基础算法书籍,伪代码描述,不限于语言,而且对算法给出了数学上的证明,复杂度分析。

《算法引论——一种创造性方法》
这本书非常棒,它不像《算法导论》那样面面俱到,而是专注于描述一类问题,就是可以通过数学归纳方法解决的问题,数学归纳是递归、分治法、动态规划的理论基础,这本书主要的牛逼之处在于它是在教你面对一个问题如何思考设计出算法,如果看完它你将掌握一种思维模式,可以说我有80%的算法思路都是受这本书的启发。如果你只准备看一本算法书,我推荐这本。

《高效程序的奥秘》
这本书又是从另外一个角度对小算法进行描述,里面包含了各种编辑的小技巧,尤其是对位运算相关的算法有详细描述。例如统计一个int型里的二进制表示有多少个1bit,我当年笔试的时候做到过好几次这种题目,我知道我写出来的算法是最快的,我唯一担心的是面试官会不会不知道这些诡异的算法而看不懂我写的代码。

《具体数学》
这本书是组合数学+初等数论,而且是讲这两门数学和计算机结合紧密的部分,可以编程实现部分。数学为算法提供模型和理论,当你遇到一个实际问题,可以通过规约和分解的方法把他转换为一个已知模型或者已知模型的组合形式,再运用已知的知识对这些模型进行分别分析求解,最后再组合起来即可,所以你多知道一个数学模型或者理论,就多知道了一种算法,多了一个解决问题的思路。

如何成为一名优秀的程序员(目录)
只有注册用户登录后才能发表评论。