每週分享第 28 期

阮一峰發表於2018-10-26

這裡記錄過去一週,我看到的值得分享的東西,每週五發布。

歡迎投稿,請前往 GitHub 的 ruanyf/weekly 提交 issue

第24期時,我引用了一個開發者對年輕程式設計師的告誡。

在軟體開發中,技術變化如此之快,你花費了大量時間學習技術和工具,一旦這些技術被取代,你的知識將變得毫無價值,因為它們大部分都是實施的細節。

我最近總是在想這段話,軟體開發算不算是真正的知識?

如果它是一種真正的知識,那麼理論上,我們學到的東西大部分應該不會過時,就好像微積分不會過時一樣。可是實際上,我們都知道,軟體開發技能有時效性,十年前學習的程式設計知識,十年後幾乎肯定不能用於生產。那樣的話,軟體開發就不能算真正的知識,只是一種實施的細節。

公司旁邊有一家稅務所,每天都有很多人排隊交稅。如果你是第一次來交稅,肯定搞不清楚怎麼交,交稅是一門學問,必須有人教你,要帶哪些證件,要填哪些表,去哪些視窗排隊等等。

我現在認為,學習程式設計跟學習交稅是一樣的,都是學習實施的細節。一旦外部環境變了,原來的實施細節就沒用了。當代程式設計由於層層的抽象和封裝,我們已經不必接觸底層真正具有通用性的知識了。大部分時候,所謂程式設計就是在寫某個抽象層的配置。比如,網頁樣式就是在寫 CSS 配置,你很難說這到底是真正的知識,還是像《辦稅指南》那樣的實施細節。

實施細節並不是知識,而是操作步驟。如果技術棧發生變更,實施細節就會毫無用處。但是,你又不能不學習它,不知道實施細節,就沒法做出專案。我覺得,程式設計師應該要警惕,不要落入實施細節的陷阱,不要把全部精力花在實施細節上面,然後以為自己學到了真正的知識。對待各種語言和工具,正確的態度應該是"進得去,出得來",既要了解足夠的細節,也要能夠站在宏觀的角度看待它,探尋底層到底是怎麼實現的。

新聞

1、昆蟲武器

一個美國科學家稱,美國國防部高階研究局(DARPA)可能正在開發昆蟲武器,透過昆蟲向田野裡的糧食作物,散佈可以編輯染色體的轉基因病毒,導致敵人的糧食減產或絕收,用於傳播的昆蟲是葉蟬,蚜蟲和粉蝨。病毒可以經過編輯,只感染特定的作物。

2、字幕眼鏡

倫敦國家劇院開始使用字幕眼鏡。字幕顯示在眼鏡上,眼鏡透過 WiFi 接收字幕。這樣有很多好處,字幕的修改和釋出變得很容易,而且不同的觀眾可以選擇接收不同的字幕。

目前的問題是,這種眼鏡的成本很高,每一付的售價約為1,050美元。

3、血壓貼片

加州大學聖地亞哥分校研製出一種血壓貼片,只要貼在皮膚上,就能測量血壓。

傳統的血壓測量都需要帶一個袖帶,目前為止還沒有簡便的方法,可以測量血壓,各種手錶手環都不行。這種貼片是第一種測量血壓的可穿戴裝置。它的原理是發出穿透皮膚的超聲波,收集反射訊號,送回計算機計算血壓。

4、Facebook 的人工智慧翻譯

我們知道,谷歌的機器翻譯是建立在統計模型的基礎上。根據統計機率,判斷一個詞最可能的翻譯是什麼。但是,這種方法只適合語料足夠多的語言,有些小語種(比如烏爾都語)根本沒有多少可對照的翻譯材料,無法建立統計模型。

Facebook 最近開源了一種人工智慧翻譯系統,嘗試解決這個問題。它不需要統計模型,而是採用人工智慧,判斷一個陌生的詞到底是什麼意思。它的思路跟人差不多,將陌生單詞拆分成詞根,猜測單詞的含義,比如上圖是把 hello 拆分成 he、l、l、o。

5、鐳射雷達相機

美國一家創業公司製作了一個叫做 OS-1 的裝置,將相機和鐳射雷達做在一起,拍照的時候自動進行測距,也就是說,同時進行了 3D 建模。也許以後照片拍好了,現場的 3D 模型也就生成了。

6、油畫裡的碎紙機

十月初,蘇富比拍賣會上,著名畫家 Banksy 的作品成交以後,發生了一件令人目瞪口呆的事情。畫框裡面的碎紙機突然啟動了,將這幅作品切碎成條狀。

原來這幅畫是 Banksy 十年前送給一個友人的,他非常痛恨別人把贈畫拿去拍賣,就在畫框裡偷偷裝了一個碎紙裝置。當拍賣成交後,他立刻遙控啟動,這幅畫就在眾目睽睽下被切碎了。

7、露天小便器

巴黎最近在塞納河邊,安裝了公共的露天小便器。它們完全暴露在街角,漆成鮮紅色。

比較特別的是,小便器裡面種植了植物,尿液用來為這些植物施肥。另外,小便器裡面還安裝了一層消除異味的吸管層。

8、沒有廚房的餐廳

美國一家創業公司正在嘗試沒有廚房的餐廳。一個區域內所有餐廳共享一間中央廚房,消費者點餐後,中央廚房出菜,再由騎手送過去。

報導說,如果再把中央廚房外包,未來的連鎖餐廳可能不擁有廚房和廚師,好比Uber不擁有計程車,卻成為最大的計程車公司。

9、飛向水星

10月19日,歐洲航天局在法屬蓋亞那發射了兩個水星軌道探測器,它們將在七年後進入水星軌道。

水星是距離太陽最近的行星,到達那裡的難度很大。首先,水星距離地球的最近距離是7700萬公里,比火星的距離遠得多,地球飛向火星通常只需要6個月,而前往水星需要好幾年。其次,由於水星距離太陽太近,很容易被太陽引力捕獲。我們知道,地球的重力是9.8m/s^2,水星是3.7,而太陽是274。這意味著,進入水星軌道,需要巨大的能量擺脫太陽的引力。

10、一句話新聞

  • 資料庫查詢現在都是 CPU 處理的,但是很多公司正在開發 GPU 資料庫。對於大型資料庫,GPU 可以大大降低處理時間。

  • Intel 釋出第九代桌上型電腦 CPU,升級到了八核心,下一代的旗艦 CPU 是酷睿i9-9900K,基本頻率為3.6 GHz,95W功率,超頻後可以到 5.0 GHz。

  • 許多大公司(包括蘋果、谷歌、IBM)都不再要求應聘者具有大學學位。

  • jQuery 最流行的檔案上傳外掛,發現一個高危漏洞。PHP 環境中, 攻擊者可以上傳惡意檔案,接管伺服器。Wordpress 用到這個外掛的話,也會受影響。

教程

1、Java 執行緒與 Go 執行緒的根本差異(英文)

作者注意到一個現象,同一臺機器,Java 執行緒最多隻能建幾千個,但是 Go 執行緒可以建數百萬個。他研究後發現,這跟執行緒的記憶體佔用有關,每個 Go 執行緒竟然只佔用4KB。

2、如何用 C++ 寫網頁?(英文)

本文教你如何用 C++ 寫一個二進位制程式,每當收到透過 CGI 閘道器發來的呼叫請求時,自動返回一個網頁。其他後端語言也可以用來寫網頁,原理是一樣的。

3、為什麼要使用 GraphQL ?(英文)

GraphQL 是客戶端請求伺服器資料的一種新技術,本文分析的它的優點和侷限。

4、FPGA 是什麼?(英文)

現在,程式設計師程式設計都是針對某種硬體架構,比如 CPU 或 GPU,但是也可以為某種計算定製電路,這種電路專門用來完成這種計算,這就叫做 FPGA。本文介紹 FPGA 的特點,長處和短處。

5、DHCP 協議如何工作?(英文)

DHCP 協議全稱是"動態主機配置協議",區域網的裝置往往使用這個協議獲得動態 IP 地址。本文解釋這個協議的運作過程。

6、HTTPS 協議圖解(英文)

圖解 HTTPS 對話過程,非常形象,每一個位元組的含義都講到了。

7、如何讓不純的函式變純?(英文)

透過 JavaScript 程式碼解釋函數語言程式設計的一些基本概念。

8、Go 語言與 Rust 語言的比較(英文)

本文談了這兩種語言各自的長處和短處。

9、最早的域名(英文)

作者寫了一個指令碼,查詢 whois 資料庫裡面最老的域名。最早的 .com 域名是 symbolics.com(1985-03-15 註冊),最早的 .net 域名是 nordu.net(1985-01-01 註冊)。

資源

1、全球假日 API

該資料庫覆蓋全球180多個國家的公眾假期。

2、learn-python3

Python 3 教程庫。

3、Youtube 資源

該網站列出分類的最受歡迎 Youtube 頻道。如果你不知道 Youtube 上看什麼,可以瀏覽一下這個網站。

4、計算機網路:原理,協議和實踐

英文的開源電子書,解釋了計算機網路的主要原理以及網際網路的關鍵協議,用於高年級本科網路課程。

5、加密學導論

英文的開源電子書,介紹加密背後的數學知識,哈佛大學的本科生教材。

6、VPS 搜尋工具

透過各種搜尋條件,比較不同的主機商品,看看哪個雲主機最好用。(@DoctorLai 投稿)

工具

1、markdownlint

JavaScript 語言編寫的 Markdown 文章風格檢查器。

2、walt

前端程式設計師使用 WebAssembly 的最大障礙,就是它要求你深入掌握一門後端語言。於是,就有人嘗試把 JS 程式碼編譯成 WebAssembly。Walt 就是這樣的一個專案,它可以把 JS 程式碼稍加修改,然後用 Webpack 打包成 WASM 在瀏覽器載入。

3、EXIF.tools

EXIF 是照片包含的後設資料,這個網站可以檢視照片的後設資料。

4、percollate

命令列抓取網頁,生成 PDF 檔案的工具。

5、AutoMono

一種專門用於程式設計的開源等寬字型。

6、MkDocs

Markdown 文件站點生成器。

7、the great suspender

Chrome 以吃記憶體著稱。這個外掛可以凍結不使用的 tab,以釋放記憶體。(@Scheinin 投稿)

8、flyer-maker

flyermaker 是一個 Java 專案的腳手架工具,支援 SpringBoot 和 SpringFramework,它允許動態生成工程程式碼和單元測試。(@vancefantasy 投稿)

9、fullPage.js

有的網頁每次滾動就是一屏,fullPage.js 就是製作這種效果的一個 JS 庫。

文摘

1、美國銀行缺乏 COBOL 程式設計師

Bill Hinshaw 已經75歲了,但是還必須工作,幫助一些美國大公司避免計算機的崩潰。他在上個60年代開始程式設計,當時計算機有整個房間那麼大,而且程式設計師還使用穿孔卡。他使用的語言叫做 COBOL。

這種語言是60年前開發的,後來被其他語言(如 Java,C 和 Python)取代。現在幾乎沒有學校教 COBOL,但這種語言對美國的金融部門、大公司和聯邦政府仍然至關重要,因為它支撐著70年代或80年代建造的計算機系統,而且從未完全被取代。美國金融業每天約有3萬億美元的業務,要經過 COBOL 系統。該語言支援著存款賬戶、支票清算服務、信用卡網路、ATM、抵押服務和其他服務。如果出現問題,很少有人知道如何解決。

幾年前,Bill Hinshaw 就已經退休了,但是客戶找他的電話依然絡繹不絕。他索性就成立一家諮詢公司,20名成員大部分是退休的 COBOL 程式設計師,最年輕的也接近50歲。

對於大公司來說,完全更換舊的 COBOL 系統,成本高昂,而且有巨大的風險,不如付錢請這些退休程式設計師維護老系統。舉例來說,澳大利亞聯邦銀行在埃森哲和 SAP 的幫助下,2012年更換了核心的銀行業務平臺,花了五年時間,耗資超過10億澳元(7.499億美元)。預計今年,美國金融企業的技術支出為2610億美元,其中67%用於維護舊系統。

但是,COBOL 程式設計師越來越老,也越來越少,眼看就要找不到了。目前,美國正在加快推出各種 COBOL 培訓,希望能出現更多年輕的 COBOL 工程師。

2、感知機率

平時在交談中,我們會使用"可能"、"很可能"、"極有可能"、"大概"、"不肯定"、"不太可能"等等詞語來描述一個事件的可能性。但是,這些詞語到底表示多大的機率?每個人都有不一樣的理解。

比如,有的人心目中,"可能"就意味著50%的機率,"很可能"就意味著70%的機率,而"不太可能"就是30%的機率。另一些人可能會認為,"很可能"應該是75%的機率。

耶魯大學教授謝爾曼·肯特(Sherman Kent)做過一個統計調查。他詢問許多人,將得到的資料做成了下圖,給出了每一個用詞所代表的機率區間。

可以看到,在他的調查中,"probable"、"likely"、"probably"和"we believe"的區間都大約是62-85%。

有人在reddit上重新做了一次統計,然後用R語言程式計算出每個短語的箱形圖(box plot),再用ggplot2繪圖包製作出漂亮的圖表。

3、網站頁面的十年變化

我們的網站是一個線上建站工具,十年來變了多次。

2007年,基本上就是一個表單。

2012年,改用了 Windows 的大色塊風格。

2013年,開始推廣移動版。

2015年,我們開始簡化設計。

下面是現在2018年的樣子。

本週圖片

1、追蹤帝王蝶

每年超過10億隻帝王蝶從加拿大遷移到加利福尼亞。堪薩斯大學的科學家為了瞭解它們的遷移路線,會抓捕1000只左右,在翅膀貼上標籤,大小跟鉛筆上的橡皮頭差不多。然後,希望沿路的人們抓到帝王蝶的時候,能夠把資訊回報給他們。

2、觀察蜜蜂的方法

密蘇里大學的科學家,想要研究蜜蜂的活動規律。但是,怎麼才能知道蜜蜂出來採蜜呢?

他們想了一個辦法,在田地裡架設了收音頭。一旦聽到嗡嗡聲,就知道蜜蜂來了。

3、

電影院(或者大型會議、講座)很快就會是上圖的場景。

本週金句

1、

阻止氣候變暖,需要人們駕駛更小的汽車,更多的步行和騎腳踏車,減少飛行,不購買很快過時的時尚商品,以及少吃肉。

-- BBC《少吃肉與氣候變暖》

2、

他們不善於討價還價,而且對金錢在生活中的重要性的重視程度較低。

-- 《為什麼好人容易陷入困境》,美國社會學家研究好人的財務狀況

3、

先工具,後網路。(Come for the tool,stay for the network.)

-- 創業家@cdixon提出,個人或小型創業公司的產品,起先應該是工具,有了足夠的使用者以後再向網路方向發展。

歡迎訂閱

這個專欄每週五發布,同步更新在我的個人網站微信公眾號語雀

微信搜尋"阮一峰的網路日誌"或者掃描二維碼,即可訂閱。

(完)