Linux中國

《代碼英雄》第二季(2):Hello, World

本文是《代碼英雄》系列播客第二季(2):Hello, World音頻腳本。

導語:每一種新的編程語言的誕生,都是為了做一些以前無法完成的事情。如今,有非常多編程語言可以選擇,但哪些才是你真正需要了解的?

本集將深入探討編程語言的歷史。我們將會了解到被稱為 「神奇葛麗絲」 的天才 —— 海軍少將葛麗絲·哈伯。多虧了她,開發者不再需要數學博士的學歷就能使用機器代碼編寫程序。參與錄製的還有 Jupyter 項目的 Carol Willing,她是 Python 基金會的前理事;以及《 紐約時報雜誌 New York Times Magazine 》和《 連線 Wired 》的撰稿人 Clive Thompson,他最近正在撰寫一本關於程序員如何思考的書。

00:00:07 - 各種語言

「你好,世界。」

00:00:12 - Saron Yitbarek**:

你好,世界。現在我們發出的是信號還是噪音?我們日日夜夜無休止地寫代碼,做測試工作,我們追求的事情只有一個:我們是否傳遞了我們的信號?

00:00:29 - 各種語言

你好。

00:00:29 - Saron Yitbarek

或者我們的信號是不是丟失了?難道我們一直在製造無意義的雜音嗎?

00:00:40

我是 Saron Yitbarek,這是代碼英雄第二季,來自紅帽原創播客。今天的話題將在「翻譯」中挖掘。這關於編程語言的故事:它們是怎麼來的,如何選擇其中一個語言來學習。我們將深入研究如何與機器對話。探究這些語言是如何演化的,以及我們如何用它們來讓我們的工作變得更好。

00:01:08 - Sari

Daisy,daisy,來告訴我你的正確回答。

00:01:11 - Saron Yitbarek

如果你像我一樣是一個開發者,你可能也經受著去精通多種語言的壓力。最起碼你得會 Java,更好一些得懂 Python、Go、JavaScript、Node,甚至能夠用 C++ 思考。也許為了增加可信度,可能你還要熟悉古典的 COBOL。甚至你還得學點新東西,比如 Dart。實在太累了。

00:01:36

奇怪的是,我們正在討論的計算機只講一種語言:機器語言,以二進位形式飄過的 1 和 0。說到底,我們學習的每個語言都是殊途同歸。不管有多抽象,它都是用來簡化我們工作的道具。

00:02:03

這就是我希望你們記住的,故事開始了,從那一刻,那一個經典輝煌的時刻,一個女人說:「你知道么?我是人類,我不想用二進位來討論思考,我就想用英語去編程。」

00:02:22

在今天可能看來是一個簡單的概念。但曾幾何時,使用人類的方式與計算機對話這個主意 —— 說輕點是一個笑話,嚴重點就是褻瀆。

00:02:37

代碼英雄第二季,將講述成就我們基礎的螺絲釘展開。這一講的英雄是一個女主人公,如果你想要進一步了解故事,你必須知道她的經歷。在此給你們隆重介紹:軟體界的第一夫人。

00:02:58 - 發言人

尊敬的先生們和女士們,我非常榮幸的給你們介紹 葛麗絲·瑪麗·哈伯 Grace Mary Hopper 准將,謝謝。

00:03:02 - 葛麗絲·哈伯

我曾到加拿大的圭爾夫大學演講,那時候我必須在多倫多的機場辦理入境手續。我把護照遞給移民官,他打量了護照和我說:「你是在哪裡工作的?」

00:03:17

然後我說,「美國海軍。」

00:03:20

她再次深深的打量我一下。然後他說:「你一定是海軍里最老的。」

00:03:28 - Saron Yitbarek

她就是 1985 年擔任海軍少將的葛麗絲·哈伯。在麻省理工學院發表了著名的演講時,她 79 歲。即使在那時,她也是一個傳奇人物。她是獨立編程語言之母,實現通過編譯器,用人類語言替代數學符號編程這一偉大成就的女性。

00:03:51

她獲得了國家技術獎章,她去世後(1992 年),被追授國家自由勳章。以上記錄純屬真實,他們稱她w為「神奇葛麗絲」。

00:04:03 - Claire Evans

如果有人能夠被稱為天生的程序員,那麼這個人一定是葛麗絲。

00:04:06 - Saron Yitbarek

這是 Claire Evans,一個科技記者和《 寬頻 Broad Band 》一書的作者,而這本書講述了科技領域的女性先鋒。Evans 描繪了早期的計算機世界,在 1940 年,當葛麗絲·哈伯還是一個年輕的女孩時,她加入了美軍的海軍預備役部隊。當時的電腦有一個小房子那麼大。

00:04:25 - Claire Evans

早期的那些程序員,他們就像一個聖職者。他們是一群擅長做枯燥乏味事情的人,因為那會兒沒有編譯器,沒有編程語言,人們是確實是一個比特一個比特地對機器編程。

00:04:42

想要改變這種現實,你真的必須是一個特別的人,而葛麗絲真的就是那種人。

00:04:49 - Saron Yitbarek

現在,她意識到讓人類使用機器語言的是一種多麼瘋狂的限制。就像走路的時候,去告訴你身體的每個原子該怎麼做。這是可能的嗎?是,效率呢?不高。

00:05:06

在程序員的意圖和計算機的行為之間一定有一條捷徑。自從有了算盤,人類一直在將數學思維機械化。一定有一種方法可以在計算機上再次實現這一點。

00:05:19 - Claire Evans

在過去,數學家必須做出所有的步驟。所有這些枯燥的,一步一步的工作都是為了得到一個真實而有趣的答案。然後有了計算機後,它儘可能地承擔了這些機械的運算。所以解放了數學家去進行高層面的、更智慧的、面向系統的思考。

00:05:39

只不過,事實並沒有如此發展。有了計算機,數學家就變成了程序員。他們又一次被這些枯燥無味的編程所束縛,做著這些一點一滴的繁瑣的規則導向的小計算。

00:05:53

因此,我認為,葛麗絲的期望是,她希望計算機能夠輔助數學家,然後數學家就可以去更進行宏大的思考,做更偉大的事情,而不至於讓他們陷入細節之中。

00:06:12 - Saron Yitbarek

葛麗絲也加入了思想家的行列。我們都知道, 帕斯卡 Pascal 在 17 世紀發明了第一台計算器。 巴比奇 Babbage 在 19 世紀發明了分析機。這些偉大的傑作是發明家們解放人類的大腦的創作。這些發明讓我們處理數據的能力空前絕後。這就是葛麗絲踏入的領域,發明了所有人都認為不可能的東西。

00:06:42 - Claire Evans

我覺得,葛麗絲的想法是,人們應該用人類語言與計算機溝通。這個語言必須獨立於機器的,因此不同計算機可以交互操作,這在當時是革命性的。

00:06:59

早期她稱這個為 「自動化編程」,在程序員和計算機人的群體中,被認為是像太空學員一樣。

00:07:12

而那些遲遲不上岸的人們被看成了尼安德特人,這在當時是計算機界的一個巨大的分歧。

00:07:21 - Saron Yitbarek

葛麗絲要說服她的上級跨越這個分歧並不容易。但她認為這是她的責任,她必須嘗試。

00:07:30 - 葛麗絲·哈伯

這裡總是有一條線,那條線代表了你的老闆在那個時候會相信什麼。當然,如果你過線了是得不到預算的。所以你對那條線有雙重責任:不要踩過它,但也要不斷教育你的老闆,讓你把這條線移得更遠,這樣下次你就能走得更遠。

00:07:52 - Saron Yitbarek

她推動的那個未來,就是我們的現在。幾乎你我依賴的每一種語言都歸功於她和她的第一個編譯器。因此太空學員們活了下來,尼安德特人滅亡了。

00:08:07

寫代碼不用數字,而是用人類風格的語言是她的觀點。你敲下「執行操作 8」,或「關閉 文件 C」的精簡操作,才是符合人類習慣的編程。

00:08:21 - Claire Evans

葛麗絲獨特地意識到,計算將成為改變世界的事情。但是如果沒有人知道如何接觸並使用計算機,那麼它就不會成為改變世界的事情。因此她想確保它對儘可能多的人開放,儘可能多的人可以使用。

00:08:37 - Claire Evans

這就需要編程在可理解性和可讀性上做一些妥協。因此最終創造一個編程語言的目標就是給機器提供更多切入點,讓它脫離這個神職,讓它的開發面向大眾和未來新一代。

00:08:59 - Saron Yitbarek

我想在這裡打斷並強調下 Claire 的說法:現在我們所已知的編程語言,都來源於科技開放的願望。這讓計算機不再是數學博士們的專屬玩具,讓編程開發變得更容易。

00:09:14

編譯器所有工作的本質,是讓程序變得更好理解,更有人性。

00:09:21

Claire 有一個猜測,為什麼葛麗絲是做出改變的那個人,這與她在二戰期間的工作有關。

00:09:29 - Claire Evans

她的工作是解決掃雷問題、彈道問題和海洋學問題。她用很多不同的、交叉的學科來模擬戰爭里的所有的暴力、混亂和現實的災難,並將他們轉化成在 Mark I 計算機上運行的程序。

00:09:45

她知道如何在語言之間去做翻譯轉換。我的意思不是說計算機語言,是人類語言。她知道如何傾聽一個提出複雜問題的人的意見,並嘗試理解問題的背景,其信息和所涉及的專業規律,然後將這些轉為計算機可以理解的程序。

00:10:06

從這個角度看她如同早期的編譯器。就像一個人類版本的編譯器,因為她知道你必須理解他們才能滿足他們的需求。

00:10:17 - Saron Yitbarek

編譯器乾的事情就是一個解釋和理解。我覺得我們應該在學習新語言,或想知道為什麼有一些東西根本不能編譯的時候牢記這個理念。編譯器的工作就是滿足你使用生活中說的語言來編程。

00:10:32

葛麗絲知道人類一旦可以學會講編程語言,而編譯器可以將我們的意圖轉換為機器語言,就像為洪水打開了大門一樣。

00:10:43 - Claire Evans

她知道如果計算機太孤立和太具體,就不會發展為一個產業,從而成為改變世界的力量。也就是說計算機的從業者,可以讓提出問題的人跟機器直接溝通。

00:11:00

因此她真的是一個善於人類語言翻譯的專家,至少我是這麼想的。這使她有獨一無二的機會,去思考和創建編程語言。

00:11:15 - Saron Yitbarek

葛麗絲對英文式數據處理語言的研究最終演變成了 COBOL,它在某種意味上很不錯。因為它不浮華,很適合商務用途,葛麗絲·哈伯也是這樣的人。

00:11:28

從某種角度看,她給了我們一個很像她的語言。像葛麗絲一樣,COBOL 語言也很長壽,它現在已經 60 多了。

00:11:50

葛麗絲的編譯器就像一個 巴別魚 babelfish ,在程序員和機器之間充當翻譯,不過它們翻譯的都是高度概括性的語言。

00:12:03

然後,幾十年之後,另一個重要的思潮在語言界興起。想像下畫面:自由軟體社區在 1980 年出現,但是 Unix 的替代品 GNU 被開發出來後,卻沒有任何自由開放的編譯器隨之出現。

00:12:22

為了讓 GNU 給我們提供一個真正的開源 UNIX 替代品,為了讓編程語言在開源世界蓬勃發展,社區需要找來一個格蕾絲·哈伯 —— 我們需要一個開源編譯器。

00:12:38

這是 Langdon White,紅帽的平台架構師,來講講他對這個事情的理解。

00:12:45 - Langdon White

在 80 年代,你要買一個編譯器很輕鬆就要花上上萬塊錢。費用是最大的問題,我沒有多餘的錢去給自己買編譯器。再一個事實是,我必須為所有我想要的目標平台買一個對應的編譯器。那個時代大部分是 Unix 平台,但是細節和風格各不相同。

00:13:06

因此你就不能買一個,你需要為不同的架構,不同的供應商購買多個編譯器。

00:13:14 - Saron Yitbarek

Langdon 指出這不僅僅是成本問題,在一些情況下,對編碼工作也帶來了問題。

00:13:21 - Langdon White

大家都沒有意識到,你如何用很特殊的方式來組織你的代碼是很重要的。做嵌套 for 循環或者做嵌套 while 循環之類的事情可能是可以的,這取決於編譯器。

00:13:38

因此,大家都應該明白,如果你不知道編譯是如何優化你的代碼的,就很難知道如何寫出最優的代碼。

00:13:49 - Saron Yitbarek

必須要提的是,我們需要一個免費的、可獲得的、可值得信賴的編譯器。這就是 GNU C 語言編譯器:GCC。它橫空出世在 1987 年,它是格蕾絲·哈伯的編譯器革命和自由軟體運動的結合。

00:14:12

它是使編譯更標準化,從而讓所有人可以編譯別人寫的代碼。我們編程語言的豐富性要歸功於它。

00:14:22 - Carol Willing

GCC 是開放的,可以說將編程語言推向一個更高的層次。

00:14:29 - Saron Yitbarek

這是 Jupiter 項目成員 Carol Willing,她是 Python 軟體基金會的前理事。

00:14:35 - Carol Willing

人們開始意識到,專有的語言會在特定時間內被服務於一個目的,但並不能得到開發者社區的認可和熱愛。因為如果你是一個開發者,你希望學習最常用的,以及未來最流行的東西。

00:14:59

我沒必要去發展一種將我鎖定在一種技術上的技能。我想 Python 成功的一個原因是因為它是開源的,它有非常簡潔的語法。

00:15:11

它的特點就是允許人們用常見的方法,快速高效地解決問題,也允許大家合作解決問題。我想這就是好的程序和代碼庫的標誌:如果你可以用最小的工作量完成你的工作,並且與他人分享,這是確實很棒的事情。

00:15:35 - Saron Yitbarek

這麼多年過去了,GCC 逐漸的支持了 Java、C++、Ada 和 Fortran 語言,我還可以繼續說說它的進步。

00:15:43 - Carol Willing

通過像 GCC 這樣的通用底層介面,人們可以根據自己的特殊需求來定製語言。例如,在 Python 的世界裡,有大量的庫,甚至具體到科學 Python 世界裡,我們有 numpy,還有 scikit-image、scikit-learn 這樣的東西。

00:16:08

每個庫都是為一個特定目的而工作。因此,我們也看到了生物信息學和自然語言處理之類的東西。而人們可以在一個共同的基礎上,做出很多不同的事情。而且可以把它們放到編程語言或庫里,使他們能夠在他們特定的行業或領域中優化問題的解決。

00:16:42 - Saron Yitbarek

因此,這就是編譯器技術一頭撞進開源運動的結果吧?隨著時間的推移,這種不同技術的碰撞,爆炸般地創造了一個新的、被社區支持的語言,大家都可以學習和完善它。

00:16:58

現在有成百上千的編程語言存活著。

00:17:03 - Carol Willing

隨著開源軟體越來越流行和被廣泛接受,我們看到了編程語言的大量激增。現在有大量圍繞著手機技術的編程語言,不同的編程語言也讓遊戲開發更加簡單快速便捷。各種用途的語言,如 Python 和 Ruby,它們算是現代網頁開發和交付網頁應用和網站的基礎。

00:17:34 - Saron Yitbarek

這個隊伍還會繼續壯大。是的,我們建造的這個巴別塔在未來會更加擁擠。但是你可以把它當作一個聚寶盆,一個語言的盛宴。下面我們將會幫你們梳理這個盛宴。

00:17:55

現在我們已經知道編程語言泛濫的原因了。但是這些對我們有什麼具體的意義?我們如何選擇對我們重要的語言呢?這是個大問題,因此我們找了一些人幫忙:Clive Thompson,是最好的作家之一,他能讓科技世界變得更有意義。他是《連線》的專欄記者,《紐約時報》雜誌的特約撰稿人,他現在正在寫一本關於計算機程序員心理學的書。

00:18:24

當我們挑選我們想要學習的編程語言時,我們需要知道我們到底想要什麼。

00:18:31

這是我和 Clive 反覆討論得出的結論。

00:18:35

當我作為一個開發新人第一次入手的時候,我就說:「讓我選一個最好的編程語言,然後掌握並熟練運用它,不就完事了么。」

00:18:44

不過事情不會這樣簡單,否則為什麼有那麼多的編程語言呢?

00:18:49 - Clive Thompson

每個語言都有那麼點它的特長。因此通常來說,有人創造一個新語言是因為現有的語言滿足不了他們的需求。JavaScript 就是一個典型的例子。

00:19:03

網景公司 Netscape 曾經在 90 年代中開發了一款瀏覽器,所有的網站管理員想做一些更具交互性的事情。他們希望有一種方法,使其可以在網站上運行一些腳本。

00:19:16

當然這些需求都提給了網景。然後他們說:「好吧,現在我們沒有可以做到這一點的辦法,我們需要一個可以集成到我們瀏覽器的腳本語言。」

00:19:25

於是他們僱傭了 Brendan Eich,一個被認為很資深的傢伙。他當時 32 歲,其他人 21 歲的樣子。

00:19:32 - Saron Yitbarek

這在開發者圈裡就很資深了

00:19:35 - Clive Thompson

他們給他 10 天時間開發 JavaScript。因此他真的就 10 天沒有睡覺,然後瘋狂地搗鼓出一個腳本語言。它看起來有點挫,有點糟,但是可以運行。它允許人們做一些簡單的事情,它還有按鈕,對話框,彈框和其他東西。

00:19:54

這就是造一個編程語言的例子,用來做在當時沒有辦法完成的事情。

00:20:01 - Saron Yitbarek

是不是很有意思。

00:20:03 - Clive Thompson

這就是為什麼存在這麼多編程語言,人們不斷進取,去做別人做不到的事。

00:20:11 - Saron Yitbarek

這也是為什麼我對開發者和編程語言之間的關係很感興趣,我們對這些工具有很強的依賴性。為什麼呢?

00:20:22 - Clive Thompson

有幾個原因。一個是有時你學習你的第一個編程語言完全是一場意外,有點像你的初戀。

00:20:30

我覺得不同性格的人,也會匹配不同類型的編程語言。例如 Facebook 是用 PHP 設計的。PHP 是有點像毛球,它很不規則,它的成長斷斷續續,Facebook 也有點這種感覺。

00:20:49

與此相反,來自谷歌的夥計決定:「我們想要一個超高性能的語言,因為在谷歌我們的東西都高速運行著,維護著萬億級的用戶吞吐。」

00:21:02

因此他們決定開發一個 Go 語言,Go 非常適合高性能計算。

00:21:08 - Saron Yitbarek

讓我們深入一點。作為一個開發者,我有自己的個性,我是不是對一部分編程語言有天然的喜歡呢?或者我工作用的編程語言可能會影響我的個性?

00:21:25 - Clive Thompson

兩者肯定都存在。但我確實認為當你遇到你喜歡的編程語言的時候,有一種強烈的共鳴感。你上計算機課程時學習了必修語言:他們都教 Java,有時會多教一門 JavaScript 或 Python。

00:21:46

問題是,你被強制要求,所以你學了它。但當你有選擇餘地時會怎麼樣呢?這就是你真正看到一個人的那種情感或心理風格是如何傾向於一門語言的地方,因為我和一個人談過,他試著學了一堆 JavaScript。

00:22:03

這是個看起來有點丑的語言,它簡直是花括弧的噩夢。所以他試了又試,試了又試,失敗了又失敗。直到有一天他看到朋友在用 Python。在他看起來,這是多麼的純凈和美妙的語言。因為他是個作家,而 Python 被認為是一個書寫型的編程語言,縮進使一切都易於閱讀。

00:22:28 - Clive Thompson

它和他一拍即合,主要在於 Python 的工作方式和外觀,漂亮的排版打動了他。

00:22:39 - Saron Yitbarek

和 Clive 的交流讓我意識到,有一些編程語言是硬塞給我們的。我說的是那些古老的編程語言,已經類似於拉丁語了。

00:22:53

其實我們也有很多選擇,去選擇適合我們個性的編程語言。如果你想知道最新的東西有哪些,你去問問開發者們周末在用什麼就知道了。

00:23:05

下面是我們對話的更多內容:

00:23:08 - Clive Thompson

當我問人們:「你閑暇的時候做什麼?」回答肯定是些稀奇古怪的東西。我想實際上其中一個好的,最值得稱頌的開發者的特點,就是他們是富有好奇心。

00:23:22

我知道有人會說,「我要學習 Erlang了,就是為了好玩。」

00:23:26 - Saron Yitbarek

我嘗試想像人們在周末開發這些項目,項目不是最重要的,他們在學習工具,編程語言才是重要的事情。這才是他們真的想要的狀態。

00:23:41 - Clive Thompson

確切的說,你將看到為什麼大家不停的重複迭代開發這些日曆和待辦事項,因為這是一個快速的學習方法。但需要指出的是,編程語言做了什麼以及如何工作都與我們沒關係,我只需要儘可能的構建我的東西。

00:23:56

他們想知道用那樣的編程語言思考是什麼感覺。是不是會感覺很輕鬆、刺激、遊刃有餘?我目前的使用的語言沒這個感覺,是不是入門之後一切事情都變得簡單了?

00:24:13 - Clive Thompson

很有可能你遇到一個新語言後會非常興奮,想起來都很興奮。

00:24:20 - Saron Yitbarek

我是一個 Ruby 從業者,作為 Ruby on Rails 開發者我非常自豪,我想大概是兩年前,另一個非常著名的 Ruby 開發者,Justin Serrals 做了一個非常好的演講,倡導編程語言從實用角度出發,沒有必要那麼性感。

00:24:41

他的觀點是,Ruby 之所以是一個令人興奮的編程語言的原因在於它很新,而且差不多幾年前都已經得到印證了,它已經不需要更新什麼了。它已經是一個穩定、成熟的編程語言了。不過因為它的成熟,開發者對它也就不那麼興奮,我們逐步把目光轉移到新的花樣來了。

00:25:05

從某個意義上說,很有可能我們的好奇心會扼殺了一個編程語言,或者讓它變得庸俗,而這與編程語言本身的好壞沒有關係。

00:25:18 - Clive Thompson

我認為這是完全正確的。事實上,你看到的開發者這個極度好奇心和自學慾望的特點,會讓他們不斷地尋找新鮮事物。並用這種語言去複製其他語言已經基本做得很好的東西。

00:25:37 - Saron Yitbarek

是的。

00:25:37 - Clive Thompson

就是這樣,好奇心有好處,同時也是一個陷阱。

00:25:43 - Saron Yitbarek

是的,說的很好。

00:25:49

有時我們的好奇心可能是一個陷阱,但是它也是編程語言革命的動力。開發每個新編程語言的時候他們會說,「有沒有別的可能?」它們出現的原因在於,開發人員想要做不一樣的事情。

00:26:06

我們想要全新的表達方式。

00:26:08 - 葛麗絲·哈伯

我向你們承諾一些事情。

00:26:11 - Saron Yitbarek

我想葛麗絲·哈伯想在這兒最後講兩句。

00:26:15 - 葛麗絲·哈伯

在未來 12 個月里,你們誰要是說我們一直都是這麼做的,我將會瞬間實質化在你的旁邊,然後我 24 小時圍繞著你。我倒是要看看我能不能引起你的注意。我們不能再相信那句話,這是很危險的。

00:26:34 - Saron Yitbarek

葛麗絲的故事和第一款編譯器提醒我們,只要能可以找到表達方法,我們總有更好的辦法做事情。

00:26:43

不管編程語言有多抽象,不管我們在機器的 1 和 0 高位還是低位浮動,我們都需要確保它是一個明智選擇。我們選擇一個語言,是讓它幫助我們的想法更容易表達出來。

00:27:03

如果你想更深一步學習編程語言和和編譯器,你不會很孤獨,我們收集了一些很有用的文檔幫你深入學習。敬請在我們節目下面留言。請查看 redhat.com/commandlineheroes

00:27:20

下一期節目,我們將關注開源貢獻者的艱辛之路。那些維護者的真實奮鬥生活是什麼樣的?我們如何提出第一個拉取請求?

00:27:32

我們將帶你們簡單認識開源貢獻。

00:27:39

代碼英雄是紅帽的原創播客。你可以在蘋果播客、谷歌播客以及其他可能的地方免費收聽這個節目。

00:27:48

我是 Saron Yitbarek,堅持編程,下期再見。

什麼是 LCTT SIG 和 LCTT LCRH SIG

LCTT SIG 是 LCTT 特別興趣小組 Special Interest Group ,LCTT SIG 是針對特定領域、特定內容的翻譯小組,翻譯組成員將遵循 LCTT 流程和規範,參與翻譯,並獲得相應的獎勵。LCRH SIG 是 LCTT 聯合紅帽(Red Hat)發起的 SIG,當前專註任務是《代碼英雄》系列播客的腳本漢化,已有數十位貢獻者加入。敬請每周三、周五期待經過我們精心翻譯、校對和發布的譯文。

歡迎加入 LCRH SIG 一同參與貢獻,並領取紅帽(Red Hat)和我們聯合頒發的專屬貢獻者證書。

via: https://www.redhat.com/en/command-line-heroes/season-2/hello-world

作者:Red Hat 選題:bestony 譯者:guevaraya 校對:acyanbirdwxy

本文由 LCRH 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國