技術(shù)選型的一點個人思考
時間:2021-11-03 14:19:37
手機看文章
掃描二維碼
隨時隨地手機看文章
[導(dǎo)讀]1?前言這個題目有點大。工作也有些年頭,從開始入行的被動接受,什么流行就學(xué)什么;到有一些想法,會去思考為什么使用這種技術(shù);再到主動去學(xué)習(xí)一些前沿框架。從開始的不理解,事不關(guān)已高高掛起,不在其位不謀其政;到也成為了團隊中的中堅力量,去據(jù)理力爭應(yīng)該使用某些技術(shù),把覺得好的技術(shù)安利給同...
1 前言
這個題目有點大。工作也有些年頭,從開始入行的被動接受,什么流行就學(xué)什么;到有一些想法,會去思考為什么使用這種技術(shù);再到主動去學(xué)習(xí)一些前沿框架。
從 spring mvc 到言必談 spring boot,微服務(wù)。不來兩句服務(wù)化,降級限流熔斷,高并發(fā)你都不好意思出門。
到 flink 異軍突起,阿里巴巴再出漢化版 blink,與 spark 分庭抗禮,直至略占上風(fēng)。后來者只知 flink,而鄙視 spark 之風(fēng)氣,怪異而可愛。
這時期的數(shù)據(jù)庫已無法像傳統(tǒng)關(guān)系型數(shù)據(jù)庫那樣三足鼎立(o m else)( java 位面下),而是春秋時期百家爭鳴的局面,各家大廠根據(jù)自身的業(yè)務(wù)需求訂制化了許多產(chǎn)品,包括不限于 Fusion,mariadb,OceanBase,TiDB,ClickHouse,greenplum,dorisdb,kudu 等等。
對于普通開發(fā)者,這是好事?壞事?
2 效率
2.1 沒有絕對的效率
我有點害怕技術(shù)討論會上,上來就說據(jù)XX公司/官網(wǎng)測試,XX比XX效率高出5%(8%or10%...)
2.2 效率是否絕對重要
在RocketMq(阿里牛逼!)沒有開源前,消息隊列一般有三種選擇 RabbitMQ,ActiveMq,ZeroMq。
三者控制變量的前提下,TPS 測試結(jié)果表明 ZeroMq 效率最高。但那些年我所待過的公司,我了解到的情況(同事,網(wǎng)絡(luò)),消息隊列基本都在 RabbitMQ,ActiveMq 兩者之間選擇,鮮少使用 ZeroMq。
3 環(huán)境
3.1 國內(nèi)開發(fā)大環(huán)境
最典型的例子就是 mybatis vs hibernate.
除了銀行之類的老項目,現(xiàn)在有新項目在使用 hibernate 嗎?就算有,hibernate 在國內(nèi)也早就遠離了主流。
可是,在國外,hibernate 依然是絕對的主流。
在 stackoverflow 上的 tags 數(shù)量,看對比圖,hibernate 熱度碾壓 mybatis,兩者根據(jù)不是一個數(shù)量級。




3.2 技術(shù)社區(qū)的影響
有個笑話,外行人看到程序員在工作,覺得好牛逼,全英文的界面。知乎也常有提問,英語不好,學(xué)編程可行嗎?
底下回答,很多鼓勵,英語跟編程沒有太大關(guān)系云云。這句話有毛病嗎?這至少透露出來兩層意思。
- 不是說編程方面英語不重要。英語好,優(yōu)勢巨大。
- 國內(nèi)程序員很多英語不好。以本人常年混跡小公司的經(jīng)驗來說,好多程序員連 eclipse 或者 idea 上常用的界面按鈕上的單詞都認不全。唯手熟爾。不懂就百度。這個很多,是好多,無法統(tǒng)計,但個比例絕對不低。
-
國內(nèi) IT 圈子是一個比較封閉的圈子。雖然,用的技術(shù)基本都是發(fā)源于國外,但國內(nèi)的規(guī)模保證了資源的足夠。比如 spark/flink 不需要去官網(wǎng)閱讀一手資料,各個論壇網(wǎng)站上公眾號各種二手三手N手的資料滿天飛。
有追求的程序員,或者大廠的大佬覺得嗤之以鼻,遇 BUG 先必稱看源碼,再次 github issue,stackoverflow,搜索必須 google,資料必須原文。
所以英語跟編程沒有太大關(guān)系,這不是一個疑問,對很多程序員來說,這就是事實。大量分布于各類中小型公司,嚴重依賴于國內(nèi)各種社區(qū)學(xué)習(xí)(copy)技術(shù),解(zhi)決(zao)問題,賺錢養(yǎng)家。
國內(nèi)頭部公司/團隊用什么,大多數(shù)的公司/團隊/個人就用什么。
這件事情的另一個力證是 spring cloud vs apache dubbo,兩者隱隱有在國內(nèi)分庭抗禮之勢。但在全球范圍呢,我就不放 google trend 圖了。有點欺負人。
但是因為 apache dubbo 是阿里巴巴出品,進而影響到了國內(nèi)整個程序員圈子,社區(qū),所以大家也逐漸愿意去用,雖然被之前的開源社區(qū)挺尸行為傷過。就像一個渣男,但他是高富帥啊,自帶光環(huán)。
4 團隊
4.1 團隊負責人及核心骨干的技術(shù)積累以及技術(shù)偏好
2017年新公司進行一個流計算項目。當時整個團隊都是新組建,尚處于磨合期。當時我個人偏向于 spark streaming,用得比較熟,上手快,能夠提前排坑,能快速解決線上問題。但當時的技術(shù)負責人在召開技術(shù)研討會,聽取各方意見后,決定使用 jstorm。我當然服從決定。
當時的 jstorm 尚有余暉。而且據(jù)說那時 jstorm 在開源社區(qū)詐尸了。頗有幾分卷土重來的架勢。加上當時負責人力排眾議,讓我覺得很安心,他應(yīng)該是很懂 jstorm 這項技術(shù)棧的。
后來項目順利上線。再后來,不出意外,運行一段時間,遇到棘手線上問題。幾次團隊溝通后,我得出一個結(jié)論,決定使用 jstorm 的負責人并不了解 jstorm,甚至應(yīng)該不懂 java 技術(shù)棧(客觀白描事實,無情緒輸出,技術(shù)管理者并不一定要懂技術(shù));所以,整個團隊最懂 jstorm 的好像就是我了。
肝吧,騷年。在經(jīng)歷了好幾個后半夜,并成功在國慶享受了三倍工資(并沒有)后,BUG 解決。
后來回想,如果當時上的是 spark streaming 就不會出現(xiàn)同樣的問題,就算出現(xiàn)這樣的問題,憑借對 spark streaming 的較深入了解,也能夠快速解決。
上述這段經(jīng)歷,我想表達什么?
- 一個程序員的競爭力包括什么?不是會用某一種技術(shù),也不是能夠快速上手某種新技術(shù)。
-
學(xué)習(xí)新技術(shù)的欲望,動力,能力;快速上手,保證任務(wù),這些只是基本功。對于新技術(shù),能夠利用經(jīng)驗,快速理解原理內(nèi)幕,預(yù)排坑道,又快又好解決線上問題,更為重要。所以,當決定使用某種新技術(shù)(哪怕技術(shù)并不新,如果團隊當中沒人使用過,沒有深刻了解過)時,并不能僅滿足于“能快速上手”。
- 技術(shù)本身沒有立場。沒有好的壞的,沒有國外的國內(nèi)的。有些技術(shù)棧,并沒有 mybatis 和 hibernater 那么懸殊,如何抉擇,很大概率就看技術(shù)團隊的偏好,類似于 spark vs flink,spring cloud vs apache dubbo,不管誰是勝出者,都很隱。
-
除了團隊的學(xué)習(xí)成本,還要考慮其它成本.
- 比如,運維成本,比如,用 scala 還是 java 開發(fā) spark。
- 用 java 的好處是雖臃腫但新手外行上手超快。用 scala 好處是它是 spark 開發(fā)語言,熟悉 scala 便于查看 spark 源碼,語法強大,逼格高(我真見過 scala 開發(fā) spark 的鄙視使用 java 的);壞處是,語法強大,語法糖很爽,但有時天馬行空對于團隊合作開發(fā)真的是災(zāi)難。
-
行政成本比如招人成本。
-
等等