今年是变化的一年,自己最大的收获就是认识到视野和选择远比努力重要。
打开视野后,感觉自己以前对于编程语言的理解还是太片面了,所以重新谈谈现在的认识。
一句话总结的话,还是那句老话:没有最好语言,只有最适合的语言。 语言只是解决问题的一个工具。
历程
回头看,之前对于编程语言还是带有太多主观感情色彩了,有点类似于Python是世界最好的编程语言。
大学学的C语言,可能是因为国内教材的毒害作用,加上天资不够,对于上机课一直兴趣不大。所以也没有深入理解这门经典编程语言的精髓,没打好基础。
刚毕业的头两年主要用Java,可是没有人带,没有好的入门书,对好的代码没有太多认识,更别提面向对象编程思想了。 正式买的第一本书是《Java编程思想》,应该说它真不适合入门,因为工作主要是维护现有的系统,自己学习的路程更多是照猫画虎,所以水平只能呵呵了。
后来换工作转到测试,要维护一个Perl写的系统,就买了经典的骆驼书来学习。不得说Perl这门语言真是太面向极客了,这种一个目标的N种实现,没有多少人受得了。
对我改变最大的当然是Python语言,当时热衷于阅读国外的技术博客,偶然看到了Mozilla的自动化测试实现,一下子开拓了视野。 记得买的第一本书是英文影印版的老鼠书《Leaning Python》,后来又买过好几本其他畅销书。
Python更接近自然语言,而且它强调一个目标只有一种实现(即所谓的Pythonic)。 所以自然爱上了这门语言,当时做自动化测试实现,性能测试实现都会优先选择Python生态,也确实取到了很好的效果。 记得当时选型Robot Framework时,国内还没有多少人在用。
凡事都有两面,因为喜欢Python而反感Java,虽然期间也维护或写了些Java的项目,但其实对Java的理解并不深入,应该说更多只是用用。
后来用Python做性能测试遇到瓶颈,因为性能本来是Python的弱项,直接用线程模型单机也就模拟3000~5000的用户量,加上用gevent这种异步库调试起来很痛苦,才有机会接触了Go.
因为自己是个Google粉,除了网络教程还买了《Go程序设计语言》用来学习,先是在一些新的小项目应用,效果很好。 后来干脆用Go重写了之前的工具,估计代码量只用了1/10,但单机模拟用户量能提升10倍。
今年下半年也开始重新学习和认识Java,虽然Spring Boot刚出来时就用过一点,但在深入学习了依赖注入、面向切面这些听起来高深的知识后,发现Java生态已早不是我印象中的Java。 比如Java8及新版本就改变很大,也有Guava、Netty等优秀的库框架支持,更不用说Spring生态提供了多少成熟的业务支撑。
做个对比,熟悉Spring后,实现同样的REST接口并不比Django、Flask等动态语言慢,而且业务需求复杂后明显Java项目可以更好的工程化。
这也告诉我们要以发展的眼光看待事物,心态要始终开放。
语言的选择
从更大的视角看,每个流行语言都有它的优缺点和适用场合。
- Java: 最丰富和成熟的生态,复杂的业务首选。
- Python: 快速开发实现,新手入门、运维首选,数据科学标配。
- Go: 性能第一位,基础设施工具、中间件首选。
总结
大部分的选择都有两面性/trade-off、取舍、平衡,推广到做事情,所谓舍得(有舍才有得),老子云:“福兮祸所依祸兮福所伏”,也可以解读为顺利时不盲目、不顺时要反思改进。
今年总结的另外一句话是:跳出舒适区,进入学习区,才能走进更大的舒适区。
此篇算作2019的年底总结吧。