|
网上流传的对程序员的分级方式,不知道大家看到过没:
一流程序员靠数学;二流程序员靠算法;
三流程序员靠逻辑;四流程序员靠SDK;
五流程序员靠 Google 和百度;低端的看高端的就是黑魔法 。
说是段子,更是程序员的真实写照。我也知道,大部分普通程序员在开发过程中,用中学数学基础是足以应付的,好像不需要学习高端的数学。
但问题是,以目前的职场环境来说,只要你想再往上走一步、做任何一点带有创新性的技术,最容易遇到的,往往就是数学问题。
比如,算法涉及大量数学基础和相关背景知识,图形处理相关的算法,大量的线性代数矩阵变换等等,Google 还曾用一道数学题作为投递简历的门槛,之前朋友圈就被这个招聘广告牌刷过屏。
其实,不止是 Google,我随便翻了翻招聘启事,发现,很多大公司在招应届研发时,都会优先考虑数学专业的毕业生。
无论是数据结构与算法,还是程序设计, 底层原理和思路都源自数学 ,在大数据和智能化的时代,学好数学更是门槛本身。
“程序员不需要学数学,因为工作中根本用不到数学。有学数学的功夫,还不如认真把设计模式、计算机网络、操作系统这些硬知识学好。” 这是很多人的观点,是的,作为程序员,你不需要任何数学知识,也可以写好代码。
但我认为,数学学得好不好,将会直接决定一个程序员未来的发展潜力。往大了说,数学是一种思维模式,考验的是一个人归纳、总结和抽象的能力,放到程序员的世界,就是解决问题的能力。
往小了说,不管是数据结构与算法,还是程序设计,其底层原理和思路很多都源自数学。所以很多大公司在招人时,都会优先考虑数学专业的毕业生,因为数学基础好,学习编程会更容易上手。
那程序员到底该如何学数学呢?我整理了三位技术专家的看法。
Steve Yegge | 资深程序员
1. 正确学习数学的方法是广度优先,而非深度优先。你要了解的是整个数学领域每个概念的名字,并知道它们要解决什么问题。
2. 把数学当成文科来学,先不用重点看那些算法和证明,只需要了解数学概念的名字、作用、大致步骤、发明人、发明时间、局限等。
3. 数学符号是关闭你通往另一个世界的符咒,如果你看到一堆自己不懂的数学符号,就把它的实现功能简单地当成一个原子操作好了,不要深究太多。
徐文浩 | bothub.ai 创始人
1. 从工作相关的领域开始了解数学,这样你更容易获得正反馈。
2. 把正在学习的数学问题的解法,写一个算法程序实现出来,这是一个不错的练习方法。
3. 你可以选择追一门数学相关的在线课程,跟着老师的节奏来系统理解数学。
刘超 |《趣谈网络协议》专栏作者
阶段一:怎么使用?咱们做工程的,还是实现出来,程序跑起来看。我一开始使用Lucene的时候,因为接口已经十分友好,是很容易实现一个简单的搜索引擎的,这个时候,我还处在第一个阶段。
阶段二:如何实现,原理是什么?只会用可不行,原理都不了解,没法调优和Debug。我这个人爱看源代码,于是就去分析里面的原理,有的部分就比较晦涩,需要结合Debug和代码贡献者的文档才能有所了解,这个时候,我处在第二个阶段,写了大量源码分析的文章。
阶段三:为什么这样实现?其实实现一个东西有好多种方法,作者之所以选择这样实现,都是因为数学算过的,这样的性能或者准确度最高。我在读Lucene代码贡献者的文档的时候,有的作者会列出很多的论文,这里面有大量的数学推演,以及并列的多种方法,你才会发现开源软件的实现也是沧海一粟。这样才能举一反三。
希望对大家有帮助~
如果你想更好的提升你的编程能力,好好学习C/C++编程知识,以后努力成为高薪软件开发工程师的话!
欢迎转行和学习编程的伙伴,希望对你有帮助~ |
|