Re: [問卦] C語言學到什麼程度才可以說自己會寫C已回收
※ 引述《orz77586 (成大harden)》之銘言:
: 需要強到像Jserv一樣可以邊演講邊用開外掛的速度打扣
: 還是學到什麼程度就可以說算是會寫C了
: 版上大大們有沒有什麼看法
板上先進比比皆是,但是大多忙碌,最近剛好在研究社交網路的我代替大大們回覆。
身為中學摸 C 語言、大學摸 C 罩杯的大叔,我只想說「均衡發展」遠比鑽牛角尖
重要。
解釋之前,前美國總統甘迺迪 (John F. Kennedy) 曾說:
> I believe that this nation should commit itself to achieving the goal,
> before this decade is out, of landing a man on the Moon and returning
> him safely to the Earth.
(我相信美國在 1960 年代結束前,將全力以赴地實現一個目標,那就是讓人類
登陸月球,並確保安全返回) [0]
這句話非常明確:在美蘇冷戰時期,讓所有參與太空國防的上萬名人員,乃至於
當時的聯邦人民都知道,枝幹該把怎樣的養份送到主幹,更明確來說,機構的專家
會去研究夠耐用的船體、天文物理的專家會去研究重力對路線的影響、電子通訊的
工程人員構思一系列有效的傳輸方式,而投身教育者則是從國會議員到普羅大眾都
涵蓋,確保資金和人才供給不斷絕。最終,阿波羅 11 號 (Apollo 11) 作為 NASA
阿波羅計畫中的第 5 次載人任務,實現人類第一次登月 (並且成功返回地球的)
任務 (當然第一次人類登月任務始於神州大陸的嫦娥,中國人帶著逃離中國的基因
可見一班),繞行月球 30 周。
等等,上面的故事和 C 語言有何關係?「你 484 來混 P 幣呢?」且慢,讓我
繼續說下去。
阿波羅計畫的規模之大,即便是今天回顧,也難用簡單幾句帶過,遑論 1950 年代
末期總是被蘇聯太空技術 [1] 壓著打的美國政府,上面甘迺迪那席話就在 1961 年
,啟動阿波羅計畫之際。而 1960 年代中期啟動 Project MAC (與阿波羅登月計畫
平行,由 DARPA 贊助的大型計畫) 的 Multics 專案,定位開發多人分時多工作業
系統,並且運作於多核的硬體環境 (multi-processor!),更有意思的是,Project
MAC 這麼龐大的計畫卻由麻省理工學院 (MIT) 領軍開發關鍵技術,並由 GE (美國
通用電氣) 提供硬體及 AT&T 旗下的 Bell Laboratories 開發軟體和技術支持 (受
到反壟斷條款的處分,AT&T 不得涉及硬體銷售,但研發專利技術並授權他人不在
此限),今日我們熟知的 C 語言開創者 -- 已故的 Dennis M. Ritchie (縮寫 dmr)
[4] 和今年 75 歲卻供職於 Google Inc. 並帶領一群高手投入 Go 程式語言開發的
Kenneth Thompson (縮寫 ken) -- 即服務於 Bell Labs。
以商業的角度來說,Multics 是個失敗的作業系統,但 ken 和 dmr 卻汲取其中的
養分,帶著戲謔的口吻,開發出名為 UNICS 的作業系統,"uni-" 和 "multi-" 是
對比的前綴,後來 UNICS 被正名為 UNIX,自此為世人熟知,並且影響你我生活的
個別面向。UNIX 第一版用組合語言開發,提供了檔案系統的服務,後來用 C 語言
重寫,其中 Research UNIX version 6 (UNIXv6) 是大量被學校和公司行號採用的
作業系統 (在 AT&T 的律師團收取天價授權費之前)。
但是,你若把 C 語言當作「只是另一個程式語言」來看待,那就大錯特錯了。
在資訊科技領域,部分工程師和甚至是企業家跟編譯器發展有關,比方說 Eric
Schmidt (Novell 前執行長、Google 前執行長) 在 Bell Labs 服務時,重寫了
lex 工具程式 [2],dmr 在發展 Unix 作業系統和 C 語言之前,參與 Multics
專案的編譯器開發工作,他們得以熟悉程式語言理論 (Programming Language
Theory, 縮寫 PLT) [3] 和電腦硬體的特性,進而到其上的作業系統和各式應用
程式。
dmr 有次被人問及:
> 「一個人從新手到精通 C 語言的電腦程式開發者,並得以寫出卓越不凡的
> 程式碼,根據你的經驗,需要多長時間呢?」
這位帶有幽默感的曠世奇才回覆道:
「不知道,我不需要學 C」
回到最初的提問「學到什麼程度就可以說算是會寫 C?」,那終極回覆大概就如
dmr 這樣簡單的答覆:實際解決複雜且影響深遠的問題,過程中萃取出 UNIX 哲學
[5] 和 C 語言這樣的人類文化資產出來,塑造今日我們所見的一切。
引用中正大學吳昇教授日前的話: [6]
> 以武俠世界的武功來比喻,一些拳法、招數學好很重要,但是內功心法也很重要。
> 在金庸射鵰英雄傳小說裡馬鈺道長到塞外教郭靖兩年內功心法,奠下了郭靖武學的
> 雄厚根基後來成為大俠。
我相信學習 C 語言絕對不是把玩拳法、熟記招數,而是打通經脈,深植雄厚根基,
著眼於開發高品質的軟體、關注清晰且一致的 coding style、時時關注高可讀性、
勤勞地調整出清晰漂亮的結構,更不忘在高效能、好維護、具延展性、強韌性、安全
性等議題持續精進。
做到這樣的話,已可算是「開始學習 C 語言」了。歡迎各位和我同事宅色夫一起
學習和交流 C 語言:
* 線上教材: http://hackfoldr.org/dykc
* (偽) 網紅頻道: https://www.youtube.com/c/guts4tech (請幫忙按讚)
身為 C 語言初學者,我不以進展遲緩為恥,相反的,我樂見自己的創作能夠用在
我家人和身邊朋友每天用的 Android 手機、中文輸入法、嵌入式裝置,甚至包含
大眾交通設施 (先賣關子 :P)。人類的歷史中,還有什麼時期能夠憑藉雙手,對這
世界帶來持續廣泛的影響呢?我只是單純地追隨 dmr 和 ken 等前輩的步伐。
同場加映:
2001 年,J. T. S. Moore 以自由軟體和開放原始碼軟體發展為主題,導演了相當
可貴的紀錄片《Revolution OS》,訪談了若干先鋒者,是理解駭客 (hacker)、
GNU 計畫、自由軟體基金會 (FSF)、Linux 核心 (kernel)、開放原始碼 (open
source) 和自由軟體 (free software) 基於不同理念各自發展、Netscape 宣佈
Mozilla 開放原始碼專案、基於 Apache 和一系列開放原始碼技術的公司、在
NASDAQ 上市等等歷程的第一手資訊。隨後新竹交通大學資訊工程系「自由開源
軟體與專案協作」課程師生更新了紀錄片諸多細節和增添註釋。對理解 C 語言前世
今生乃至於當今的資訊工業發展,應有一定程度的助益:
https://hackmd.io/s/r1dUx8ltg
[0] 阿波羅計畫可參照 Discovery 拍攝的紀錄片〈登月機具:導航系統〉,我學生
幫忙翻譯了中文字幕:
https://amara.org/en/videos/oJHtDEuqZfVK/info/navigation-computer/
[1] 蘇聯於 1957 年 10 月 4 日發射 Sputnik I,後者是第一顆進入行星軌道的
人造衛星,隨即震撼了整個西方,在美國境內引發了一連串事件,如史普尼克
危機、華爾街發生小股災。開始了美蘇兩國之間的太空競賽
[2] lex 的中文解說可見:
https://mropengate.blogspot.tw/2015/05/parser-lex-yacc-1.html
[3] PLT 的極佳資料彙整可見:
https://github.com/steshaw/plt
[4] 追憶 Dennis M. Ritchie 的文章:
http://www.ituring.com.cn/article/14315
[5] 由於 AT&T 和 University of California, Berkeley (UCB) 曠日費時的官司,
今天我們說的 "UNIX" 或 UNIX-clone (如 Linux, FreeBSD, macOS 等等) 裡頭
的原始程式碼已經和最初 AT&T UNIX 的版本相差甚遠。但 UNIX 帶來的精神和
哲學思維至今長存,在資訊科技的許多地方可及。詳情可見:
https://en.wikipedia.org/wiki/Unix_philosophy
[6] 出處: https://www.facebook.com/sunwu2011/posts/1619624211457570
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.82.61
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1522733861.A.FE0.html
→
04/03 13:38,
6年前
, 1F
04/03 13:38, 1F
→
04/03 13:38,
6年前
, 2F
04/03 13:38, 2F
推
04/03 13:38,
6年前
, 3F
04/03 13:38, 3F
推
04/03 13:38,
6年前
, 4F
04/03 13:38, 4F
推
04/03 13:39,
6年前
, 5F
04/03 13:39, 5F
推
04/03 13:39,
6年前
, 6F
04/03 13:39, 6F
噓
04/03 13:39,
6年前
, 7F
04/03 13:39, 7F
推
04/03 13:40,
6年前
, 8F
04/03 13:40, 8F
推
04/03 13:40,
6年前
, 9F
04/03 13:40, 9F
推
04/03 13:40,
6年前
, 10F
04/03 13:40, 10F
→
04/03 13:41,
6年前
, 11F
04/03 13:41, 11F
推
04/03 13:42,
6年前
, 12F
04/03 13:42, 12F
推
04/03 13:42,
6年前
, 13F
04/03 13:42, 13F
推
04/03 13:42,
6年前
, 14F
04/03 13:42, 14F
推
04/03 13:42,
6年前
, 15F
04/03 13:42, 15F
推
04/03 13:42,
6年前
, 16F
04/03 13:42, 16F
推
04/03 13:43,
6年前
, 17F
04/03 13:43, 17F
→
04/03 13:43,
6年前
, 18F
04/03 13:43, 18F
→
04/03 13:43,
6年前
, 19F
04/03 13:43, 19F
推
04/03 13:43,
6年前
, 20F
04/03 13:43, 20F
推
04/03 13:44,
6年前
, 21F
04/03 13:44, 21F
推
04/03 13:44,
6年前
, 22F
04/03 13:44, 22F
推
04/03 13:44,
6年前
, 23F
04/03 13:44, 23F
→
04/03 13:44,
6年前
, 24F
04/03 13:44, 24F
推
04/03 13:45,
6年前
, 25F
04/03 13:45, 25F
推
04/03 13:45,
6年前
, 26F
04/03 13:45, 26F
推
04/03 13:45,
6年前
, 27F
04/03 13:45, 27F
推
04/03 13:45,
6年前
, 28F
04/03 13:45, 28F
→
04/03 13:46,
6年前
, 29F
04/03 13:46, 29F
推
04/03 13:46,
6年前
, 30F
04/03 13:46, 30F
推
04/03 13:47,
6年前
, 31F
04/03 13:47, 31F
推
04/03 13:47,
6年前
, 32F
04/03 13:47, 32F
推
04/03 13:47,
6年前
, 33F
04/03 13:47, 33F
推
04/03 13:48,
6年前
, 34F
04/03 13:48, 34F
推
04/03 13:48,
6年前
, 35F
04/03 13:48, 35F
推
04/03 13:48,
6年前
, 36F
04/03 13:48, 36F
推
04/03 13:49,
6年前
, 37F
04/03 13:49, 37F
推
04/03 13:49,
6年前
, 38F
04/03 13:49, 38F
推
04/03 13:50,
6年前
, 39F
04/03 13:50, 39F
還有 208 則推文
推
04/03 19:26,
6年前
, 248F
04/03 19:26, 248F
推
04/03 19:38,
6年前
, 249F
04/03 19:38, 249F
推
04/03 19:46,
6年前
, 250F
04/03 19:46, 250F
推
04/03 20:06,
6年前
, 251F
04/03 20:06, 251F
推
04/03 20:10,
6年前
, 252F
04/03 20:10, 252F
推
04/03 20:11,
6年前
, 253F
04/03 20:11, 253F
推
04/03 20:14,
6年前
, 254F
04/03 20:14, 254F
推
04/03 20:24,
6年前
, 255F
04/03 20:24, 255F
推
04/03 20:44,
6年前
, 256F
04/03 20:44, 256F
→
04/03 20:50,
6年前
, 257F
04/03 20:50, 257F
→
04/03 20:54,
6年前
, 258F
04/03 20:54, 258F
推
04/03 21:07,
6年前
, 259F
04/03 21:07, 259F
推
04/03 21:28,
6年前
, 260F
04/03 21:28, 260F
推
04/03 21:36,
6年前
, 261F
04/03 21:36, 261F
推
04/03 22:05,
6年前
, 262F
04/03 22:05, 262F
推
04/03 22:17,
6年前
, 263F
04/03 22:17, 263F
推
04/03 22:43,
6年前
, 264F
04/03 22:43, 264F
推
04/03 22:53,
6年前
, 265F
04/03 22:53, 265F
推
04/03 22:56,
6年前
, 266F
04/03 22:56, 266F
推
04/03 23:30,
6年前
, 267F
04/03 23:30, 267F
推
04/03 23:42,
6年前
, 268F
04/03 23:42, 268F
推
04/03 23:43,
6年前
, 269F
04/03 23:43, 269F
推
04/03 23:48,
6年前
, 270F
04/03 23:48, 270F
推
04/03 23:59,
6年前
, 271F
04/03 23:59, 271F
推
04/04 00:00,
6年前
, 272F
04/04 00:00, 272F
推
04/04 00:25,
6年前
, 273F
04/04 00:25, 273F
推
04/04 00:38,
6年前
, 274F
04/04 00:38, 274F
推
04/04 01:21,
6年前
, 275F
04/04 01:21, 275F
推
04/04 02:31,
6年前
, 276F
04/04 02:31, 276F
推
04/04 03:01,
6年前
, 277F
04/04 03:01, 277F
推
04/04 05:37,
6年前
, 278F
04/04 05:37, 278F
推
04/04 07:56,
6年前
, 279F
04/04 07:56, 279F
推
04/04 08:35,
6年前
, 280F
04/04 08:35, 280F
推
04/04 14:23,
6年前
, 281F
04/04 14:23, 281F
推
04/04 15:01,
6年前
, 282F
04/04 15:01, 282F
推
04/04 16:13,
6年前
, 283F
04/04 16:13, 283F
推
04/04 16:19,
6年前
, 284F
04/04 16:19, 284F
推
04/04 23:01,
6年前
, 285F
04/04 23:01, 285F
推
04/04 23:03,
6年前
, 286F
04/04 23:03, 286F
推
04/09 09:56,
6年前
, 287F
04/09 09:56, 287F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):