工程师之书 这本书将记录作者对计算机这个行业的观点和看法。
预计会写的章节
- 码农算是蔑称吗
- 哪个中小学课程对工程师最重要
- 职业发展方向
- 大公司还是创业公司
- 不要相信权威的话,有时候他们说的话也只是做实验
- 构建软件系统的基本架构
- 要敢于尝试新事物,但不是在产品环境
我刚入行的时候,业界还纠结于怎么称呼自己,有的觉得“程序员”这个称呼太low,非要叫“软件工程师”才算有感觉,那时候,我自造得更牛一点的称呼,受高德纳的《计算机编程艺术》的启发,我觉得这行的人应该被称为“编码艺术家”(Coding Artist),就如同港片的字幕中,把会武术的成为“Martial Artist”。
又过了几年,我从新兵蛋子变成了有点资历的老兵,并没有人把我们这行的叫“艺术家”,反而一个更low的称呼流行起来——码农。
是不是可以叫Coding Farmer?
没有考证过这个称呼最早是谁提出的,但是毫无疑问,“农”肯定比“艺术家”要低等(并不是我瞧不起农民,你肯定能够理解)。
搞什么啊,怎么感觉这行越混越自卑,越演化越低贱了呢。
其实这还不是最低贱的,有一个朋友说,对我们这一行还有一个称呼叫做“码奴”,更过分的叫做“码畜”。
后来我想了想,小学还是中学的历史课本中,关于中国奴隶社会的惨状有这个描写,一匹马加一束丝,就可以换四个奴隶,以此表明奴隶连畜生都不如,由此可见,“码畜”比“码奴”还是要值钱一些:)
现在想想,码农算是一种自嘲,这一行需要的品质就是勤勤恳恳,起早贪黑,更重要的是,在中国的土地上,农民的获得往往也是最少的。
我到大学才接触计算机,在此之前,我听一些和我一样对计算机完全无知的人说,学计算机的要求数学好,那时候我就没想过我会走上这条路,因为我所学科目里面数学最烂。
到了大学,计算机科学系里前两个学年的课程几乎全都是数学相关,《高等数学》《线性代数》《数理逻辑》等等,感觉好惨。
走上实际工作岗位之后,才发现,当年学的数学知识,99%以上都没有实际作用。
要说中小学课程里面对编程帮助最大的,我觉得是——《语文》。
如果要说帮助第二大的,是《英语》。
写程序其实就和写文章一样,要让别的人看到,注意,这是合格工程师和半吊子编程爱好者的一个主要区别,半吊子编程爱好者只能写出计算机能够看得懂的代码(编译执行没问题),但是合格的工程师应该写出活人也能看得懂的代码(可读性可维护性高)。
至于英语,对这一行太重要了,老实承认,美国在这一行依然是全球遥遥领先,各种技术创新都是发生在国外而不是国内,要让自己处于技术前沿,必须能够参考纯英文的文献。
成为软件工程师,不难,难的是未来的职业规划如何走。 其实,无外乎三条路。 第一,成为更强的工程师。 第二,成为管理者。 第三,别干这一行。
年少时,我的目标是加入大公司,然后在有一番作为。
现在,我知道,当年的目标本省就是矛盾的。在大公司里工作,本身就是作为一个螺丝钉存在,一个颗螺丝钉能发挥多大作用呢?也不是每个都会成为雷锋,成为被歌颂的“螺丝钉”。
所以,要想有一番作为,加入大公司真的不是一个很好的选择。
创业公司呢?网上可以看到很多言论说,创业公司比大公司有多少优越性,不过我们首先要明白一点,创业公司也是为了资本而运作。
投资大公司的钱,和投资创业公司的钱,本质上都是资本,马克思告诉我们,资本都是一个德性的东西。
在创业公司忙忙碌碌,或者是在大公司忙忙碌碌,以为是在为自己工作,其实,都是在为资本工作而已,只不过是爽不爽的区别罢了。
如果说在这一行工作混这么就有一点心得体会,那就是千万不要别人说什么就信什么,包括极有名望的权威。
这是一个崇尚创新的世界,敢闯就牛逼,及时闯错了,也不会有人怪你,所以就有很多敢闯的人,也有很多敢说的人,还没闯出一个靠谱的结论就敢大发厥词。
最典型的两个例子,一个来自Twitter,一个来自Facebook。
Twitter的工程师曾经鼓吹hash bang方式的网页,服务器只返回JSON格式的内容,HTML由浏览器中的JavaScript生成,并在Twitter的网页里实践这种方法。
这种做法,有一个假设,就是用JSON取代HTML减少的网络延迟,能够弥补浏览器中的JavaScript速度的延迟,用一个脑细胞都知道,如果这一点不成立,这个做法也就不成立了。但是,Twitter的工程师坚持认为这是成立的。
当时我也受到蛊惑,在一个手机项目中使用这种方式来开发网页,结果测试了一下性能,无论是最快的Chrome还是比较挫的IE,都看不出来这种网页的性能更优秀。
过了几年之后,Twitter终于松口了,说这样子做还是有点不对哈,放弃了这种方式,把他们的页面的显示方式修改了。
同样的,Facebook曾经鼓吹HTML5比移动Native代码更灵活,对HTML5的投入也很大,让Facebook内部的iOS开发者很不爽。
这样折腾了几年之后,Facebook突然认怂,说似乎HTML5性能上还是没法和Native相比,算了,还是用Native吧。
如果跟风觉得Twitter和Facebook说行的东西就决定行,结果也就是这么惨。
所以,最重要的是有自己的观点,明白事情背后的原理。
构建一个像样的软件系统,兵马未动粮草先行,写代码之前有几样东西先要建起来。
第一,是版本控制系统,比如SVN,比如GIT。
第二,是Bug Tracking系统,比如Bugzilla,比如JIRA,当然,像github这样的,既是版本控制系统,也有Bug Tracking系统。
第三,是自动化集成测试系统,也就是Continuous Integration,比如Jenkins。
除此之外,还需要Application Performance Monitor,产品环境中发生的事情,只有通过这个监控才能了如指掌。
这一个行业,日新月异,新的技术不断涌现。
而且作为技术型的工程师,肯定倾向于试一试新的技术,这是好事,但是一定要注意,不要轻率在产品环境中用最新的东西。