本文转自于思寒大佬,发表于TesterHome。连接: https://testerhome.com/topics/8727
javascript
这篇文章写于Gogole IO 2017的前夜, 话题敏感没敢发布, 结果一觉醒来Kotlin就成Android官方支持的语言了. 因此以为仍是把文章放出来吧. 以下是原文php
语言之争是整个IT行业永恒的话题, 那什么样的语言才是测试工程师最适合的语言哪? 这篇文章先抛砖引玉介绍下.前端
大学的时候老师们教的是java和c++, 个人java课程学完, 我都不知道java是什么东西. 被java啰嗦的语法, 繁杂的配置和丑陋的UI体系恶心到不行.
再加上当时流行微软的MFC编程, 因此就使用了Visual C++和MFC框架编程. 开发过一些查杀病毒的小工具.
那个时候大学的同窗也有用asp帮别人开发网站, 因此我也学了一点asp. 只是当时对开发网站的确不感兴趣.java
在中软资源工做过一年, 由于作微软外包过来的一部分业务, 因此就早早的使用了C#, 结合强大的VS环境, 编程能力飞升.
当时本身也开发了一堆小工具, 好比测试用例生成工具, 附带局域网聊天. 那个时候真不知道这些编程语言能干吗. 也没想过开发什么网站之类的.node
在这个时期, 本身也对安全有所涉猎, 混了很多圈子, 写过木马, 研究过病毒免杀.
后来看到大牛们出了精通C和汇编外, 还鼓励学习一些脚本语言. 我记得当时云舒用的是PHP.
我当时查了下发现python很火, 简单的代码就能作不少工做, 因此就买了一本书好好的学起来了.python
后来项目组有个德国人进来带咱们, 他看到我在学习python, 也以为挺意外, 他告诉我德国的很多大学都是教python的, (咱们的学校还在教VB..)
还时不时的常常给我题目测试我, 好比如何遍历一个深度的目录, 找出全部符合条件的文件.
从那以后就用了python写了很多的脚本, 也偶尔研究python开发的各种黑客工具. 好比sqlmap之类的.linux
这段时间的语言体系主要是C# VC Pythonandroid
进了阿里以后, 我对自动化并不感兴趣. 领导知道我技术水平还能够, 想让我负责阿里的搜索引擎的自动化测试. 而我拒绝了.
我说本身只是想作好测试工做, 成为一个好的项目测试经理. 固然还有另一个缘由, 那个框架是ruby写的, 我本身比较喜欢Python. 挺反感ruby的.
毕竟本身学了2年, 也算略有小成. 当时还无知的列出了Python比Ruby好的十大缘由.ios
进阿里后的工做环境发生了很大的变化, 从原来的windows体系的测试转型成了服务端的测试.
由于各种的测试工做全都是在linux上, 因此在同事的指导下, 就开始学习bash, 而后发现了bash不少很好玩的特性. 好比awk sed grep三剑客, 好比ps curl等.
从那以后就迷上了编程, 慢慢的目标从测试经理转到了测试开发工程师的方向上了.c++
后来仍是接手了一部分的搜索引擎的自动化测试, 一部分的UI测试等. 由于他们都是同事们用ruby开发的. 因此我也开始学习ruby了, 而后就了解了Rails. 才发现别有洞天.
也在部门逐渐的承担一些技术研究工做, 分析和改造各种的测试工具.
这期间的语言功底是Ruby Bash为主. 由于学习的很快, bash小有成就, 还作过一阵子的公司内部的Bash授课讲师.
我本身开发的BashGems也前后从阿里带到百度再带到其余的公司, 接触过的同事都对这个框架赞誉有加.
百度的语言体系主要是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之类的.
无法作到全都正确和细致. 因此整篇文章可能会略有不太考究的地方. 仅供参考.
接下来问题就来了