作為一名計算機系的學生,如何真正進入計算機的專業世界?

以前玩計算機不叫玩計算機,就是玩電腦,用別人做出來的東西。現在自己要學計算機了,開始看關於計算機的專業東西,只覺得一大堆專業名詞撲面而來,計算機有許許多多的方面,這讓我很迷茫,怎麼樣進入一個以前不知道的世界。下學期要學C語言,可是直接學習我並不喜歡,也許該看一些計算機發展史?類似《浪潮之巔》?嗯…想全面了解這個龐大的計算機體系吧。又或許是想成為專業人員該怎麼做?我想抓住一種感覺。

我的問題的確模糊了些,大家隨意發表意見吧,集思廣益,頭腦風暴……


我也是計算機專業到學生,雖然我也許還沒有進入這個專業世界,但是我想分享一下我是如何喜歡上這個專業的。

我是從高中開始接觸計算機(當然不是開始用計算機,而是指計算機專業的東西),那時候參加信息學競賽,編程用的是Pascal, 寫的都是演算法題,於是在進入大學之前,我對計算機專業到認識就是演算法,編程,雖說挺有興趣,但遠遠沒有現在這麼濃。

真正喜歡上這門學科是在大一上,我們專業有一門課是 計算機系統概論 ,介紹計算機的方方面面(操作系統,網路,計算機組成,演算法,動態網站設計... ...當然只是有些介紹而已,覆蓋的知識點比較廣)。這門課讓我了解到原來除了編程還有好多好多有趣到東西可以學。上完這門課,我就覺得自己逐漸知道自己在學的是什麼東西,起碼不會迷茫。(後來學的一些專業課,比如計算機組成原理,數據結構等等,都是在這門課的基礎上針對某一塊加深罷了。)看到這裡,我想建議你首先找一本《計算機系統概論》這類到書看看,先對這個專業有個大概的了解,也許也能找到自己感興趣到方面。我覺得一開始就去看離散數學什麼到不現實,因為個人感覺這門課相對比較難也比較枯燥一點。(我覺得我接觸計算機若是從離散數學開始,說不定我現在已經轉去學汽車工程了)

有了興趣以後,一切就都好說了。除了平時上課學C++以及一些基礎課專業課以外,我也開始去接觸一些有意思的東西。在大一上快結束的時候我接觸到了Linux,開始是看鳥哥寫的《鳥哥的Linux私房菜》,個人覺得這本書非常適合作為Linux的敲門磚。可以說,Linux讓我體會到了計算機的魅力,也接觸到了開源這樣另外一個世界,興趣++。大一下的時候跑去租了個VPS(虛擬伺服器),折騰伺服器,掛網站VPN什麼的。學Linux,不僅僅會讓你學會如何使用它,在你折騰來折騰去看似什麼都沒弄出來到時候,其實你已經學到了許多知識。

有了興趣之後,你往哪個方面發展真的就要看自己了。有些人喜歡做遊戲開發,就去學習這方面到知識;有些人喜歡網路;有些人喜歡操作系統;有些人喜歡演算法。

我再舉我自己大一的一些栗子吧。

因為受到《如何成為一名黑客 Eric Raymond》(http://blog.csdn.net/mydo/article/details/7099405)到影響,我去學習了Python,又因為Python,接觸到了做網站的Dajngo,要做網站又不得不學HTML+CSS+Javascript等等。所以,因為Python,學到了這麼多的東西。Eric也說,要養成寫字到習慣,於是寫了個博客網站,平時寫寫日誌什麼的,雖然寫的東西都比較低級看的人也不多,但是對總結知識很有幫助。所以建議你,大一有時間不要浪費,學學做網站等比較基礎的東西,也算是個不錯到實踐機會。大家都說實踐很重要,確實是,有機會到話以後多和你的老師們多交流交流,有些比較好的教授會給你點播甚至把你加到他的項目組裡面給你鍛煉的機會。我在大一下的時候開始跟著系裡到老闆做項目,學到了很多雲計算,網路和操作系統的知識,對我影響很大。

對了,你說你想看培養興趣的書。我很喜歡書《黑客與畫家》和電影《社交網路》。算是我的推薦吧。

最後想說的是,雖說計算機行業跑得十分快,但是我們千萬不能心浮氣燥,學習的時候腳踏實地,別刻意追求快,所以像《10天***》,《一星期學會C++》之類的東西,還是別去信了,學習語言踏踏實實的讀一些比較經典的書籍,對 將來的幫助肯定是更長遠的。

(PS:我現在大二,所以咱們還算是離得比較近,我們都有很多路要走,互勉啦!以上是一些分享,希望可以幫到你^_^)


Update @ 2014/12/21

兩年前寫的答案,現在看來真是不堪入目,補充一下吧。

思想是:狠抓離散數學,數據結構,演算法,操作系統,計算機組織結構,計算機網路這幾門核心課程。

方法是:找國外頂尖大學用的教材自學。

推薦書目 :

先刷數學,應該很快。《離散數學及其應用》

數據結構沒什麼推薦的書,盡量別用國內的就行。

演算法看《Algorithms 4th》,順帶學一門面向對象的語言:C#,Java,C++都行。有精力再學個腳本語言,Python很好。有興趣再學個函數式的語言。把裡面演算法實現一遍。千萬別直接上《演算法導論》,那個更適合作為Reference而不是入門教科書。

計算機組織結構,看《深入理解計算機系統》,神書不解釋。據說本書的價值超過等同重量的黃金?我覺得也不算太言過其實。

操作系統 ,操作系統非常重要!推薦看《現代操作系統》,感覺比《操作系統概念》好很多。記住,操作系統一定要結合實際的操作系統來學習。看操作系統的概念,設計,更應當看操作系統的使用,實現。Linux就不多說了,基本是個操作系統教科書都是拿*nix舉的例子。Windows可以參考MSDN,微軟的MSDN簡直是一個超級寶庫,經常去挖一挖,你絕不會失望的。

計算機網路,Andrew的《計算機網路》不錯,跟現代操作系統是一個作者。《TCP/IP詳解》聽說很不錯,我還沒看。

編譯原理就龍虎鯨吧,這個我也沒看完。強烈建議學編譯原理前先看自動機,推薦《自動機理論、語言和計算導論》。編譯原理要是實在看不下去,只看前端的部分也行。很多計科學院甚至都不要求修這門課,但是編譯原理和操作系統在我個人看來是最體現計科學生真正水平的地方了。

另外,操作系統,編譯原理,編程語言之間三不管地帶: 鏈接裝載這裡,《CSAPP》雖然有講但不是很詳細。《程序員的自我修養——裝載鏈接和庫》很不錯。

搞完這些,來干《算導》吧...

上面是理論基礎。學習沒有捷徑,努力看書是王道啊。

讀完這些,恭喜你,你已經成為合格的本科計算機專業科班生了

(像樓主這種野雞211的野雞專業,一屆合格的本科生真一隻手就數出來了...)。

接下來可以玩的東西很多:搞人工智慧,搞圖形學計算機視覺,密碼學,等等等等。看看你喜歡什麼,基本上可以自由探索了。

另外,視野不要局限於教材。網路上有許多資源,一定要善用。比如知乎,簡直就是程序猿的大本營。系統性的知識只能通過看書獲得,但是認識和見識,卻是可以通過觀察大牛們的言論得到快速提高,在這一點上知乎給了我不少幫助。還有一些技術討論群,一些經典博客,都是發掘新知的好地方。

嗯,還有,也不要一頭悶進計算機科學的書中,偶爾看看別的學科也會大有裨益。不信,把認知心理學和神經網路一起學,把微觀經濟學和操作系統一起學,收穫肯定巨大。

另外補充一點,如果想成為軟體工程師而非計算機科學家的話,軟體工程是非常重要的。但是如果沒有進入過實際工作場景中,可能感受不到這一點。這個得強烈推薦鄒欣老師的《構建之法》,寫的太有趣了。 @周筠 編輯的幾本書都很經典。像《暗時間》,兩年前我看了劉末鵬的博客,真是大受啟發。《編程之美》和《數學之美》也值得一看,這些書對於增長見識很有好處。

哦,說到實踐,還是得選一種編程語言呢。

建議學一門過程式的語言(C,Matlab(=_=||混進來奇怪的東西了)),學一門靜態類型的面向對象語言{C++,Java,C#},學一門函數式語言{Lisp,Haskell},學一種腳本語言{Python,Perl,Ruby}。我都看了看,最後選了Python,C#,C++,Matlab當主手。這個各有所愛,自己慢慢挑吧,當然也不用急,個人比較推薦用C#入門。

最後提醒一點,無論怎樣,一門語言的學習,總是要有這麼幾類書做鋪墊的:

《X入門》

《X語法》

《X標準庫》

《X編程實踐規範》

《X應用案例》

《X坑大全》

《Effective X》

《深入理解X》

《X本質/對象模型》

《X沉思錄禪的藝術之美》

《X 標準》

《X 的設計和演化》

《X 歷史》

+ X 年實踐經驗

...千萬不要會了語法就說自己精通X語言了啊....

就這樣,一點經驗之談,希望可以幫到別人。


希望以下的場景能對題主有幫助。

======第一部分:畢業一年後的學生感謝老師========

@鄒欣 老師在微博上分享了一篇學生對《現代程序設計》 的反饋

全文如下:

學生對《現代程序設計》 的反饋

2014年5月18日 09:34

我上學期在北航開了 現代程序設計 這門課,教學大綱在這裡: 現代程序設計 (課程設計中, 徵求意見稿)

一開始聽課的人挺多,但是聽到我對作業的安排之後,一多半人都退課了。堅持下來的同學對這門課的反饋也有褒有貶。這倒沒啥,這是我第一次講這個內容,那就吸取教訓,繼續探索吧。 但是我相信真正花時間的同學還是能看到效果的。只不過由於時間點的不同,效果和反饋會大不一樣。 我歷來建議對老師的教學評估要加強,

1)課程結束之後

2) 畢業之前

3) 畢業五年後

前幾天收到一個同學的郵件,談了他對這門課的反饋。

-------------------------------------------------

Subject: 感謝鄒老師去年開設的現代程序設計

尊敬的鄒老師:

您好,這封信既是我對課程的體會,也想藉此表達我對您的感謝。如果今後您再次登上講台,希望您能把我的感受分享給您的學生。

我現在剛在MSRA入職intern,在申請的過程中對我幫助最大的,就是您主講的現代程序設計課程每周一個Project,我一開始很不能理解:為什麼只有2學分的選修課,要有這麼重的工作量。雖然充滿抱怨,但是我覺得既然選了,就每個都認真的完成吧。於是就出現了如下情景:每周上完課,開始抱怨作業量大,然後狂查資料、寫代碼。每周工作量在25小時左右,寫完還會再抱怨一番。最後結課,由於我每次作業都很認真,分數全班第1,不過我當時還是覺得時間花費很多。

當時的目光真的是太短淺了,學分少+作業量大=這個課不該選現在看來,現代程序設計課程上學到的東西,比我大部分必修課程學到的多的多的多。而且有用的多!我資料庫的大作業,拿JavaScript+Python寫的。這個框架是我在做現代程序設計最後一個可視化動歸學到的;我編譯大作業,使用C++11,極大地簡化了代碼量。而C++11是我在現代程序設計上接觸到的。網路實驗編程我使用C#的SuperSocket,這個是我在編寫黃金數對戰平台使用的!就連我最近準備簡歷,項目經驗一欄,有4成的項目來自於現代程序設計這一門課!

我想對其他的同學說,鄒老師的課程,可能不會涉及到很具體的知識點,但是他能開闊你的視野;可能會有很重的作業量,但這個不能用應試教育那種高負擔,高學分的錯誤思維衡量,這些工作量對個人能力的提高至關重要!

總之十分感謝鄒老師去年能在北航開設的課程。希望以後有幸還能上您的課!

祝好,

。。。

我寫這封郵件的目的就是希望老師您以後開課的時候可以分享給同學。因為上次課程很多同學第三節課覺得任務量太大就退課了,而且很多同學,包括我當時都抱怨任務重。

現在想想,感覺到任務重,要花很多時間,這證明我們真正的在學習知識更重要的是接觸到普通本科課程不涉及的前沿領域。希望我的這封郵件能幫助今後的同學,讓他們從一開始就能意識到,這門課程是真正能提升技能的課程,希望他們不會再繁重的任務面前退縮,反而能有比我更積極地心態去迎接各種挑戰!

最後祝願鄒老師工作順利~十分感謝您的課程

==========第二部分:北航2014軟體工程課程最佳團隊學期成果展示=================

好了,我們來看看北航2014軟體工程課結束時,評分最高的團隊博客,他們是怎樣總結這一學期的課程和項目得失的:http://www.cnblogs.com/sixsix/p/4222383.html

sixsix團隊「餐站」應用M2階段終審報告

一、團隊成員的簡介和個人博客地址

(從左至右依次是:彭林江、郝倩、王卓、黃敬博、張明培育、高雅智、牛強)

彭林江,以純IT菜鳥自居,實際上是個非常努力的人!工作交給他,我們放心!中堅力量!彭林江的個人博客地址:http://www.cnblogs.com/penglinjiang/

郝倩,來自120617班,我們組7個成員中唯一一個6行政班員。起先只是為了達成組隊條件,但是在兩個月的實踐中,她的熱情、能力及貢獻超出了我們的預想。非常感謝她為團隊所做的貢獻,並且希望以後有機會繼續一起工作。郝倩的個人博客地址:http://www.cnblogs.com/hochean/

王卓, 應彭林江邀請加入我們團隊,並做出了很大貢獻。比較安靜一女孩兒!學習認真,成績不錯,也是很有實力的人。王卓的個人博客地址:http://www.cnblogs.com/wangzhuo/

黃敬博,對自己工作非常負責,能夠準確準時保質保量的完成自己的工作,是我們團隊的中堅力量。黃敬博的個人博客地址:http://www.cnblogs.com/jinbo123/

張明培育,非常風趣,常常逗得人開懷大笑。真真切切的代碼帝,編寫軟體參加過馮如杯科技競賽並獲獎,假期又一直在忙博彥之星的軟體開發。C++開發經驗豐富,不在高哥之下。是我們團隊的第一大牛!在這兩個月的實踐中,一直擔當「大腿」的角色。張明培育的個人博客地址:http://www.cnblogs.com/zmpy/

高雅智,人稱高哥,為人豪爽不拘,做事又非常認真細心,對deadline超級敏感,樂於早早完成任務。能過熟練的運用C、Java,用C#進行過實際開發,有python windows phone開發經驗。是我們團隊的領軍人物。交給他的任務都能保質保量準時完成。高雅智的個人博客地址:http://www.cnblogs.com/leon-code/

牛強,為人真摯隨和,樂善好施,工作嚴謹認真。作為後起之秀,同樣表現出色。牛強的個人博客地址:http://www.cnblogs.com/ksven/

二、我們的軟體工程:

  • 團隊項目的目標,預期的典型用戶,預期的功能描述,預期的用戶數量在哪裡

我們團隊項目的目標是開發出一款具有完善功能、能夠實際應用的、綜合多外賣平台信息的手機應用app,後命名為「餐站」。項目伊始,我們設定的目標人群為經常食用外賣又希望以選定順序給以推薦的北京人群,主要是大學生和寫字樓、工作室人員。所以預期功能即時通過綜合比較多家外賣平台的餐品信息,並根據所選排序方式擇優推薦。預期達到下載量500,用戶數300左右。

  • 團隊的產品如何滿足了用戶的需求?要看到目標用戶使用產品的過程和評價 (視頻或者活人上台介紹) ?

首先我們這款app設定的目標人群是經常訂外賣的北京大學生和其他人員,預期的功能既是由用戶選擇根據價格、銷量、送餐時間,對美團外賣、百度外賣、餓了么外賣的所有餐品進行排序,推薦最適合用戶選擇的餐品。而從軟體的實際應用中,這款app並沒有實現所有的預定功能,由於美團外賣和百度外賣相關網頁的反爬機制,所以無法獲取其平台下的餐品信息。除此以外,預期的餐品排序、定位、搜索等其他所有功能全部得以實現。所以基本上滿足了用戶的需求。【展示】

  • 事先定義的軟體下載量達到了么?為什麼沒有達到?

預期下載量500,實際下載量達到了800。

  • 團隊的成員如何分工協作的?如何在兩次開發里程碑中總結經驗的?

在M1階段,我們主要按照功能分配工作。比如郝倩和彭林江負責網路爬虫部分,爬取相關外賣平台的餐品信息;王卓負責客戶端界面設計。具體請參考11.20及之前的Scrum Meeting博客。在M2階段,因為app功能相對完善,框架非常清晰,任務非常明確,所以主要根據任務分配。首先遺留問題根據工作量被分為若干部分,然後被儘可能公平的分配,最後根據M2階段貢獻分分配方案分配團隊貢獻分。具體任務分配請參考SCRUM 12.09。

在M2階段開始,我們認識到了根據功能分配任務的不足,即工作量的不平均,進而可能產生各種問題。所以在M2階段,我們改變了任務分配的方式,由三名同學進行客戶端代碼bug的維護工作,兩名同學進行爬蟲端的開發及維護工作,一名同學設計及調整開發計劃,一名同學進行博客及燃盡圖的維護工作。每周每人分配一到兩個小任務。這種按照工作量確定工作並分配這些工作的做法在M2階段起到了很好地作用。每個人都有相應的工作,並且相對獨立,這樣就自然地根據工作的完成與否及質量確定個人貢獻分,使人信服。但是完成M2階段後我們發現這樣也有一些不足,如果某個任務沒完成,那將會非常棘手。如果再交給其他人,那會相當麻煩;如果一直拖著,最終又會導致app的功能缺陷。所以有些問題我們還需要協商解決。

  • 團隊如何平衡 時間/質量/資源 爭取如期完成任務的?

我們在M1階段花了大量的時間來進行學習知識(android開發,爬蟲開發,資料庫開發),換來的是較好的代碼質量,第一版本bug的數量比較少,而且都不是非常嚴重;在M2階段,我們嚴格控制了每個人的開發時間,更多的進行人員調配,希望大家都不需要進行熬夜一般的疲勞開發,一個部件由負責的人員討論、實現,這個情況下效率高,而且M2階段代碼任務本身輕鬆,所以質量也不錯。

  • 在產品之外,團隊代碼的軟體工程質量如何?如何用數據來證明?

測試用例、代碼覆蓋率等有關測試的問題請詳見sixsix團隊「餐站」應用M2階段測試報告——爬虫部分、伺服器、客戶端

代碼規範及開發文檔請詳見sixsix團隊「餐站」項目代碼規範及開發文檔

運行測試用例得到代碼覆蓋率的【視頻錄像】,(需要現場看到。 沒有諸如 「我的電腦沒有裝測試環境」,「文件不全」等等借口)

M2階段燃盡圖如下所示

摘自SCRUM 12.03

摘自SCRUM 12.09 軟體工程第二周計劃

摘自SCRUM 12.14

摘自SCRUM 12.15

摘自SCRUM 12.16

摘自 SCRUM 12.17

摘自SCRUM 12.18

摘自SCRUM 12.19

摘自SCRUM 12.20

摘自SCRUM 12.21

摘自SCRUM 12.22

摘自SCRUM 12.23

說明在項目管理中,scrum的燃盡圖是如何真實反映項目的狀態的?

我們的燃盡圖是能真實反映項目的現實狀態的,沒有任何加工。每個人的任務是按周分配的,第一周分配任務是熟悉代碼的任務,任務布置之後,大家都沒能及時在下次布置任務之前完成此次任務,所以第二周布置任務之前,出現了一條水平線。第二周任務量積累了起來。到第三周布置任務之前,大家仍沒能完成之前的任務,導致第三周之前還是一條水平線。第三周和第四周進行了任務的重新調整以及項目重新規劃,然後出現了將近一周的持續下降,說明我們在這一周內完成了相關的任務。然後在12月17號和18號等出現了一定程度的停滯,是因為我們的編譯課程接近中期考核,大家都在忙編譯試驗,沒有進行軟工的開發。之後按時完成工作又使燃盡圖持續下降。所以整個過程是自然形成的。

發布文檔如下:

1、集成餓了么網站信息,完整流暢的訂餐功能。

2、自定義篩選,客戶根據銷量、價格、送餐時間排序菜品獲得更適合的外賣。

3、位置校準定位。

4、客戶意見反饋。

5、鏈接各大外賣網站,近期活動預覽。

6、朋友圈、微博推薦功能,給你身邊的朋友推薦這款方便的app。

7、地點搜索,查看目標地點附近最優惠的外賣。

我們的應用已經在豌豆莢、小米商店、360手機助手應用商店、91手機助手應用市場、百度手機助手等正式上架。可以通過以下方式獲取我們的應用:

豌豆莢:http://www.wandoujia.com/apps/com.app.takeout

小米商店:http://app.mi.com/detail/77944

360手機助手:http://zhushou.360.cn/detail/index/soft_id/2357454?recrefer=SE_D_%E9%A4%90%E7%AB%99

百度網盤:http://pan.baidu.com/s/1hqkpsUS

91手機助手:http://apk.91.com/Soft/Detail.aspx?Platform=Androidf_id=41238076

另外由於百度手機助手沒有網頁版,所以只能通過相應客戶端下載,具體請在百度手機助手搜索應用「餐站」。

以下是統計到的用戶反饋:

  • 團隊成員在M2 的角色和具體貢獻:

名字  角色  具體的、可衡量的、可驗證的貢獻高雅智PM寫了兩篇博客,測試客戶端功能郝倩Dev爬蟲端代碼、爬取美團網站(失敗)、爬蟲優化黃敬博Test寫了15篇博客,更新軟體包到各發布平台牛強Test測試了客戶端功能,服務端測試,寫了相應的測試報告,寫了兩篇博客彭林江Dev爬蟲端代碼、爬取美團網站(失敗)、爬蟲注釋、爬蟲文檔王卓Test網路爬蟲的相關測試張明培育Dev寫了客戶端和服務端的所有代碼、注釋和文檔

  • 餐站」應用的特色功能。活的用戶如何從你的軟體中獲益的,請現場展示

這款應用的最大特色功能即是用戶能根據銷量、價格、送餐時間排序,選擇外賣平台上所有餐品中最合適的外賣。目前餓了么、美團、百度等外賣平台均不提供這種排序功能,所以我們的應用能幫助需要做出選擇的用戶快速選定合適的外賣。【展示】

  • bug bash及用戶反饋

經過多次、深度測試,目前已知的bug有三個:

BUG1:出現在主界面的下拉刷新控制項。當下拉刷新時,會默認選定手指划過屏幕時經過的某一商品,但是並不會進入其詳細頁,即使切換篩選方式仍然會選定相應的商品欄,如下左圖所示;有時會發生刷新之後在篩選條件和商品目錄之間出現空白的意外情況,如下中圖所示;嚴重時,甚至會導致應用崩潰,不響應。

BUG2:在「更改位置」的輸入框中,如果輸入不合理,如輸入「博客」、「aaa」等,則會直接停止運行;如果輸入地址非北京地區,如「四川」、「中國」等,則只會顯示在北京地區的搜索甚至不顯示搜索結果。

這些bug都是我們在開發過程中能預見的,但是因為時間和其他課程等因素,我們沒有足夠的時間再修改這些bug,完善相應功能。

【解釋用戶反饋】

  • 團隊和M1 相比,在軟體工程方面的進步

詳情請參照sixsix團隊M2階段Postmortem

  • 總結,整個團隊在這個課程上學到了什麼,對軟體工程的教育, 對這個具體的課程有什麼批評建議?

學到了什麼:

較大的軟體工程上的整體流程和完成步驟,以及其中可能會出現的問題。

以下是我們的應用上架後在應用平台的截圖及說明:

豌豆莢不統計下載量,目前安裝數為53

小米商店不統計下載量和安裝量,所以無從統計

360手機助手應用市場統計下載量4次

91手機助手統計下載量159

百度手機助手統計下載量505,有一個「喜歡」。

=================第三部分=====================

我在有哪些可以提高程序員技術檔次的書或博客? 和如何突破環境的限制從周圍人中脫穎而出? 綜合介紹了鄒欣老師的博客、書,以及北航的同學們是如何進行專業學習的。相信有心者自會順藤摸瓜。

鄒老師的教學博客中,這一篇尤其推薦同學們看看:

現代軟體工程 習而學的軟體工程教育

從我個人的學習和教學經歷來看, 我認為給學生具體的, 能實踐的, 能馬上看到因果關係的教材和練習, 是激發學生興趣, 好奇心, 求知慾的好方法。 我就是這樣學習編程和軟體開發的 (見下面的註解 三文魚模型)。 所以我對 「習而學」的方法很有好感。軟體工程有理論的部分, 有工程的部分; 有藝術的部分, 有手藝的部分; 在同學們達到理論/藝術的階段之前, 大量的練習是必須的

大家不妨看看這個陶藝課的故事,把學生分成兩組,一組以出產的陶罐的量來評分,一組不要求數量, 純粹以質評分。一個學期後,真正好的陶藝作品反而是出現在那以量評分的組裡。各種道理值得大家思考。——鄒欣

鄒老師在這篇博客里,用一個中國211大學的軟體學院的本科教學計劃為基礎 (此大學以工科見長, 印象中此學校水平應該在中國大陸排十名左右), 做了如下修改:

  1. 把基礎實踐課放到大一, 一開始就要動手.
  2. 所有的課程的上機時間都加倍, 相應減少授課時間。老師在講台上反覆講 「數組從0開始…」,不如在電腦上試試。
  3. 把 &<計算機新技術與產業發展&> 放到大一上學期, 並用浪潮之巔 等反映行業變化, 生動活潑的著作作為教材 (原教學計劃無教材)。 希望能讓大一的同學知道 「學計算機軟體能做什麼?」 「計算機行業是怎樣一個有意思的行業」。(大三同學的閱讀體會:近幾年看的最好的一本書 )
  4. 把基本的測試技術作為 「軟體測試技術入門」, 放到大一。 其餘的部分作為 &<高級軟體測試技術
  5. 針對軟體工程的畢業生職業發展, 調整了兩門課程的 必修/選修性質。 (例如: 把 &<形式化方法&> 變為選修課, 把軟體項目管理, 人機交互技術變成必修課 )
  6. 大部分數學和物理課都推遲一到兩個學年上課, 這樣到了大三同學們可以根據實踐的體會, 更好地學習。 另外有同學在大三時決定考研, 他們正好可以好好學習高等代數, 爭取考個好分數。如果是大一就學了, 那大四都忘了, 還要從頭學一遍, 浪費時間。 離散數學對於計算機軟體專業的學習還是很有用的, 仍然保持在第一學期。
  7. 專業選修課放到大二下學期 - 大四上學期。
  8. 在軟體工程課中, 強調團隊合作 (見講義) , 在其它編程語言課程中適當引入結對編程, 代碼複審等方法。 [注4]
  9. 對學生學習編程語言有明確代碼量的要求. (每種語言 3000 行以上. 程序行數不包括空行, 注釋行, 單字元行)。
  10. 對學生要有明確的實訓/實習要求, 要到高水平的企業去, 而不是去低水平的企業混日子。 可以在短學期安排, 學生也可以自行安排。 [注3]
  11. 爭取所有學生能用主流程序設計語言 (C, C++, Java, C#, 網頁前端語言 JS, php, 基本資料庫, 基本文件系統) 寫實用的軟體。
  12. 要求所有學生在入學時就建立一個自己的專業博客, 記載自己的作業, 專業上的成長與體會, 畢業找工作時展現這個博客即可。
  13. 教學資源的建設, 老師和學生一起, 持續地把關於這門課的課件/資料/問答 都彙集起來形成結構化的wiki.

鄒老師在博客中給出了幾個表:表一是所有專業必修課的安排;表二是專業選修課的安排 (課程是學校提供的);表三是數學物理課程的安排

========================================

光是看到了這些信息,多半還不夠。如果老師不給力,同學不給力,這個時候該怎麼辦呢——

推薦大家看看劉未鵬寫的怎樣花兩年時間去面試一個人

大家也可以了解這樣的網路公開課:計算機專業課程匯總(網易雲課堂)

希望這裡的故事也能不斷給你打氣,讓你在困境中能夠堅持,相信自助者天助

來吧,IT小小鳥(持續不定期更新)


身為計算機科學與技術專業的我,當初也深深的被這個問題困擾。

大一一直奔走於所謂的「學生活動」,幫老師和部長們辦事,等到大一下學期期末考試的時候,驚覺自己連題都看不懂(C語言、離散等),覺得是時候努力了(是不是太遲-_-)。於是在暑假裡用谷歌搜索「C語言」,搜到的前幾頁,全點開認真的看了一遍,有的是介紹C語言,有的是講解如何學習C語言,有的是C語言教程,還有一些所謂門戶和貼吧論壇等。雖然完全看不懂,但是對一個個不明覺厲的名詞有了個大概的印象。然後有兩個頻教程吸引了我,一個是郝斌C語言教程(180個視頻全),一個是魚C工作室-免費編程視頻教學。前者是以知識點為單位分割視頻的,後者是以課時,但是兩者有一個共同點,就是演示整個敲代碼的過程。這個過程很重要,它給我一種帶入感,讓我感受到了代碼從無到有一步一步敲出來的過程。然後跟著視頻一起敲,不管聽沒聽懂,先敲起來再說,當看到和視頻里彈出一樣的黑框白字時,非常有成就感。

看完整個視頻基本上敲些簡單的代碼不是問題了。緊接著就是一門神課了——數據結構。還是看郝斌老師的視頻,但總是雲里霧裡,不知所云。然後跟著視頻進度敲代碼。這時候對CSDN.NET比較熟悉了,開始看一些牛人的博客。發現他們講的比教材里更通俗易懂,而且貌似理解也比書上深刻。於是又開始了「掃博客運動」。漸漸的,接觸酷殼、博客 - 伯樂在線等,裡面有大量的如何學習計算機知識的方法論。有一個博客一定要推薦迂者-賀利堅的專欄,這個博客對於我們這種還沒走進計算機世界的大學生還是相當有幫助的。對了,還有這篇文章程序員技術練級攻略也一定要看。大牛們的文章,不要以為看不懂就不看了,即使你看了5遍還看不懂,不要緊,繼續看。看不懂那是因為看的不夠。看不懂哪個地方,就google,看多了總會有收穫。

後來學C++、Java的時候,覺得猛然開竅了。語言都差不多,掌握它們的不同之處就能立馬上手一個語言。之所以猛然開竅,是因為量變達到質變,這不是一朝一夕的,是經過大量的積累才會出現的癥狀。我高中和初中都有類似經歷,之前怎麼學也學不會,然後使勁看這門課,忽然有一天覺得試卷上的題怎麼這麼簡單……

直到大二結束,似乎還都只是停留在語言層面。到了大三,學了 操作系統、組成原理、計算機網路 這三門課。尤其是操作系統,讓我對計算機的理解更上一層,期間再結合劉未鵬 | Mind Hacks博客里的全部文章,感覺對整個人的思維方式都有了巨大轉變

說了這麼多,我覺得我也只是對計算機入門了而已。先不要看《浪潮之巔》,去看《我是一隻IT小小鳥》、《黑客與畫家》吧!先入門,接下來才是沉澱。望共同進步( ̄︶ ̄)。


嘗試運用所學技術來解決實際的問題,就算問題是你臆想出來的也行。

只有親自動手做過,你才會有真正了解。


本科和研究生專業都是計算機的,IT行業工作近兩年。只能稍微談一下個人的體會,因為我也不知道是不是屬於真正進入計算機的世界。。。

(1)對科技和技術保持濃厚的興趣,也包括計算機技術。沒事看看cnbeta, 癮科技,csdn,上面有各種前沿的技術。瀏覽之餘,有是會突然發現一些自己感興趣的東西,然後就可以花時間去探究。

(2)動手實踐。計算機作為工科學科,註定是要動手的。光看書,或者文章(除非是從事計算機理論研究)總在內心裡感到是虛的。只有真正著手去做了,才能理解別人在講什麼。並且大部分的時候,一旦你自己去做了,就會發現網上廣為轉載的文章都很弱。。。

(3)以年為單位持續地學習。這也是我走過的彎路。有時候對某個技術有興趣,之前都是淺嘗輒止,但是時間長了,就會發現這麼做對自己沒什麼積累,說抽象一點,沒辦法理解設計開發該技術的人的精髓。所以,必須以年或者半年為單位對自己感興趣地東西深入學習。評判標準,我自己來說,就是能否參與郵件組的討論。

(4)對於初學者來說,廣泛地探索自己的興趣最重要。不要管背後是如何實現的,一樣新事物的出現,你的第一反應是是否喜歡,覺得它什麼地方有意思,比同類的東西牛逼在什麼地方。而了解新事物的地方就可以從那些科技網站出發。(雖然水文很多。。。)


計算機組成-結構化方法。。你就看這本書。。絕對不會錯,看了你就是專業人士了。。玩計算機和計算機專業是兩回事


我之所以回答,是因為我要說的話與在我之前回答的三個人的角度不一或看法不一。看提問者的描述,像是大一學生,我這個回復可能把問題想得長遠宏大了一些,但是我個人認為值得告訴你。

首先要說的是,一些硬知識,你非學不可。「直接學習我並不喜歡」這句話說的任性了一點,這個世界上有多少事情是由著你喜歡來的?

===============正文開始============

首先你要選擇自己的職業方向

與計算機相關的行業太多了,因為不管是傳統工業,還是信息產業,都離不開計算機。以大學培養方向為例,與計算機相關的,除了計算機系,還有信息與電子、光電(網路通信、嵌入式系統)、控制(自動化、儀錶、機器人)、數字媒體、電子商務等。

但就「傳統」的計算機領域,也可細分為很多職業方向,具體可參照各大招聘網站的招聘崗位設定。

一個行業新人,儘早慎重設計並貫徹自己的職業規劃是重要的,關乎你將來能走多遠。如果你認為現在規劃職業太早,那我想說的是,職業規劃是人生規劃的一部分,而任何時候規劃人生都不嫌早。

然後根據自己的職業方向明確學習重點

要做這個職業方向,你需要的知識體系是什麼?體系的上下依賴關係是怎麼樣的?重點難點在哪裡?

是不是不管做哪個職業方向都要了解彙編?不一定。是不是不管哪個職業方向都需要了解科技新聞?不一定。是不是不管哪個職業方向都需要看《浪潮之巔》、《人月神話》、《Think in Java》等等,我的回答還是不一定。學校設置的每門課程是否都要認真學習之?啊哈,關於中國的教育,我不想吐槽了。

總之,你得學會自己判斷要學什麼,這是你需要走出的第一步。

然後學習之。如何學習就不展開了。

多加實踐

只有實戰經驗才是真正的生產力。你看從國家層面上,各省市有「生產力促進中心」,各高校有「地方合作處」,為的就是做好把科學技術轉化為生產力的工作,否則就是紙上談兵沒有任何價值。你要把從書本上學來的知識轉化成你自己的生產力和競爭力,就得多實踐。

實踐的方式,我覺得總是閉門造車也不好,還是得多參與實際生產,比如去公司實習或參加開源項目(後一種是我臆想,沒實際經驗,不知道對新手是否有足夠幫助)。

如果你的職業規劃是明確的,所需知識體系也是明確的,那麼在你學習的什麼階段,能參加什麼樣的實踐,你應該也是明確的。簡而言之,實習不是大三大四的專利。


漫談C語言及如何學習C語言

C語言是萬源之源


嗯...好奇心吧...

從底層開始的話可以試著玩玩單片機

話說現在的單片機好像也非常複雜

Bilibili上面有個軟妹子自己組了一臺 Apple II

我最近確實非常癢的想這麼幹一次

不過

成爲專業的IT人士未必是件好事

這是有必要注意的

等你瞭解到 if 是如何在晶片(電路)層面實現了

你會有種

這世界沒有什麼程序我寫不出來

的爽快感

然後你發現

僅僅是這樣還不夠

寫得出來

得寫得漂亮 寫得靈巧 寫得敏捷

於是演算法的路在你面前打開...

編譯器的路在你面前阻攔...

病毒與 cracking 的(歪?)路在你面前開啓...

然後你算了一下你預期的壽命...

我作爲一個 10 歲開始接觸 Apple II 今年 41 歲還沒結婚的叔叔

用我的血淚告訴你一句經驗教訓...

人生苦短...Python Ruby ShellScript 什麼的

會動就好了啦


我在這行10+年,看到一些答主好像還在學,那我就賣個老,但以下觀點僅代表一般程度的水平,適合進這行糊口的。

剛畢業或一兩年經驗時,能掌握好一門語言,就已經很好了。但這個掌握是要系統一點的,知其然並知其所以然。

例如學Java的集合,當會調api是不夠的,得知道每種集合的差別,適用場景,ARRAYLIST和LINKEDLIST為什麼有差別,在內存中它們是怎樣存儲的,當插入、刪除、更新時,它們是怎樣工作的。

例如學習Hibernate,得把握它的核心是什麼,工作原理是什麼,它說能更容易地解決我們平時95%的db訪問,但剩下的5%是什麼,如何解決。掌握好這些根本的東西,就不怕技術發展得太快而自己跟不上,快只是表象。

剛開始的時候,廣度很難打動面試官,深度卻很容易讓人印象深刻。

另外,有句話是這樣說的:

engineer - have no idea

sr. engineer - have idea

architect - have better idea

consultant - always have better idea

在這個升級打怪路上,用心和總結是關鍵。


個人感覺要把整個計算機體系結構了解清楚,下到電路,上到應用層。細節的東西可以不清楚,但是要有個大概的認識,特別是底層的東西要了解。推薦本書 深入理解計算機系統。


編碼 (豆瓣)


或許應該先讀一下 Windows程序設計 那本絕版書


推薦閱讀:

網路工程師是一個方向繼續專研下去還是考完ie後再學一個方向?
硬體和網速分別從什麼方面影響遊戲體驗?
如何評價IOI2016中國隊成績?
你們用排序演算法排序八百萬個數的最快時間是多少?
聊聊人工智慧領域的工作狀態?

TAG:如何成為X | 如何學習X | 計算機 | 信息技術IT | 計算機科學 |