看板 Gossiping
作者 jserv (松鼠)
標題 Re: [問卦] C語言學到什麼程度才可以說自己會寫C
時間 Tue Apr  3 13:37:33 2018


※ 引述《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
從 Revolution OS 看作業系統生態變化 - HackMD
[圖]
# 從 _Revolution OS_ 看作業系統生態變化 ## 說明 * 2001 年,[J. T. S. Moore]( ...

 

[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
GitHub - steshaw/plt: Programming Language Theory
[圖]
GitHub is where people build software. More than 27 million people use GitHub to discover, fork, and contribute to over 80 million projects. ...

 
[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
Unix philosophy - Wikipedia
[圖]
[圖]
[圖]
The Unix philosophy, originated by Ken Thompson, is a set of cultural norms and philosophical approaches to minimalist, modular software development. It is based on the experience of leading developers of the Unix operating system. Early Unix developers were important in bringing the concepts of mod ...
 
[6] 出處: https://www.facebook.com/sunwu2011/posts/1619624211457570
 

--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.82.61
※ 文章代碼(AID): #1QmnCb_W (Gossiping)
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1522733861.A.FE0.html
mikemagic88: 1
爽 第一1F 04/03 13:38
buke: 是大神!3F 04/03 13:38
asked: 感覺很厲害 可是我end了4F 04/03 13:38
cecol: 55F 04/03 13:39
CowBaoGan: 有神快拜6F 04/03 13:39
userpeter: ...7F 04/03 13:39
SupCat: 可以發論文了8F 04/03 13:40
thuko8652: 你是初學者 那我們不就垃圾都不如9F 04/03 13:40
berice152233: 好,跟我想得一樣10F 04/03 13:40
mazii: 老師好11F 04/03 13:41
sammoon: 推12F 04/03 13:42
rsps970310: 推13F 04/03 13:42
hank2579: 老師好 先推再看14F 04/03 13:42
omegajoker: 推15F 04/03 13:42
Firstshadow: (づ′・ω・)づ ..這位是誰 怎那摸多推16F 04/03 13:42
legendmtg: <(_ _)>17F 04/03 13:43
jserv: @userpeter, 噓文也用 variadic function 嗎?18F 04/03 13:43
m490521: 先跪下再說19F 04/03 13:43
scarfman: 看到ID先拜 m(_ _)m20F 04/03 13:43
vn509942: 大神!!21F 04/03 13:44
ahahahahah: 老師好22F 04/03 13:44
eipduolc: 我媽問我為什麼跪著推                          騙你的23F 04/03 13:44
rossikao: 這報告是出自哪???24F 04/03 13:44
vup4jp6: 語言就是語言 真的就只是語言25F 04/03 13:45
seal0112: 推26F 04/03 13:45
jamesho8743: 講三小 廢話一堆27F 04/03 13:45
jybest: Hen棒28F 04/03 13:45
salesperson: J大推推29F 04/03 13:46
tjhuang: 成大慣C哥30F 04/03 13:46
guest00021: 推31F 04/03 13:47
p2p8ppp: 老師好32F 04/03 13:47
rongyaya: 大神!33F 04/03 13:47
Futoushi: 推!34F 04/03 13:48
kira925: 有神快拜35F 04/03 13:48
gs8613789: 跪36F 04/03 13:48
Huffman: 推37F 04/03 13:49
today0520: 是jserv!38F 04/03 13:49
drunk0102: 看到第三句就不想看了= =39F 04/03 13:50
killerchi: 這誰 摸過C罩杯?在騙啊40F 04/03 13:50
kipi91718: 推!41F 04/03 13:51
Laotoe: 有神快拜42F 04/03 13:51
Birthday5566: 看不懂喇43F 04/03 13:52
tweence:44F 04/03 13:52
flysonics: 雙膝一軟又要來惹45F 04/03 13:52
Ten9: 有神快拜!46F 04/03 13:53
fishlinghu: 神人出沒47F 04/03 13:53
KNVSEOC: 是摸自己的c罩杯嗎48F 04/03 13:54
yuu101: 跪49F 04/03 13:54
imasa: 能釣出大神  值得了50F 04/03 13:54
schopan: 原來是太極拳劍  我還以為是C語言51F 04/03 13:54
RonChen: 有神快跪~~~52F 04/03 13:55
hsu0612: 淚推53F 04/03 13:55
scarface: 我大學沒摸過C罩杯~看來我這輩子永遠到不了這種境界了54F 04/03 13:56
Malpais: 神出現啦55F 04/03 13:57
g5637128: 推56F 04/03 13:58
jww: 神諭!57F 04/03 13:58
lpoijk: 老師 你有必要這麼認真嗎XDDDD58F 04/03 14:00
Huffman: 成大摸過C罩杯的資工人59F 04/03 14:00
Cyuhsuan: 推60F 04/03 14:01
nfsong: 有神快敗61F 04/03 14:02
corel: 有神!62F 04/03 14:03
saint01: 好63F 04/03 14:03
ernova831: 推推64F 04/03 14:04
sunyapess: 奇怪 怎麼感覺這篇讀起來像是在讀英文65F 04/03 14:04
liugs963: 身為垃圾已下跪66F 04/03 14:05
RLH: 有神快拜67F 04/03 14:06
ddtsatan: 讚68F 04/03 14:07
james80351: 推69F 04/03 14:08
justastupid: 跟我想的一樣70F 04/03 14:08
hizuki: 我只會躲在embedded寫點小C程式71F 04/03 14:10
eterbless: 馬尾C罩杯?72F 04/03 14:15
maxwellbkwt: 推73F 04/03 14:17
yjyj8000: 推74F 04/03 14:17
brad001: 在學校看到你 在這也看得到你XDD
跪下了 老師75F 04/03 14:18
Grothendieck: wow77F 04/03 14:19
Wand: 先推78F 04/03 14:19
math79: 推79F 04/03 14:20
jbv4228: 推吳昇老師 非常有教學熱忱的一位老師80F 04/03 14:20
HYDE1986: 看完才發現是jserv 跪推惹81F 04/03 14:21
dreamstyler: 大神就要推82F 04/03 14:23
Fari: 已跪83F 04/03 14:23
peter0603: 神!84F 04/03 14:23
accompanyptt: 摸過C罩杯 真的讚!85F 04/03 14:23
jerrysuper: 116水準 不意外86F 04/03 14:26
pitbull0123: 趕快推 不然別人會以為我是文組87F 04/03 14:29
litwild: 這已經到了 見C不是C的地步惹  QQ     摸過C 大勝!!88F 04/03 14:34
aneshsiao: 我看完了,雖然我不是資訊人89F 04/03 14:35
tkc7: 可以帶領學生一起摸C罩杯嗎90F 04/03 14:36
phubber: 推91F 04/03 14:36
rintoo: 四十歲開始學來的及嗎92F 04/03 14:37
legendd: 老師好93F 04/03 14:42
curlhair10: 推94F 04/03 14:45
everdef: 可惡居然摸過C罩杯95F 04/03 14:46
neiolin: 哈 J大耶…96F 04/03 14:46
wei115: 老師好97F 04/03 14:49
asd2260123: 老師好98F 04/03 14:50
victoryzy: 老師好(跪99F 04/03 14:50
easybaby: 推283F 04/04 16:13
lina7inverse: 我第一個語言是 C 推 284F 04/04 16:19
kia280: 推 然後借機推個吳昇285F 04/04 23:01
coolisme12: 唷唷大神!!!286F 04/04 23:03
bruceXD: 原來是本人287F 04/09 09:56

--
--
作者 jserv 的最新發文:
  • +38 Re: [問卦] 有GNU/Linux那有BSD/Linux嗎? - Gossiping 板
    作者: 140.116.246.163 (台灣) 2022-06-12 12:30:49
    回答這問題之前,我們應該先思考「什麼是 BSD?」 依據 FreeBSD 網站 的描述,FreeBSD 衍生自 BSD,後者則是 "the version of UNIX developed …
    49F 38推
  • +404 Re: [問卦] 要怎麼用針在光碟上戳出一個作業系統 - Gossiping 板
    作者: 140.116.246.163 (台灣) 2021-09-04 04:54:37
    「既然你誠心誠意地發問了,我們就大發慈悲地告訴你」(語出「火箭隊」) 這則笑話在 2010 年就出現巴哈姆特電玩資訊站 ,內容改寫自中國網友的創作, 已有十餘年,不過該笑話的弊端在於「針」。DVD 燒 …
    499F 407推 3噓
  • +83 Re: [問卦] 如何在Linux底下自幹win3.1系統? - Gossiping 板
    作者: 140.116.246.163 (台灣) 2021-09-03 12:41:58
    我是跟鄉民進來看熱鬧的,我跳進來了,我又跳出去了,打我啊笨蛋! (取自方唐鏡 名言) 學校老師應該忙著開學事宜,我幫他們回覆你的提問。 原題「在 Linux 系統底下要怎麼自己搞 win3.1 呢?」 …
    101F 83推
  • +230 Re: [問卦] 在卡上打洞寫程式是什麼感覺 - Gossiping 板
    作者: 140.116.246.163 (台灣) 2021-04-23 06:37:27
    剛好我需要跟學生解釋為何 Linux 核心原始程式碼的風格規範 中,限制一行至多 80 個字元,其典故跟「打孔卡」(punched card) 有關。 1890 年代,美國人口普查就使用新發明的穿孔卡 …
    247F 230推
  • +439 Re: [問卦] 原來上 ptt 可以學 linux 操作.. - Gossiping 板
    作者: 140.116.246.163 (台灣) 2021-04-23 00:01:26
    這恰好連結台灣特有的 BBS (電子布告欄) 文化及早期 Linux (和 BSD) 文字編輯器的 關聯。也讓我想起一年前過世的陳昇瑋博士,他的舊名是陳寬達,並以 Xshadow 的名號 馳名於早期的 …
    512F 444推 5噓
點此顯示更多發文記錄
(jserv.): Re: [問卦] C語言學到什麼程度才可以說自己會寫C - whatla板