技术路线的核心竞争力

来源:互联网 发布:淘宝助理主图不显示 编辑:程序博客网 时间:2024/04/30 16:10
起了一个不好听的标题。

工作一年多了,也已经开始带新人了。听到那些比我年纪大的人叫我导师,我经常忍不住翻白眼。
我想写一些见解,写一些如果我上大学的时候看到会受益的东西。

首先澄清一点,千万不要听信有些过来人所谓【学算法在工作中基本用不上,但学它可以锻炼你的思维】这种褒贬参半的话。确实有些技术人员不太懂算法,但也伴随着产品的成功发了家 —— 还有人不懂算法能中六合彩呢。真正从技术角度来看,在现今【big data】时代,越核心、越高档的职位,对算法的要求就会越高。这就是为什么大公司校招最喜欢考算法,大公司喜欢自己培养人(而不是招打杂的),管理方向另说,技术方向的话,算法不过硬不可能走得远。

为什么算法重要?
我认为技能分为两类,一类是可现学现卖的,一类是需要系统学习的。后者更值钱,算法正是属于后者。举个例子,有人突然给你一份java或者perl代码,让你加个啥功能,即使你没接触过这些语言,对于聪明的程序员来说google一下语法两下子就解决了;但如果有人给你一份代码跟你说这个推荐引擎的效果好像不太好,而且性能有些差……

对于需要系统学习的东西,假如它是你的短板,就极其容易让你在解决问题的过程中走错方向。哪怕你把问题拆分得很好,逐一请教google或者大牛,也不见得可以得到合理的方案,毕竟问题一般都具有特殊性,只有你自己才能把握全局信息。比如之前有个同事问我一个很复杂的匹配问题,想得我天昏地暗血肉模糊,但后来我了解了他的完整需求之后,发现他归约到匹配问题本身就丢失了一些有用信息,换个方式直接就解决了。

好。
那除了算法,需要系统学习的东西还有什么?我认为是组成原理和设计模式。

组成原理是算法的强力后援。
程序的性能可以看作是算法理论复杂度乘以硬件性能,不要以为后者只是一个常数的问题。把寄存器、内存、硬盘的调度玩好,你的程序甚至会跑出让普通算法滚蛋的performance。另外我们知道,【big data】时代伴随着高机器损耗率,不懂组成原理是没办法让服务稳定的。组成原理这块我在大学荒废了,工作后一直在补。

设计模式。
不懂设计模式,就只能老老实实去写面向过程的代码,否则你看似规整的class会成为毁灭性的垃圾。但是你能只玩面向过程吗?不能,因为很多开源的艺术品都是面向对象的。
但对于没毕业的人来说学设计模式是很矛盾的事情,因为没经过大量的工程实践,很难理解那23种模式的意义何在。
这个矛盾的唯一解决途径还是多动手。你做到了别人没做到,这块会产生巨大优势。

资历有限,不继续深入。

就目前来看,这3点炼成后足以扳倒一大片。



原文地址:http://davidzai.blog.163.com/blog/static/187126212012629115654649/