六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

軟件技術(shù)更新速度很快,擔(dān)心自己掌握的技術(shù)會過時?

Jeff Tao

2022-05-29 /

上周末在知乎看到一個問題“都說現(xiàn)在編程技術(shù)更新速度快很多技術(shù)會過時,那么有哪些技術(shù)不容易過時呢?”,臨時起意做了一個回答,沒想到點(diǎn)贊數(shù)很快破千,成了熱門回答,感覺很多技術(shù)人都比較關(guān)心這個問題。趁著在北京大興酒店隔離有閑,把這篇回答擴(kuò)展成一篇文章,結(jié)合我研發(fā)?TDengine?的經(jīng)驗(yàn),再更加深入地展開闡述一下,分享給研發(fā)同學(xué)。

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

我是 1984 年高中一年級時開始寫程序的,見證了整個 IT 的高速發(fā)展。表面上技術(shù)發(fā)展很快,特別是與用戶直接接觸的前端技術(shù)包括人機(jī)交互部分,但計算機(jī)的基本技術(shù)和原理都沒有什么變化。

如果要我重新學(xué)一次計算機(jī)專業(yè),我一定會認(rèn)真上幾門課,1:數(shù)據(jù)結(jié)構(gòu),2:算法,3:計算機(jī)體系結(jié)構(gòu),4:操作系統(tǒng),5:編譯原理,6:計算機(jī)網(wǎng)絡(luò),7:數(shù)據(jù)庫,8:軟件工程。再從自己的興趣出發(fā),學(xué)習(xí)一下數(shù)字信號處理、數(shù)據(jù)分析相關(guān)的課程。這些課里學(xué)到的知識,至少我 30 年前在用,現(xiàn)在仍然在用。我可以肯定的說,這些課里的知識掌握的很熟悉的,技術(shù)水平一定高。

以我自己創(chuàng)業(yè)開發(fā)的時序數(shù)據(jù)庫(Time-Series Database)TDengine (http://www.tdengine.com)為例,我們開發(fā)了自己的內(nèi)存管理、文件管理、調(diào)度器、消息隊(duì)列,使用了多種索引方法、排序等等。如果你不能隨手寫一個二叉樹、Hash,你都沒法做?TDengine?的研發(fā)工作。雖然這些基本的原理都有現(xiàn)成的庫,但針對自己的場景,比如時序數(shù)據(jù)場景,很多情況下都不能直接用,或性能不夠,因此就一定得自己寫,而自己寫的話,不掌握那些原理是寫不出來的。

舉一個例子,操作系統(tǒng)課程里介紹的“生產(chǎn)者-消費(fèi)者”問題,就是一個經(jīng)典問題,在很多場景下,你往往都會遇到,比如 TDengine 里的查詢調(diào)度就需要。只有你對生產(chǎn)者消費(fèi)者問題完全搞清楚,你才可能把異步線程通訊搞明白,隨手拈來。在 TDengine 的程序里,我們就使用信號量來將網(wǎng)絡(luò)的異步操作轉(zhuǎn)化為用戶側(cè)的同步操作。再舉個例子,比如編譯原理,工作中不太可能有任務(wù)要你寫一個編譯器,但是學(xué)會了編譯原理,你對怎么最大程度地去優(yōu)化自己的程序、學(xué)一門新的編程語言、寫個簡單的 parser ,就會得心用手。

我個人最推崇的是認(rèn)真學(xué)習(xí)操作系統(tǒng)這門課,因?yàn)樗v的都是各種資源的管理和調(diào)度,包括?CPU、內(nèi)存、網(wǎng)絡(luò)、外圍設(shè)備等等。世界上絕大部分?IT?系統(tǒng)都是管理這種或那種資源,抽象地來看,與 CPU、內(nèi)存、外圍設(shè)備的管理其實(shí)沒任何區(qū)別。因此你可以用操作系統(tǒng)課里學(xué)會的方法、算法去解決其他實(shí)際問題。

所有這些計算機(jī)的基本原理、方法幾十年都沒變,我們只是把它組合起來,去解決新的問題,比如區(qū)塊鏈,再比如 IoT 場景下的時序數(shù)據(jù)處理。因此只要把握最基本的原理和方法,你就永遠(yuǎn)不會被淘汰。

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

掌握了基礎(chǔ)的原理和方法,還要學(xué)會做創(chuàng)新

以底層基礎(chǔ)軟件的實(shí)現(xiàn)來說,很多基本的原理和方法都沒有變過,但是為什么做出來的產(chǎn)品,所呈現(xiàn)出的性能、市場競爭力卻有很大差距?原因還是在于如何巧妙運(yùn)用這些原理和方法,就像數(shù)學(xué)、物理公式一樣,復(fù)雜難題的解析也是看你對這些公式的理解和運(yùn)用程度。

以實(shí)現(xiàn)一個時序數(shù)據(jù)庫(Time-Series Database)為例,為實(shí)現(xiàn)水平擴(kuò)展所采取的的分片分區(qū)策略,其實(shí)都是操作系統(tǒng)、數(shù)據(jù)庫里的基本內(nèi)容,使用的客戶端服務(wù)器之間的通訊也都是計算機(jī)網(wǎng)絡(luò)中最基本的傳輸協(xié)議,構(gòu)建索引所使用的也都是基礎(chǔ)的索引方法,等等。一個好的產(chǎn)品功能,脫胎于用戶和市場需求,建立在眾多基礎(chǔ)原理和方法的創(chuàng)新之上。

在時序場景下,IoT 設(shè)備規(guī)??赡苓_(dá)到千萬甚至上億,每秒產(chǎn)生的數(shù)據(jù)就能高達(dá)千萬、億級別,面對這樣大的吞吐量,普通數(shù)據(jù)庫根本難以承受,那我們在開發(fā)時序數(shù)據(jù)庫時,就要考慮數(shù)據(jù)如何充分利用時序數(shù)據(jù)特點(diǎn)來做分區(qū)分片、如何更好地實(shí)時構(gòu)建索引等等,這些極具挑戰(zhàn)性的實(shí)際問題的解決思路就是要創(chuàng)新。

以?TDengine?為例,為了更好地解決這些問題,TDengine?從最初就自研了存儲引擎,創(chuàng)新地提出了“一個數(shù)據(jù)采集點(diǎn)一張表”與“超級表”的概念。我們從傳統(tǒng)的數(shù)據(jù)庫里吸取了 WAL,Skip List 等方法,同時把流行的 LSM Tree 做了很大的改動,把樹層級結(jié)構(gòu)去掉了,變成了只是按時間段分區(qū)、按時間線分塊的數(shù)據(jù)塊。這種對存儲引擎的創(chuàng)新設(shè)計,也讓?TDengine?與典型的?NoSQL?存儲模型相比,實(shí)現(xiàn)了標(biāo)簽數(shù)據(jù)與時序數(shù)據(jù)完全分離進(jìn)行存儲,不僅極大地降低了因?yàn)闃?biāo)簽重復(fù)存儲所帶來的存儲空間的浪費(fèi),還能夠極為高效地實(shí)現(xiàn)多表之間的聚合查詢,使得千萬級別規(guī)模的標(biāo)簽數(shù)據(jù)查詢可以在毫秒級別返回。

在我 2008 年創(chuàng)業(yè)做和信時,就是一臺手機(jī)一個消息隊(duì)列,現(xiàn)在物聯(lián)網(wǎng)數(shù)據(jù)的處理,和我當(dāng)年做消息隊(duì)列模塊相比,在存儲架構(gòu)上,只是一個結(jié)構(gòu)化與非結(jié)構(gòu)化的區(qū)別,前者是為了更高效地做各種計算和查詢,但在實(shí)際應(yīng)用中,我們還需要考慮到多個設(shè)備間數(shù)據(jù)如何進(jìn)行高效聚合,我很快就想到了對策,那就可以用數(shù)據(jù)分析中的維度表、事實(shí)表的模型來解決,這樣一來,超級表的概念也就出來了。

TDengine 受這些經(jīng)典數(shù)據(jù)結(jié)構(gòu)的啟發(fā),使用到的也都是流行十幾年甚至更久的基礎(chǔ)技術(shù),但在此之上還有對技術(shù)的合理運(yùn)用和不斷創(chuàng)新,最后才真正成為一個為時序數(shù)據(jù)場景量身定做的數(shù)據(jù)庫產(chǎn)品。

對于開發(fā)者來說,掌握基礎(chǔ)的技術(shù)知識和原理是邁進(jìn)這個職業(yè)門檻的一個通行證,如果是一個有追求的人,真的想要在工作中有所建樹,還想往上更進(jìn)一步,那就還應(yīng)該時刻思考怎么運(yùn)用好這些知識,怎樣才能更快速去獲得一些對代碼的創(chuàng)意思考。

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

軟件特別是基礎(chǔ)軟件開源,已經(jīng)成為不可抵擋的潮流,對于開發(fā)者來說,這是最好的時代,你不需要苦思冥想自己瞎琢磨,很多時候也不用完全從 0 到 1 去進(jìn)行一個設(shè)計思考。開源項(xiàng)目就像是一本書籍,你總能從中獲得一些超出你認(rèn)知的對于基礎(chǔ)技術(shù)的創(chuàng)新運(yùn)用,毫無疑問,站在前人的肩膀上,你能看到的會更遠(yuǎn)。

就拿編程語言來說,因?yàn)榛ヂ?lián)網(wǎng)行業(yè)本身變化大,發(fā)展迅速,編程語言也是五花八門,除了 Java、JavaScript 一類的,近幾年新出的還有如 Go、Rust、Dart、Kotlin、Swift 等等,在應(yīng)用型技術(shù)占比很高的行業(yè)中,對于語言的掌握也要相對廣泛一些,好在這些流行語言還并不是很難掌握。

還有些偏底層的語言,本身是很強(qiáng)大的,開發(fā)需求低,所以一直都很穩(wěn)定,C 語言就是這類語言的代表,學(xué)好了幾十年后也不會過時。但難點(diǎn)就在于這種語言比較難掌握,而且大多涉及硬件和操作系統(tǒng)底層,所以很多人都會對 C 語言望而卻步。但事實(shí)上 C 語言非常值得學(xué)習(xí),它的靈活性極強(qiáng),向上可以寫應(yīng)用,向下可以寫硬件,如果哪一天互聯(lián)網(wǎng)衰敗了,依靠對這門語言的精通完全可以讓你平移到其他賽道。

TDengine?就是一款使用?C?語言自主研發(fā)的時序數(shù)據(jù)庫(Time-Series Database),沒有使用任何第三方的庫,一切都是自己開發(fā),包括定時器、RPC?等模塊等,并且已經(jīng)開源。當(dāng)初我選擇?C?語言作為開發(fā)語言的原因,其實(shí)是受到了?SQLite?的影響,它沒有服務(wù)器,僅僅一個?C?語言庫,整個數(shù)據(jù)庫存放于單一跨平臺的文件,支持?ACID,零配置,而且體量可以僅為?600KB。我很慶幸TDengine?選擇了?C?語言,雖然確實(shí)有一系列頭疼問題,如內(nèi)存泄露、無效指針、多線程同步等,但這些都在后期優(yōu)化中得到了改善,而?TDengine?所擁有的無依賴、體量小、內(nèi)存遠(yuǎn)遠(yuǎn)小于 InfluxDB、OpenTSDB?等其他時序數(shù)據(jù)庫這些優(yōu)勢,都是非常顯著的。

參與開源項(xiàng)目也是學(xué)習(xí)編程語言的一個好方法,要知道,流行的開源項(xiàng)目都是經(jīng)過實(shí)踐推敲、比較成熟的代碼創(chuàng)作,認(rèn)真去研讀相關(guān)項(xiàng)目的源碼,然后再依靠學(xué)習(xí)到的代碼思路去解決問題,這會讓你在語言學(xué)習(xí)上事半功倍。如果你正在迷惑,不妨參與到 TDengine 開源項(xiàng)目中來,只要你真心有投入,我樂意花時間與你一起探討問題。

結(jié)  語

以前很多人質(zhì)疑過我,認(rèn)為我不是一個從?Oracle、DB2?核心團(tuán)隊(duì)出來的人,怎么能研發(fā)Database?但如果你深挖了我的背景,知道我從 1997 年起就在做分布式高可靠的無線核心網(wǎng)絡(luò)設(shè)備研發(fā),也明白消息隊(duì)列與時序數(shù)據(jù)之間的相似之處后,你就不會奇怪了。就像我開篇時說的,技術(shù)圈里很多的基礎(chǔ)原理和方法,幾十年都未曾改變,善于思考總結(jié)的人總會從中得到相關(guān)的規(guī)律??赡苷怯捎谖沂强缃邕^來的,比起沉浸在數(shù)據(jù)庫領(lǐng)域多年且已經(jīng)形成技術(shù)思想固化的開發(fā)者,才更容易在基礎(chǔ)原理和方法的運(yùn)用上,想到創(chuàng)新甚至是顛覆式的設(shè)計思路。

所以,過時的不是基礎(chǔ)的技術(shù)原理和方法,而是人的思考能力以及沒有跟上節(jié)奏的對技術(shù)的認(rèn)知。

陶建輝

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