前几天跟一个同事稍微讨论了一下技术,提到了对技术的看法和追求,感觉当时对自己的想法描述的不是很清楚,这里再表达一下。
简单点说,我的想法是,追求最有用的技术,而不仅仅是追求最nb的技术。
仔细想想,自己对于技术的观念还是有一些变化的。上学那会,还有刚工作时,对于技术的追去就是提升技术能力本身,主要体现在去学习不曾掌握的技术,或者对已经掌握的技术加深理解。这个阶段会对很多有难度的技术或者之前不知道的技术很有兴趣,热衷于参加公司的各种培训,研究时下热门的技术,在技术上会专研的很深入。
对于一个技术人员而言,这样很专业,而且技术上的造诣也会持续提升。但是我现在觉得如果这样一直只关注技术,容易犯2个毛病:
- 过多关注技术本身,而忽略技术的应用场景。举一个例子,考虑通用性和可扩展性是设计时的一个关注点,但是有时候容易把问题想的很复杂,将一些犄角旮旯或者很难遇到的场景也考虑进去,导致系统设计的特别复杂,而项目时间又是有限的,有可能导致最后又砍掉不必要的功能,或者不砍,结果由于时间不够,做出来的东西存在各种问题;
- 如果你手上有一个锤子,那么所有的东西看起来都像钉子。这句话描述的比较贴切。有时候我们利用业余时间学习了一些很nb的技术,然后迫不及待的想在项目中用上,而不考虑这个方案是否是该问题的最佳方案。
对于第一个,主要问题还是没有考虑资源问题。技术上当然是追求极限,但是通用性和可扩展性都是相对的,很多时候我们要做的,是技术在我们可能的业务场景下通用,或者扩展性好,而不是要在所有的场景下如此。因为后者所需要的资源,包括时间和人力往往要比前者多很多,而公司一般不太可能给你足够的资源去做这些。所以你得考虑成本。
当然,这不是绝对的,技术上做的足够好,从长远来看是有意义的,而且谁知道哪一天又会有新需求到来。但是对于未知的事情,谁都不好说,除非你的领导有足够的眼光和判断力,有魄力给你足够的资源,但是这种事是可遇不可求的。
对于第二点,问题比较明显,可能导致杀鸡用牛刀。
导致上面2个问题的根本原因,还是在于是从技术角度,而不是需求角度来解决问题,我的想法是,应该从需求角度来解决问题,即需要解决什么问题,有哪些资源,这些资源能让我用什么技术方案解决这个问题。
我现在的观点是,技术最终是需要在实际中使用的,最终是需要用来解决实际问题的,否则,单纯只是为了做技术而做,就同做一个很精致的工具一样,可能只能作为一个工艺品来被鉴赏,而不一定能被拿来使用。所以在做项目时,方案的选择都是紧紧围绕需求本身来制定,所做的优化都是围绕真实场景来实现,方案的最终效果,是以问题解决的好坏程度,而不是技术复杂度来衡量。
写到这里,想起了流传很广的空肥皂盒和电风扇的故事,当然,故事本身的具体方案是否有问题不再讨论范围内,但是如何能用有效的方案最高效的解决问题这一个思路,倒是非常值得学习的。
最后,还得强调一下,最有用的技术和最nb的技术本身并不矛盾,两者并没有排他性,正相反,在有些场景下,两者就是统一的,而是说需要从需求的角度,而不是技术的角度来选择方案,这样最终效果才会是我们说需要的。