无码人妻精品一区二区三18禁,影音先锋男人AV橹橹色,污污污污污污www网站免费,日韩成人av无码一区二区三区,欧美性受xxxx狂喷水

軟件技術更新速度很快,擔心自己掌握的技術會過時?

Jeff Tao

2022-05-29 /

上周末(mo)在(zai)知乎看到一(yi)個問題“都說(shuo)現在(zai)編程(cheng)技(ji)術(shu)(shu)更(geng)新速度快很多技(ji)術(shu)(shu)會過時(shi),那么有哪些技(ji)術(shu)(shu)不容易(yi)過時(shi)呢?”,臨(lin)時(shi)起意做了一(yi)個回答,沒想到點贊數(shu)很快破千,成了熱門回答,感覺很多技(ji)術(shu)(shu)人(ren)都比較關心這個問題。趁(chen)著(zhu)在(zai)北京大(da)興酒店隔(ge)離有閑(xian),把這篇回答擴展成一(yi)篇文章,結合我(wo)研發(fa)?TDengine?的經驗,再更(geng)加深入地展開(kai)闡(chan)述一(yi)下,分享給研發(fa)同學。

把握最基本的原理和方法,你永遠不會被淘汰

我(wo)是 1984 年高中(zhong)一(yi)年級時開始寫程序(xu)的(de),見證了(le)整(zheng)個 IT 的(de)高速發(fa)展。表面(mian)上技術發(fa)展很快,特別是與用戶直接(jie)接(jie)觸的(de)前端技術包括(kuo)人(ren)機(ji)交互部分(fen),但計算機(ji)的(de)基(ji)本技術和原理都(dou)沒有什(shen)么(me)變化。

如果要我重新學(xue)一(yi)次計(ji)算機專(zhuan)業,我一(yi)定會認真上(shang)幾門課,1:數(shu)(shu)據(ju)結(jie)構(gou),2:算法(fa),3:計(ji)算機體系結(jie)構(gou),4:操(cao)作系統,5:編譯原(yuan)理(li),6:計(ji)算機網絡,7:數(shu)(shu)據(ju)庫,8:軟件(jian)工程。再從(cong)自己(ji)的興趣出發,學(xue)習一(yi)下數(shu)(shu)字信號處(chu)理(li)、數(shu)(shu)據(ju)分析(xi)相(xiang)關(guan)的課程。這些課里(li)學(xue)到的知識,至少我 30 年前在(zai)(zai)用,現在(zai)(zai)仍然在(zai)(zai)用。我可以肯(ken)定的說,這些課里(li)的知識掌握的很熟悉(xi)的,技術水(shui)平(ping)一(yi)定高。

以我自己創業開發的時序數據庫(Time-Series Database)TDengine ()為例,我(wo)們開發了自(zi)己(ji)(ji)的(de)(de)內(nei)存管理(li)、文件管理(li)、調(diao)度器、消息隊列(lie),使用(yong)了多種索引方法、排(pai)序(xu)等等。如果你不(bu)能隨手寫一(yi)個二叉(cha)樹、Hash,你都沒(mei)法做?TDengine?的(de)(de)研發工作(zuo)。雖(sui)然這些基本的(de)(de)原(yuan)理(li)都有(you)現成的(de)(de)庫(ku),但針對(dui)自(zi)己(ji)(ji)的(de)(de)場(chang)景(jing),比如時(shi)序(xu)數(shu)據(ju)場(chang)景(jing),很多情(qing)況(kuang)下都不(bu)能直(zhi)接用(yong),或性能不(bu)夠,因此(ci)就一(yi)定得(de)自(zi)己(ji)(ji)寫,而自(zi)己(ji)(ji)寫的(de)(de)話(hua),不(bu)掌握那些原(yuan)理(li)是寫不(bu)出(chu)來的(de)(de)。

舉一(yi)個(ge)例(li)(li)子,操(cao)作(zuo)系(xi)統課(ke)程(cheng)里介(jie)紹的(de)(de)(de)“生產者(zhe)(zhe)-消費者(zhe)(zhe)”問題,就(jiu)是一(yi)個(ge)經典(dian)問題,在(zai)很(hen)多場景下,你(ni)往(wang)往(wang)都會遇(yu)到(dao),比(bi)如(ru) TDengine 里的(de)(de)(de)查詢調度(du)就(jiu)需(xu)要(yao)。只有你(ni)對(dui)生產者(zhe)(zhe)消費者(zhe)(zhe)問題完全搞清楚,你(ni)才可能(neng)把異步線(xian)程(cheng)通訊搞明(ming)白,隨手拈來(lai)。在(zai) TDengine 的(de)(de)(de)程(cheng)序里,我們就(jiu)使用(yong)信號(hao)量來(lai)將(jiang)網(wang)絡的(de)(de)(de)異步操(cao)作(zuo)轉化為用(yong)戶(hu)側的(de)(de)(de)同步操(cao)作(zuo)。再舉個(ge)例(li)(li)子,比(bi)如(ru)編(bian)譯原理,工作(zuo)中不太可能(neng)有任務要(yao)你(ni)寫一(yi)個(ge)編(bian)譯器,但是學會了(le)編(bian)譯原理,你(ni)對(dui)怎么最大程(cheng)度(du)地去優化自己的(de)(de)(de)程(cheng)序、學一(yi)門(men)新的(de)(de)(de)編(bian)程(cheng)語(yu)言、寫個(ge)簡單的(de)(de)(de) parser ,就(jiu)會得(de)心用(yong)手。

我個人最推(tui)崇的(de)是(shi)認真學習操作系統這(zhe)門課,因為(wei)它講的(de)都是(shi)各種(zhong)資源的(de)管理(li)和(he)調(diao)度,包括?CPU、內存、網(wang)絡、外圍設備等(deng)等(deng)。世界上絕(jue)大(da)部分?IT?系統都是(shi)管理(li)這(zhe)種(zhong)或那種(zhong)資源,抽(chou)象地來看,與(yu) CPU、內存、外圍設備的(de)管理(li)其實(shi)沒任(ren)何區別。因此(ci)你可以用操作系統課里(li)學會的(de)方法、算法去解(jie)決其他實(shi)際(ji)問題。

所有這(zhe)些計算機(ji)的(de)基本原理(li)(li)、方法幾十年都沒變,我(wo)們只是(shi)把(ba)(ba)它組合起(qi)來,去(qu)解決新的(de)問題,比(bi)如區塊鏈,再(zai)比(bi)如 IoT 場景下的(de)時(shi)序數據處(chu)理(li)(li)。因此(ci)只要把(ba)(ba)握最基本的(de)原理(li)(li)和方法,你就永遠不會(hui)被淘汰。

這本書里很多方法都用在了 TDengine Database 的開發上
我 1996 年認真讀過的書,正在上大三的兒子也認真讀過。這本書里很多方法都用在了 TDengine 的開發上,這書里的知識很難過時。

掌握了基礎的原理和方法,還要學會做創新

以底層基(ji)(ji)礎軟件的(de)(de)實現來說,很多(duo)基(ji)(ji)本(ben)的(de)(de)原(yuan)理和方(fang)法都沒有變過,但是為什么(me)做出來的(de)(de)產品,所(suo)呈現出的(de)(de)性能、市場競(jing)爭力(li)卻(que)有很大差距?原(yuan)因還是在于如何巧妙運(yun)用(yong)這(zhe)些原(yuan)理和方(fang)法,就(jiu)像數學、物理公(gong)式(shi)一樣,復雜難題的(de)(de)解(jie)析也(ye)是看(kan)你對這(zhe)些公(gong)式(shi)的(de)(de)理解(jie)和運(yun)用(yong)程度。

以實現一(yi)個(ge)時序(xu)數據庫(Time-Series Database)為(wei)(wei)例,為(wei)(wei)實現水平擴展所采(cai)取的(de)(de)(de)(de)(de)的(de)(de)(de)(de)(de)分片分區(qu)策略,其實都(dou)(dou)是(shi)操作系統、數據庫里的(de)(de)(de)(de)(de)基(ji)(ji)本內容,使用的(de)(de)(de)(de)(de)客戶端服務器之(zhi)間的(de)(de)(de)(de)(de)通訊也都(dou)(dou)是(shi)計算機(ji)網(wang)絡(luo)中最基(ji)(ji)本的(de)(de)(de)(de)(de)傳輸協議,構建(jian)索引所使用的(de)(de)(de)(de)(de)也都(dou)(dou)是(shi)基(ji)(ji)礎(chu)的(de)(de)(de)(de)(de)索引方法,等等。一(yi)個(ge)好的(de)(de)(de)(de)(de)產品(pin)功(gong)能,脫胎于(yu)用戶和市場需求,建(jian)立在眾多基(ji)(ji)礎(chu)原理和方法的(de)(de)(de)(de)(de)創新(xin)之(zhi)上。

在(zai)時序(xu)場景(jing)下,IoT 設備規模可能達到千萬甚至(zhi)上億(yi),每秒產生的數(shu)據就(jiu)能高達千萬、億(yi)級別,面對這(zhe)樣大的吞吐量(liang),普通數(shu)據庫根本難以(yi)承受,那(nei)我們在(zai)開發時序(xu)數(shu)據庫時,就(jiu)要考慮(lv)數(shu)據如何(he)充分(fen)利(li)用時序(xu)數(shu)據特點來做(zuo)分(fen)區分(fen)片、如何(he)更好地實(shi)時構建索引等等,這(zhe)些極(ji)具(ju)挑(tiao)戰性的實(shi)際(ji)問題的解決思路就(jiu)是要創(chuang)新。

以?TDengine?為例,為了(le)更(geng)好(hao)地解決這些問題,TDengine?從最初就(jiu)自研了(le)存(cun)儲引擎,創新(xin)地提出(chu)了(le)“一(yi)個數據采集點(dian)一(yi)張表”與“超(chao)級(ji)表”的(de)(de)概念。我(wo)們從傳統的(de)(de)數據庫里吸取了(le) WAL,Skip List 等方法,同時(shi)把(ba)流行(xing)的(de)(de) LSM Tree 做了(le)很大(da)的(de)(de)改動(dong),把(ba)樹層級(ji)結構去掉了(le),變成(cheng)了(le)只(zhi)是按(an)時(shi)間(jian)段分(fen)(fen)區、按(an)時(shi)間(jian)線(xian)分(fen)(fen)塊(kuai)的(de)(de)數據塊(kuai)。這種對存(cun)儲引擎的(de)(de)創新(xin)設計,也讓?TDengine?與典型的(de)(de)?NoSQL?存(cun)儲模型相比,實(shi)現(xian)了(le)標(biao)簽數據與時(shi)序(xu)數據完全分(fen)(fen)離進行(xing)存(cun)儲,不僅極大(da)地降(jiang)低(di)了(le)因為標(biao)簽重復存(cun)儲所(suo)帶來的(de)(de)存(cun)儲空間(jian)的(de)(de)浪費,還能夠(gou)極為高(gao)效地實(shi)現(xian)多(duo)表之間(jian)的(de)(de)聚合查(cha)詢,使得千萬級(ji)別規模的(de)(de)標(biao)簽數據查(cha)詢可以在毫秒級(ji)別返回。

在(zai)(zai)我(wo)(wo) 2008 年(nian)(nian)創業做和(he)信時,就(jiu)(jiu)是(shi)(shi)一(yi)臺手機一(yi)個(ge)消息隊(dui)列,現在(zai)(zai)物聯網(wang)數(shu)據的(de)處理,和(he)我(wo)(wo)當(dang)年(nian)(nian)做消息隊(dui)列模塊(kuai)相比,在(zai)(zai)存儲架(jia)構(gou)上(shang),只(zhi)是(shi)(shi)一(yi)個(ge)結構(gou)化與非結構(gou)化的(de)區別,前(qian)者是(shi)(shi)為了(le)更高效地做各種計算和(he)查(cha)詢,但在(zai)(zai)實(shi)(shi)際應用中(zhong),我(wo)(wo)們還(huan)需(xu)要考(kao)慮到(dao)多個(ge)設備間(jian)數(shu)據如何(he)進行高效聚合(he),我(wo)(wo)很快就(jiu)(jiu)想(xiang)到(dao)了(le)對策,那(nei)就(jiu)(jiu)可(ke)以用數(shu)據分析中(zhong)的(de)維度(du)表、事實(shi)(shi)表的(de)模型來解(jie)決(jue),這樣一(yi)來,超級表的(de)概念也就(jiu)(jiu)出來了(le)。

TDengine 受這些經典數據(ju)結構的(de)(de)(de)啟發,使用到的(de)(de)(de)也都是流行十幾年(nian)甚(shen)至更久的(de)(de)(de)基(ji)礎技術,但在此(ci)之上還有對技術的(de)(de)(de)合理運用和(he)不斷創新,最后才真(zhen)正成(cheng)為一(yi)個(ge)為時(shi)序數據(ju)場景量身定(ding)做的(de)(de)(de)數據(ju)庫產品。

對于開發(fa)者來(lai)說(shuo),掌(zhang)握基礎的技術知識和原(yuan)理是邁進(jin)這(zhe)個職業門(men)檻(jian)的一個通行證(zheng),如果是一個有追求的人,真的想要在(zai)工作中有所建樹,還想往上更進(jin)一步,那就還應該時刻思考怎么運(yun)用好這(zhe)些(xie)知識,怎樣才(cai)能更快速(su)去獲(huo)得(de)一些(xie)對代碼的創意思考。

想要往上走,就一定不能躺平

軟件特別是(shi)基礎軟件開(kai)源,已經成為不可抵擋的潮流,對于開(kai)發者(zhe)來(lai)說,這是(shi)最好的時代(dai),你不需要苦思(si)冥想自己瞎琢(zhuo)磨,很多時候也不用完全從(cong) 0 到(dao)(dao) 1 去進行一(yi)個設(she)計思(si)考(kao)。開(kai)源項目就(jiu)像是(shi)一(yi)本書(shu)籍,你總(zong)能從(cong)中獲(huo)得一(yi)些超出你認知的對于基礎技術的創新運用,毫無(wu)疑問,站在前人(ren)的肩膀上,你能看到(dao)(dao)的會(hui)更遠。

就拿編(bian)程(cheng)語(yu)(yu)言來說,因為互聯網行(xing)業本身變化大,發展迅速,編(bian)程(cheng)語(yu)(yu)言也是(shi)五花(hua)八門,除了 Java、JavaScript 一(yi)(yi)類的,近幾年新(xin)出的還(huan)有如 Go、Rust、Dart、Kotlin、Swift 等等,在(zai)(zai)應用(yong)型技術(shu)占比很(hen)高的行(xing)業中,對于(yu)語(yu)(yu)言的掌握(wo)也要相對廣泛一(yi)(yi)些,好在(zai)(zai)這些流行(xing)語(yu)(yu)言還(huan)并不是(shi)很(hen)難(nan)掌握(wo)。

還有些偏底(di)層的語(yu)(yu)(yu)言(yan)(yan),本身是(shi)很(hen)(hen)強大的,開(kai)發需(xu)求低,所以(yi)一(yi)(yi)直都(dou)很(hen)(hen)穩(wen)定(ding),C 語(yu)(yu)(yu)言(yan)(yan)就(jiu)是(shi)這(zhe)類(lei)語(yu)(yu)(yu)言(yan)(yan)的代表,學(xue)好了(le)幾十年后也不會過時。但(dan)難(nan)點就(jiu)在于這(zhe)種(zhong)語(yu)(yu)(yu)言(yan)(yan)比較難(nan)掌(zhang)握,而且(qie)大多涉及(ji)硬件和操作系統(tong)底(di)層,所以(yi)很(hen)(hen)多人都(dou)會對(dui) C 語(yu)(yu)(yu)言(yan)(yan)望而卻步。但(dan)事實上 C 語(yu)(yu)(yu)言(yan)(yan)非常(chang)值得學(xue)習,它的靈活性極強,向上可以(yi)寫(xie)應用(yong),向下可以(yi)寫(xie)硬件,如果(guo)哪(na)一(yi)(yi)天(tian)互聯網(wang)衰(shuai)敗了(le),依靠對(dui)這(zhe)門語(yu)(yu)(yu)言(yan)(yan)的精(jing)通完全可以(yi)讓你(ni)平(ping)移到(dao)其他賽道。

TDengine?就是(shi)一(yi)款使(shi)用?C?語(yu)(yu)言(yan)(yan)自主研發的時(shi)序數據庫(Time-Series Database),沒有(you)使(shi)用任(ren)何第三方的庫,一(yi)切(qie)都是(shi)自己開發,包括定(ding)時(shi)器、RPC?等模塊(kuai)等,并(bing)且已經(jing)開源。當(dang)初我選(xuan)擇(ze)?C?語(yu)(yu)言(yan)(yan)作(zuo)為開發語(yu)(yu)言(yan)(yan)的原因,其實是(shi)受(shou)到了(le)(le)?SQLite?的影響,它(ta)沒有(you)服務器,僅僅一(yi)個?C?語(yu)(yu)言(yan)(yan)庫,整個數據庫存放于單一(yi)跨平臺的文件,支持(chi)?ACID,零配置,而且體量可以僅為?600KB。我很(hen)慶(qing)幸TDengine?選(xuan)擇(ze)了(le)(le)?C?語(yu)(yu)言(yan)(yan),雖然確(que)實有(you)一(yi)系列頭疼問題(ti),如內存泄露、無效指(zhi)針、多線程同步(bu)等,但這些都在后期(qi)優(you)化中得(de)到了(le)(le)改善,而?TDengine?所(suo)擁(yong)有(you)的無依賴(lai)、體量小、內存遠遠小于 InfluxDB、OpenTSDB?等其他時(shi)序數據庫這些優(you)勢,都是(shi)非常顯著的。

參與開源(yuan)(yuan)項(xiang)目也是(shi)學習(xi)編程(cheng)語言(yan)的(de)(de)一(yi)個好方(fang)法,要知(zhi)道,流行的(de)(de)開源(yuan)(yuan)項(xiang)目都是(shi)經過(guo)實踐推敲(qiao)、比較成熟的(de)(de)代(dai)碼(ma)創作,認真去(qu)研讀(du)相關項(xiang)目的(de)(de)源(yuan)(yuan)碼(ma),然后(hou)再依(yi)靠學習(xi)到的(de)(de)代(dai)碼(ma)思(si)路去(qu)解決(jue)問題,這會讓你(ni)在語言(yan)學習(xi)上事(shi)半功倍。如果你(ni)正在迷惑,不(bu)妨參與到 TDengine 開源(yuan)(yuan)項(xiang)目中來,只要你(ni)真心有(you)投入,我樂意花時(shi)間與你(ni)一(yi)起探討問題。

結  語

以(yi)前很(hen)多人(ren)質疑過我(wo)(wo)(wo),認為(wei)我(wo)(wo)(wo)不是一個從?Oracle、DB2?核心(xin)團(tuan)隊(dui)出(chu)來(lai)(lai)的(de)(de)(de)人(ren),怎(zen)么能(neng)研發(fa)(fa)Database?但如(ru)果你深挖了(le)我(wo)(wo)(wo)的(de)(de)(de)背景,知道我(wo)(wo)(wo)從 1997 年(nian)起(qi)就(jiu)在(zai)做分布式高(gao)可(ke)(ke)靠的(de)(de)(de)無線核心(xin)網(wang)絡設備研發(fa)(fa),也明白消息隊(dui)列與時序數(shu)據之間的(de)(de)(de)相似之處(chu)后,你就(jiu)不會奇怪(guai)了(le)。就(jiu)像我(wo)(wo)(wo)開篇時說(shuo)的(de)(de)(de),技術(shu)圈里很(hen)多的(de)(de)(de)基礎(chu)原理(li)和(he)方(fang)法(fa),幾十年(nian)都未曾(ceng)改變,善(shan)于思(si)(si)考總(zong)(zong)結(jie)的(de)(de)(de)人(ren)總(zong)(zong)會從中得到相關的(de)(de)(de)規(gui)律(lv)。可(ke)(ke)能(neng)正(zheng)是由(you)于我(wo)(wo)(wo)是跨(kua)界(jie)過來(lai)(lai)的(de)(de)(de),比起(qi)沉浸在(zai)數(shu)據庫領域多年(nian)且(qie)已經形成技術(shu)思(si)(si)想固化的(de)(de)(de)開發(fa)(fa)者,才更容易在(zai)基礎(chu)原理(li)和(he)方(fang)法(fa)的(de)(de)(de)運用上,想到創新甚至是顛覆式的(de)(de)(de)設計思(si)(si)路(lu)。

所以,過時的不是(shi)基礎的技術原(yuan)理和(he)方法(fa),而是(shi)人的思(si)考能力以及(ji)沒有跟(gen)上(shang)節奏的對技術的認知。

陶建輝

2022年5月29日于北京大興隔(ge)離酒店