最近看的书比较多也比较杂,像《芯片战争》、《芯片简史》、《比尔盖茨传》、《数学之美》等等,这几本书里有提到图灵奖的信息,顺手买了一本《图灵和ACM图灵奖》,看了这本书对我震撼很大,原来计算机的大牛在搞这些东西,他们可以是程序员,更重要的是这些人更看重数学,用数学建立模型来构建和改善计算机生态。
之前看过左耳朵耗子写 的《程序员三重门》,当时还没太懂,现在完全明白了,
简单说:三等程序员写代码,二等程序员调试调优,一等程序员玩数学。
这篇文章也是对自己将近十年的职业生涯的一个总结吧,知道自己在计算机这座神庙里干的什么活,以后前进的方向。
之前一直想把数学和算法应用到工作中,相信很多人在给你灌输这样的想法(他们的主要目的还是让你交智商税),简单概括他们的说法,技术万法不离其宗,不学好算法你就不配做程序员,学会你就天下无敌了。但是随着时间的推移,你发现你就算学完这些对你的工作提升也不大,因为在工作中根本用不到,这个月学完下个月忘(没错就是以前的我🤪),好像自己很笨一直冲不破这道门一样。
其实这个道理很简单,我下面举个例子:
比如你是军队一名步兵,你的日常作战任务就是瞄准开枪。你的长官说:小子,想做好一名步兵,你需要学习子弹和枪的设计原理,这样你才能更好的瞄准射击,才能做一名出色的步兵。
当然,作为一个积极向上的步兵,你欣然接受了前辈长官的建议。因此你除了在作战中开枪射击之外,不打仗的时候就去研究各种枪炮原理、空气动力学,材料学啥的。然后你想在射击中应用你学到的这些原理,但是你发现学习动力学好像和射击有点关系,但是关系又不大,因为你是一名步兵,你的日常动作是瞄准开枪射击,你所处的场所没有为你提供改造枪和子弹的结构的环境或者条件。
研究这些东西并没有错,因为你是一个想提升自己的人,但是你急于把所学转化成当前的步兵角色中,效果甚微,长此以往,你得到的只有对自己的质疑和前途的迷茫,因为你身边所有士兵都这样说的,想做好步兵就要学习枪炮原理,如果你学到的东西长期用不到,有可能是你学的东西不对,也有可能是你的职业错了。
然而真正研究枪和子弹原理并应用的是兵工厂的枪炮师,这些东西是通过他们的倡导流行开来的,所以你学这些东西后就不要在想去做一个步兵了,你应该是去做兵工厂的炮枪师,这样才能发挥你的所学。
这也是AK47发明者米哈伊留申·卡拉希尼柯夫的故事,二战中,卡拉希尼柯夫作为一名坦克手奔赴前线,在,在1941年10月手臂严重受伤,卡拉希尼柯夫在野战医院疗伤时,打听着伤员们常在一起抱怨苏联枪械的拙劣性能和前线德军使用的自动武器,于是萌发了设计轻武器的念头。回家养伤期间,他设计出第一支PPK-42冲锋枪,引起军方的注意。1943年,他进入正规学校,并被分配到武器试验场担任技术员,从此转型做了枪炮师。
所以,如果想做好一名步兵,你还是应该把主要精力放在射击练习和熟系枪械上,同理
作为一个三等程序员,你只要把程序逻辑搞明白,会看英语文档、懂点操作系统、网络和编译,再懂点设计模式,明白软件工程师需要注意什么就OK了,这一层的天花板很低,而且这些东西之间联系并不大,不需要你把这些东西全部融会贯通。
当然,作为一名软件工程师,如果想进一步提升等级,就必须去研究性能优化,需要全面考量的那种,CPU、操作系统、网络、内存、程序等等(可以看看《性能之巅》),真正把你学的算法和数学运用起来。换句话说,学完这些你就得准备转换程序员角色了,如果你下定决心转型,这一过程肯定是充满了曲折的,因为你要踏入陌生的领域,运用不同的思维和技能去解决你没有完全熟悉的问题。
现在再看,那些把数学和算法挂在嘴边的人,你就知道什么叫蒙昧,他们能骗的也就是哪些喜欢揍捷径的人(有些PM都被忽悠去学了)或者说这些人本身就是枪炮师,他们只是站在自己的应用领域去学习这些东西,但是他们或者你自己无意间把这些强加在你自己身上了,过度神话了。通过这个思考,我更知道了读书的重要性,让你看到更大的世界,让你独立思考,不能人云亦云。
总之,算法和数学和普通程序员关系不大,大家都知道编程的门槛有多低,现在小学生都学的懂。读了这本书我才发现,一等程序员更多的是用数学去解决计算机的普遍性问题,比如非对称加密质数解密,计算复杂性问题、怎么让编译器性能更快,为什么用关系型数据库代替网状数据库,我之后会结合图灵奖写几篇数学在计算机中的应用的博客。
最后缅怀下左耳朵耗子,他对中国技术圈的贡献和积极的影响力绝对是值得肯定的。