測試行業的編程語言之爭

這篇文章寫於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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章