选择一门技术,要综合考量技术的多个方面来评估。大方向上首先考虑技术综合面
:
- 业界是否有知名的成功案例;
- 是否有强大后援;
- 是否有活跃的开发者论坛;
业界有知名成功案例意味着该技术通过了技术人员的考究,经过了工程的检验,坑也会相对较少。
比如Java有Sun,Golang有Google,有这些实力雄厚的公司或机构做背书,有理由相信这些技术未来的潜力;
java、python有活跃的论坛,有丰富开源库,做网络应用、缓存、爬虫等工作都有现成的库,无需造轮,大大提高开发效率。另外,有活跃的开发者论坛意味着技术资料比较丰富,并且绝大部分你遇到的问题都有前人遇到过,可以大大减少爬坑的时间。
业务需求会对系统有一些要求,根据业务特点考虑以下问题:
- 计算密集型、IO密集型:计算密集型与IO密集型的任务会对系统有不同的要求;计算密集型任务可以考虑编译型语言、多核&多机(分布式)来实现。多核IO密集型任务并没有什么帮助,多路复用会有好的效果。
- 读写频率:不同的读写频率有不同适用的数据结构和算法,会衍生出不同的系统架构;
- 系统实时性要求:实时性要求高的系统需要快速响应,服务线程需要避免长时间堵塞式的调用,可以利用并行、分时、多路复用等特性;
- 系统安全性要求:服务器连续运行时间要求、数据一致性要求,分布式系统需要考虑CAP问题;
- 热更新、热部署:在虚拟机中运行的脚本语言更适合热部署;
- 平衡开发效率与运行效率:一般而言抽象层次较高的脚本语言开发效率较高,但运行效率较差;封装程度较低的编译型语言运行效率较高,但开发效率较差;
技术综合面
:参考本文前面的对技术综合面
的说明;