这篇文章写于 Gogole IO 2017 的前夜, 话题敏感没敢发布, 结果一觉醒来 Kotlin 就成 Android 官方支持的语言了. 所以觉得还是把文章放出来吧. 如下是原文


语言之争是整个 IT 行业永恒的话题, 那什么样的语言才是测试工程师最适合的语言哪? 这篇文章先抛砖引玉介绍下.

我的编程语言历史

大学时代 C++ ASP

大学的时候老师们教的是 java 和 c++, 我的 java 课程学完, 我都不知道 java 是什么东西. 被 java 啰嗦的语法, 繁杂的配置和丑陋的 UI 体系恶心到不行.
再加上当时流行微软的 MFC 编程, 所以就使用了 Visual C++ 和 MFC 框架编程. 开发过一些查杀病毒的小工具.
那个时候大学的同学也有用 asp 帮别人开发网站, 所以我也学了一点 asp. 只是当时对开发网站的确不感兴趣.

外包公司时代 C# Python

在中软资源工作过一年, 因为做微软外包过来的一部分业务, 所以就早早的使用了 C#, 结合强大的 VS 环境, 编程能力飞升.
当时自己也开发了一堆小工具, 比如测试用例生成工具, 附带局域网聊天. 那个时候真不知道这些编程语言能干嘛. 也没想过开发什么网站之类的.

在这个时期, 自己也对安全有所涉猎, 混了不少圈子, 写过木马, 研究过病毒免杀.
后来看到大牛们出了精通 C 和汇编外, 还鼓励学习一些脚本语言. 我记得当时云舒用的是 PHP.
我当时查了下发现 python 很火, 简单的代码就能做很多工作, 所以就买了一本书好好的学起来了.

后来项目组有个德国人进来带我们, 他看到我在学习 python, 也觉得挺意外, 他告诉我德国的不少大学都是教 python 的, (我们的学校还在教 VB..)
还时不时的经常给我题目测试我, 比如如何遍历一个深度的目录, 找出所有符合条件的文件.
从那之后就用了 python 写了不少的脚本, 也偶尔研究 python 开发的各类黑客工具. 比如 sqlmap 之类的.

这段时间的语言体系主要是 C# VC Python

阿里时代 Ruby Bash

进了阿里之后, 我对自动化并不感兴趣. 领导知道我技术水平还可以, 想让我负责阿里的搜索引擎的自动化测试. 而我拒绝了.
我说自己只是想做好测试工作, 成为一个好的项目测试经理. 当然还有另外一个原因, 那个框架是 ruby 写的, 我自己比较喜欢 Python. 挺反感 ruby 的.
毕竟自己学了 2 年, 也算略有小成. 当时还无知的列出了 Python 比 Ruby 好的十大原因.

进阿里后的工作环境发生了很大的变化, 从原来的 windows 体系的测试转型成了服务端的测试.
因为各类的测试工作全都是在 linux 上, 所以在同事的指导下, 就开始学习 bash, 然后发现了 bash 很多很好玩的特性. 比如 awk sed grep 三剑客, 比如 ps curl 等.
从那之后就迷上了编程, 慢慢的目标从测试经理转到了测试开发工程师的方向上了.

后来还是接手了一部分的搜索引擎的自动化测试, 一部分的 UI 测试等. 因为他们都是同事们用 ruby 开发的. 所以我也开始学习 ruby 了, 然后就了解了 Rails. 才发现别有洞天.
也在部门逐渐的承担一些技术研究工作, 分析和改造各类的测试工具.

这期间的语言功底是 Ruby Bash 为主. 因为学习的很快, bash 小有成就, 还做过一阵子的公司内部的 Bash 授课讲师.
我自己开发的 BashGems 也先后从阿里带到百度再带到其他的公司, 接触过的同事都对这个框架赞誉有加.

百度时代 Ruby C PHP

百度的语言体系主要是 C 和 PHP, 所以自己又深入的学习了下 C 相关的知识, 在公司跟着推进单元测试. 做一些算法测试项目.
深挖过单元测试和覆盖率统计, 以及 Valgrind SystemTap 等 profile 工具.

参与维护接口测试. 百度后台的接口测试是 ruby 开发的. 所以 ruby 的功底没有丢, 一直在深化学习. 那个时候 Rails 特别火. 自己也写过一些小网站和测试管理平台.
后来也研究过一些 PHP 的字节码和扩展编写.(php 的扩展是 c 写的). 对 PHP 的生态了解了一部分

这期间的主要技术体系是 Ruby C PHP
这期间语言进度不大, 但是对测试的理解深入了很多, 那段时间得以研究了很多深层次的测试问题, 比如

对这些问题的思考和沉淀为自己带来了很多收获.

创业公司时代

先后进入了几家创业公司. 才发现了语言是其次的, Runtimes 才是最核心的. 比如性能监控, 覆盖率统计,业务建模, 代码静态分析,还得都是基于 Runtimes 的技术体系.
需要对引擎进入深入的了解, 大部分企业又是 JVM 为主的体系. 真正需要被拯救的也是 JVM 体系上各种落后的技术. 所以我又调整了自己的重心, 弱化语法重视引擎.
开始认真的学习 JVM 字节码 插桩 Hook 和一些机器学习, 数据分析的工具和平台.

我也一度迷恋过 NodeJS, 觉得他是一统世界的语法,后来经过使用和深度的分析才发现它成不了真正的后端开发引擎. 只是前端的粘合剂. 所以就放弃了.
开始物色更好的全栈语言. 也就是 Scala. Scala 用起来还是很顺的, 就是太难. 概念复杂. 这决定了他不能一统世界.
Scala 最大的问题是他与 Java 并不是完全互通的, 所以我也在物色更好的语法. 从而更好的分析 java 应用.

这期间主要的语法体系是 Ruby Scala, 后面更是全面转向了 JVM 的生态.

编程语言之争的本质

在开启争议话题之前, 我得先科普几个重要的概念.

所以选择什么样的语言, 几乎也决定了你以后所从事行业的深度了. 我从三个层面分别介绍不同语言的优缺点

Platform Runtime Language Library
Java All 支持 Android 开发 JVM 语法较弱, IDE 很强 独立生态, 生态强大
Python All 不支持 Android 和 iOS 企业开发 CPython Jython 人生苦短我用 Python IDE 一般 独立生态, 生态强大
Ruby All 不支持 Android 和 iOS 企业开发 CRuby JRuby 语法优美 Web 开发生态强大 代表 Rails 移动开发 大数据计算一样不沾
Scala All 一定程度支持 Android 和 iOS 的企业级开发 JVM Java 界的 C++ 仅适合高智商人群 可复用 Java 的生态, 大数据计算是优势 代表 Spark
Kotlin All 对 Android 企业级别的开发支持很积极 JVM The Good Part Of Scala 官方宣言:如果你喜欢 scala 就一直用 scala 吧. 可复用 Java 的生态. 官方目前在重点支持 Android
PHP All 不支持 Android 和 iOS 的企业开发 Zend Web 开发中的 Python, "全世界最好用的语言" 除了 Web 开发几乎一无是处, 移动开发, 大数据计算一样不沾
NodeJS All 不支持 Android 和 iOS 企业级别开发 Node+V8+JVM 首个"全栈"语言, 前端工程师的救星, 后端工程师眼中的垃圾 除了 Web 开发几乎一无是处
Swift 几乎 All 支持 iOS 开发 Swift 和 Scala Go 类似的现代语法, 比 OC 是很大的进度 独立生态. 生态一般, Web 开发和 iOS 开发可以胜任
ObjectC 主力 iOS 开发 ObjectC C++ 的方言版 Swift 可复用 OC 的生态
Go All Go 现代化的语法结构 生态强大
C# All 最近几年也开始支持 Linux 一定程度支持移动开发 .Net 现代化的语法结构 生态强大. 不过一般不会用于服务器开发

补上几个看起来"不正常"的事情辅助理解

从上面的对比图可以得出的结论如下

说说你的看法

零零散散的写了一堆, 有些细节上我模糊掉了. 比如 scala.native kotlin.native 是可以开发原生程序的, 所以理论上也能将来支持 iOS 之类的.
没法做到全都正确和细致. 所以整篇文章可能会略有不太考究的地方. 仅供参考.

接下来问题就来了

转载请注明来自于 https://testerhome.com/topics/8727


↙↙↙阅读原文可查看相关链接,并与作者交流