自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

代碼老矣,尚能跑否?

新聞 前端
Rougier是法國(guó)國(guó)家信息與自動(dòng)化研究所(INRIA)的計(jì)算神經(jīng)科學(xué)家兼程序員。傳這個(gè)文件是他自己提出的計(jì)算挑戰(zhàn)的最后一步:十年代碼復(fù)現(xiàn)大挑戰(zhàn)。

  Nicolas Rougier需要一張盤(pán)。不是便攜式的U盤(pán),也不是光盤(pán)——而是一張貨真價(jià)實(shí)的軟盤(pán)。90后可能不知道,軟盤(pán)是一張又薄又軟的盤(pán)片,放在一個(gè)方形殼里。殼中間有一個(gè)洞,還缺了一個(gè)角,能存幾百K的數(shù)據(jù)。在1983年的冷戰(zhàn)電影《戰(zhàn)爭(zhēng)游戲》(War Games)中,高中生黑客David Lightman就是用一張軟盤(pán)黑進(jìn)了學(xué)校的電腦,給他女朋友的生物課成績(jī)改成了滿(mǎn)分。

之后他黑進(jìn)了軍方網(wǎng)絡(luò)里,險(xiǎn)些引發(fā)了一場(chǎng)全球性的熱核戰(zhàn)爭(zhēng)。Rougier的需求就沒(méi)這么刺激了。他只想從自己的Mac臺(tái)式機(jī)往一臺(tái)老古董電腦上傳一個(gè)文本文件——1977年的出品的Apple II。這是蘋(píng)果公司的第一部消費(fèi)產(chǎn)品。

Rougier是法國(guó)國(guó)家信息與自動(dòng)化研究所(INRIA)的計(jì)算神經(jīng)科學(xué)家兼程序員。傳這個(gè)文件是他自己提出的計(jì)算挑戰(zhàn)的最后一步:十年代碼復(fù)現(xiàn)大挑戰(zhàn)(Ten Years Reproducibility Challenge, https://rescience.github.io/ten-years/)。2019年,他和法國(guó)國(guó)家科學(xué)研究中心(CNRS)的理論生物物理學(xué)家Konrad Hinsen共同發(fā)起了這個(gè)挑戰(zhàn),要求找一份老代碼并重新執(zhí)行,從而對(duì)至少已發(fā)表了十年的以計(jì)算為主的論文進(jìn)行復(fù)現(xiàn)。原本的計(jì)劃是參與者在波爾多6月舉辦的研討會(huì)上討論心得,但是因?yàn)镃OVID-19被迫延期(目前暫定延期到2021年6月)。

雙胞胎計(jì)劃的插圖

雙胞胎計(jì)劃的插圖

雖然計(jì)算在科學(xué)中起到了越來(lái)越關(guān)鍵的作用,但科學(xué)文章很少會(huì)包含計(jì)算用的代碼,Rougier說(shuō)。即使有包含,也很難由其他人執(zhí)行,甚至連原作者過(guò)一段時(shí)間后,都可能在執(zhí)行時(shí)遇到問(wèn)題。編程語(yǔ)言在發(fā)展,運(yùn)行代碼的計(jì)算機(jī)環(huán)境也是一樣。今天可以順利運(yùn)行的代碼明天可能就會(huì)出問(wèn)題。

2015年,Rougier和Hinsen創(chuàng)辦了《ReScience C》。這份期刊刊載的是研究人員如何基于原始論文和自行編寫(xiě)的開(kāi)源代碼來(lái)復(fù)現(xiàn)其他人的計(jì)算方法。評(píng)審人再研究代碼以確認(rèn)它是否能用。但即使在這種理想化的場(chǎng)景——作者有意愿讓代碼復(fù)現(xiàn)、評(píng)審人純熟于計(jì)算領(lǐng)域、代碼也是新寫(xiě)的——整個(gè)流程依然有很多難點(diǎn)。

十年代碼大挑戰(zhàn)的目標(biāo)是“找出十年前哪些寫(xiě)作和發(fā)布代碼的技術(shù)好到如今依然可用”,Hinsen說(shuō)。挑戰(zhàn)的時(shí)間設(shè)在了2020年1月1日這個(gè)Python 2“退場(chǎng)”的時(shí)間點(diǎn)。這個(gè)在科學(xué)領(lǐng)域非常流行的語(yǔ)言在出現(xiàn)20年之后決定終止支持。(2008年出現(xiàn)的Python 3仍然在繼續(xù)開(kāi)發(fā),但是這兩者之間的區(qū)別比較大,用其中一種寫(xiě)成的代碼在另一個(gè)環(huán)境下可能無(wú)法運(yùn)行。)

“在軟件的世界里,十年是很長(zhǎng)很長(zhǎng)很長(zhǎng)的時(shí)間。”Victoria Stodden說(shuō)。她在伊利諾伊大學(xué)厄巴納-香檳分校研究計(jì)算的可復(fù)現(xiàn)性。作出這一論斷后,她說(shuō)這個(gè)挑戰(zhàn)本質(zhì)上是鼓勵(lì)研究者探索代碼復(fù)現(xiàn)的極限,能不能在一個(gè)“對(duì)軟件世界來(lái)說(shuō)幾乎無(wú)窮長(zhǎng)的時(shí)間”里復(fù)現(xiàn)。

一共有35個(gè)挑戰(zhàn)者。在他們提出要復(fù)現(xiàn)的43篇文章里,其中28篇提交了復(fù)現(xiàn)報(bào)告?!?em>ReScience C》從今年初開(kāi)始刊載他們的工作。使用的程序語(yǔ)言從C和R到Mathematica和Pascal;一位挑戰(zhàn)者復(fù)現(xiàn)的不是代碼,而是用系統(tǒng)生物學(xué)標(biāo)記語(yǔ)言(SBML)編碼的分子模型。

雖然是在數(shù)碼世界,但挑戰(zhàn)者的經(jīng)歷和現(xiàn)實(shí)世界的考古一樣可以借古喻今,提出未來(lái)復(fù)現(xiàn)代碼的最佳策略。其中一個(gè)共同點(diǎn)是,科學(xué)家想要復(fù)現(xiàn)代碼就必須優(yōu)化文檔。“2002年,我覺(jué)得我所有東西都能記一輩子,”威斯康星大學(xué)麥迪遜分校的生物統(tǒng)計(jì)學(xué)家Karl Broman說(shuō),“之后我才意識(shí)到,過(guò)不了一個(gè)月就會(huì)忘了。”

重現(xiàn)科研

Rougier的參賽作品重現(xiàn)的是整個(gè)挑戰(zhàn)里最老的代碼[1],他在16歲時(shí)為Apple II寫(xiě)的圖像放大器,文章發(fā)表于一份已經(jīng)停刊的法國(guó)業(yè)余愛(ài)好者雜志《Tremplin Micro》(挑戰(zhàn)里最老的科學(xué)代碼是一份28年前的繪制水質(zhì)數(shù)據(jù)的Pascal程序,之后會(huì)在《ReScience C》上發(fā)表)。32年之后,Rougier已經(jīng)記不清代碼是怎么運(yùn)作的了,它用的還是長(zhǎng)得像咒語(yǔ)一樣的AppleSoft BASIC代碼——“挺奇怪的,畢竟是我本人寫(xiě)的”。但他成功地在網(wǎng)上找到了這份代碼,并用網(wǎng)頁(yè)版本的Apple II模擬器成功運(yùn)行。這一步比較簡(jiǎn)單,他說(shuō),在實(shí)際的Apple II上運(yùn)行才是真正的困難。

硬件并不是問(wèn)題——Rougier在辦公室有一臺(tái)Apple II,是他同事清理辦公室的時(shí)候撿回來(lái)的。“年輕人會(huì)問(wèn)‘這是個(gè)啥?’”他說(shuō),“然后你就得解釋‘這是臺(tái)電腦’。老人看到就會(huì)說(shuō)‘哦,我對(duì)這機(jī)器有印象’。”但是因?yàn)锳pple II比USB和互聯(lián)網(wǎng)還要早——而現(xiàn)代的電腦也沒(méi)法直接和老式硬盤(pán)連接——Rougier就需要一些自制的硬件,外加上一盒老式軟盤(pán),才能讓電腦讀取代碼。他在亞馬遜上找到了這些東西,1993年造的“全新”品。寫(xiě)入三次保證所有比特都穩(wěn)定之后,他確認(rèn)了這些軟盤(pán)可用。

INRIA研究中心的計(jì)算機(jī)科學(xué)家Bruno Levy評(píng)審了Rougier寫(xiě)的內(nèi)容。Levy也有一臺(tái)Apple II,還在推特上發(fā)布了一小段視頻。在老式鍵盤(pán)的一聲“咔噠”之后,他調(diào)用了代碼并成功執(zhí)行,緩緩顯示出一行純綠色的“我們重現(xiàn)科研!”。

過(guò)時(shí)的硬件,已死的語(yǔ)言

當(dāng)法國(guó)國(guó)家科學(xué)研究中心的生物物理化學(xué)家Charles Robert聽(tīng)說(shuō)這一挑戰(zhàn)的時(shí)候,他決定用這個(gè)機(jī)會(huì)回顧一個(gè)他很多年都沒(méi)再思考的研究課題。“這個(gè)挑戰(zhàn)給了我臨門(mén)一腳,讓我再向那個(gè)方向努力一把。”他說(shuō)。

1995年,Robert用運(yùn)行了商業(yè)軟件Mathematica的計(jì)算筆記本為真核染色體的三維結(jié)構(gòu)做了建模。Robert在MacBook上有Mathematica,但是為了好玩,他花了100歐元(約合800人民幣)買(mǎi)了一臺(tái)Raspberry Pi,這是個(gè)愛(ài)好者玩的單片機(jī),上面安裝了Linux系統(tǒng),并預(yù)安裝了Mathematica 12。

Robert運(yùn)行代碼時(shí)基本沒(méi)什么問(wèn)題,但是暴露出了計(jì)算筆記本可能會(huì)引發(fā)的難點(diǎn)[2],例如缺乏代碼結(jié)構(gòu),而代碼段也可能不按順序執(zhí)行。到了今天,Robert通過(guò)將代碼拆成模塊并寫(xiě)了代碼測(cè)試。他還使用了版本控制來(lái)追蹤代碼的修改,并記錄了哪個(gè)版本的軟件產(chǎn)生了什么樣的結(jié)果。“當(dāng)我讀到老代碼的時(shí)候,偶爾會(huì)起雞皮疙瘩,然后思考現(xiàn)在能如何做得更好,”他說(shuō),“不過(guò),我還覺(jué)得整個(gè)過(guò)程讓我復(fù)習(xí)了從那之后學(xué)的一些知識(shí)。”

成功完成挑戰(zhàn)的Robert并非孤例:至今為止發(fā)表的13份重現(xiàn)論文中只有2篇失敗了。其中之一是Hinsen寫(xiě)的,1990年代初他用來(lái)系統(tǒng)性?xún)?chǔ)存代碼的磁帶讓他栽了跟頭[3]。“這就是做了備份卻沒(méi)能在十年后檢查備份是否能讀的下場(chǎng)。”他說(shuō),“之前你有這套很好的磁帶,還有備份,但是現(xiàn)在沒(méi)有讀取設(shè)備了。”(Hinsen還發(fā)表了一篇成功完成的文章[4])其他沒(méi)能成功完成挑戰(zhàn)的參與者歸因于時(shí)間不足,特別是在疫情之下。

挑戰(zhàn)者遇到的另一個(gè)普遍問(wèn)題是過(guò)時(shí)的計(jì)算環(huán)境?,F(xiàn)在在意大利國(guó)家研究委員會(huì)的大氣污染研究所任職的計(jì)算物理學(xué)家Sabino Maggi曾經(jīng)使用程序語(yǔ)言Fortran為一種叫做Josephson結(jié)的超導(dǎo)設(shè)備進(jìn)行了建模,并用微軟的Visual Basic處理了結(jié)果。在那之后,F(xiàn)ortran的改變不多,因此Maggi只微調(diào)了一些就成功編譯了代碼。Visual Basic則造成了更大的麻煩。

“Visual Basic,”Maggi在文章[5]里寫(xiě)道,“是一門(mén)已死的語(yǔ)言,已經(jīng)被Visual Basic.NET取代很久了,而兩者之間只有名字一樣。”為了運(yùn)行代碼,他不得不在Mac筆記本上重構(gòu)了一個(gè)十年前的Windows虛擬機(jī)。他用網(wǎng)上找到的安裝盤(pán)裝了微軟DOS6.22和Windows3.11(都是1994年前后的軟件)以及Visual Basic。“即使是很久以前的軟件,使用模擬器安裝版權(quán)軟件仍然可能有合法性的問(wèn)題。”Maggi承認(rèn)。不過(guò),因?yàn)樗?dāng)時(shí)做科研的時(shí)候有合法的證書(shū),他說(shuō)他覺(jué)得“至少道德上有資格”使用。

但是該用哪個(gè)版本的Visual Basic?微軟在幾年內(nèi)發(fā)布了好幾個(gè)版本的Visual Basic,并且不都是向前兼容的。Maggi已經(jīng)記不起1996年他用的是哪個(gè)版本的了,而地下室的一次漏水摧毀了他早年記錄這些細(xì)節(jié)的筆記本。“我得從頭開(kāi)始了。”他說(shuō)。

在Mac上運(yùn)行1994年Windows的模擬器以運(yùn)行微軟的Visual Basic。來(lái)源:Sabino Maggi

在Mac上運(yùn)行1994年Windows的模擬器以運(yùn)行微軟的Visual Basic。來(lái)源:Sabino Maggi

INRIA的研究工程師Ludovic Courtès重現(xiàn)了一份2006年的研究,內(nèi)容是比較不同的數(shù)據(jù)壓縮策略,代碼是用C語(yǔ)言[6]寫(xiě)的。但是程序員所使用的應(yīng)用程序接口(API)變了,因此他的程序沒(méi)辦法用現(xiàn)代的軟件庫(kù)編譯。“所有的東西都在進(jìn)化——當(dāng)然了,只有論文里用到的那段軟件除外。”他說(shuō)。最后,他不得不將五六個(gè)程序庫(kù)回退到了老版本——他稱(chēng)為“降級(jí)的連鎖反應(yīng)”。“這坑有點(diǎn)深。”他說(shuō)。

今天,研究者可以使用Docker容器[7]和Conda虛擬環(huán)境[8]對(duì)計(jì)算環(huán)境進(jìn)行包裝以便于重用。但是幾個(gè)挑戰(zhàn)者選擇了另一種方式。Courtes說(shuō)這“很可能代表了重現(xiàn)科研論文的‘黃金標(biāo)準(zhǔn)’”:一個(gè)叫做Guix的Linux軟件包管理系統(tǒng)。它保證環(huán)境可以連每個(gè)比特都完全重現(xiàn),并且對(duì)于代碼鏈接時(shí)的版本完全透明。“整個(gè)環(huán)境,事實(shí)上整篇論文都可以從源代碼開(kāi)始查看并鏈接。”他說(shuō)。Hinsen將它稱(chēng)為“可能是目前為止重現(xiàn)科研最好用的東西。”

需要文檔

在INRIA和巴黎大學(xué)的計(jì)算機(jī)科學(xué)家Roberto DiCosmo嘗試重現(xiàn)[9]的論文中,他提出了另一個(gè)挑戰(zhàn)者常見(jiàn)的難題:尋找自己到底把代碼放哪了。DiCosmo挑戰(zhàn)的是1998年的一篇論文,其中描述了一個(gè)叫做OcamlP3l的并行程序系統(tǒng)。他搜遍了硬盤(pán)和備份,還請(qǐng)1998年的合作者們也搜了一遍,但是什么都沒(méi)找到。之后他搜了自己2015年建立的一個(gè)服務(wù)Software Heritage。“找到了,不可思議。”他說(shuō)。

Software Heritage定期爬Github一類(lèi)的代碼分享站,和Internet Archive備份網(wǎng)頁(yè)一樣備份源代碼。開(kāi)發(fā)者也可以要求該服務(wù)備份自己的庫(kù),而挑戰(zhàn)的規(guī)則也要求挑戰(zhàn)者這樣做:DiCosmo并不是一開(kāi)始就去Software Heritage上搜索的,因?yàn)樗_(kāi)發(fā)OcamlP3l的時(shí)候Software Heritage還沒(méi)出現(xiàn)。不過(guò),不知道是誰(shuí)把他的代碼發(fā)到了一個(gè)叫Gitorious的庫(kù)上。Gitorious現(xiàn)在已經(jīng)消失了,但在那之前被Software Heritage備份,上面的OcamlP3l也就一起被收錄進(jìn)去。

當(dāng)然了,找到代碼不意味著就知道該怎么用。比如說(shuō),Broman的文章里就提到,他在重現(xiàn)2003年一篇論文[10]的時(shí)候因?yàn)槿狈ξ臋n和“古怪的”文件結(jié)構(gòu)而花了很大力氣才搞明白到底該運(yùn)行哪個(gè)代碼。“結(jié)果到頭來(lái)我得花功夫去讀當(dāng)初的那篇論文。”他寫(xiě)道。

“(在結(jié)構(gòu)良好的程序里)文檔比代碼長(zhǎng)并不是罕見(jiàn)的事情。”在加州大學(xué)伯克利分校重點(diǎn)研究計(jì)算可重現(xiàn)性的Karthik Ram說(shuō),“有了足夠詳細(xì)的文檔,再更廣泛地描述分析方法,數(shù)據(jù)來(lái)源,數(shù)據(jù)和代碼的元數(shù)據(jù),這些都是很關(guān)鍵的。”

愛(ài)丁堡大學(xué)的神經(jīng)科學(xué)家Melanie Stefan利用這次挑戰(zhàn)評(píng)估了她用SBML寫(xiě)的計(jì)算模型的可重現(xiàn)性。雖然代碼很好找,但是她找不到之前使用的參數(shù)了(例如分子濃度)。數(shù)據(jù)歸一化時(shí)的關(guān)鍵細(xì)節(jié)也沒(méi)有詳細(xì)記錄。結(jié)果,Stefan無(wú)法重現(xiàn)一部分研究。“你做科研時(shí)候差不多是顯而易見(jiàn)的事不再那么顯而易見(jiàn)了——對(duì)10-12年之后的你來(lái)說(shuō)。誰(shuí)能想到!”她自嘲。

可重現(xiàn)性的光譜

Stefan的經(jīng)歷驅(qū)使她給實(shí)驗(yàn)室訂下了文檔上的規(guī)章——例如,模型中必須附上這樣的說(shuō)明:“想重現(xiàn)圖5的話(huà),需要按以下步驟執(zhí)行。”

但是寫(xiě)這些資源需要時(shí)間,Stodden說(shuō)。清理代碼并補(bǔ)充文檔,撰寫(xiě)測(cè)試,整理數(shù)據(jù)集,重現(xiàn)計(jì)算環(huán)境——“這些工作量都不出成果”。研究者沒(méi)什么動(dòng)力去做這些事,她補(bǔ)充說(shuō),而科學(xué)界關(guān)于可重現(xiàn)的論文應(yīng)當(dāng)長(zhǎng)什么樣也沒(méi)什么共識(shí)。讓問(wèn)題進(jìn)一步復(fù)雜化的是計(jì)算系統(tǒng)還在繼續(xù)進(jìn)化,因此難以預(yù)測(cè)哪種策略能一直有效。

可重現(xiàn)性是一條光譜,曼徹斯特大學(xué)的計(jì)算機(jī)科學(xué)家、研究可重現(xiàn)性的Carole Goble說(shuō)。從科學(xué)家復(fù)現(xiàn)自己的研究,到同行評(píng)審人試運(yùn)行代碼以證明其有效,再到研究者將發(fā)表的算法應(yīng)用在新數(shù)據(jù)上。類(lèi)似地,研究者為了保證可重現(xiàn)性所做的事情也能夠成一條光譜(見(jiàn)下“可重現(xiàn)性檢查表”),但是這張表可能會(huì)很長(zhǎng)。Goble說(shuō),把源代碼發(fā)布出去,這樣至少未來(lái)其他人可以瀏覽并按需改寫(xiě)——Goble管它叫“讀代碼的重現(xiàn)手段”。“軟件是有生命的,”她說(shuō),“而有生命的東西終將腐朽,因此需要不斷修理,最終就得換掉。”

可重現(xiàn)性檢查表

雖然以下手段不可能百分之百保證計(jì)算可重現(xiàn)性,但是可以增大成功率。

代碼 - 如果你的計(jì)算過(guò)程是在圖形界面上點(diǎn)來(lái)點(diǎn)去,例如Excel,是不可重現(xiàn)的。將你的計(jì)算和數(shù)據(jù)操作寫(xiě)成代碼。

文檔 - 使用注釋、計(jì)算筆記本和README文件來(lái)解釋程序的運(yùn)作方式,并將預(yù)期的參數(shù)和所需的計(jì)算環(huán)境也定義好。

記錄 - 記錄關(guān)鍵參數(shù),例如隨機(jī)數(shù)生成器的種子。這類(lèi)記錄可以用來(lái)重現(xiàn)代碼,發(fā)現(xiàn)漏洞并追蹤意料之外的結(jié)果。

測(cè)試 - 寫(xiě)一套測(cè)試函數(shù)。使用正向和負(fù)向的控制組數(shù)據(jù)集來(lái)確保你能獲得預(yù)期的結(jié)果,并在開(kāi)發(fā)過(guò)程中不斷運(yùn)行這些測(cè)試以便在編程出錯(cuò)時(shí)立刻發(fā)現(xiàn)。

指南 - 寫(xiě)一個(gè)主腳本(例如run.sh文件)來(lái)下載所需要的數(shù)據(jù)集和變量,執(zhí)行計(jì)算流程并為你的代碼提供一個(gè)顯而易見(jiàn)的入口。

存檔 - GitHub是一個(gè)流行但是非永久性的在線(xiàn)代碼庫(kù)。使用Zenodo、Figshare和Software Heritage這樣的存檔服務(wù)來(lái)保證長(zhǎng)期的穩(wěn)定性。

追蹤 - 使用Git一類(lèi)的版本控制工具記錄項(xiàng)目歷史。記錄產(chǎn)生各種結(jié)果的分別是哪個(gè)版本。

打包 - 使用容器化的工具(例如Docker和Singularity)、網(wǎng)上服務(wù)(Code Ocean、Gigantum、Binder)或是虛擬環(huán)境管理器(Conda)設(shè)置可以即時(shí)使用的計(jì)算環(huán)境。

自動(dòng)化 - 使用持續(xù)集成服務(wù)(例如Travis CI)來(lái)自動(dòng)、定期、在各種計(jì)算環(huán)境下測(cè)試代碼。

簡(jiǎn)化 - 避免罕見(jiàn)或難以安裝的第三方代碼庫(kù),以簡(jiǎn)化重用代碼的難度。

驗(yàn)證 - 在不同的計(jì)算環(huán)境下運(yùn)行你的代碼,以確認(rèn)其可移植性。

一個(gè)不怎么符合直覺(jué)的事實(shí)是,很多挑戰(zhàn)者都發(fā)現(xiàn)使用更老的語(yǔ)言寫(xiě)成的代碼反而更易于復(fù)用。新語(yǔ)言的應(yīng)用程序接口會(huì)頻繁更新,而它們所依賴(lài)的第三方庫(kù)則導(dǎo)致代碼更易損壞。從這個(gè)意義上講,今年初Python 2.7的退役為科學(xué)家提供了一個(gè)機(jī)會(huì),Rougier和Hinsen說(shuō)。Python 2.7“讓我們有了一個(gè)保證不會(huì)再變化的高級(jí)編程語(yǔ)言。”Rougier寫(xiě)道[1]。

無(wú)論研究者使用什么樣的編程語(yǔ)言和可復(fù)現(xiàn)策略,實(shí)際驗(yàn)證一遍都是明智之舉,謝菲爾德大學(xué)的研究軟件工程師Anna Krystalli說(shuō)。Krystalli負(fù)責(zé)舉辦一個(gè)叫ReproHacks的研討會(huì),讓研究者提交已經(jīng)發(fā)表的論文、代碼和數(shù)據(jù),然后要求其他參與者重現(xiàn)其結(jié)果。她說(shuō),大多數(shù)情況下是重現(xiàn)不出來(lái)的:作者沒(méi)能提供一些他們看起來(lái)顯而易見(jiàn)而其他人卻不知道的關(guān)鍵細(xì)節(jié)。“無(wú)論我們?cè)谧鍪裁?,如果不?shí)際用一用,擺弄擺弄的話(huà)就不可能知道是否真的可以重現(xiàn)。”Krystalli說(shuō),“實(shí)際上,這比人們所想象的要難得多。”

 

責(zé)任編輯:張燕妮 來(lái)源: 新浪科技
相關(guān)推薦

2018-11-12 08:30:47

IT技術(shù)面試

2023-12-21 13:56:41

PHP語(yǔ)言程序員

2011-06-29 09:02:13

C++

2017-09-07 15:55:14

2020-02-17 14:56:24

JrebelJava生態(tài)系統(tǒng)技術(shù)

2011-07-04 13:29:34

技術(shù)周刊

2021-02-01 11:23:13

IBM云計(jì)算

2025-01-07 08:00:00

2019-02-21 10:08:04

邊緣計(jì)算云計(jì)算系統(tǒng)

2019-03-27 09:38:33

網(wǎng)絡(luò)多層編排NFV

2015-11-24 15:17:57

谷歌回歸中國(guó)

2011-04-29 10:47:18

虛擬化

2016-06-13 09:31:40

2019-06-20 16:07:12

鴻蒙安卓操作系統(tǒng)

2018-10-30 15:32:07

數(shù)據(jù)庫(kù)NoSQLNewSQL

2019-05-22 13:22:39

開(kāi)源技術(shù) 趨勢(shì)

2022-10-18 22:20:36

CSS矩形border

2015-11-24 09:45:00

谷歌重返中國(guó)

2018-07-12 08:41:54

大數(shù)據(jù)IT互聯(lián)網(wǎng)

2023-01-31 07:42:29

代碼JDKMaven
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)