【CSDN 编者按】作者在大学时代受《程序员》杂志的启发,从数学专业投身计算机编程,毕业后进入软件开发行业。过去9年,他去过大厂敲代码,也曾在创业公司带过团队,一直从事“下一代”软件技术的研发,对于网上一直热议的“数学对程序员有多重要”话题,他也有自己的看法。

作者 | 范飞龙       责编 | 侯淼淼

出品 | CSDN(ID:CSDNnews)

数学对于程序员到底有多重要?

我是数学专业的,大四一个偶然的机会接触到了《程序员》杂志,给了我很大启发。从杂志以及后续学习编程中阅读的很多技术书籍中,我逐渐发现,编程是一件极其富有创造力的事情,程序员甚至能用技术改变世界,从那以后,我就被编程深深地吸引了,可以说《程序员》杂志是我编程路上的启蒙导师。后来我就跑到学校的计算机专业“蹭课”,当时一位计算机图形学老师的课特别有意思,除了教编程技术以外,还会给大家科普很多一流IT公司的技术,很早就跟我们讨论选择,视野这些话题,对我影响很大。所以在大四和研究生期间,我一边做数学方面的研究,一边又做了很多软件项目。因为数学和编程在某些程度上是互通的,所以我在如何写好的程序上并没有遇到太多的困难,但是软件开发有其内在的规律,需要付出的努力一点也不少,我在边实践边和高手学习的过程中逐渐理解到软件开发的规律和本质。

之前网上有一个关于“数学不好的程序员到底能走多远”的讨论,很多网友都参与了讨论。有人说数学不好的程序员永远当不了架构师,也有人说程序员可能一辈子都用不上数学。其实无论是哪种观点,最后的结论都很片面。

数学或者算法重不重要,其实取决于你做的是什么类型的项目。举个例子,区块链和密码学的联系非常紧密,密码学背后是抽象代数和数论的知识,如果你不懂数学,那这里面的东西你就没办法很好地理解;人工智能里的深度学习,它和微积分里多变量的链式求导法则、曲线曲面的拟合,函数逼近论等数学理论息息相关;游戏开发,除了需要计算几何相关的知识,还要求程序员掌握一些物理知识;数据冗余存储相关的编解码算法,有可能背后本质是矩阵的计算,这就需要有线性代数的知识。通过这些例子,可以看到至少上好普通理工科的高等数学/线性代数/概率统计等课程是挺重要的。但如果你做的是前端开发需要的是把控繁杂框架和组件以及模块化的能力;做UX设计需要的是设计的语言;后端的数据库增删改查方面的,需要的是对数据间关系的理解,以及如何设计一组API的能力,这些都不会直接和具体的数学知识挂上勾。此外实际的编程里有大量的工程问题要解决,需要的是解决问题的能力和对工程的理解。所以说数学对程序员来说重不重要,关键还是取决于你做的事情是不是直接和数学密切相关。另外一方面,在分析问题的过程中是否能良好运用集合、坐标方法去对问题做基本的划分,我认为也是体现是否有数学思维的一个表征。

很多人说小白和大神的差距主要体现在数学上,其实准确地说,是体现在逻辑能力和抽象能力上。在日常开发工作中,最简单的逻辑就是你能不能把程序的条理表达清楚,例如把一个函数写清楚,把一个类写清楚,把一个模块写清楚,把一个服务写清楚,甚至把一个文档写清楚。要想训练逻辑思维,可以多去读一些帮程序员写好程序的书,比如《程序员修炼之道——从小工到专家》,它可以帮助程序员提升工程素养和品位;《构建之法(第3版)》系统深入地介绍了软件工程的原理,理解个人开发,结对编程到团队协作的不同层面,如何做创新的产品等;《图解密码技术(第3版)》能够培养程序员深入算法和数学细节的能力,除了作为一个程序员应该理解密码学的基本原理,能不能把这样一本书完整读完理解清楚细节也是一个有效的锻炼。从日常的程序开始,在实践中不断尝试用这些方法去改善软件开发的过程,这是一个渐进的过程,但只要坚持下来就会看到成果。

除了上面几本书,在上学期间订阅《程序员》杂志给我的帮助也很大。总的来说,这里面其实有两类文章,一类是很具体的、能教你写出好程序的文章,另一类就是专家、CTO的观点分享,带给人的是对编程的理解和启蒙。同样是编程,很多人在学校和工作后做的事情是截然不同的,通过这些文章就能知道国内大公司用的是什么技术框架和流程。很多刚毕业的大学生并没有太多的项目经验,多看一些相关专业文章和技术杂志能最大程度地为你提供经验加持,特别是某个技术是你当前在做的事情的时候,可以有好的对照。

大厂VS创业公司,怎么选?

博士毕业后我去过大厂,也去过创业公司。对于广大程序员来说,无论是去哪种属性的公司,重要的是找到合适的人和你一起做你愿意做的事情。

大公司的好处是拥有完善的制度,入职后只需要专注于手头的重点工作然后解决问题就可以了,遇到困难也不用担心,大厂里通常人才济济,你可以从中学习到很多实战经验,成熟的项目机制也能让你体验到专业软件开发的各个过程。但大厂的缺点也很明显,大公司的流程比较多,如果你不能有意识地去尝试新技术、学习新的框架和工具,可能就会被限定在局部的某一个细节里,也就是大家常说的“螺丝钉”状态,无法看到软件开发整体上要解决的问题是什么。已经进入大厂的同学最好能经常进行工作复盘和反思,经常写技术文档和总结。每隔一段时间,考虑和刚进入公司的时候相比你做出了什么贡献,在哪方面获得了成长,持续保持对技术的敏感性,以此来激励自己不断进步。这里特别强调坚持写好的技术文档(博客),我印象比较深的是,在第一份工作的时候,我根据一份遗留项目的不能跑的代码,完整重写了能和线上系统对接的网络协议实现,同时给出了非常详细的网络协议文档。此后每个项目我都很重视写技术文档,写是为了更好的理解。当你养成习惯后,它就变成你的肌肉记忆动作一样自然,久而久之我们对软件的理解也会很不一样,做软件开发写好的代码和写好的文档都很重要。一开始的时候,使用一些模版来辅助自己写好文档是一个有效的练习方式。在这方面,我以前看过一篇讲Git的最佳实践的文章,它的标题是一个有效的方法:Commit Often, Perfect Later, Publish Once.

创业公司的优点之一是你入职后能参与到软件开发的全流程,快速成长为一个多面手,以及创业公司的软件开发流程相对比较简洁,有时候也是一个优势。在大公司你可能会有很多试错的机会,但是在创业公司,你必须要在限定时间、限定资金、限定人员的情况下尽可能高效地完成项目的迭代开发,当你以为掌握了很多软件开发的经验和规律,在这种明确受限情景下开发软件,有效达成目标就是一个很好的检验过程。除了软件开发本身以外,程序员还需要和不同的人去打交道,比如项目中你是甲方还是乙方,需求的频繁变更和不确定性会对软件开发的质量,软件团队的成熟有很大的考验,这些都是软件开发中重要的部分,在创业公司还需要考虑如何从第0个用户开始逐渐获得大批量的用户。在创业公司通常在经济上要承受比较大的风险,虽然它也有获得巨大收益实现财富自由的机会,但大部分情况下,风险大于机遇。做成一些事情需要多方面的条件,实际上也是多个条件的一个概率问题。

所以如果是刚毕业的大学生,在还没有积累足够多抗风险能力的情况下,我还是建议选择大公司,相对稳定地获得项目经验和视野上的成长。但是如果你富有冒险精神,那么就要尽量的解决遇到的问题,增加把事情做成功的概率。还是那个话题:选择与视野。

 小白如何成长为一名优秀的程序员

从事软件开发,一个很重要的地方就是要有好的学习能力。我也是一直保持着对“老技术”和新技术不断学习的状态。学习一门技术,一开始我们都是以搭积木的方式进行的,这些积木怎么做的可以先不管。用积木做出一个应用之后,我们就获得了一次成功的经验。接着,我们开始做第二个应用,还是用这些积木,但是你开始理解这些积木的不同特点,逐渐有了实际的经验。再继续,你会拆开一个积木,看看这个积木本身怎么构造的,第一个被拆开的积木可能很简单,但是这个被拆开的积木是一个重要的起点,一旦你拆开了第一个积木,你就会拆开第二个积木,你会发现第二个积木和第一个积木之间有很多公共的零件,你可能还不知道这些零件又是怎么构造的,没有关系。于是你继续拆开第三个,第四个积木……随着你拆开的积木越来越多,你终于知道这些积木的构造原理。这个时候,你在构造应用的时候,如果没有合适的积木,你会用零件直接制造一个新的积木,这个被制造出来的积木解决了你的问题,为创造成功的应用提供了关键的部件。到这里,你已经完成了学习这组积木的真正入门。原理上,你就可以在这个领域持续做下去,提供创造性的工作,因为这组积木在你面前已经可编程。这就是我一直以来学习新领域的一个方式。

另外一种比较有效的方式就是同主题学习,在学习一个方向的时候,一段时间内保持频繁地在一个主题上收集相关资料学习、实践和小结。当你聚焦在一个方向上时,你在技术站点和技术社区里,会自动过滤掉无关信息,持续地在一个方向、一条线上的学习区里学习,参与讨论,密集地汲取知识和实践,持续地点亮领域技能树的节点。实际上学习一个新领域跟做科研有很多相似之处。

许多人说35岁是一个程序员的转折点。这其中的一个理由是软件开发是“吃青春饭”的工作。事实上这也是片面的观点。软件开发有其内在规律,有时候确实在局部上直接堆人力可以快速获得短期效果,但是如果我们奔着做一流软件的目标去,那么能深入理解软件开发的规律,有很强的构架和工程能力,能结合技术、经验和洞见,在一个有着良好迭代的软件团队里创造价值的同时获得持续的成长,那么35岁确实可能是一个转折点,而且还是一个好的转折点。

总的来说,软件开发有其内在规律,不断理解其内在规律,在实践中迭代,奔着做一流软件的目标去,是我选择的方向。

《新程序员》内容亮点抢先看

《新程序员》立足于行业前沿,深度探索技术未来,通过音视频、图文专栏等丰富的多媒体形式为载体,全方位解读技术与产业,为中国开发者打开新时代的技术之门。

《新程序员001:开发者黄金十年》内容涵盖:

  • 60位+ 技术大咖的经典观点与实践干货;

  • 34篇 精彩文章;

  • 13个 配文视频;

  • 1000位+ 技术人才共同学习成长;

  • 2张 开源核心技术全景工具收藏图。

点击图片查看完整版目录

现在,会员季卡原价89元限时特惠58元,内容包括:

《新程序员》纸质收藏本 1本;

《新程序员001:开发者黄金十年》电子书 1本;

还能获得免费参加《新程序员》主题沙龙的机会!

长按识别二维码即可订阅

无论你是编程爱好者还是职场萌新,无论你是资深程序员还是架构师、CTO,在《新程序员》里,你都会有所收获。

数学很差的人能当程序员吗?相关推荐

  1. “编程能力差,90%输在了数学上!”CTO:多数程序员都是瞎努力!

    01 从未得到过重视的问题 一流程序员学数学,二流程序员学算法,低端看高端就是黑魔法. 可能有人以为这就是个段子,但有过工作经验的都知道,这其实就是程序员的真实写照! 想一想,我们学习.求职.工作的场 ...

  2. “编程能力差,90% 输在了数学上!”CTO:多数程序员都是瞎努力!

    01 从未得到过重视的问题 一流程序员学数学,二流程序员学算法,低端看高端就是黑魔法. 可能有人以为这就是个段子,但有过工作经验的都知道,这其实就是程序员的真实写照! 想一想,我们学习.求职.工作的场 ...

  3. 最近分享一款抖音上很火的七夕节程序员表白页面_html5七夕表白放烟花动画特效...

    html5七夕表白放烟花动画特效 最近分享一款抖音上很火的七夕节程序员表白页面.小姐姐,我好喜欢你,你愿意做我女朋友吗? 表白成功触发烟花背景动画特效. 表白内容:有人说,人的一生会遇到2920万人, ...

  4. 最近分享一款抖音上很火的七夕节程序员表白页面_html5七夕表白放烟花动画特效

    html5七夕表白放烟花动画特效 最近分享一款抖音上很火的七夕节程序员表白页面.小姐姐,我好喜欢你,你愿意做我女朋友吗? 表白成功触发烟花背景动画特效. 表白内容:有人说,人的一生会遇到2920万人, ...

  5. 数学不好学计算机有影响吗,数学很差能学计算机吗

    上大学选专业是一件非常重要的事情,现在,计算机是非常热门的专业,很多学生都会投身到计算机领域的学习中,为的就是在以后能够找到一个与计算机有关的工作,但是很多人认为想要学好计算机就需要有好的数学基础,那 ...

  6. 数学不好能学计算机编程吗,数学很差能学计算机吗 有哪些窍门

    数学很差是可以报考计算机专业的,虽然说计算机专业对数学的要求比较高,但是只要你认真学习即使数学差也能将计算机学好. 数学很差能学计算机吗 计算机专业是硬件和软件想结合,面向系统的学习,计算机专业不仅对 ...

  7. 中专计算机学数学吗,数学很差能学计算机吗-江西中专

    数学很差是可以报考计算机专业的,虽然说计算机专业对数学的要求比较高,但是只要你认真学习即使数学差也能将计算机学好. 数学很差能学计算机吗 计算机专业是硬件和软件想结合,面向系统的学习,计算机专业不仅对 ...

  8. 做程序员工资很高,但做程序员真的是吃青春饭的吗?

    在进入互联网行业发展之前,我就已经听到过很多人说互联网行业程序员的工资很高,但同时程序也是吃青春饭的.当程序员的年龄过了30~35岁以后,如果他们还没有转型,如果他们还在一线编码,那他们就很难再继续混 ...

  9. 很认真的聊一聊一个程序员的自我修养

    首先要谈的是,今天的话题所聊的程序员包含哪些人? 在中国,写程序,不仅仅是一种兴趣,更多的时候,还是一种普通职业和谋生工具 大公司有厉害的程序员,优秀的架构师,但大量的小公司也有很多普通的程序员.在我 ...

最新文章

  1. 比ewsa更快的跑包工具_重庆单肩包订购,编织布袋定做厂家
  2. OpenStack云计算口袋书-第一章-开始OpenStack之旅(一)
  3. [SpringSecurity]web权限方案_用户注销
  4. 重学java基础第二十四课:标识符合关键字
  5. sql serevr中脚本导出
  6. java 中PriorityQueue优先级队列使用方法
  7. [Python+MATLAB] 在Python中使用MATLAB (持续更新中)
  8. Ubuntu 下升级git到最新版
  9. 多窗口下的批量操作脚本 - 利用win32gui和WindowSpy++简单实现目标窗口前置
  10. 基于同义词词林的文本相似度算法研究语料库
  11. c++ gdal 矢量转栅格_gdal的矢量栅格化接口GDALRasterizeLayers使用(一)
  12. iOS小技能:常用预处理指令(移除程序中的identifier、发布模式关闭NSLog、导出和隐藏符号)
  13. JavaScript之切换背景图片(并使)背景栏保持和背景色调相似
  14. win10 idea配置git命令简写缩写
  15. oracle同一个库不同用户,oracle同一个库上面,不同用户相互赋予权限
  16. 登录页面(含后台)login.php
  17. win10忘记密码_Win10系统设置u盘密码的操作过程
  18. 数据结构-算法与算法描述
  19. MySql计算两个日期的时间差函数
  20. 中国汽车变速箱行业发展趋势预测与前景策略分析报告2021年版

热门文章

  1. 【逆序对】Ultra - Quicksort
  2. 《HTML5与CSS3实战指南》——2.5 构建The HTML5 Herald
  3. namenode如何存储复本?
  4. ormlite 多表联合查询
  5. PowerDesigner 使用的一些技巧(转)
  6. Product Orders(生产订单)状态相关函数BAPI
  7. vPower系列1: vMotion-没有vMotion,虚拟化只是玩具
  8. TSM简介(一)- 原理与特点
  9. 电动车逆变器的基础知识
  10. cmd命令简单别木马的蛛丝马迹