關(guān)于Docker這個問題,你可能不知道?
Hello world,大家好,我是 pshu. 今天碼農(nóng)英語課堂的第六期來和大家說一個 docker 相關(guān)的冷知識.
首先講下"冷知識"這個詞.。要一個比較地道的翻譯的話,我個人覺得 trivia是一個比較好的單詞.
- Trivia:
- The act of answering questions regarding information that is often useless or inapplicable
回答那些無意/無用問題的行為.
那今天的"冷知識"(trivia question)是:
* 當啟動一個docker 容器時, 默認的容器名字是什么? *
- CONTAINER ID IMAGE COMMAND NAMES
- eee4de167f06 hello-world "/hello" peaceful_mcnulty
- 783ab628a474 hello-world "/hello" suspicious_jones
- 5767cd8dc7c0 hello-world "/hello" heuristic_bassi
- cc4623db38ad hello-world "/hello" elated_montalcini
- e8bb358ada71 hello-world "/hello" sleepy_kilby
- 6e67c5398a72 hello-world "/hello" boring_kowalevski
- 21ffb481d971 hello-world "/hello" angry_euler
- 8c9322287dff hello-world "/hello" keen_mayer
簡單的說,默認容器名為"${形容詞}_${人名}"的格式.
但是再深入的問一句,那些人名是誰呢? 一共多少個這樣的組合呢?
源代碼說明一切 /pkg/namesgenerator/names-generator.go#L105
https://github.com/moby/moby/blob/b5f68d7ed3a2a9db7bdbfd3bdee42d9d1a7e5423/pkg/namesgenerator/names-generator.go
源碼中的 left 是 93 個形容詞的數(shù)組,褒貶的都有; right 是 160 位知名科學(xué)家和黑客的名字.
- func GetRandomName(retry int) string {
- begin:
- name := fmt.Sprintf("%s_%s", left[rand.Intn(len(left))], right[rand.Intn(len(right))])
- if name == "boring_wozniak" /* Steve Wozniak is not boring */ {
- goto begin
- }
- if retry > 0 {
- name = fmt.Sprintf("%s%d", name, rand.Intn(10))
- }
- return name
- }
那看到代碼其實會有兩個吐槽點.
1.關(guān)于 goto
pshu 在接受大學(xué)計算機編程教育的時候,老師就提到使用 goto是一個壞的編程習(xí)慣. 所以很多接受過類似說法的同學(xué)都是對這個 goto嗤之以鼻. 其實恰恰相反,這個 goto 其實讓代碼變的更加的容易理解.
那關(guān)于 goto有害的說法是怎么來的能,這里就是介紹今天的這位荷蘭的大神 Edsger Wybe Dijkstra. 中文一般音譯為"狄克斯特拉".
其實叫他大神我覺得有點太不嚴肅,應(yīng)該稱作是計算機行業(yè)中的先賢. 像圖論中尋找兩個之間最短路徑的算法 Dijkstra算法就是 Dijkstra 發(fā)明的. 除了算法方面, Dijkstra 在并行計算(concurrent programming) 領(lǐng)域也是開拓者. critical section (臨界區(qū)) 和 Dining philosophers problem (哲學(xué)家就餐問題), 都是他提出來的概念.
回到 Goto 的問題上,關(guān)于 goto "有害"的歷史是怎么來的呢?
- While Dijkstra had programmed extensively in machine code in the 1950s, he came to the conclusion that in high-level languages frequent use of the GOTO statement was usually symptomatic of poor structure. In 1968 he wrote a private paper "A Case against the GO TO Statement", which was then published as a letter in CACM.[59] Editor Niklaus Wirth gave this letter the heading "Go To Statement Considered Harmful", which introduced the phrase "considered harmful" into computing.
Dijkstra 在20世紀50年代大量使用機器碼編程的經(jīng)歷;就此經(jīng)歷,他提出了"在高級編程語言中頻繁使用 goto 通常是程序結(jié)構(gòu)不好的征兆." 1968的時候, 他寫了一篇小論文 "A Case against the GO TO Statement", 標題大意,就是一個不要用 goto 的案例. 結(jié)果在 CACM 發(fā)表的時候, 編輯把標標題改成了 "Goto 語句"被認為是有害.
想不到***以訛傳訛,直接給很多學(xué)編程的學(xué)生心里立下了 goto 就是爛代碼的 flag.
這段代碼的第二個點就是 /* Steve Wozniak is not boring */
2. the Woz
國內(nèi)翻譯成沃茲,提到沃茲就不得不提蘋果這家偉大的公司了. 對蘋果這家公司,最有名的肯定是 Steve Jobs 了; 但這個 Woz 是和 Jobs 一起稱為蘋果雙核的人. 當年沃茲發(fā)明的 Apple I/II 這兩臺蘋果電腦, 可以說是開拓了個人電腦的新時代. 蘋果還有一個第三號創(chuàng)始人 Ronald Wayne,他僅在蘋果工作了12天; 他是這樣評價這兩個人的:"喬布斯有時如同惡魔附身,而沃茲尼亞克則像個被天使控制著的孩子。" 當Apple II熱銷之后蘋果股票大漲, 沃茲就拿出八萬股票以很低的價格賣給那些他認為沒有被蘋果善待的老員工.
除了這些 Woz還有哪些讓人覺得不一般的事跡呢?
- 6歲就做出半導(dǎo)體收音機, 而且是全美最年輕獲得業(yè)余無線電操作證.
- 和 Jobs 制作販賣盜打電話的設(shè)備, 并用此設(shè)備惡作劇假裝是基辛格打電話給意大利教皇打電話.
- 自建了一個講笑話的電話熱線,雖然虧錢,但靠這個熱線遇到了***任太太
- 帶著第二人未婚妻,開飛機,墜機,所幸***無大礙.
這些經(jīng)歷看, Woz 絕對不是一個無趣 boring 的 人.
還有一點是 Woz 是 Sheldon 的心目中排名15的最有科技遠見的人(Steve Jobs 排在第21位) ,因為版權(quán)問題,請各位同學(xué)自行搜該視頻片段吧.
***小結(jié)下
當面對 "docker 容器的默認名字是什么?"這樣的trivial question 和 "Goto 語句是否是有害"的復(fù)雜問題時. 如果能抑制住內(nèi)心想用一個簡單答案來回答的沖動,保持著一顆好奇心,慢慢探索,多多思考. ***獲得的肯定會比問題本身更有價值的知識.
***祝大家 happy hacking & happy docker!