给新入职场的计算机软件打工族的几点建议

这篇文章整理了一些之前提过的东西。纯粹从技术角度出发。不涉及非技术的软实力之类的。适用人群主要是通用码工类,对数据科学家,AI人才等不适用。因为毕竟我的属性是个码农,并不是太懂其他的。

从计算机的学科来说,一个科班出身的人可能经过很多的训练。但是最基本的,Stanford大学的算法专家,图灵奖得主Knuth有名言:计算机=算法+数据结构+编程语言。

科班出身的都能理解算法和数据结构。感谢这些年来的刷题风气,非科班出身的也能够通过刷题理解这些东西。刷题这个东西是两面性的,对科班出身的来说不一定有什么好处。但是看到那么多人转行CS,我倒是真的觉得只有刷过题的非科班出身的人才能理解算法和数据结构,以及这个背后蕴含的CS思维方式。

但是编程语言国内的理解就相对薄弱了。国外大学本科有一门课叫做Programming Language。主要讲的是各种编程语言的设计思想理念。这门课是很重要的,我在国内没有上过。有些编程语言思想上的东西,没经过系统训练,必然是缺失的,对于码农的思维层次的影响,慢慢会体现出来。我非常的推荐每个人应该深入理解这门课。

除了这些课程以外,计算机科学还有一些大家都要懂一点的东西,主要是计算机组成/体系结构,操作系统,网络,数据库这些很大程度上每个码农迟早都会遇到的知识。除此之外,能懂编译原理和计算理论会是一个大的plus。倒不是说这些东西在职业生涯的早年能带给码农什么直接的利益,但是一个人站得高看得远,最好还是要更深刻的理解一下计算机这个学科的基石。

这些年来另外一个很重要的知识体系是分布式系统。这通常是计算机科学专业研究生阶段才开的课。但是由于这些年技术的发展,我觉得分布式系统慢慢会变成通识类的东西,而学校教育尚未作出相应的调整。

有些课其实更适合工作以后再学,比如说软件工程相关的。没有一些实践基础,不太容易理解。

那入职以后哪些事情最重要呢?首先我觉得第一份工作最好去大厂。一个CS毕业生和一个合格码农之间的距离有点大。这些东西里面有相当一部分需要在大厂里面去学习。

具体来说工作上主要学三件事:怎么在一个大代码库里开发自己的需求,怎么样去写测试,以及怎么样debug。

在大厂里一般都是几十几百人协同工作,这需要有阅读源代码理解别人代码的能力。这方面能力的高低直接决定了你未来能够上升的空间。就我聊过的不同的人来说,国外大厂代码质量普遍要好一些,尤其以谷歌最好。国内大厂,即使是非常知名的,也是快糙猛的产物,代码质量你懂的。但是无论代码质量如何,在上面做开发,都考验一个人的功力。

我觉得能不能够写好测试,尤其是单元测试,是一个好的码农和坏的码农最重要的区别。要写好测试,需要很深刻缜密的思维,不然的话,测试覆盖就不全,容易留下问题。写好测试也是一个人对自己软件代码质量的重视的体现。但是很遗憾,无论国内国外,我觉得写测试合格的码农很少。

也许我有偏执的成分,但是在我前前后后数不清的面试中,因为测试做的糟糕而被我拒掉的码农数不胜数。事实上工作10年还不能理解测试为何物的码农,我觉得统统都可以开掉。

至于debug的话,那是一门实践科学了。Debug既是一个体力活又是一个脑力活,有时候要有点天赋。用寿司之神的影片里的儿子说的话,Debug的技巧其实就是那些,大部分人可以通过不断的努力实践而提高,但是总有一些人是有天赋的,所以他们可以在debug的路上走的比别人更远。牛逼的可以靠一手debug在公司里混到极高的位置。

我在这篇文章里并没有给出那些一撮而就的东西。我知道很多码农最喜欢JAVA从入门到精通这样的秘籍。但是计算机是一门实践科学。这就意味着,别人的知识,能帮你的就那么多。

总之我今天的这篇文章里面干货很多,对广大码农提高自身的水平和层次具有很好的指导意义。如果你看了之后不明觉厉,不知道我在写什么,那就要好好反思一下自己是不是适合做码农,有没有走错路了。有些话肯定不太好听,但我不觉得我在装逼。