當前位置: 華文問答 > 數位

【電腦網路】這門課為何如此之難?

2013-12-22數位

瘦腰啼。

作業系統和電腦網路的共同點,在於它們都是相當復雜的體系結構,如果覺得難,也許是因為自己沒能產生足夠的求知欲。你也說了,「無聊,晦澀」——而無聊感其實是沒治的。對課程的熱情和對女生的愛慕感其實差不多,不能一見鐘情的,可以試著培養,培養之後還是覺得無聊的,那就不是真情了。

以下討論如何培養自己對電腦網路的真情。

首先,電腦網路這門課,我不知道你們用哪本教材,不過任何足夠好的教材,都要教給你各種五花八門協定的來龍去脈,也就是歷史。學歷史,要有——借用一個文科生的 buzzword——「大歷史觀」。自一九六九年 ARPANET 以降,電腦網路是個頗有些年頭的玩意。那些協定啦縮寫啦什麽的,大都在你出生之前就存在了。去翻翻舊的 RFC,英文的寫作風格都不太一樣——那時候的 nerd 們,西裝革履,坐在窄小的單色 CRT 顯視器前面,敲下一個個字元——許多人如今都已經作古,但他們苦心客製下來的各種規約(Protocol),讓你今天能在知乎上面問我這個問題。這難道不是很神奇的事情嗎?所以你要有感恩的心。有了感恩的心,妖就不再……呃,我的意思是,研究歷史就會有朝聖感。

而電腦網路的一切技術細節,也就是那些枯燥的部份,都是歷史遺留問題。可以說,如果將現有一切推倒重來,重新考慮「多台電腦之間如何互相通訊」這個電腦網路所解決的根本問題,再發明出來的互聯網將會是完全另一番樣子,而且肯定會簡單很多——一個原因是技術進步了,另一個原因是人們從歷史中吸取了教訓 [1]。所以,當你面對枯燥的技術細節的時候,可以試著考慮這樣一個問題:如此設計的理性因素何在?它有什麽改進的余地?比如,TCP 建立會話為什麽要三次握手?為什麽 OSI 要有七層?進而思考一下,這樣的設計合理嗎?不合理的設計會被取代嗎?比如,OSI 為什麽沒能成功?以及,為什麽人們會擁抱 REST,嫌鄙 SOAP?

再就是,電腦網路這門課,與現實世界結合得相當緊密。編譯原理本質上是語言學和數理邏輯學,一切都發生在完美世界裏,語法樹想多長就多長,不用考慮澆水施肥的問題。但是電腦網路不一樣,實體層就是赤裸裸的銅線光纖紅外線,要考慮到現實世界可能發生的各種問題,要有容錯能力。這些其實都是工科的東西,更接近機電,而非數學。所以你要培養自己對現實世界的熱愛,接受現實世界的不完美,不能癡迷於符號邏輯和二次元軟妹子裏。

總結來說,電腦網路教授的是知識,也是經驗和文化,不能為了學而學它…… 就像不能僅僅為了繁衍後代而把妹子。

[1] http://www. faqs.org/rfcs/rfc1606.h tml ,見 Conclusions 一節。