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

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

Jeff Tao

2022-05-29 /

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

結(jié)  語(yǔ)

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

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

陶建輝

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