The mind behind Linux
偶然看到一个关于Linux之父Linus Torvalds在TED上的一个视频。Linus谈到自己是一个喜欢安静的人,虽然创造了改变计算机行业的两大软件——Linux和Git,但他自己还是不太愿意和人打交道,只想安安静静的写代码、搞研究,我想技术大牛大多是这样的吧。当主持人问Linus为何能取得如此伟大的成就时,Linus的回答是不会放弃、固执,对技术和代码有着完美的追求。
视频地址:https://www.ted.com/talks/linus_torvalds_the_mind_behind_linux中英字幕:http://www.iqiyi.com/w_19rsosgd6h.html(已失效)
视频中Linus列举了一个删除单向链表(singly-linked list)中的一个元素
的代码片段为例,讲述自己对好的代码(good taste)的理解。
实现方式一
实现方式二
Linus列出了2种不同的实现思路,方式一与方式二的不同之处在于,方式一最后使用了一个if语句,使用if语句是因为要删除的元素可能是第一个元素。而方式二用一种巧妙的方式去掉了对这种特殊情况(special case)的判断,从而达到只剩下一般的情况(normal case),这是Linus认为的good code。这就是看待问题的两种不同思路。
Linus列举这个小的例子给我的启发很深。这让我想起一个问题,如何才能考验一个程序员的计算机能力。看他API、类库、框架用的熟不熟?面向对象的概念知不知道?设计模式了不了解?API、类库、框架用的最熟悉,那也只不过是搬砖,堆砌代码而已。无他,惟手熟尔,换一个新人,给他一年半载,多数人就会知道怎么使用API、类库、框架。面向对象的概念更是死记硬背的,设计模式就是生搬硬套的。那么什么才是万变不离其宗的东西呢?
看看这些经典书名你就明白了。《数据库系统概念》、《设计模式》、《操作系统原理》、《Java编程思想》等等,你会发现,思想,思维方式,解决问题的能力才是根本。我一直和人争论,科班出身的程序员和北大青鸟、蓝翔电脑出来的人有啥区别。我想这就是区别,科班出身的程序员要知其然,知其所以然,要求甚解,要知道深层次的原理。就算是使用类库、框架,作为一名合格的程序员也得了解自己所从事领域的这些类库、框架的基本原理,实现方式,而不能把它当做个黑盒子。当然有人会说,概念、理论、原理很难懂,四年大学没搞明白,只要能写出代码,能正常工作就OK。那我也只能说,人各有志,一个对技术有追求、有情怀的程序员不应该止步于此。
纵观各大IT公司的面试,你也能发现,以考察算法能力、解决问题的能力为重点,不会让面试者拘泥于某一种具体的编程语言和框架之上。我初入职场时也很困惑,为啥要面试算法?日常的工作中根本用不上。等到我现在有机会来面试别人,我才深有体会。短短30分钟到一小时的时间,如何判断要不要hire这个面试者?通过面试算法,考察解决问题的能力才是关键。能通过的人往往都是聪明(Smart)的人,而聪明的人学什么都快,解决问题的能力也很强。我想这才是企业需要的人才。当然,企业里需要各种岗位的人,比如一个只会按照要求码代码的人,显然他的薪水不会很高,因为新招聘一个就可以替代他的职位,这才是螺丝钉。
让自己成为企业里难以替代的人,这才是每一个职场人所追求的。