51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2874|回复: 6
打印 上一主题 下一主题

[转贴] 测试行业的编程语言之争

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2017-6-7 16:37:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这篇文章写于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 生态系统
所以选择什么样的语言, 几乎也决定了你以后所从事行业的深度了. 我从三个层面分别介绍不同语言的优缺点

补上几个看起来"不正常"的事情辅助理解
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之类的.
没法做到全都正确和细致. 所以整篇文章可能会略有不太考究的地方. 仅供参考.
接下来问题就来了
哪种编程语言你最喜欢?
哪种语法比较适合测试行业?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

3#
发表于 2017-6-9 09:20:06 | 只看该作者
很抱歉来回复这种口水贴(当然楼主很有水平,分析的比较到位,我只是说这个话题会引来口水)
原则:语言是工具,无优劣好坏之分。
基于这个原则得出结论:
1、项目用什么语言,你就要用什么。同事用什么,你用什么。否则没法沟通。
2、既然是工具,所以轮子多的好。。现在看来java 、python 轮子最多。最省事,
3、深受设计模式毒害,所以不喜欢python这种脚本语言。并且。我喜欢研究语言底层和编译器的东西。比如jvm底层机制。这样才能写出精准高效的程序。。所以我喜欢用java通杀一切需求。(以前在微软是c#)
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2017-6-9 09:20:56 | 只看该作者
我这现在的做法是根据开发来,开发用java测试也用java,开发用dart测试也用dart,大家统一,好沟通
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2017-6-9 09:22:27 | 只看该作者
让我选我会首选node,容易开发平台化的测试工具,方便统计测试数据和维护。
其次python,数据处理分析上有优势,但是python23版本相互不兼容,这点让人很不爽
最后不行就JAVA,因为开发选型都是java,不得不用java测接口

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

使用道具 举报

该用户从未签到

6#
发表于 2017-6-9 09:23:20 | 只看该作者
知识面真广,之前在游戏公司只用lua……后来被陆陆续续来的老司机安利 python 。 现在换了工作,感慨还好有点python准备 否则工作真不好换
回复 支持 反对

使用道具 举报

  • TA的每日心情
    慵懒
    2020-8-11 08:18
  • 签到天数: 114 天

    连续签到: 1 天

    [LV.6]测试旅长

    7#
    发表于 2017-6-9 14:52:24 | 只看该作者
    没用的lz,这里不是csdn,这种文章没人来跟你争论的,用小号顶贴也没用,哈哈
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-25 18:32 , Processed in 0.075148 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表