這裡記錄每週值得分享的科技內容,週五發佈。
本雜誌開源(GitHub: ruanyf/weekly),歡迎提交 issue,投稿或推薦科技內容。
週刊討論區的帖子《誰在招人?》,提供大量程序員就業信息,歡迎訪問或發佈工作/實習崗位。
封面圖

中國科學家繪製的世界首幅、最詳細的1:250萬月球全月地質圖發佈,統計出月球包含12341個撞擊坑、17種岩石、14類地質構造。(via)
本週話題:為什麼軟件變得複雜
我一直認為,軟件開發的最大關注點,就是避免複雜性。軟件設計越簡單越好,太多的程序員以構建複雜的解決方案為榮。
但是,本週有一篇文章讓我反思,我的想法是不現實的:軟件肯定會越變越複雜。
(一)
這篇文章的作者是 Saleforce 公司的前端工程師諾拉·勞森(Nolan Lawson),題目就叫做《複雜軟件的崩潰》(下圖)。

大家可能知道,Salesforce 是一家世界級軟件公司,專門開發企業軟件,以產品複雜而聞名。

所以,這件事情很諷刺。一家出產複雜軟件的公司,自家的著名程序員公開說,複雜軟件會崩潰。
當然,他在文章裡面沒提 Salesforce 的名字,但是怎麼讀都像在寫親身經歷。下面摘錄一段他的原文和配圖,大家品味一下。

"任何在科技行業工作足夠長的人,尤其是在大公司工作的人,都曾見過下面的場景。
有一個遺留系統,很大很複雜,沒有人完全理解它是如何工作的。
架構師被要求"修復"系統,他們找來一塊大的白板,把這個大系統分解成很多方框和箭頭。對於遇到的問題,他們的解決方案就是......添加更多方框和箭頭。沒有任何一個可以從系統中消去,每個人都只是加上自己的那部分。
這一段是不是寫得很形象,就像是日常場景的描述。
根據他的文章,我整理了一下,Saleforce 內部的情況大概是這樣的。
- 客戶的需求非常複雜。為了滿足這些需求,大型軟件不可避免變得複雜。
- 軟件公司的管理者真正在意的不是系統的複雜性,而是利潤。只要軟件能賺錢,高層並不在意軟件變得複雜。
- 軟件複雜性都落到少數架構師和高級程序員的頭上。每個人加上自己的解決方案(方框和箭頭),讓軟件越來越複雜,然後不可避免地,他們就會在一段時間後離開公司。
- 複雜系統最終變得難以理解和維護,唯一的解決方法就是放棄舊系統,從頭開始寫一個新系統。
所以,諾拉·勞森的結論很悲觀:怎麼解決軟件的複雜性?解決不了。最後就是你走人,公司把軟件推倒重來。
這就是一個大廠高級程序員的真實想法。國內的情況其實差不多,上面的描述完全適用於 BAT 內部的複雜系統。
(二)
諾拉·勞森還說了一個觀點。大家通常認為,複雜系統往往會在經濟繁榮的時候崩潰,因為業務太多,支撐不過來,但他認為不是這樣的,系統崩潰往往發生在經濟收縮期。
經濟繁榮時期,軟件公司會大量僱傭新員工,投入更多的財力和人力,支撐複雜系統。等到經濟收縮期,公司開始減少投入、凍結招聘或裁員,複雜系統可能就會在這個時候出問題,變得難以維護。
現在就是經濟收縮期,那麼接下來,會不會就是軟件故障的高發期,我們將看到很多複雜系統的崩潰?
前端高頻面試題(2022版)
這兩年,客觀地說,前端開發的熱度有所下降。主要原因是前端技術逐步穩定,以及智能手機的普及度見頂了。
但是,前端依然是 IT 行業中最活躍的分支。一年一度的 GitHub 調查中,JavaScript 多年來一直穩居第一,TypeScript 更是快速上升到今年的第四位,僅次於 Python 和 Java。

技術穩定帶來的一個後果,就是新框架、新工具少了,大家更關注已有框架/工具的改進和功能增加。
大廠的前端團隊也轉向了精細化探索,注重如何做得更細、更好,垂直化的技術領域(比如可視化、工程化等)得到了更多的關注。企業的用人要求也越來越高,從能夠上手工作就可以要人,變成了要求深入某個領域。
總的來說,現在的前端開發處在下圖右側的那個橢圓,比前一個階段的難度上升了。

如果你已經有一定的前端開發基礎,近期打算應聘前端崗位,這裡有一份有用的資料,可以幫助大家準備面試。
這份資料就是 《前端大廠的高頻面試題(2022版)》,一共有174頁,收集了最新的面試題,由國內著名的程序員培訓平臺"極客時間"聯繫國內大廠製作。

所有的題目都分門別類,由淺入深排列,每道題都附有答案詳解,方便大家知識梳理、準備面試。

此外,還會額外贈送 《三位資深程序員的面試跳槽經驗分享》,分享技術之外的跳槽準備、簡歷準備、面試應對......這些值得借鑑的前人經驗。

微信掃描上方二維碼,就可以 免費領取 這份前端面試資料。添加客服後,請耐心等待,後臺是手動通過的。
最後提醒一下,這份資料不適合剛剛學習前端的學生,更適合有前端開發基礎和編程經驗的從業人員。
科技動態
1、虛擬接吻

卡內基梅隆大學開發了一種新技術,讓 VR 頭盔的佩戴者可以感受到虛擬接吻。具體做法是,頭盔向嘴唇發射超聲波,裡面包含了一些微小顆粒,讓嘴唇、牙齒甚至舌頭產生觸感。
上圖可以看到,VR 頭盔的下方安裝了一排超聲波發生器,對準紅點的位置發射。科學家開玩笑,可以用它開發"接吻機"。

除了產生嘴唇的觸感,這種技術還可以在遊戲中,讓用戶感受到風拂過臉部、蜘蛛網碰到臉,甚至食物和飲料進入嘴裡的虛擬感受。
上圖是一隻巨大的虛擬蜘蛛將大量毒藥傾瀉到用戶身上,用戶可以感覺到毒藥濺到嘴唇上。
2、LED 籃球場

5月30日,國際籃聯正式宣佈,允許籃球世界盃等大賽啟用 LED 籃球場。
傳統的籃球場都是木地板,木頭具有彈性,可以吸收震動,保護球員。現在,最新的 LED 玻璃也已經能夠提供足夠的彈性。

LED 球場有很多好處,省去了劃線的麻煩,能夠快速切換成籃球場、手球場、排球場、羽毛球場。
並且,它自身能發光,可以作為顯示屏,實時顯示比賽數據,並且配合球場活動,營造氣氛。在黑暗中,界線依然保持醒目。

3、樹皮字體


五年前,一個丹麥藝術家將字體刻在一棵樹上,想看看隨著樹木的成長,字體會變成什麼樣,也就是大自然會怎樣呈現字體。

下面是字母 a 和 o 在五年中的變化。


這些字體應用到印刷品,就是下面的樣子。

他發現,這些字母主要是橫向成長,變得更寬更粗,高度反而變化不大。這說明,樹木成形後,樹幹高度就基本不再變化了,開始不斷長粗。

4、禁止白熾燈泡

拜登政府宣佈,美國將禁止銷售每瓦產生低於45流明的燈泡。這實際上禁掉了白熾燈泡。
這個決定是為了提高照明的能量效率。一般來說,白熾燈泡每瓦的發光量在10流明左右,LED 燈泡則可以達到每瓦100流明以上。
文章
1、我為什麼與中國遊戲發行商簽約又分手(中文)
這是一篇日本獨立遊戲開發者的文章,被譯成了中文。作者以親身經歷,解釋了目前的獨立遊戲的發行制度和現狀。
2、Intel 4 工藝宣佈(中文)

上週,英特爾公司正式宣佈了 Intel 4 工藝。這是英特爾公司第一次將 EUV 技術用於 CPU 的生產,實現了7納米的製程,開始追趕臺積電。本文介紹該工藝的一些情況。
3、我如何搭建家用 NAS(中文)

本文詳細記錄了作者選購硬件、安裝軟件,搭建一臺 22TB 的家用 NAS (網絡存儲)服務器的過程,可以當作自己架設 NAS 的參考。這裡是中文翻譯,另有英文原文。(@yangchuansheng 投稿)
4、最簡單的任務管理系統(英文)

本文介紹作者自己發明的最簡單任務管理系統,就是把每天的任務寫在卡片上,用一個架子放在眼前,做完一件就劃掉一件。

5、使用 Cloudflare + Backblaze B2 打造一個免費的圖像 CDN(英文)

本文是一篇詳細的教程,教你怎麼把圖片託管在 Backblaze B2 對象存儲,然後連接到 Cloudflare 的 CDN 服務。兩者都有免費額度,對於小網站來說,不用花錢就解決了圖片的存儲和帶寬問題。
6、如何用 iOS 快捷指令防止沉迷?(英文)

作者發現自己在社交媒體上,浪費了大量時間。他想出了一個辦法,製作了一個 iOS 快捷指令(shortcuts),只要一打開社交 App,就會跳出提示"請專心工作"。
7、我的免費攝影軟件工作流(英文)

作者是一個專業的攝影師,完全採用免費軟件處理數碼照片。本文介紹他的解決方案。
8、我在單個服務器上託管幾十個網站(英文)
作者詳細介紹,他如何在一個服務器上託管幾十個網站,大部分是 API 調用。這裡最大的難題還不是把服務架起來,而是如何同時維護和管理它們。
9、如何估算流入加密貨幣的資金(英文)

多少資金流入了加密貨幣市場?這顯然是無法準確計算的,作者想到了一個辦法,可以間接估算。那就是看穩定幣每月增長的發行量,上圖是過去兩年穩定幣每個月的增長百分比。
工具

一個雲服務,可以將 SoundCloud 上面的音頻,轉成 mp3 下載。
2、ToolJet

一個低代碼框架,用來開發內部工具。部署到服務器後,它有一個 Web 界面,通過拖拽,就可以連接各種數據源,生成各種應用或管理面板。
3、i 微信讀書

Chrome 瀏覽器插件,配合網頁版微信讀書使用,支持劃線摘抄句子、劃線生成分享圖片、一鍵導出筆記等功能。(@secreter 投稿)
搜狗公司開源的 C++ 服務器引擎,支撐搜狗幾乎所有後端 C++ 在線服務,提供了大量異步服務的功能。(@Barenboim 投稿)
5、FastGit

GitHub 有時在國內不容易打開,這裡有一個服務是 GitHub 的鏡像加速器。提醒一下,如果要登陸 GitHub,使用這種服務會有安全顧慮,大家自己權衡。(@dllen 投稿)

一個國產軟件,基於 Go+Vue 實現的 openLDAP 管理後臺,可以作為打通 IM(釘釘、企業微信、飛書)與支持 ldap 認證的應用的橋樑。(@eryajf 投稿)
7、Japa
一個 Node.js 的測試框架,簡單快速,功能也很多,而且可以直接運行測試腳本,不必通過測試框架來運行。
這個網頁腳本可以生成當前頁面的截圖。
9、GitLens

一個 VSCode 的插件,大大增強了 Git 集成,可以在編輯器裡面執行很多 Git 操作,特別適合多人合作的項目。
Deno 框架
Deno 是 JavaScript 語言的服務器運行環境,跟 Node.js 是競爭關係。
Deno 本身的開發已經接近穩定了,下一步只要有一個好用的框架,就能推廣了。
1、Fresh 框架

上週,基於 Deno 的 Fresh 框架發佈了預覽。
該框架直接使用 TypeScript 腳本,號稱零配置、零構建,頁面由服務端渲染,客戶端不需要 JS 生成內容,也沒有多餘的 JS 腳本,追求小而快,值得關注。
2、Aleph.js

Aleph.js 是另一個基於 Deno 的全棧框架,類似於 Next.js,目前處於早期開發階段,也可以關注。
3、Express

順便提一下,老牌的 Node.js 框架 Express,最近要發佈5.0版了。這是一件大事,因為4.0版是八年前發佈的。這篇文章介紹了5.0版的新特性。
可視化作品
1、全球海底光纜

這個網頁提供了一個互動式的地球,上面有全世界海底光纜和骨幹機房的位置。
2、極光

這個網頁構造了一個極地的背景,讓你手繪動態的極光效果。
3、波斯波利斯

波斯波利斯是古代波斯帝國的首都,位於現在的伊朗,已經是一片廢墟了。這個頁面還原了這座雄偉的帝國都城,重建了 3D 街景,讓你在其中漫遊。
圖片
1、鹹海
哈薩克斯坦曾經有一個巨大的湖泊,叫做鹹海,面積68000平方公里,相當於兩個海南島,是世界第四大湖泊。
但是,從1960年代開始,前蘇聯建造了很多灌溉工程,從鹹海大量引水,又沒有補充,導致鹹海快速乾涸,目前已經接近消失了。
1985年的鹹海。

1997年的鹹海。

2014年的鹹海。

2、住宅牆
加拿大有一個小鎮,靠近北極,終年颳著強勁的北風。
為了擋風,當地修建了高50米,長1.3公里的擋風牆,同時這堵牆裡面還是住宅、商業和教育設置,裡面可以住人。


因為有了這堵住宅牆,小鎮居民就擁有了一個無風的、溫暖的小氣候。


文摘
1950年代,一家國外的牙膏公司,向公眾徵求能夠大幅提高銷售額的點子。

幾天之後,有一個人來應徵,聲稱他有辦法讓銷售額快速增長40%,而且實施起來不需要很大成本。他要價10萬美元。
公司管理層猶豫了數週,最後還是同意了給錢。
等到法律手續和付款流程完成後,這個人給出裝有一張小紙條的信封,小紙條上只有四個英文單詞:
"Make The Hole Bigger"
這句話翻譯成中文,就是"讓牙膏開口更大一點"。
此前,管狀牙膏的開口一般是5毫米直徑。稍加計算就可以知道,當直徑從5毫米增加到6毫米時,假設擠出的牙膏長度不變,擠出量會增加44%。
原先顧客用一管牙膏的時間,現在要1.4管牙膏才能滿足需求。看似很小的改變,卻刷新了這家公司的銷售記錄,創造了歷史。
言論
1、
一件事最可怕的時刻,總是在你開始做之前。
-- 斯蒂芬·金
2、
對於那些沒有想象力的人來說,保持常態就是他們的理想。
-- 榮格
3、
IT 行業與傳統制造業有一個重要區別,就是 IT 行業有著嚴重的壟斷。
全世界的智能手機有70億部,比汽車多出5倍(14億輛)。但是,智能手機制造商比汽車製造商少了好幾個數量級。搜索引擎、社交網絡、操作系統都是這樣,幾個巨頭就壟斷了整個市場。
4、
電動汽車雖然售價高,但是每公里的行駛成本低,因此用得越久越划算。這就要求汽車廠商製造耐用的電動汽車。
5、
2021年只有兩種人在寫博客,一種是試圖建立受眾並從中獲利的人,另一種是隻想寫出想法、而沒有任何目標的人。
這兩種人的行為都非常好。選擇做你喜歡的事,堅持下去,它們最終都可以對他人產生價值。
-- 《我從博客中學到的東西》
歷史上的本週
2021年(第 162 期):生活就像《吃豆人》遊戲
2020年(第 111 期):智能電視的誤區
2019年(第 60 期):一本介紹人類起源的學術自傳
2018年(第 9 期):身份證可以植入人體
訂閱
這個週刊每週五發布,同步更新在阮一峰的網絡日誌和微信公眾號。
微信搜索"阮一峰的網絡日誌"或者掃描二維碼,即可訂閱。

(完)












