职业经验 测试行业的编程语言之争

思寒_seveniruby · 2017年05月18日 · 最后由 kuroky 回复于 2017年08月29日 · 2738 次阅读

这篇文章写于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 是指特定平台上的运行能力和企业开发体系 windows linux unix solaris ios mac android
  • runtime 特定语言的运行时 jvm cpython node
  • language 语言自身的语法结构 java python ruby nodejs
  • Library 生态系统

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

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 现代化的语法结构 生态强大. 不过一般不会用于服务器开发

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

  • python ruby可以运行在jvm上. 对应的项目叫jython jruby
  • nodejs和jvm都支持javascript语言标准, 也就是javascipt也可以用于java开发.
  • js可以借助nodejs和web实现前后端语言统一, 成为"全栈"语言. 但是实际上scala kotlin等很多语言也可以生成js. 从后端生成前端与语言. 也是"全栈"语言.

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

  • Python的地位无人可撼动. 因为它拥有自己的完整生态.
  • Go会取代C系列的语言迅猛发展
  • Java会走下坡路. 因为Scala Kotlin的语言优势很明显, 又可复用Java的生态. 会对Java造成很大的冲击.
  • Ruby PHP ObjectC 会走下坡路, 如果只是Web开发, 他们都很胜任. PHP生态强大, 短时间内不会大幅度滑坡.
  • NodeJS目前会保持增长, 未来会走下坡路, 后端语言取代前端语言的时代即将到来. Kotlin Scala TypeScript Elm Dart都在尝试编译为js并提供了更强的语法和生态支持

说说你的看法

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

接下来问题就来了

  • 哪种编程语言你最喜欢?
  • 哪种语法比较适合测试行业?

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

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 45 条回复 时间 点赞

上头条

那么到底哪种语法比较适合测试行业?

很抱歉来回复这种口水贴(当然楼主很有水平,分析的比较到位,我只是说这个话题会引来口水)

原则:语言是工具,无优劣好坏之分。

基于这个原则得出结论:
1、项目用什么语言,你就要用什么。同事用什么,你用什么。否则没法沟通。
2、既然是工具,所以轮子多的好。。现在看来java 、python 轮子最多。最省事,
3、深受设计模式毒害,所以不喜欢python这种脚本语言。并且。我喜欢研究语言底层和编译器的东西。比如jvm底层机制。这样才能写出精准高效的程序。。所以我喜欢用java通杀一切需求。(以前在微软是c#)

个人喜欢java,不喜欢Python

我这现在的做法是根据开发来,开发用java测试也用java,开发用dart测试也用dart,大家统一,好沟通

我坚信我的C# .Net Core终将干倒Java,壮哉我大微软,蛤蛤

ruby支持ios和android开发

python、kotlin

恒温 回复

这就是我帖子里故意提到模糊了一些细节. rubymotin不是太流行, 所以我没提. 没有规模化使用的我就不列举了.

已打赏
不过我实际上对:
大规模的接口测试是如何管理的
测试框架应该如何设计

这两点比较感兴趣,希望有时间楼主可以开个专栏讲解一下

ice 回复

10000个赞同 还是聊点实际的

淼淼淼 回复

自己根据自己的情况选择好就行. 没有100%正确的答案.

如果做了明确的推荐. 那么就是对所有人的不尊重. 会让别人对自己的选择有严重的挫折感.
这种得罪全天下的事情不要做. 不然就会挨喷.
刚入门学习的人还可以接受新思想, 一旦深入某种语言就会陷入保守无法掉头的. 去叫醒这类人没意义.

你可以从如下的几种情况综合考虑

  • 研发的技术体系
  • 最全栈全能的语言体系
  • 能支持前端开发

这样既能深入研究底层的编译器和字节码, 做到覆盖率分析, 性能分析和业务建模, 又能做到可以做成一个完整的平台.
一种语言能搞定最好, 搞不定就得再多学一两种.

nodejs已经不仅仅只是nodejs了,什么es6,coffeejs,vuejs等,泛滥着

让我选我会首选node,容易开发平台化的测试工具,方便统计测试数据和维护。
其次python,数据处理分析上有优势,但是python23版本相互不兼容,这点让人很不爽
最后不行就JAVA,因为开发选型都是java,不得不用java测接口

羡慕楼主可以有机会使用这么多的语言。
其中对nodejs的评价和定位我觉得我觉得有失偏颇。
对于实时性要求比较强的终端应用,nodejs是很好的选择。 比如appium和STF。

C# All 最近几年也开始支持Linux 一定成都支持移动开发 .Net 现代化的语法结构 生态强大. 不过一般不会用于服务器开发

这里的“成都”应该为“程度”

华全 回复

nodejs的实时性很好. 这个被过度吹嘘了. 很多语法都支持异步和高并发. 速度一样很高. 比如akka em模型, 或者erlang


直接粘贴不知道能看到不,感谢思寒大哥分享

无悔 回复

我修改下. 谢谢 还有 @yuweixx

知识面真广,之前在游戏公司只用lua……后来被陆陆续续来的老司机安利 python 。 现在换了工作,感慨还好有点python准备 否则工作真不好换

反正我喜欢c#,不过现阶段主攻js

之前喜欢用python,用久了后现在喜欢用java和js

只会java。。

适合自己,自己用的最熟练,能用它完成自己的工作,能给自己带来好处和提升效率的就是最好的。

python效率高,但我个人还是比较喜欢java

ice 回复

说到点上了,像楼主求解

node生态圈还是挺强大的,web测试我还是选node,哈哈。

为啥没有加上shell呢。。。shell也是要学习的啊,平时也会用

yonghang.zhang 回复

嗯 这个的确是非常重要的 类似sql 领域特定语言

今天闲得无聊来完成下前几天想做的事情,本来是验证下账号是否已注销,却无意发现这么有深度的文章,看了真是深受启发。
总结下,这就是个私人网站,某一个人的格局决定了社区的形态,所以无论掌握99八十一种语言也好,思维的高度决定了也只是一个码农的聚集地。

语言代表了创造者的思想,无所谓争不争,何况本身就不是为了测试而生的,能够一统天下的只会是思想,而不是某一种技术,即使存在这种技术,那它也是无门无派的,发挥各种语言的特点反而有可能去更方便解决某一个问题,只有格局不够的人才喜欢分你我,较高下,非要争个你死活我,总以为自己天下第一,自己是世界标准。自己的经历多么地辉煌,可以成为所有人的模板和典范,而且一遍又一遍不厌其烦地在不同的帖子里炒冷饭,太恶心,一个加班狗的经历有什么值得炫耀呢?

致大多数人,不要盲目跟随或者崇拜,要有辨识力,你可以不会任何一门语言,但你有解决问题的能力就行,只要你高兴,爱用什么就用什么,解决了别人无法解决的问题就行,不需要关注这种无聊的话题,让其他人去主流,去流行,而其实只是愚蠢地被你甩在身后,当你有天进入什么度什么巴的公司,你发现这群人也不过如此,你也可以对他们嗤鼻一笑,那样才是你自己。

很庆幸最近才发现这个论坛,不过写完这篇也不会再登录了,祝大家继续吹捧,继续膜拜,共同进步吧。

装逼装的漂亮 谁的个人网站? 你这账号上个月才注册的,社区的帖子你也百分之一都没看吧

装逼装的漂亮 谁的个人网站? 你这账号上个月才注册的,社区的帖子你也百分之一都没看吧

辗转这么多公司,工作年限多久了(看了题主另一篇讨论测试职业发展的帖子,10年了)
我现在工作满5年,现在第三个公司,都觉得这会影响以后找工作了

nil 回复

我想你肯定会回来看看,大家的反应,否则也满足不了你的某种心理。不过我还是希望你不要回来了。88,走好不送。

Baozhida 回复

哈哈哈,其实还好,我是5年4家

026 回复

3年的时候五家了,第一家工资拖欠,第四家也是工资拖欠,没办法只能离职~

回复

阿里是你的最好归属,看好你

026 回复

😅 一面就挂,还是算了

恒温 回复

不是说好不理这类人了吗, 你咋又会了...

老夫写代码就是一把梭,操起鼠标键盘就是干。。

然后就了解了Rails. 才发现别有洞天

接触 Rails 后发现对设计良好的系统做测试和运维是多么愉快😂

个人觉得python挺适合测试行业的,不过自己选择的java(以前学过一段时间c#写测试工具),因为公司开发用的java,想保持技术一致性。

其实,各种语言都要会。

ting 回复

熟练使用一门万能的胶水语言, 精通多门语言的runtime比如jvm art的机制. 是最好的状态.

新人建议先学java,语言规范,ide强大,生态好,学习成本低。基本能解决大部分问题。
有一定基础的,建议python或者java,只要是生态圈太好了,遇到问题容易解决。
其他的看自己兴趣了,做测试平台类似的可以python或者ruby。

思寒_seveniruby 测试行业的编程语言之争 中提及了此贴 11月20日 11:11
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册