本文轉自於思寒大佬,發表於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之類的.
無法作到全都正確和細緻. 因此整篇文章可能會略有不太考究的地方. 僅供參考.
接下來問題就來了