在大學四年是否適合讀大磚頭的技術書?
大學更應該是個找興趣的過程,20多歲的年輕人,應該接觸各種東西,這是我的理解,每個人的理解和做法不同。有些人想往一個方向上深鑽,有些人想涉及各個領域,有些人只想交朋友,有些人只想打DOTA。時間花在看了技術書上,可能導致其它方面時間的缺失,但有些事也只是大學能做。想聽聽大家對此的看法而已。
讀大磚頭的技術書,比如《演算法導論》、《深入理解計算機系統》、《TAOCP》等書,如果真的要細讀,將花費大量大量的時間,時間成本太大。
我覺得本科其實就是掃盲的過程,一個領域不深入,一個系統不去真正實現,你很有可能就沒有掌握,如果你早就確定一個熱愛的小領域,當然也很好。計算機科學分理論計算機科學和應用計算機科學,其下又有很多很多的分支,資訊理論,演算法,程序設計語言,AI,體系結構,隱私,網路,編譯等等等等。這些領域都是很有意思的。我的觀點是大學裡應該花大力氣在了解這些領域在幹什麼,研究點在什麼地方,困難在哪裡,未來有什麼發展空間。
時間都是有限的,如果花了大時間在磚頭書或者說工具書上(比如認真理解算導+做習題,竊以為沒有幾個月是很困難的,甚至可以花了1~2年的時間),那麼你對其它領域,方向的理解可能就少了。
當然這是個見仁見智的問題,沒有哪種做法是好的,只有合不合適罷了。
請各位知友把重點放在這個問題的本身,很多知友的回答實在太贊了,學到了很多新思想和新觀點,謝謝。
拿我做個幡然醒悟的反面例子吧。
高中參加信息學競賽,想盡辦法郵購或複印了幾本書,啃了劉汝佳的《信息學與演算法藝術》,啃了《現代計算機常用數據結構和演算法》(這應該是演算法導論沒有被正式引進之前國內「抄」的一本書)。
大學期間也如同lz一樣,對這些經典書籍並不了解也不怎麼關注。
另外一個重要方面是,接觸新的東西太多了,覺得那些才能自我體現,才高大上,覺得啃那麼古老的大厚本還沒啥地方用到,真是沒意思。
但感謝學院的課程設置,到了大三,幾乎所有專業課一起壓了上來,大三一年中,大概學了這些課:
彙編用的教材是Assembly Language for Intel-Based Computers
編譯原理用的教材是龍書
演算法課用的教材是演算法導論
操作系統用的教材是Modern Operating Systems,大作業基於《Orange"S:一個操作系統的實現》
計算機網路用的教材是Andrew S. Tanenbaum的《計算機網路》
計算機組成原理用的教材是Computer Organization and Design: The Hardware/Software Interface
人工智慧導論用的教材是Artificial Intelligence: A Modern Approach
資料庫原理用的教材是Database System Concepts
形式語言與自動機用的教材是Introduction to Automata Theory, Languages, and Computation
分散式資料庫用的教材是Principles of Distributed Database Systems
剛剛工作,有幸碰上了一個很有學習氣氛的小組,在大牛面前抬不起頭來啊!
於是趁著年輕,趁著一人吃飽全家不餓,仗著領導關懷、任務不重,補了一批書,特別是C++的(大學期間基本都是java),大概有:
《C++ Primer》《The C++ Programming Language》《Effective C++》《More Effective C++》《The Design and Evolution of C++》
UNIX/LINUX的 《APUE》《ULK》《LKD》
《Python源碼剖析》
《程序員的自我修養》(名字蠻虎)《Linkers Loaders》
《Programming Collective Intelligence》
《具體數學》
不久之後就有些撐不住了,工作壓力越來越大,社會生活也越來越多,興趣點也越來越多。
工作上越來越深入的技術演算法需要看paper、搞實驗、做對比。
要辦理各種社會手續,開展社會活動,要關切親戚朋友同學家人。
作為一個愛折騰東西的人,生活穩定後會越來越愛折騰東西,一堆想乾的事兒擺在計劃里。
現在才覺得,基本知識一共就那麼多,早搞定早受益。然後,伴隨著工作往專的方向前進。
而生活瑣事、興趣愛好,才是無窮無盡的。
這個問題我在不同的階段認識是不一樣的,現在我來談一談我當下的看法。
我的基本觀點是,計算機本科教育的主要任務是「掃盲」。這個掃盲指的是,讓學生知道這個領域有什麼分支,各個分支都在幹什麼,它們的區別和聯繫,簡而言之,就是在腦中畫出一張「知識圖譜」,然後,最重要的是,讓學生明白,「我的位置在哪裡」。或者,我希望我的位置在哪裡。
我在大學期間也有和題主一樣的困惑,許許多多的人告訴了我許許多多「專業必讀書」,這邊廂師兄告訴你「每個程序員都應該熟讀演算法導論」,轉過頭那位大牛又告訴你「沒看過sicp簡直就沒學過編程」,然後老師又語重心長地教導你「數學基礎一定要牢靠呀,我這裡有一坨離散數學及其應用,拿回去嘗嘗吧」...這個列表越來越長:csapp, 具體數學,設計模式,恐龍書,編譯原理龍書虎書,opengl紅寶書,TCP/IP詳解三大磚,APUE...我是個實在人,我真的去一本一本的啃,首先我負責任地說很有幫助獲益匪淺,但是,我真的是越來越「困惑」,我讀了這麼多「必讀書」,理應越讀越明白腳下的路越清晰才是,但是實際上我是越來越找不著北了。我不知道我在哪裡,我能幹什麼,以及別人在哪裡,他們正在或者打算幹什麼。
為了解答我的困惑,我從學校到公司幾年間頻繁在各個小領域中切換,我做過設備驅動,虛擬化,做過客戶端軟體,做過瀏覽器外殼,做過web前後端,現在在做數據挖掘。這個過程看上去很過癮,實際上心裡很煎熬。我在為自己大學教育中的「盲點」埋單。
所以,如果你問我大學中是否適合去啃這些大部頭,以我現在的認識,我想說的是,這不「關鍵」。我的建議是,以「掃盲」為主線計劃學習,理順各個門派的脈絡,多讀survey,多接觸不同領域的老師和學長看他們在做什麼,要做好它需要什麼準備,未來可能有那些挑戰等等。有一天你會發現那些「必讀」的大部頭們,在地圖上有各自的位置。找准自己的位置和方向,自然而然地,你會找到和他們相遇的地方。他們中有的你壓根避不開,而有些,只是支線劇情里的寶藏。那時,我相信你一定會平和而自信地去迎接他們了。你知道玩遊戲時地圖全開是什麼感覺么?就是這個感覺。
祝學習愉快。如果真的要細讀,將花費大量大量的時間,時間成本太大。
這叫懶
但這些書完全可以在工作以後慢慢地讀,
這叫做夢
我覺得大學裡更應該讀一些更具啟發意義的,或者說短時間能看到效果的書。
這叫浮躁
沒有什麼效果能夠不費力氣得到,沒有什麼一勞永逸的方法。大學之後,你再不會有讀這些書的時間與精力。
此時不讀,這輩子就這樣了。
大學四年這種磚頭我想像大概讀了差不多一米那麼厚
一千頁大概有三厘米,每天都不斷地看書,一天只要看25頁就夠了,就是拉一泡屎的時間
我來挺一下題主。
題主其實反應了一個比較現實的問題,就是即使是很多看似學風良好的學校,實際上花在正兒八經上看書的時間反而不多。現在的大學生可以支配的時間遠遠不如80年代的大學生,遠遠不如人想像的時間多。你跟老一代人說,讀大學沒時間讀書,會被當做無稽之談,但這還真有可能是那麼回事。
我這裡,把為了考試而讀教材和認真閱讀某一方面專著區別處理。國內採用的教材……說實話和經典名著的距離不是一點半點。
比方說,你某一學期學的是C語言,恰好學校用的教材是譚浩強的。你雖然知道要學好C語言最好是去啃KR,可是學校考試就是用譚浩強做標準的。你跟著進度走就能在譚浩強C語言課程取得不錯的成績,你花一學期時間研究KR反而未必能在這門課程取得高分。雖說分數是浮雲,但是分數不行推研怎麼辦,出國留學怎麼辦。你這學期又不是只有C語言一門課程,還有高數線代思修馬哲。KR的書太難別的科目沒時間學怎麼辦。
當你好不容易把課內的課程學的差不多了,有了一些業餘時間該怎麼辦?
成績比較優秀的就開始準備出國留學,抱歉,GT這兩門考試就足以耗掉絕大部分大學生的課餘時間。
對出國留學信心不大的同學又得準備推研甚至考研。推研得至少提前大半年找好導師納投名狀。納了投名狀那麼恭喜你成為導師的一枚廉價勞動力了,你剩下的時間被進一步榨取了。考研的話不用多說,你的時間將會浪費在那些沒有多少知識含量的教育部指定考研指導書上了。當然你要說能精通演算法導論考研自然不在話下,但是你要讀通演算法導論花的時間可是你要精讀考研指定教材的N倍都不止。
以上還只算是學習以內的東西。還有社會活動等等,人在大學混,總不能與世隔絕。好不容易一周抽出來半天時間,得,社團一個簡訊,時間又沒了。
所以大學生沒時間讀書,看似扯淡還真是有它的無奈。現代的大學生和80-90年代的大學生大不一樣了。現在的大學生太廉價了,學校里就不得不應對層層考核標準,把更多的心思用在應對考核標準而不是真正的學習上。不像十幾年前的大學生,進了大學就是天之驕子,時間充裕就業無憂,順便還能指點江山激揚文字。所以現在的大學生,讀了大學四年,哪怕是那些學的比較好的學生,學物理的沒摸過費曼狄拉克,學計算機的沒摸過演算法導論那真的是非常有可能的。我畢業於一所國內名氣比較大的大學,以上算是我的個人體會。
話說了這麼多,算是安慰你一下。但是要想學好,大部頭該看還是得看。
我反而是覺得工作後輕鬆了不少,找了一份不加班正常雙休的工作。工作這兩年時間裡,啃了好幾部大部頭。
樓主的質疑很合理。
大多數時候我們學習的目的就是為了解決問題,而在學校里,最大的問題是考試,解決問題的最好參考書是教材,因為試題基本上都是從教材上下來的。所以在學校里看某一方面走的過深的技術書,確實有點讀不進去。
沒有實際需求的時候,往往缺乏學習的動力。我是醫學生,在學校里應付考試基本把教材翻爛了,但考完又基本都忘了。
醫院裡年輕大夫往往處於這種狀態:他們只有在第一次獨立處理問題後才能真的理解某個病。比如要獨自做個從沒做過的小手術,儘管考試考過很多次了,但真到用的那一瞬間,新大夫往往會支開病人再翻一遍書,在1分鐘內找到相關章節並迅速記住要點,然後戰戰兢兢的上台操作。這麼一折騰才算真正理解了手術步驟和注意事項,做完手術回頭再看一遍書,之前幾年學的相關知識才算真的落到實處。
技術書沒什麼趣味性,都是數值和圖表,而且很厚,怎麼可能有閱讀的慾望?!即便這書名頭大的嚇人,也都是催眠讀物。只有真正遇到問題並解決問題的時候才會對技術書產生強烈的閱讀欲。
還是以醫學為例,我畢業後在醫院裡遇到了不少頸肩腰腿痛病人,開了段時間芬必得後覺得太糊弄病人,就拿著本《四肢疼痛治療技術》嘗試理療。這書里有說的不明白的地方,我就回頭去看《康復學》,看《功能性神經外科、疼痛與小兒神經外科》,為了比較幾種非甾體抗炎葯和局麻藥的作用差異,又從藥房借了本《藥理分析研究》。同時自然少不了關節松解術和骨科的各種書籍輔助。
這些書閱讀模式都一樣,一開始按目錄翻到自己要的部分看,看完了再看前後相關部分。最後整本書看了一半了,索性通讀一遍。
我覺得樓主應該去找能讓你不由自主讀下去的大部頭,而非所有別人推薦的書。
其實看書也是需要緣分的,有些書一開始讀下去就會越讀越覺得過癮,到後來不小心就讀完了。比如我看《GEB》《CSAPP》《SICP》就有這種體驗,閑著的時候也會想把書翻出來繼續看。作者的語言和表達風格讓我很容易讀懂,讀著讀著也會發現理解了之前一直疑惑的東西,這樣一來看書既輕鬆有趣,又能學到東西,真是不能更賺。
而對於有些很有名的書可能受限制於國內作者翻譯,或者你本身的知識儲備達不到能看下去的水平,這樣的書可以先放一放。待以後時不時拿出來翻幾頁,說不定你就突然能看下去了呢。。之前大二讀《APUE》的時候覺得完全看不懂,看一頁能看半個小時。等到上完操作系統課,並熟悉了一點Linux之後發現能看下去了。還沒寫編譯大作業的時候龍書看得雲里霧裡的,等到做完編譯大作業的時候發現龍書講得也挺好的。
所以看書是一件特別講緣分的事,如何在正確的時間讀到正確的書是一件很值得探討和摸索的事,如果我沒有看過《哥德爾的證明》我估計也是看不懂《GEB》,我沒有學過C語言我也沒法看《CSAPP》。
那麼究竟如何以正確的拓撲序去看書呢?我的建議是廣泛嘗試閱讀你感興趣的書,發現知識儲備差別太多就果斷先放一邊,找更有趣的書看,畢竟CS領域好書太多了,總有適合你思維模式的書
我剛剛工作滿兩年,相比之下,我在大學的時候根本不知道有像CSAPP 和Programming Perals這種級別的好書,我只是看了很多國外比較有名的教科書和偏語言的偏實踐的書 像代碼大全 死磕java windows編程 C++標準類庫 等等 也做了很多練習,時間基本上也花的差不多了,現在看來即使知道有這些神級書也沒時間去看。工作了以後,我想告訴你的是,更沒時間了,只有晚上有時間,程序員這個工種不加班的很少,工作時間處於飽和狀態,我讀書的時間基本在晚8點到10點之間就倆小時,周末不想看技術書,因為我怕得抑鬱症。而大學的時候,我經常逃課去圖書館看書,一邊看一邊做筆記,晚上回去把書上的代碼一個一個碼到電腦上,編譯運行,其實這樣我已經覺得受益匪淺了,我發現自己的動手實踐能力和解決問題的能力非常強,演算法能力固然比不了ACM出身的同學,但日常的問題解決已經足夠了。
其次,你可不可以先買本CSAPP看看? 你究竟能領會多少作者的思想。這些書不是說你看了以後立馬就懂了,立馬成為大師,永遠不會。相反,CSAPP講的東西非常底層,如果你是用像Java python這樣的語言編程,根本用不上裡面的知識,你不需要知道浮點數是怎麼實現的,也不需要知道X86處理器的內部結構,工作中真正用到的是SSH、Memcached、Webservice之類,在使用者看來沒啥技術含量的東西,除非你做底層開發或遊戲開發,還有可能用上,否則只有在面試的時候才用得上。
在我看來看這些書只是鞏固了基礎知識,鍛煉了腦力,讓我學習新技術時能很快了解到更深層次的原理,從而快速掌握,另一方面作為一個有信仰的程序員,看高手寫的書本身就是件很有意思的事,我不會把看書當成一種在某一時間內必須完成的任務。我也有過看書看到凌晨34點的經歷,因為那本書解釋了我長久以來的疑惑,有醍醐灌頂的趕腳。哈哈,看得出你有懶這個優點,但你要學會挑時間懶,而且不要給自己找借口。
雖然你師兄我本人很菜,但感覺當年迷惘和你相似。我是大三才開始看書。因為不學無術找不到工作各種面試被鄙視,臨急考研,期間算是比較實在地複習了以前沒學好的數學和計算機網路。然後國內讀研三年直到現在工作一年,期間有兩段我認為很對自己幫助很大(在找工作上)的經歷,供你參考。
第一段經歷是考後填鴨式速成學演算法,大四寒假整個2月份無聊花了一個月細讀了演算法導論,發現原來自己嘛都不會,難怪之前面試時被問到考官都忍不住偷笑。接下來兩個月oj上面做了兩三百題,每天睡幾個鐘頭就不好說了。做的都是可以套模板的水題或模擬。趕在四月份參加了唯一一次廣東的cpc競賽,拿了個可以勉強寫上簡歷的小獎。繼續做題看書到6月參加校隊選拔被刷下,結束短暫的沒打過地區賽沒有隊友的acmcpc歷程,到那時演算法導論已經被我翻爛了。不過個人而言,本科三年代碼不過千行,那幾個月卻算是有萬把行積累(雖然一點工程價值都沒有,但練的一點手感和信心,不然面試讓手寫基本必掛)。還看了半本具體數學,運籌學,其他演算法競賽書的一點點……水人不敢和去美國google之類的acm大神比……
第二段經歷是研二找暑期實習前的2到4月份,買了各種大部頭,白天實驗室幹活,晚上回家每晚看書到凌晨兩三點。第一本深度探索c加加對象模型,第二本深入理解計算機系統,第三本鏈接器與載入器(之前記錯……),第四本window programming via cc++,第五本深入理解windows操作系統。第一第三本幫我應對了絕大部分編程語言相關的面試題,第二四五本讓我明白操作系統(無論哪種,即使手機,亦莫如是)里外大概是什麼回事。實習只投了兩個,都拿到了。不值得稱道但也沒什麼好隱瞞的……一個微軟一個騰訊。個人原因選了深圳就沒嘗試找任何工作了(傻啊,一定要給自己多點選擇)。其中和一位高工電面足足一百分鐘的技術面里,基本所有技術基礎知識的面試題解答都來自這些書。雖然我面的崗位和windows無關。
至於我讀研期間,做實驗室的水項目寫爛演算法論文什麼的……主要是玩樂多……不值一提……我只是想說明就只有這兩段對我找工作有幫助的經歷,因此,回到題目上,要不要看這些書就在於你的規划了。這些書不包讓你牛逼,但能幫你入行。
taocp目前買都不打算買,另外你說的那一本小冊子crack得了 interview的話,就別自欺欺人了…真是那樣,要麼未來同事水平有限,要麼對你做技術沒什麼好處,混個底層可替換員工崗位不如及早轉行。
至於花了那麼多時間看了書,在真正技術工作上有沒幫助?有。會讓你在工作上手,分析解決問題上感覺比別人輕鬆。或者換個說法,讓你覺得自己比那些比你還懶的人牛逼一點……
更新一下,畢業到今天為止兩年,去年初加入朋友的創業團隊做手游,產品千萬流水加加。今年已獲得投資單飛另外組了二十多人的團隊再出發,目前研發進度良好三個多月。走太快要摔,焦慮重重。這不就是大家所說的浮躁么。
答主也很浮躁,經常到圖書館裡閑逛,每當看到一本原版的經典名著都會感到莫名的興奮,然後借回去看一段時間。幾天之後在圖書館又看到另一本名著,便把上次借的書還回去,換成這一本。總之自己總想多學點東西,又不肯多花時間,最後只能是看看皮毛長得什麼樣子。
這個小學期答主選了一門課,用的教材就是CSAPP,英文原版一千多頁,書包里只能被兩本這樣的書。答主CSAPP目前還沒看完,但是遠沒有想像中的困難,一周下來也看了四章左右的樣子,收穫良多,也有點後悔沒好好聽老師講課(老師講課內容與CSAPP只是部分重疊)。對於技術性不是特彆強的大磚頭,我想看起來是不會佔用太多時間,即便是花點時間也是值得的。
最後我覺得題主應該感到自己很幸運,知道有很多CS經典名著,我想很多人是不知道這些書的名字的,也就更不用提看這些大部頭。既然已經有幸知道了這些書的名字,為什麼不花點時間感受一下其經典之處?
時間是擠出來的,不是算出來的。拿出三天三夜把鬼吹燈看完的精神就行了。。。
望天,我也希望能舉出一個逼格高的例子。。。可惜就這麼廢寢忘食看過一本書。要領會精神!"本人大三,現暑假,由於時間有限......"
請問你現在每天都在做什麼?就說說今天好了...
我今天早上8點鐘在家跟同事開了個電話會議,開到十點多,然後開始幹活。
家裡空調壞了,約了12點鐘上門維修,修到一點。期間抽空吃了個午飯。
一點去醫院拿LP的化驗報告。三點鐘到幼兒園接小朋友放學,然後帶著小朋友到公司里去轉了一圈。吃完晚飯回來,給小朋友洗澡,講故事,哄睡覺,全套服務好10點鐘開始幹活,現在大概一點半,手上的活要幹完不知道幾點了。
所幸讀書的時候沒有你這樣的疑惑,該看的都看了。
工作以後,特別是結婚生娃之後就沒有整段的時間看大部頭了,偶爾要看也只能在地鐵上抱個ipad讀一下。
別浪費時間看什麼code interview了,你不適合做技術。
也別騙自己什麼"工作以後會慢慢讀", 你-不-會。
大學時候不讀書,你覺得你以後還會讀嗎?
當你己經確定了自己未來的發展方向和感興趣的具體子領域,那麼你完全應該啃你所選擇方向的大部頭,等你工作之後,成家之後,那時想專下心來再啃這些大部頭,恐怕會「樹欲靜而風不止」。不過據我的觀察,本科生階段能明確自己發展方向的似乎不到10%,因此,我建議這個階段書要看得多,看得雜,不建議花大量時間啃某一領域內的大部頭。
csapp這種幾百頁的書,在所有計算機圖書里來說,也就是平均水平的厚度而已。如果你覺得這都是大部頭,也就不用繼續學了。
再說你完全可以邊學組成原理邊看這本書,都是一樣的東西,你不看,只是不想自己給自己加油充電,懶罷了。
技術書不要貪多。在有限的時間內,講同一個東西的書只看一本就好,比如《csapp》的前半部分和《硬體軟體介面》,不過你看完一本再看別的會發現快很多。
反正我覺得相關領域就那麼多,早弄懂一個算一個。現在不看還要等到工作時候碰到天花板再看么。如果你現在想打打dota,玩玩社交,搞搞社團,以後你就別在技術這條路上混了。只推薦一本
《代碼大全》
如果你真要幹這一行,習慣真的非常非常重要,代碼大全這本書恰恰是告訴你對於一個技術人員來說一些必須要有的習慣,比如:
變數命名;
程序設計;
程序解耦;
單元測試。。。。
相信我,你可以不是天賦異稟,也可以不是夙興夜寐,但你必須要養成好的習慣。
三年老碼農的經驗之談。有人供你花錢,不用考慮房子,沒有上司同事的排擠,免費的圖書館……這樣你都覺得上學的時候沒時間,我還能指望你能從工作中擠時間?
題主提到應該關注於廣度而不是深度。我想說如果你打算碩士,博士,博士後讀下去,你這樣做可以。但是大多數人是要出門找工作的,沒點深度是不行的。
七八百頁的書,一天十頁,也就是三個月。沒時間?我不信。上面有幾個回答蠻不厚道的, 我也是剛剛畢業, 挺能理解你的想法的, 不希望浪費精力和時間, 也不希望把攤子鋪得太大, 希望能把好鋼用在刀刃上。
但這樣是不好的, 為什麼不好建議你去看一下《把時間當朋友》, 磨刀不誤砍柴工, 一次性解決類似的選擇困難症。
單純討論應該讀, 或者沒必要讀消除不了你的疑惑大學時間多,大學不啃磚頭以後就更沒時間啃了。而且那時候壓力小,可以慢慢糾結各種細節問題而不用擔心進度。
如果你很牛,可以做到多線程並進,自然可以;可惜一般來說,大學的課業壓力還是挺重的,作業、考試、實驗、課設、實習,樣樣不少,一般人來說要hold住學業(GPA啦)還是要付出極大努力以及相當的時間和精力的。
如果你讀的技術書和你所學的專業可以緊密的相關或結合,那倒還好;如果是"跨專業"的技術書,你自己學的專業恰又是技術類專業,那。。。除非你轉行或確實搞成交叉技術,要看那麼多實用、多領域的技術書幹嘛。。
推薦閱讀:
※機器學習領域是否已經達到飽和?
※俄羅斯人編程為什麼那麼厲害?
※計算機專業大一大二該怎樣提升自己的專業技能?
※有哪些實例可證「世界是虛擬的」?
※十行以內,你寫過哪些比較酷的 Matlab 代碼?