看板 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
[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
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
推 buke: 是大神!3F 04/03 13:38
→ asked …
推 asked: 感覺很厲害 可是我end了4F 04/03 13:38
推 SupCat: 可以發論文了8F 04/03 13:40
→ mazii: 老師好11F 04/03 13:41
→ jserv: @userpeter, 噓文也用 variadic function 嗎?18F 04/03 13:43
推 scarfman: 看到ID先拜 m(_ _)m20F 04/03 13:43
推 eipduolc: 我媽問我為什麼跪著推 騙你的23F 04/03 13:44
推 vup4jp6: 語言就是語言 真的就只是語言25F 04/03 13:45
推 Ten9: 有神快拜!46F 04/03 13:53
推 KNVSEOC: 是摸自己的c罩杯嗎48F 04/03 13:54
推 imasa: 能釣出大神 值得了50F 04/03 13:54
推 schopan: 原來是太極拳劍 我還以為是C語言51F 04/03 13:54
推 scarface: 我大學沒摸過C罩杯~看來我這輩子永遠到不了這種境界了54F 04/03 13:56
推 jww: 神諭!57F 04/03 13:58
推 lpoijk: 老師 你有必要這麼認真嗎XDDDD58F 04/03 14:00
推 Huffman: 成大摸過C罩杯的資工人59F 04/03 14:00
推 corel: 有神!62F 04/03 14:03
推 sunyapess: 奇怪 怎麼感覺這篇讀起來像是在讀英文65F 04/03 14:04
推 RLH: 有神快拜67F 04/03 14:06
推 hizuki: 我只會躲在embedded寫點小C程式71F 04/03 14:10
推 brad001: 在學校看到你 在這也看得到你XDD
跪下了 老師75F 04/03 14:18
→ Wand …
推 Wand: 先推78F 04/03 14:19
推 jbv4228: 推吳昇老師 非常有教學熱忱的一位老師80F 04/03 14:20
推 HYDE1986: 看完才發現是jserv 跪推惹81F 04/03 14:21
推 Fari: 已跪83F 04/03 14:23
→ litwild: 這已經到了 見C不是C的地步惹 QQ 摸過C 大勝!!88F 04/03 14:34
推 tkc7: 可以帶領學生一起摸C罩杯嗎90F 04/03 14:36
推 rintoo: 四十歲開始學來的及嗎92F 04/03 14:37
→ everdef: 可惡居然摸過C罩杯95F 04/03 14:46
推 mynewid: 為什麼你可以摸過C罩杯 QQ100F 04/03 14:51
推 clang: 推103F 04/03 14:54
推 Lomax: 說自己是初學者也太自謙了 自謙到令人有點反感的程度XD104F 04/03 14:54
推 AInnor: ...教育界少數值得尊敬的老師 推109F 04/03 14:59
推 rupcj8: 推宅色夫114F 04/03 15:03
推 StevenAn: 有神快拜,這已經不僅文組不懂了,理工也不懂吧,哈哈哈115F 04/03 15:04
推 kanoki: 寫論文逆116F 04/03 15:06
推 iGao: 有神快拜119F 04/03 15:08
推 attis: 神120F 04/03 15:11
推 cool9203: 看來我這3年學的c/c++都是假的QQ122F 04/03 15:17
推 Kenqr: 推124F 04/03 15:21
推 Likkuo: 沒關係反正我還是看不懂QQ126F 04/03 15:24
推 gugugaga: 大學摸過C罩杯的大叔嗚嗚 羨慕想噓127F 04/03 15:25
推 lane9449: 我沒摸過C罩杯怎麼辦QQ128F 04/03 15:26
推 changyuheng: 借大神內文問一下,
Go 的效能很好、runtime 超越 Java ,syntax 也簡潔,
容易寫出 CPU 利用度高的程式。
但是它沒有
exception handling syntax、
null-safty、
function/operator overloading、129F 04/03 15:28
推 raagi: 看到老師就是要推137F 04/03 15:29
→ changyuheng: inheritance、
standard library 涵蓋範圍不夠廣、
套件管理很遜、
也就算了,138F 04/03 15:29
推 ug945: 推146F 04/03 15:33
推 froce: 整篇亮點是大神摸過C罩杯!148F 04/03 15:34
推 harrybbs: 哇喔! 超強
摸C罩杯屌打8萬鄉民152F 04/03 15:35
→ froce: 不對,其實我是來抱怨大神的線上教材寫得沒PTT文好懂。155F 04/03 15:36
→ froce: 有沒有什麼非資工系也能看的線上教材啊啊157F 04/03 15:37
推 qscez: 推
推161F 04/03 15:42
推 ff789b: C還能再撐幾年167F 04/03 15:47
推 bluefire: 跟我想的差不多 有神就推168F 04/03 15:52
→ cainu: 老師好172F 04/03 16:00
推 gametv: 有神快拜,嫦娥真是中國人的表率174F 04/03 16:01
→ jserv: @bob79620, 這篇是「C 語言的八卦」,應該沒離題175F 04/03 16:02
推 Debian: 我老闆問我為什麼跪著看螢幕,我都不知道要如何解釋。178F 04/03 16:04
C 語言入門 - YouTube
【課程大綱】 這是基於我在台灣大學資訊系統訓練班【C/C++基礎程式設計】的上課內容中去除掉 C++ 部分所重新彙編而成。線上課程與實體課程在進度控制以及內容設計上有許多不同而需要調整的地方,也算是一個初... ...
推 hey98044: 老師好 有朝一日能和你一樣強183F 04/03 16:11
→ jserv: @hizuki, embedded也有大規模的程式,比方說波音787的
軟體程式碼規模為 650 萬行
不過萬丈高樓平地起,程式能解決工程難題、為人謀福祉就好185F 04/03 16:14
→ jserv: @killerchi, 罩杯是一時的,但C是一輩子的 #老婆懷孕就變大190F 04/03 16:18
推 bala73: 有神先推193F 04/03 16:19
推 lukechin: 老師最近整理歷史脈絡感覺很有心得XD194F 04/03 16:23
→ jserv: @killerchi, 可惜以前沒有區塊鏈,不然就可鑑定我的淑女鏈@SupCat, 可以發論文,就能晉級為「文組」嗎?195F 04/03 16:24
推 Dante6: 有神出沒198F 04/03 16:33
推 laiDark: 吳昇!曾經教過我的老師!!只能朝聖推了!!!199F 04/03 16:33
推 froce: 謝謝大神提點。201F 04/03 16:35
推 Sirctal: 讀 iota sdk的code中209F 04/03 16:52
推 XavierLu: 因為Go還年輕啊 C的一些功能也不是一開始就有220F 04/03 17:47
推 osk2: 可以帶初學者一起摸C罩杯嗎223F 04/03 18:04
推 tygh: 推認真文224F 04/03 18:06
推 tsming: 大學可以摸C罩杯根本欠噓XDDD227F 04/03 18:15
推 hooll111: 雖然太長不夠精闢 但給推232F 04/03 18:46
→ jserv: @osk2, 請左轉出去找西斯板,感謝配合
@GodlikePeter, 對神一樣的你來說,作業應該很簡單吧?
@hooll111, 感謝支持,歡迎另闢主題,我們再來討論236F 04/03 19:14
→ jserv: @tsming, 花開堪折直須折,莫待無花空折枝 #C
@Sirctal, 接下來是「有沒有 IOTA 的八卦」嗎?240F 04/03 19:17
推 carwho: 文組先推242F 04/03 19:19
推 e65947: 看不懂 還是推一下@@243F 04/03 19:19
→ zzzz8931: 講到太空任務突然想到某次因為浮點數精確度問題爆炸244F 04/03 19:19
推 zzzz8931: 裡面有 Ariane 5 了,酷喔,連這個都有246F 04/03 19:22
→ jserv: @e65947, 方便告知哪一段沒寫清楚嗎?247F 04/03 19:23
推 heaviest: 有請老師再來一篇摸c罩杯的教學249F 04/03 19:38
推 ku399999: 釣到神了,可惜我已經轉去寫我的興趣網頁了252F 04/03 20:10
推 nt46: 推256F 04/03 20:44
Jim Huang
@jserv
我接觸過 C 語言、C 罩杯、C-class (賓士),此生無憾了
推 vvind: 推259F 04/03 21:07
推 lai526: 有神快推~ 學長好!262F 04/03 22:05
推 s9994540: 我文組完全看不懂直接End263F 04/03 22:17
推 nazo: Hello world!270F 04/03 23:48
推 kia280: 推 然後借機推個吳昇285F 04/04 23:01
--