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




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