最近看了篇关于新技术风险的文章,结合自身经历,反思并总结下项目中应用所谓“新技术”的一些想法。(后面想到了再补充)
何为“新技术”
谈论“新技术”这个词的时候,很少深入、明确地解释这个词的意义。在我看来,这个词有诸多歧义,比如:
- 新出现的技术:历史上较晚出现的技术;
- 新引入的技术:项目中原来没有采用的,刚刚引入的技术;
- 新学会的技术:一个开发者原来不会的,刚刚学会的技术。
(更多待补充)
我想上面提到的三种,都可以称为“新技术”,却是三种不同的“新”:第一种新相对于客观时间而言,第二种相对于项目历史而言,第三种相对于某一开发者而言。某天某人谈论到“新技术”的时候可能同时具备上面三个特征,比如一个人将他刚刚学到的最近新出现的技术应用到项目中;也有可能对甲来说是新技术,对乙来说却是个经典技术,比如,乙学了某些很古老的冷门的经典技术,但甲没听过,甲就将其当作是“新技术”。
“新技术”的风险
上面说到的三种“新技术”都有对应的风险。
一、“新出现的技术”的风险
第一种是“新出现的技术”,这类技术风险是最大的,主要有:
- 测试不完备:这个技术可能未经过完备的安全测试,或许存在很多漏洞;
- 文献参考资料稀缺:相关资料的稀缺导致难以进行全面的学习(问题见下面关于“新学会的技术”的描述);
- 实用性缺少检验:很多新出现的技术是在单纯的环境中设想、创造出来的,但现实要更复杂、更无理,能不能在实际项目中高效、安全地应用,有待检验。
二、“新引入的技术”的风险
“新引入的技术”风险主要有:
- 跟项目原有设计不一致(比如在命令式风格的项目中,局部引入声明式的框架);
- 跟项目原有的实现不兼容;
- 该技术相关工程规范缺失而导致开发合作问题(比如开发对技术的理解不同而导致各种姿势的代码);
不过好在这个问题都是可以规避的。
三、“新学会的技术”的风险
“新学会的技术”的风险如下:
- 选择性学习导致对技术理解不全面;
- 相关资料缺失导致无法深入、全面地学习;(目前很多技术的文档中侧重阐述“是什么”、“怎么用”,而关于“为什么”、“隐患和改进点”描述甚少)
- “拿着锤子看什么都像钉子”。
一些建议
以下是一些建议:
- 对于新出现的技术,多观望,多调查技术背景和开发者背景,应用之前多实验。
- 对于新引入的技术,保守使用,尽量只用主要功能,减少对冷门部分功能的使用,做好工程规范整理,多做项目沟通。
- 对于新学会的技术,学习要完善、深入,然后忘掉它,需要的时候再用。
个人拙见/偏见:通常技术的创造者比使用者能更好地使用这个技术,所以与其“有什么用什么”或“在已有的东西里挑最好的”,不如“需要什么就创造什么”(如果已经有差不多实现,并投入使用,可以考虑用别人的实现,但需检查实现)