測試行業的編程語言之爭

 

 

本文轉自於思寒大佬,發表於TesterHome。連接: https://testerhome.com/topics/8727
javascript

 

 

這篇文章寫於Gogole IO 2017的前夜, 話題敏感沒敢發佈, 結果一覺醒來Kotlin就成Android官方支持的語言了. 因此以爲仍是把文章放出來吧. 以下是原文php


語言之爭是整個IT行業永恆的話題, 那什麼樣的語言纔是測試工程師最適合的語言哪? 這篇文章先拋磚引玉介紹下.前端

個人編程語言歷史

大學時代 C++ ASP

大學的時候老師們教的是java和c++, 個人java課程學完, 我都不知道java是什麼東西. 被java囉嗦的語法, 繁雜的配置和醜陋的UI體系噁心到不行. 
再加上當時流行微軟的MFC編程, 因此就使用了Visual C++和MFC框架編程. 開發過一些查殺病毒的小工具. 
那個時候大學的同窗也有用asp幫別人開發網站, 因此我也學了一點asp. 只是當時對開發網站的確不感興趣.java

外包公司時代 C# Python

在中軟資源工做過一年, 由於作微軟外包過來的一部分業務, 因此就早早的使用了C#, 結合強大的VS環境, 編程能力飛昇. 
當時本身也開發了一堆小工具, 好比測試用例生成工具, 附帶局域網聊天. 那個時候真不知道這些編程語言能幹嗎. 也沒想過開發什麼網站之類的.node

在這個時期, 本身也對安全有所涉獵, 混了很多圈子, 寫過木馬, 研究過病毒免殺.
後來看到大牛們出了精通C和彙編外, 還鼓勵學習一些腳本語言. 我記得當時雲舒用的是PHP. 
我當時查了下發現python很火, 簡單的代碼就能作不少工做, 因此就買了一本書好好的學起來了.python

後來項目組有個德國人進來帶咱們, 他看到我在學習python, 也以爲挺意外, 他告訴我德國的很多大學都是教python的, (咱們的學校還在教VB..)
還時不時的常常給我題目測試我, 好比如何遍歷一個深度的目錄, 找出全部符合條件的文件.
從那以後就用了python寫了很多的腳本, 也偶爾研究python開發的各種黑客工具. 好比sqlmap之類的.linux

這段時間的語言體系主要是C# VC Pythonandroid

阿里時代 Ruby Bash

進了阿里以後, 我對自動化並不感興趣. 領導知道我技術水平還能夠, 想讓我負責阿里的搜索引擎的自動化測試. 而我拒絕了. 
我說本身只是想作好測試工做, 成爲一個好的項目測試經理. 固然還有另一個緣由, 那個框架是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也前後從阿里帶到百度再帶到其餘的公司, 接觸過的同事都對這個框架讚譽有加.

百度時代 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之類的. 
無法作到全都正確和細緻. 因此整篇文章可能會略有不太考究的地方. 僅供參考.

接下來問題就來了

    • 哪一種編程語言你最喜歡?
    • 哪一種語法比較適合測試行業?
相關文章
相關標籤/搜索