Linux 背後的思想
01 Linus Torvalds
Linus Torvalds兩次改變了技術,第一次是Linux核心,它幫助網際網路的發展;第二次是Git,全球開發者使用的原始碼管理系統。在一次TED的採訪中,Torvalds以極其開放的態度討論了他獨特的工作方式和性格特點。
Torvalds說:“我不是一個空想家,我是一名工程師,我非常樂意跟夢想家在一起,他們行走四方,仰望蒼穹,看著滿天星辰說,“我想到那兒去。”但我是低頭看路的那種人,我只想填好眼前這個坑,不讓自己掉進去,這就是我。”
02 關於開源
Linus Torvald
Linux並不是一個合作的產物,它是我一系列專案中的一個,純粹出於自己當時的需要,部分原因是我需要得到結果,但更重要的原因是我享受程式設計。這段旅程的終點,在25年後的今天(2016),我們仍未達到。當年我只是想做一個完全屬於自己的專案,我壓根就沒想過開源這件事。但在那之後,隨著專案越來越大, 你會開始想讓別人知道。感覺就像“哇,快來看看我的成果!”
成千上萬的人想參與進來(Linux核心專案),但很多時候,我成為了那個斷點,我無法讓自己跨出那一步,同上千人合作。
因此Git是我的第二個大專案,它存在的意義就是維護我的第一個大專案。事實上這就是我的工作方式。我程式設計並不是為了… ,我程式設計是因為好玩,但我也想做一些有意義的事情,因此我設計每一個程式僅僅是因為我自己需要。
而我喜歡開源軟體的一點就是,它能讓形形色色的人在一起合作。我們不必相互喜歡,有時候我們甚至互相討厭。是真的,我們經常吵得不可開交。
科學界的開源顯然是一種迴歸,科學最初是開源的。但之後變得越來越封閉,只存在那些昂貴的科學期刊上。開源讓科學回歸了,我們有了arXiv和開放期刊。
小編有話說
Linux並不是選擇了開源,只是因為開源恰好是Linux需要的。就如Linus Torvalds所說:“純粹出於自己當時的需要。”
Linus Torvalds是睿智的,做好自己能控制的。
開源不僅僅代表原始碼的開放,開源更是一種工作方式,一種教育方式。因為有了開源,我們多了一種更好的合作共贏的工作方式;因為有了開源,讓更多從業者和學生能夠學習到更好的技術。
03程式碼的品味
Linus Torvalds
有時候你可以換個角度看問題,重寫程式碼,排除特例,完美覆蓋所有情況,這就是好的程式碼。同時也很簡單,這是最基本的原則。細節非常重要。對我來說,我願意與之共事的人,必須有好的品位。
採訪中Linus Torvalds對比了以下2個函式:
小編有話說
大牛們總是對自己嚴格要求,不僅僅是要實現功能,並且要優雅的實現。下面我們來看看採訪中Linus Torvalds對比的兩段程式碼:
1. 不怎麼漂亮的程式碼
remove_list_entry(entry)
{
prev = NULL;
walk = head;
// Walk the list
while (walk != entry)
{
prev = walk;
walk = walk->next;
}
// Remove the entry by updating the
// head or the previous entry
if(!prev)
{
head = entry->next;
}
else
{
prev->next = entry->next;
}
}
上面的程式碼,需要區分要移除的成員是否為連結串列的頭一個成員。需要單獨處理特例情況(要移除的成員為連結串列的頭一個成員)。這個函式比較好理解,這裡小編就不做更多的解釋了。
2. 好的程式碼
remove_list_entry(entry)
{
// The "indirect" pointer points to the
// *address* of the thing we'll update
indirect = &head;
// Walk the list, looking for the thing that
// points to the entry we want to remove
while ((*indirect) != entry))
{
indirect = &(*indirect)->next;
}
// .. and just remove it
*indirect = entry->next;
}
這個程式碼完全不需要單獨處理特例情況,程式整體更加整潔、優雅。其實現原理為:指標變數indirect儲存的是連結串列成員結構體中的next成員的地址(head指標也可這樣看),如下圖所示:
所以變數*indirect就相當於是前一個連結串列成員的next成員(相對於要移除的成員來說)。當找到要移除的成員後,進行如下操作即可:
*indirect = entry->next;
- END -
如果看到這裡,說明你喜歡這篇文章,請轉發、點贊。掃描下方二維碼或者微信搜尋「perfect_iscas」,新增好友後即可獲得10套程式設計師全棧課程+1000套PPT和簡歷模板,向我私聊「進群」二字即可進入高質量交流群。
↓掃描二維碼進群↓
喜歡文章,點個在看
相關文章
- 淺議極大似然估計(MLE)背後的思想原理
- Linux背後的人(轉)Linux
- 再談程式設計正規化—程式語言背後的思想程式設計
- 原始碼篇:Flutter Bloc背後的思想,一篇糾結的文章原始碼FlutterBloC
- Android應用程式開發以及背後的設計思想深度剖析(5)Android
- 誰來背鍋?自動駕駛車禍背後的故事自動駕駛
- 訊息推送背後的思考
- Redis持久化背後的故事Redis持久化
- "Hello World"背後的風險分析
- 現代框架背後的概念框架
- Java main方法背後的故事?JavaAI
- HTTPS 背後的內幕HTTP
- C程式執行的背後C程式
- Mac OS X 背後的故事Mac
- Router-view 背後的想法View
- HTML5背後的故事HTML
- 執行力的背後(轉)
- dyld背後的故事&原始碼分析原始碼
- 蘋果自動駕駛背後的故事蘋果自動駕駛
- Apple Arcade背後的策略APP
- 手柄漂移背後的科學原理
- 愛回收IPO背後的新老故事
- [譯] Service workers:PWA背後的英雄
- GCC編譯器背後的故事GC編譯
- 資料驅動背後的“陷阱”
- RestCloud ETL 社群版背後的故事RESTCloud
- npm run 指令碼背後的事情NPM指令碼
- 微博春晚背後的技術故事
- Markus Persson:Minecraft 遊戲背後的奇才Raft遊戲
- Goroutine背後的系統知識Go
- AI晶片大戰背後AI晶片
- ChatGPT背後演算法ChatGPT演算法
- Google DNS劫持背後的技術分析GoDNS
- 深挖谷歌 DeepMind 和它背後的技術谷歌
- [譯] ? styled-components 背後的魔法
- “雙碳”背後的硬核儲存(上)
- “雙碳”背後的硬核儲存(下)
- 監聽ORM背後的sql語句。ORMSQL