HIT CS科班對電腦專業素養的理解

來源:互聯網
上載者:User

本來這篇內容已經回複到W大召集討論CS學習問題的文章(http://www.1point3acres.com/bbs/ ... to=findpost&pid=393867&ptid=24531)了,但本人心存8g思想,而積分不夠沒發閱讀《關於抄襲的故事》(http://www.1point3acres.com/bbs/thread-12034-1-1.html),只好重發以攢積分。

內容:
. From 1point 3acres bbs
作為6年電腦科班、系統結構方向,我說說我對電腦專業素養的理解吧,希望對大家有所協助。

知之者不如好之者,好之者不如樂之者,電腦專業也不例外。本科我是被選到電腦專業,大一因為C語言老師的激勵而喜歡這個專業,並決定做系統結構研究的。興趣入門,比如《電腦文化》(第10版?)、《編碼的奧秘》(我覺得舊版比新版小開本更好)。傳記類的《ACM圖靈獎演講集:前20年 (1966-1985)》《ACM圖靈獎 (1966-2006):電腦發展史的縮影》《IEEE電腦先驅獎:1980-2006》。更專業一些,推薦《深入理解電腦系統》(CSAPP),CMU流傳著這個段子:15-213,給CMU門牌的課程。這裡的15-213,即以csapp為課本的Introduction
to Computer System,也是匹村的郵編。Believe it or not,我就是因為這本書,立志研究系統結構的,另一個原因是利用VHDL編寫了自訂指令集的cpu和串口,並在帶有FPGA的實驗台上使兩者通訊成功!

1)Programming Language
入門當然是C,否則都不好意思說自己是學cs。我當年用的是C Prime Plus,很基礎。我就不明白有人居然推薦C之父寫的C bible——The C Programming Language,我做編譯器從前端做到後端,到現在還不敢說能理解C,居然某人認為這是最快的入門方法?C bible絕對是好書,但是肯定是進階和reference必備。C進階還有各種C專家編程,C與指標,C陷阱了,可以提高。之後是C++,java,C#就看科研/項目需要了。我認識的很多msra實習生都從C++轉到C#,說什麼編碼效率高云云。反正我因為做llvm,就是C++一條道到黑。還有個大牛跟我說,按照某語言排名榜的說法
c++快掛了;anyway,大牛沒給出出處,在TAMU的C++之父還在弄STAPL,並行版的STL,我覺得C++肯定還不是五丈原的諸葛半仙。C++入門,我用的是C++ Prime,注意,不是C++ Prime Plus。C++之父寫的C++程式設計語言,其實比較難懂,入門之後可以翻一翻。C++的進階書更多,各種Efficient C++,侯捷老師的STL源碼剖析啊。(不好意思,我也只是知道,沒看。)而Java是不適合作為第一門語言的,幾年前已經有美國名校教授寫文章批過了。

指令碼語言,顧名思義,就是執行冗餘繁瑣的事情。這些事情交給電腦,定時跑就行,什麼python, shell, perl, awk,sed, ruby, ror等等。選一個順手即可。記得豆瓣還是哪裡的程式員自述,電腦科班教育不會開指令碼語言課,但誰真正掌握了一門指令碼語言,說明他是愛電腦的,所以我們會招聘他。書籍都不一一舉例了,似乎是個指令碼語言,O'Reilly都有入門到精通的書。That's it. 最後,要精通Regex哦。

函數式語言,比如lisp,coq,ML等等,是另一種思維方式。有一個笑話,前蘇聯克克勃苦心偷到了美國NASA的核心代碼,交給上峰後被訓了一頓;他很莫名其妙,瞅了一眼代碼,全是()的組合,當場瘋掉。後面介紹Compiler時也會涉及。事實上,我覺得,這才是電腦學生應該掌握的語言,MIT大二就開了scheme的課。法國“中科院”INRIA設計了Coq,被用於各種形式化證明。首屆國家科學進步獎的兩位獲得者有吳文俊,貢獻就是機器證明,另一位是袁隆平,解決咱們的口糧。可見吳有多麼重要!

最後,我就很納悶,有人居然推薦web作為語言的入門?親,這說的是電腦科學學生的第一門專業課。我討論的是電腦科學,是科學,不是工程;是本科,不是大專技校。學C,是為了後面的OS——linux。學web,你跟得上市場潮流嗎?HTML/CSS/JS,你咋不是HTML5呢。不好意思,我很保守,不懂web編程,但請各位想做web的看看HTML5的發布會視頻,演講者一上來給出各種設計哲學,甚至包括了喬治奧威爾的1984,最後給出了HTML5的。這才是精髓,或是說web設計的精髓。看到自己做的webpage很有成就感,修改linux核心代碼的成就感怎樣?先抑後揚的感覺不是更爽!本科學習的原則,在我看來,是不要被外界所打動,夯實基礎,做自己有興趣的事情,舉個俗透了的例子,如喬布斯學書法,去印度禮佛!

4)Data Structure & Algorithm
很多人推薦《演算法導論》,我也不能免俗,但畢竟不是入門層級的。其實,學DS掌握基本概念就行,推薦清華大學嚴蔚敏老師的《資料結構》,網上也有視頻。之後也正如大家所言,ACM吧,不是為了final,只是為了不懼怕編程,體驗成就感(再回到PL,web語言可以acm?)一定題量後,需要加強演算法,推薦Robert Sedgewick的書和《演算法學:設計精髓》。最後,拜一下高德納的TAOCP,所謂家居編碼旅行吹牛必備利器。

2)Operating Systems.
與DS一樣,作業系統也是門實踐的學科。記得老師在課上說,當年他讀書時,覺得銀行家演算法是這麼優雅,為什麼沒有任何OS使用?原因就在於時間複雜度是O(n^3)。話不多說,直接讀開源OS——linux的代碼,比如0.11,一萬行左右,市面上有0.11代碼剖析。我的建議是,先自己理解,再對比學習,這樣才能真正懂得。有了0.11的基礎,恐怕將來對任何OS部分都不會感到陌生,此時讀者可就不只是牛人了,而是大牛了(參考程式員的十層樓)。果然還是有推薦APUE,Unix編程藝術和UNP的。

當然,也可以拿即時作業系統練練手,比如uC/OS,代碼短小精悍,和linux一樣,pure C。

國內還有本“自己動手寫作業系統”?

win方面,好像有window internals?

至此,還是要鄙視一下win——沒有好用的終端,以圖形介面贏得普通市場,取得商業成功而已,當然win的核心技術事實上是比linux強大。君不見,哪個知名IT公司沒有自己的叢集?叢集需要圖形介面嗎?在我看來,不用終端,似乎lose my power of control;不爽,電腦是服務於人的,是被CSer控制的。順便8g一下,蓋茨對“計算”的理解,是初中生水平;Google的Page,是本科生。現在,我還不確定Facebook的Zack是什麼水平,但至少和Page是平手。再拜一下Amazon,這是因為她的雲平台,才有Dropbox等一路風生水起,可歎中國,國家壟斷。

3)Database
不好意思,我db沒學好。但db其實是很有意思的,可惜mysql已死。入門我就不推薦了,直接進階吧——《資料庫系統實現》

4)Software Engineering
這簡直是個人文學科,集電腦科學、管理學、心理學、社交工程學於一身。在此我不展開,經典書籍也有很多分類,比如編碼類別(Write solid code, refactor, 各類design pattern,代碼大全第二版,程式員修鍊之道,編程卓越之道,O‘Reilly“xx之美”系列,編程珠璣,各種“UML,XP編程、敏捷、需求,測試”書籍),故事類(dreaming code),管理類(各種Joel on software,“美國”創新工場YC創始人Graham的駭客與畫家,peopleware,37single出的都是好書,甚至時間管理GTD的書籍)。其實,我覺得《編程卓越之道》是山寨csapp的;說YC是美國的創新工場,簡直跟說巴黎是西方哈爾濱一樣猥瑣。同時敬禮圖靈獎獲得者、北卡教堂山的《人月神話》作者Brooks,但我推薦的是他另一本書《設計原本》。

搭車說一下,我不是鄙視web,如果想學web,應該學apache,linux sever管理之類的,再不濟也得j2ee。如果真要學web,推薦http://www.pureweber.com/。

5) Compiler及PL設計哲學
出來混,早晚都要還的。我本科學的最差的就是compiler,一個字,混。結果研究生做的都是compiler,即llvm,那些用iDevice的同學為什麼覺得系統很流暢,閉源版本的llvm功不可沒,當然還有iOS,基於freebsd——另一種linux發行版(b是伯克利的哦,他們有做工具、開源的傳統)。有位北京intel研究院的實習師兄跟我說,intel之所以牛,是在於其編譯器最佳化。所以說,學好OS和compiler,走遍天下都不怕。

可惜學到這門課,大家應該大三了。很多人如夢方醒,要面對出國保研考研工作公務員等等了,無心戀戰。但從這門課起(包括以前的彙編),才能真正體現CSer與其它非電腦的區別。
.本文原創自1point3acres論壇
《程式設計方法》《電腦程式的構造和解釋》《程式設計語言概念》《程式設計語言原理》、甚至《自動機理論、語言和計算導論》《計算理論導引》才應是電腦專業學生應具有的素養。

當然,不能少了龍書虎書和鯨書(http://cse.seu.edu.cn/people/yan ... ID=8&TopicID=26)。很好笑吧,我也是幾天前才知道鯨書,而虎書我本科時寫編譯器前端時參考過,只是不知道她的外號。編譯是實踐的一門學科,llvm從UIUC發芽,經過10多年的發展,成為apple主力支援的商業編譯器,用於iOS,不可謂不是個奇蹟。

6) Computer Architecture
海納百川,系統結構就是這樣一門學科,把之前低層的彙編、中間的OS、高層的PL熔於一爐。君不見,因為銀河機,國防科大永遠是中國電腦系的翹楚,雖然現在也開始浮躁了,清華華科上交(以及南大某並行實驗室)還是難以望其項背。

系統結構可大可小。小的指指令集,大的可以包括電腦群組成原理、編譯(每個指令集都需要自己的編譯器)。所以,我把帕特森和軒尼詩的兩本扛鼎之作和盤托出——《電腦群組成和設計:軟硬體介面》和《電腦系統結構:量化的研究方法》。讀不懂沒關係,書讀百遍,其意自現。

但還是那句話,電腦專業是很practical的,Dr. Brooks是因為領導IBM 360而成就的圖靈獎,CA是很活躍的——GPGPU,多核眾核,可重構計算等等。哈哈,說了這麼多,之前所有其實都是為了CA鋪路的——希望有志於出國讀博的CSer做CA的研究。

Beyond curriculum
在即將飛躍之際,回首這六年,很高興學電腦,不僅是因為與人相比,電腦其實很“簡單”,照著程式執行,出現了意外也是可評估可能恢複並規避的——每個程式員都是折翼的天使,在電腦世界裡構建屬於自己的烏托邦,沒有爾虞我詐,更是因為通過電腦專業的學習,更懂得如何獲得更多的資訊,以更開放的心態接受新鮮事物,而不是成為完全執著保守的左派。事實上,很多學電腦的人喜歡科幻,喜歡哲學,什麼馮大師的《電腦和人腦》、《萬裡任禪遊》,喜歡討論技術背後體現的價值觀,《我們的防火牆:網路時代的表達與監管》。

電腦的博士學習,需要紮實的數學基礎。而博士,更需要人文素養。在介紹SE時,其實更多的書目是偏人文方向的。是的,我認為中國缺少安貧樂道、少欲知足的精神,這與缺乏真正Ph.D.教育——五年時間在一個方向鑽研——有關。以電腦專業而言,本科學位是B.E.,工科學士;研究生或是M.S.,科學大拿;博士是Ph.D.,哲學博士。博士畢業後,追求的不應該是過分的物質生活,反而應是研究領域精神上的快樂!

這也與人文素養的缺失有關,包括我在內,沒幾人讀過千字文、三字經、弟子規、四書五經、春秋左傳。另外,學電腦技術也是要讀曆史的,什麼《數學之美和浪潮之巔》《激蕩三十年》《沸騰十五年》《IT史記》《IT通史》《IT大敗局》了,看看什麼技術方興未艾,什麼如日中天,什麼日薄西山。(同時推薦這個ted視頻,http://www.ted.com/talks/simon_s
... inspire_action.html)我最近在讀桑德爾的《公正》,討論的是很貼近生活的道德標準評判。子曰從心所欲而不逾矩,莊子說逍遙遊,佛家的觀自在(即觀音菩薩的別稱),讓我嚮往,讓我思考,讓我自由。

跑遠了,期待一下量子電腦吧。那時的電腦基礎課,可能完全不是上面這一套了。1)應該是量子力學了吧?

In sum,祝福所有CSer,這是門最好的學科。祝福所有飛友,心安處,即是家。南無阿彌陀佛!
. visit 1point3acres.com for more.
不好意思,知者不言,言者不知。噴了一地口水,與我頭像不符,常慚愧。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.