Talking is cheap, show me your code.
当年dk来面试,我都已经让他“回家等通知”了。他主动提出来,“唉呀!我表达能力不行,你问的这些我答不出来。但我会写,你出个题目让我写代码给你看,行不行?”
我一听,觉得有道理,给他个机会让他随便写了一段代码,然后就把他录用了。后来证明,这真是一个太特么正确的决定了!
其实我觉得很多优秀的程序员,都是那种“敏于行而讷于言”的。三棍子打不出个屁,但人家能干活。所以常规的、纯语言的面试很容易漏掉很多优秀的人才,而让一些其实不那么行但能吹(比如当年的飞哥,嘿嘿,当过律师的人,能不会吹么?)的人给混进来。
编程,不是一个可以“坐而论道”的工作啊!
说起dk,我就想到他问我的一个问题:“老师,有没有那种很牛逼的代码啊?”
“怎么才算‘很牛逼’?”我笑着问,因为这也是我曾经有过的问题。
“就是那种一般人看都看不懂的啊!”
我哈哈大笑,这样的烂代码到处都是(参考:为什么祖传代码被称为屎山?)。但很多初学者,恰恰有这样的想法。他们要花很长一段时间,才能明白:最牛逼的代码,恰恰是一般人都能看懂的。
这就是那句话的由来:Keep It Stupid Simple!
所以,请注意,体现你水平的代码,千万不要故弄玄虚!尤其是不要为了一点点的莫须有的性能提高,在里面搞风搞雨。除非你应聘的职位就是“性能调优”,或者你这段代码解决的确实是一个“性能瓶颈”问题。
没跑题吧?我说一下我认为的“能体现你水平的代码”:
1、重构后的代码。最好是有重构之前和重构之后的对比:简单的可以有变量命名、方法拆分、if...else调整;高级一点的可以有单元测试,类的拆分、继承和组合,甚至是设计模式的应用(但设计模式的使用要慎重)……
2、使用“平时不怎么用到的技术”的代码。以ASP.NET技术栈为例,HttpModule编程、WebForm时代的自定义控件、多线程和异步,自定义细颗粒度缓存、数据库读写优化等等。
唉呀,突然有点感慨,现在越来越找不到觉得“能体现水平的代码”了。其实这真是一个很好的面试问题。你觉得能体现你水平的代码,也就体现了你的水平。有点绕,换种说法,当你水平还不够的时候,你会经常觉得“哇塞,这段代码牛逼,我都会写了”,很开森;但随着你水平的提高,这种机会会越来越少,你会越来越觉得“没什么牛逼的,就这样啦……”
好吧,被你看出来啦,飞哥是变着法的在表扬自己。
不过真怀念刚入行那几年的青葱岁月!每天都有进步,每天都有提高。
再说一下,不能体现你水平的代码:
1、佶屈聱牙、过度/早优化的代码,这个前面已经说过了。
2、滥用设计模式的代码。就我的职业经历而言,滥用设计模式比不用设计模式更糟糕!如果你想展示你设计模式的使用,一定要给出明确的、恰当的适用场景,具体来说,你解决了一个什么真正的、实际的、恼人的问题。而且,使用设计模式的代价明显小于这个问题的开销。
3、常见数据结构和算法的代码。这个谁知道是不是你抄的?除非你能现场写,或者更牛逼的,是你自己发明的一种算法。
4、涉及商业秘密,不宜公开的代码。别把你上家公司严禁公开的商业代码给弄出来啦,哈哈……
多快好省!前端后端,线上线下,名师精讲
更多了解 加: