計算機專業大一大二該怎樣提升自己的專業技能?

女,二類本科計算機專業大一在讀。我們系男女比3:1。男生每天都是LOLLOLLOL,女生每天都是看視頻看視頻看視頻。。。我們第一學期學C,第二學期(本學期)學c++。也並不是沒有學與專業有關的課程,可為什麼會是這樣。老師是女老師,上課朗讀ppt從頭到尾。。想學根本不知道該怎麼辦。我很熱愛這個專業,也想變大牛,進谷歌,走向人生巔峰。。(逃 一年就要過去了,越來越迷茫。請問各種大神大一大二都在做什麼,這種迷茫不是所有人都要經歷吧


想起當年大一,學c++ 寫個可以從txt中讀存數據的程序都能開心半天。
我也想過如果重來會怎樣學習。
我也講些建議吧,希望對你有幫助。

1. 數學課不要逃了。什麼高數,線性代數,離散數學。這些都不會很難,不要以為這些數學沒用,這些知識到需要用到的時候方恨少。搞計算機圖形學不懂線性代數就是一種悲劇,求最短路徑就會牽涉到離散數學的圖論問題等。學好數學有益無害啊,不要讓數學成為未來的瓶頸。


2. 什麼馬克思、中國近代史那些能逃就逃吧。沒錯,我就是對這些課不認同,我就不明白為什麼我們學計算機的要學這些馬克思。除了浪費時間、洗洗腦、糾正一下你錯誤的價值觀外,我都不明白這些有什麼意義。這些課最後背兩三天還是能過的。


3. 學深入一門語言吧。c++,c,python,java,php,golang,隨便一門都可以,但是要學得深入。不要看到網路上的"php是最好的語言"等言論,然後正在學c++看到那些話就學php,半途而廢。你要知道每門語言都有他們本身的優劣,亦有很多東西是共通的。深挖一門語言的精髓,比會用20門語言輸出"HelloWorld"強得多。


4. 學好計算機的重要的課程吧,這些是內功心法。我認為計算機重要的課程就是《數據結構》《機組原理》《操作系統》《編譯原理》。盡量看國外的課本吧。覺得學硬體知識的時候覺得有阻礙的時候,嘗試看看《編碼的奧秘》這本書吧。覺得老師不好就回宿舍看國外教授的視頻吧,遇到真的解決不了的問題,問下任課老師,他會十分開心,大學老師其實也很寂寞很無聊的,沒什麼人跟他溝通。

這些東西看起來好像沒什麼用,學完這些東西好像什麼都做不到。是啊,培訓班的很多老師也是這樣說的啊。但是這些東西能幫你站在一個更高的位置看待問題,很多時候遇到技術的瓶頸就是基礎知識不紮實所致,而且畢業後很難再有學生時代這麼多時間給你學了。


5. 和人合作做個網站、遊戲等較大型的項目吧。這時你可能要用資料庫,html,javascript等知識。但不要怕。

第一次做很有可能會遇到這些問題。需求不明確;迭代沒有目標,沒有里程碑,根本不知道什麼時候才是項目的結束;工作沒有目標,也沒寫工作日誌,自己在幹什麼都不知道啊;代碼越寫越大,垃圾代碼越寫越多,系統變得不可控制啊;不寫單元測試,出了bug都不知道是那個坑貨的代碼出問題啊;性能有問題啊,50人的並發程序就崩了之類;

或者最後以失敗告終,然而項目失敗並不是壞結果。項目成功與否不重要,重要的是通過這個項目總結到底是什麼讓軟體的構建變得不可控制,是代碼寫得太爛,是那個誰偷懶,還是管理方式不恰當。

而這些就是軟體工程的知識。別小看軟體工程的知識喔,雖然很多人把這門課當文科上,但是這門課的內容可是非常重要的。如果你想對軟體工程這方面有所了解可以看《人月神話》、《代碼大全》和鄒欣老師的《構建之法》等書。


6. 學會忍耐孤獨吧。想起當年數據結構的老師布置哈夫曼樹的編碼和解碼的作業,最後只有我一個人交作業。假如你要追求的是這條道路上,自然有很多人跟你不是一條道上的人。有些人來學校就是為了玩遊戲的,有些人就是專業服從分配來到計算機專業,有些人從來就沒有想過未來從事計算機方面的職業。跟你沒什麼交集的人,你就別管了。若是同一道上的人,總有人會在未來的路上等你。別浪費時間在無謂的社交上了。


7. 學會怎樣學習吧。it行業技術每年都會有發展,你需要強大的學習能力。你需要摸索出一套最適合自己的學習方法。你可以看看《如何閱讀一門書》,和劉末鵬的《暗時間》。

比較適合我的學習的方法就是做中學。

學圖論的最短路徑,嘗試一下寫一個地鐵路線兩個的最短路線
學數據結構的哈夫曼樹,嘗試一下寫一下他的編碼和解碼吧
學線性代數的時候,嘗試一下用 opengl 看看怎樣通過矩陣是怎樣控制圖形的變化
。。。
按照語法書說的內容寫一遍,我也不知道自己能學到什麼程度。也很快就忘記。
最後還是通過做項目寫代碼,才覺得自己真的學會了。但我這樣學會有點不全面,後面還是會看語法書,看看自己有什麼地方搞得太複雜了。


8. 學點哲學吧。人總有很多煩惱,總有很多問題想要解決。看看《蘇菲的世界》《道德經》等書。想想自己活著的意義吧。嘗試用不同的角度看待這個世界吧。

9. 有什麼問題先靠自己。男女之間是有區別的,我覺得如果題主你不是女生,也沒有這麼多人答你問題。遇到問題,如果自己能解決就解決,不要老讓別人幫你解決問題。你需要一些搜索技巧幫你解決問題十大高明的Google搜索技巧 或者 去 Stack Overflow看看是否有人遇到過同樣的問題了

人生苦短,不浪費別人的時間是對別人的尊重。

當自己真的用盡方法也解決不了的問題,來知乎、stackoverflow等網站提問,列出你已經使用過的方法。相信會有很多人幫你,而且你自己也會對這個問題了解十分清楚。

你看這個問題,
蕭大大就寫得很清楚了編程入門指南

10. 湊夠10點吧。


計算機相關專業。

大學過去三年多,感覺和題主類似。專業 150 多人真正意義上寫過代碼的人不超過 5 個。基本周圍的同學都是打遊戲和看電視劇。

大一還能認真上課。爭取每一節課都不落下。一直做第一排,就是所謂的學霸。

後來發現很多老師上課真的只是念一念 PPT ,而且學校發的教材很多都是任課老師編的。教材質量不好,大多是刪刪改改湊成一本書。大二開始不再認真聽課。考試也只是為了應付。

那現在是不是應該很迷茫呢?

是的。

但是沒有和其他同學一樣打遊戲墮落在宿舍。

當時我及時的找了前輩溝通。諮詢了計算機專業的一些經驗,但是不太能理解,還好照著他們的經驗去實踐了。現在看來確實是正確的。

實際上大一大二過來,我有一些誤解。

  1. 認為數學等基礎學科沒用。
  2. 羨慕全面發展的人。
  3. 不敢逃課。
  4. 覺得英語回答英語資料看不懂就害怕去看。

第一條是最錯誤的一個觀念。當我刷著高數題目的時候,認為把題解出來來沒有絲毫的成就感。計算機專業不就是做一個網站或者應用出來嗎?學這些基礎有什麼用。當時我是這麼理解的。現在我能做一些東西了,發現原來這些都比較簡單,反倒是演算法和數學那些才是真正提高你的計算機能力。所以即便不是為了過你的考試,也要認真學習基礎學科。至於一些沒用的科目,比如說什麼思修什麼的純粹都是浪費時間的課程。讓我重來一遍我一定曠了全部的這種課。但是如果你想上研究生去深入研究某些學科的話,建議還是少曠課,刷高你的 GPA ,因為不管你是申請美國的高校還是保研都有很好的用處。如題主所說,去 Google ,最好的途徑就是上一個美國的不錯學校的研究生。

關於全面發展,因為學校以前是這麼宣傳的,什麼校園十大人物看上去都是全面發展。但是我想認真的說一下:盡量專註你的精力。我試過全面發展,把自己的精力分散在一些所謂全面發展的事情上。到頭來發現這些太虛了。到頭來我沒有把所有的精力花在我感興趣的事情上。實際上,如果你能花很多時間在一件事情上,在這個領域裡面你的成績可能會超過絕大部分的大學生甚至是一部分工作的人。

關於逃課,認為有選擇的逃課是有必要的。因為如上所說,有些課有些老師不值得我們去浪費時間。所以如果你有更重要的事情,當然是可以堅決的逃掉這些無意義的課。但是如果你想保研或者提高你的 GPA ,那麼你還是需要深思熟慮一下,因為很多上課出勤率是和成績掛鉤的。所以看自己具體的情況。

英語對於計算機的重要性不言而喻。我是 Android Developer,那麼最好的就是看 Google 官方文檔。這時候不能因為看不太懂而退縮,不要看一些二手的資料,那樣會增加你對於中文的依賴,以及二手資料是別人的理解,不一定正確。

我想一開始就能認真學習編譯原理這些課程的人是少數。大部分的人還是希望有一個成品出來。所以為了提高自己的興趣可以和有些編程經驗的同學一起做一些項目。通過做項目來理解一門語言。關於計算機語言,可以先深入一門,其他的語言觸類旁通。

比如說學習 Android

可以通過 知乎 和 Google 來獲取一些書籍和資料。剛開始照著敲,然後開始有一些自己的理解。這裡對於一些理解能力稍差一點的同學推薦幾個學習網站。慕課網和極客學院。這兩個是 IT 行業的垂直領域的比較好的在線課程網站,基本上有你想學的所有技術。

當你開始能做一些東西的時候,就開始深入學習一些計算機體系了。像數據結構,計算機網路,操作系統,編譯原理等。可以經常上 Coursera 、 MOOC等網站, 如果你覺得自己的老師講的不好,上面有世界名校的課程,你可以聽並且可以獲得結業證書。如果這樣的老師你都不滿意,只能說明不是老師的問題,是你太懶。

實際上大學培養的應該是一種快速的自學能力。掌握自學能力,就能快速適應高速發展的技術。

如果你的學校不是太好,那麼趁早的職業規劃吧。不要相信學校的就業指導。

大概在大二的那個暑假就可以去找一份計算機專業的實習,感受一下商業項目和自己平常寫的東西的不同。這時候不要看實習工資,能學到東西才是最重要的。找一個靠譜的企業去實習,至於怎麼找,拉鉤網,實習僧這麼多招聘網站,只要你會寫代碼,人家肯定會給你面試機會的。

關於面試前的準備,我曾經總結過一份,開源在了 Github 上,希望對你們有幫助。

GitHub - GeniusVJR/LearningNotes: Enjoy Learning.

裡面包含了基本的一些問題。

對於行業的了解和預測也是很重要的,比如最近出了小程序,是不是可以學習一下前端呢。把握一下技術的發展趨勢,把自身情況扭轉成有利的一面。

然後如果你不想搞科研,就讓自己的計算機能力和素養足夠找一份好的工作。不要因為考研而逃避就業,那也是一件很糟糕的事情。

如果你深入學習了計算機,發現自己一點興趣也沒有。那麼趁早放棄吧。以後工作如果你一直都是低落的心情,沒有學習的慾望,那麼是一件多麼糟糕的事情。不要糟蹋了代碼,也不要糟蹋了自己。人要做自己感興趣的事業才會激發最大的創造力。才會把工作當作一項事業。

享受編程是一件很酷的事情。

相關回答:

你在大學期間學到最有用的東西是什麼? - 陶程的回答

當然,還可以看點計算機方面有意思的書籍、視頻等資料

有哪些比較好的編程技術類名人的傳記推薦? - 陶程的回答

以上。希望對您有幫助。


分享一下我的讀研經歷吧,希望對你有幫助。

2017,我研三,是忙碌的一年,從年初備戰實習春招,年三十都在死磕JDK源碼,三月份經歷了阿里五次面試,四月順利收到實習offer。然後五月懷著忐忑的心情開始了螞蟻金服的實習。八月,又經歷了兩輪面試,總算拿到轉正offer。到此為止,我總算可以盡情地享受最後的校園時光了。

我的讀研經歷

阿里是我讀研階段的一個重要目標,剛上研一的時候我便立下Flag,計划了讀研三年要做的事情、要學的東西。翻翻我的博客,居然還能找到當時寫的讀研計劃(想想時間過的真的好快呀)。阿里在我心中一直是技術者的朝聖地,聚集了一群技術狂熱分子,為了提升一點點的性能可以廢寢忘食。在立下這個flag後,我便把我要去阿里的想法告訴了身邊的所有人。我不想給自己留有後路,既然牛逼吹出去了,那就得落實到行動上。

我當時的計劃是這樣的,研一玩命做項目,畢竟寫代碼是一項孰能生巧的技術,多寫代碼自然能加深對技術的理解。事實也確實證明了這一點。我大四畢業的那個暑假,第一次接觸《深入理解JVM虛擬機》,當時看完之後是一臉懵逼的,所有的漢字都認識,但連成一條句子後咋就不明白呢?然後懷著這種一臉懵逼的狀態,強行把這本書看完了,但由於理解的不夠深刻,很快就忘記了。然後經過一年瘋狂做項目,當我再抱起這本書時,我對這本書的感覺有了180度的轉變,通俗易懂啊。我懷疑自己當時為什麼這麼傻。而在這一年之內,我一共做了四個項目。所以說,寫代碼能潛移默化地提升你對技術的理解程度。

記得我們學校考研結果公布是在三月底,得知我錄取了,短暫的高興了一下,第二天便去了導師實驗室,參與到項目中去。因為我心理很清楚,我的目標是阿里。
剛去實驗室的時候感覺自己完全是一隻小白,師兄們開會討論的東西我竟然一個字都聽不懂,剛開始分到的工作也很難順利的完成。但我是一個天生不服的人,我越是不懂,我越是要征服。(PS:追女生也一樣,當時看上了一個高冷型女神。越是高冷,我越要拿下……省略一萬字……最後成功了)。我漸漸跟上了師兄們的步伐,從第二個項目開始,我一直是項目負責人了。
我給自己定的方向是Java,而實驗室的項目五花八門,Qt、C++、圖像圖形……,但我心裡清楚,這些項目可以拓寬我的視野,可以鍛煉我的學習能力、思維方式,但要深入理解的技術還是Java。所以我利用項目空窗期,看了很多Java方面的書籍,文末我列了一份清單供大家參考。

研一做了一年項目之後,感覺自己解決問題的能力、快速上手新技術的能力有所提升,但做項目一味求快、一味趕時間,我對很多技術的理解僅停留表面。所以更多時候我感覺自己是在搬磚,很難寫出高質量的代碼。當時我決定,研二的上半學期一定要好好穩固基礎,深入理解技術背後的原理,放慢做項目的節奏,不一味地盲目求快。

然而研二我去了一家創業公司實習,被安排做前端。既然我無法選擇,那我就擁抱變化。既來之則安之,我希望自己所花的時間都有所收穫。所以我全身心投入到工作中去。公司安排我做前端,雖然這並不是我想乾的事情,但當前別無選擇,既然做那就得做好。我花了一個月的時間怒刷前端知識,學習Angular、React,了解它們的設計思想,學習JS背後的原理,也看到了前端目前的發展狀況。前端的技術迭代速度很快,但技術背後的原理都是類似的,所以抓住技術背後的本質才是最重要的。
這段實習一直持續到了今年一月,我心理清楚,二月底三月初阿里的實習招聘就要開始,所以我擠出中午休息時間、晚上下班後的時間、周末的時間,複習我之前積累的東西。

三月三號,人生的第一次面試,在看到杭州的電話時,那一刻的心情既忐忑又興奮。在此之前,我並不清楚自己的水平在所有應屆生中處於一個怎樣的層次,在電話接通之前我已經做好了充分的心理準備,想像了各種被面試官吊打的畫面。第一次面試持續了54分鐘,面試官似乎破有耐心,整個面試過程相談甚歡。那一次的面試給了我巨大的信心,因為我清楚,我離我的目標更近了一步。
在接下來的一個月中,我陸陸續續接到了五次面試電話,每一次面試都是一次學習的機會,能發現自己的不足,在與面試官交流的過程中也能了解到最新的技術、最佳的實現方法。

四月十四,記得那天剛給本科生上完演算法課,晚飯過後便收到的阿里的offer。當時的喜悅之情溢於言表,這麼久的努力沒有白費。但我心裡也清楚,阿里的實習轉正率向來很低,要想通過實習留下來也不是一件容易的事。所以在收到阿里offer之後的那晚,我重新規划了接下來的學習計劃,將我的短期目標更新成:拿下阿里轉正offer。

5.20,一個美好的日子,我懷著憧憬、忐忑、興奮的心情走進了支付寶大樓,開始了我三個月的實習生涯。這三個月的實習讓我學到了很多,我看到了每天的進步,也看到了自己的不足。這100天經歷了太多的事情,有太多的體會,有空我再單獨寫一篇實習期間的感悟與大家分享。

9.1晚上11點,我的狀態從『面試中』變成了『待跟進offer』,我會心一笑,我達成了人生第一階段的目標。那一刻我沒有太多的激動,在經過了2017年8個月的持久作戰之後,這個offer早已在我的意料之中。

第二天是周六,這個周末我給自己放了兩天的假。雖然在杭州已經呆了102天,雖然支付寶大樓就在西湖邊,但每天兩點一線的工作,我並沒有去過西湖。那一晚我的基友(帥氣的天哥,文末附有徵婚啟示)得知我收到offer後便立即買票,坐了一夜的火車來杭州為我慶祝。也托他的福,在這個周末我第一次遊覽了這座美麗的城市。

最後的校園時光,我給自己定了一個新的目標,這個目標也許充滿了挑戰、充滿了艱辛與困難,但我想如果能達成,我的人生將會有很大的改變。在人生的路上,我還在奮鬥。希望與各位共勉。

建議:養成寫博客的習慣

在面試阿里的過程中,博客幫了我很大的忙。並不是說有博客在面試中會加分,而是寫博客的過程能加深你對知識的理解,而且回顧起來也特別高效(畢竟是自己寫的東西)。

我從研一開始便養成了寫博客的習慣,現在先過頭來,這兩年我一共寫了185篇文章,有22W的訪問量,也很榮幸稱為專家博主。我的博客現在已經成為我一筆最寶貴的財富,記錄了我技術的整個體系結構,也記錄了學習技術的心路歷程。

可能很多同學都有寫博客的經歷,但能長期堅持的少之又少。我想告訴大家,任何事情都貴在堅持。只要堅持21天就能養成習慣。有的時候對這件事缺乏興趣了很難再持續下去,但想想自己的目標,咬咬牙堅持下去,養成習慣你就贏了。

我的博客一般都是看完一本書後的總結,我會把一本書中最核心的東西,按照我的理解把它們記錄下來。每一本書我都會看三遍,第一遍是快速瀏覽,了解整本書的體系結構、作者的行文思路,知道書中重要的、不重要的內容,也就是要建立起全局觀。第二遍我會精讀,把那些我認為重要的內容挑選出來著重閱讀、反覆理解、吃透。第三遍閱讀,往往會冒出新的理解,我時常有這種『書讀百遍,其義自見』的感覺。三遍讀完後,我便按照自己的理解,把核心內容寫成博客。由於是自己的寫的東西,所以在複習的時候只要花上三五分鐘通讀一遍,所有的知識點又被喚醒。

Java體系結構整理

  • Java相關
    • Java集合框架
    • Java並發編程
      • Java並發編程的藝術(一)——並發編程需要注意的問題
      • Java並發編程的藝術(二)——重排序
      • Java並發編程的藝術(三)——volatile
      • Java並發編程的藝術(四)——線程的狀態
      • Java並發編程的藝術(五)——中斷
      • Java並發編程的藝術(六)——線程間的通信
      • Java並發編程的藝術(八)——閉鎖、同步屏障、信號量詳解
      • Java並發編程的藝術(七)——Executors
      • Java並發編程的藝術(九)——批量獲取多條線程的執行結果
      • Java並發編程的藝術(十)——線程池(1)
      • Java並發編程的藝術(十一)——線程池(2)
      • Java並發編程的藝術(十二)——線程安全
      • Java並發編程的藝術(十三)——鎖優化
    • Java並發容器
      • Java並發容器大合集
    • Java虛擬機
      • 深入理解JVM(一)——JVM內存模型
      • 深入理解JVM(二)——揭開HotSpot對象創建的奧秘
      • 深入理解JVM(三)——垃圾收集策略詳解
      • 深入理解JVM(四)——對象內存的分配策略
      • 深入理解JVM(五)——HotSpot垃圾收集器詳解
      • 深入理解JVM(六)——JVM性能調優實戰
      • 深入理解JVM(七)——Class文件結構
      • 深入理解JVM(八)——類載入的時機
      • 深入理解JVM(九)——類載入的過程
    • 設計模式
      • 23種設計模式-大閑人柴毛毛的博客
    • Spring核心思想
      • 深入剖析Spring(一)——IoC的基本概念(從面向對象角度介紹)
      • 深入剖析Spring(二)——IoC容器的實現
      • 深入剖析Spring(三)——Bean的生命周期
      • 深入剖析Spring(四)——AOP
    • 面向對象的思想
    • Java8新特性
      • Java8新特性——Lambda表達式(一)
      • Java8新特性——StreamAPI(一)
      • Java8新特性——StreamAPI(二)
  • 計算機基礎
    • 演算法
      • 數據結構與演算法-大閑人柴毛毛的博客
    • 數據結構
      • 徹底搞懂紅黑樹
    • 操作系統
    • 計算機網路
      • 計算機網路傳輸層知識點全覆蓋
    • 資料庫
      • 資料庫索引全面解析
      • 資料庫事務詳解
      • 資料庫三大範式
  • Linux
    • Linux常用指令-大閑人柴毛毛的博客
  • 架構高性能網站
    • 架構高性能網站秘笈(一)——了解衡量網站性能的指標
    • 架構高性能網站秘笈(二)——動態內容緩存
    • 架構高性能網站秘笈(三)——瀏覽器緩存
    • 架構高性能網站秘笈(四)——反向代理緩存
    • 架構高性能網站秘笈(五)——Web組件分離
    • 架構高性能網站秘笈(六)——構建數據緩衝區
    • 架構高性能網站秘笈(七)——負載均衡

我的書單

先嘮叨兩句。學好計算機,基礎紮實很重要!Github上每17秒就會出現一種新的技術、新的框架,技術迭代的速度遠高於我們學習的速度,但這並不可怕,因為技術背後的原理是相通的。所以我們要做的就是抓住技術本質、打牢基礎,以不變應萬變。附上之前我關於基礎學習的回答:

大閑人柴毛毛:計算機科學與技術專業的學生要怎樣做才能避免成為 一個低級的碼農?

大閑人柴毛毛:自學編程需要注意什麼?

  • 基礎類書單
    • 《Java核心技術》卷一+卷二
      • 這兩本書加起來將近1700頁,讀完它需要有足夠的勇氣和耐心。但這就是打基礎的階段,羅胖子說過,學習就是一個使大腦處於非舒適態的過程,學習並不是一件快樂的事情,如果你長期處於舒適狀態,或許你自認為每天都在學習,但實際上你一直在原地踏步。所以我覺得這本書至少要通讀一遍,就算含著淚也要把它讀完。
      • 當然,讀1700頁的書畢竟是一項浩大的工程,換誰都會心生乏味。所以我覺得讀書的方式方法也很重要,可以伴隨視頻教程一起學習,每讀完一章後再看一遍視頻,這樣一方面起到調節的作用,另一方面在讀書過程中遇到的問題也許會在視頻學習中迎刃而解,一舉兩得。
    • 《計算機網路》-謝希仁
      • 這是一本好書!我在讀這本書的時候有種強烈的感受,就是每當我有一絲疑惑的時候,我就會在接下來的篇幅中馬上找到問題的答案,一環扣一環。這種感覺讓我很享受閱讀的過程,使得整個閱讀過程都伴隨著『發現問題-解決問題』的循環,吊足了我的胃口,也就很自然的把一本書一口氣看完。也許這就是大師吧。
    • 《演算法》-Sedgewick
      • 演算法是程序員的基本功,這本書用彩圖解釋各種演算法的原理,通俗易懂、肥而不膩。
  • 進階類書單
    • 《深入理解Java虛擬機》-周志明
      • 這本書我一共讀了兩次,第一次讀完全是一頭霧水、不知所云;時隔一年,在瘋狂做了6個項目之後,再讀這本書的時候,我嘲笑一年前的自己:為何當初那麼傻。所以建議大家:寫代碼畢竟是一項熟能生巧的技術活,多多動手、多多思考會在潛移默化中加深你對技術的理解。
    • 《構建高性能Web站點》-郭欣
      • 這本書乾貨頗多,看完受益匪淺!比較全面地介紹了各種WEB性能優化的手段、它們的使用場景、優缺點對比。是我們這種還在象牙塔中的小白程序員了解外面世界的大門。
    • 《Java並發編程實戰》-Brian Goetz 和 《Java並發編程的藝術》-方騰飛
      • 《Java並發編程實戰》翻譯有些生硬,也許是我水平不夠,看的相當費勁,我當時強行看完之後,仍然存在諸多疑惑,所以我又讀了《Java並發編程的藝術》,畢竟是咱中國人寫的書,很符合咱中國人的思維方式。看完之後解開了先前的很多疑惑。如果你是大神,就直接閱讀《Java並發編程實戰》英文原版吧。
    • 《Java性能優化權威指南》-Charlie Hunt
    • 《Spring實戰 第四版》-Craig Walls
    • 《Java TCP/IP Socket編程》-Kenneth L.Calvert


每門課自己找教材(如果學校的教材不好)、自己找公開課的視頻(如果學校老師講的不好)、自己找lab做。

一定找lab,不要書面的練習題。所有的知識不反應到代碼層面,就是白搭。

比如

數據結構:

教材:數據結構與演算法分析 (豆瓣)
lab:http://web.stanford.edu/class/cs106b/homework.shtml

演算法:

教材:演算法(第4版) (豆瓣)
lab:Problems | LeetCode OJ
公開課:
Coursera - Free Online Courses From Top Universities
Coursera - Free Online Courses From Top Universities

組成原理:

教材:
深入理解計算機系統(原書第2版) (豆瓣)
計算機組成與設計 (豆瓣)
lab:csapp lab,或者自己拿hdl實現pipeline。

操作系統:

教材:現代操作系統 (豆瓣)
lab:mit的jos lab,或者按照《30天自製操作系統》自己做一個。

計算機網路:

教材:
計算機網路 (豆瓣)
計算機網路(第6版) (豆瓣)
lab:一個簡單的http伺服器。

實踐是必須的,因為在計算機學科中,實踐是實踐,理論最後也是實踐。但切記不要翻來覆去地寫應用,或者說不要專門學習web和移動開發的東西,這些東西用的時候可以速成,一般都是工作之前集中學一個月就會了。其實編程語言用的時候也可以速成(不過這個應該不成問題)。


同大一,同熱愛計算機,二本,大學快一年了,趁著這個問題,說一下我自己一年來的感受吧。

去年夏天抱著無比期待的心情,踏進大學。其實我的成績本應穩穩的上一本的,不過選學校的時候偏執了一點,專業不可調劑了一點,於是落到了二本。沒錯,我就是奔著計算機去的。當然,我現在越來越不覺得學校會決定人的,這是另話。OK,下面進入正題, 怎樣提升專業技能!

/**********Tip 1**********/
自學!!
自學!!
自學!!

重要的事要說三遍! 自學能力是現在的我看來最重要的,勝過一切的專業課。當某天,我看著一米還是幾米厚的書從新變舊,我做夢都會笑的。 自學的方法很多,看書,看視頻,看文檔;Google,Stack Overflow.

看書絕對很有必要,而且是目前的我相對於其他更喜歡的方式。那些經典的書,是提升技術水平的不二選擇。

關於視頻,我也是會看的,而且作為互聯網時代下的幸運兒,我們幾乎快要打破地域和學校的限制了,有一種特殊的視頻教程,它叫慕課。只要你想,你可以聽清華,北大的課程,或者你更想,那可以去看斯坦福等等世界名校的課程。

關於文檔,有句話叫80%的問題可以通過讀文檔解決。我不知道這句話是誰說的,可能是圖靈吧。不過文檔真的很重要。當你想要學習的新東西的時候,當你有想用的很贊的軟體的時候,當你要學習一個很棒的庫的時候,看文檔。官方文檔是相比視頻,書籍最新的東西。 (⊙_⊙)自學說完了。

/**********Tip 2**********/
英文
英文
英文

同樣說三遍,不過這個不說太多,也沒有太多必要解釋的。當你接觸到英文文檔,英文的解決方案的時候就懂了。

/**********Tip 3**********/
樂趣!
樂趣!
樂趣!

我在這裡沒有說興趣。我相信任何喜歡計算機的人都有興趣。 在這裡我想說的是樂趣。我覺得不管學什麼總會有枯燥無味的時候,所以樂趣顯得尤其重要。

可以在枯燥中尋找樂趣,或者培養樂趣。比如我現在在自學彙編,一開始真的是。。。無比枯燥!但過了不長時間之後,我覺得越來越有意思了,每看到一些代碼,它們在內存中的工作狀況浮現在我的腦海里,真的像是活的一樣,那種感覺是很爽的。

當然也可以自己找樂子。像前面的前輩說的,做個網站,做個遊戲,做個app。這些東西做完是很有成就感的,括弧 我只做過網站 。同時,在完成目標的過程中絕對會學到很多很多的東西,還會大大開闊眼界。

/**********Tip 4**********/
基礎!
基礎!
基礎!

底層的知識越紮實,將來走的也就越高,當然,我沒有這個這個水平,但是我一直這麼認為的,如果有異,歡迎指正。

比如計算機組成原理,操作系統,編譯原理,數據結構,演算法。這些都是墊腳石,或許會很難,但絕對值。

所以,沒事可以看看硬體的知識,慢慢的說不定電腦清灰啥的都不用學了,手到擒來,括弧笑。有時間接觸一下Linux,作為一個學計算機的,是時候擺脫純粹的圖形界面了,在學習娛樂之餘,敲敲命令很好嘛。

演算法數據結構啥的可以看看相關的書,當然以後也會有相應的課程,可以刷刷OJ題,但絕對不要把刷題作為學習的全部,在我看來連大部分都不要佔,適當就好了。鏈接來了,戳這裡什麼才算是真正的編程能力? - 計算機科學

至於編譯原理,以後會有課的,大家都說難,我也沒學過,我也在想咋學,別理我,讓我靜靜。
當思維站在計算機的角度考慮問題,一切都會容易很多的。

/**********Tip 5**********/

這裡講講關於大學吧。有些觀點跟前面的前輩一樣,數學課盡最大能力學好,我現在好後悔大一的高數荒廢了,一定得找個時間補回來。

思修啥的反正我沒聽過,一般由於固定座位,不逃,所以每次都是拎本專業書就去上課了。沒用的了,不要吝惜而不用來學自己喜歡的。

合理的時間安排也是很重要的,不熬夜,不起太晚,一般有課的時候我六點左右起,沒課可能晚一點,也可能還是六點左右起,總之,能休息好就好。

至於題主所說的老師念PPT,那不聽了唄,看自己的書,讓她嗶嗶去吧。

/******************************/

好了,就先寫這麼多了,手機碼字不容易,回頭有遺漏的再改吧,以上的說的東西不全是我的能力,有的是我自己的見解,有的是我對自己將來的要求。任何的錯誤或不妥之處歡迎前輩指出討論。

o(≧o≦)o呀,快下課了~


又是時候放出這個鏈接了
https://www.v2ex.com/t/189755


這個問題應該是姥姥最喜歡的。 @陳越姥姥
中國慕課網上面找視頻,
先學一門最基礎的c,然後刷pat basic再看一門進階,java,c++等等,再看數據結構繼續刷pat advanced
甲級刷到了滿分以後可以考慮找兩個小夥伴去刷頂級了。
甲級刷到滿分你的工作就不要愁了,而且還是薪資待遇非常不錯而且跳過你學歷的公司哦。


我可以說。。。自己多練么。。。

我也是大一零基礎學編程,學校某號稱亞洲49(其實是靠某專業論文引用量強行裝逼)的一般般大學,室友三人沒一個不擼的,老師上課念課本,問問題太難了就說「你去看一下某浩強的書,上面寫的很詳細xxxxx」

背景陳述完畢。。。

自己很喜歡計算機,於是一開始入學的時候想要好好學習天天向上,無奈環境所限,學的並不怎麼樣,於是突發奇想,怒強迫自己每日擼碼200行,時至今日(馬上大二),基本上大部分上課和考試的問題看一遍就能寫,寫一遍編譯直接通過。沒事情拿純c++在控制台下寫了幾個小遊戲,什麼2048啊,五子棋啊,五子棋ai啊什麼亂七八糟的,被室友稱為神人(其實只是把他們拿去玩遊戲的時間寫代碼了而已)。

僅僅從個人感覺,這種能力還是要練習,不停的練習,引用我學長的一句話「什麼鏈表啊,棧啊,隊列啊這種基礎數據結構不花式寫個200遍怎麼好意思說自己是計算機專業的啊。」練習可以先從書本後面的習題開始,然後慢慢加深,比如上oj拉幾道水題啊,或者寫點有意思的小程序啊什麼的。

等到對語言熟悉了,就把數據結構看起來,等到數據結構看的差不多了,我覺得大二就差不多過去了吧。。。

ps:處女答,有什麼不是很對的地方還請各位大神指正。


有沒有認真的讀一下題主的問題?
不要給他推薦學什麼學什麼,我覺得,題主要的是一種學習的方法

  1. 必須學會自學,靜下心去自學,不去想遊戲,想什麼和你專業無關的東西,靜下心,去投入一件事,去學習
  2. 然後你要明白,沒有那門語言是最好的,沒有哪門語言是最差的,但是你要有自己精通的一門語言,怎麼算是精通,我覺得精通就是你能用你的這門語言去實現別人要的功能,這就是精通,如果做不到,那就用別的語言去實現這個功能。其實學什麼語言都無所謂,主要學的就是那種思想,面向對象,MVC,深入理解了這些思想,剩下學什麼語言,不過就是語法等的問題。慢慢就會體會了的。
  3. 多練習。做到熟能生巧,做到拳不離手,曲不離口。多寫程序,但不是多寫HelloWorld。編程好多都是一些套路,多寫,寫好。
  4. 要建立自己的代碼庫,把自己寫的代碼都收集起來,按語言分類,按作用分類,沒事幹就拿來看,拿來用。當然也可以從網上找源碼來看,看看別人是如何實現相同的功能,然後存起來,日後會又用的。
  5. 養成自己的良好的編碼習慣,注釋,縮進,大括弧,真的很重要。
  6. 演算法的重要性,數學的重要行,英文的重要性,邏輯思維的重要性,你懂得,我就不複製三遍了
  7. 習慣孤單,喜歡孤獨,喜歡上編程。宿舍只是睡覺的地方,圖書館是安靜的地方,網上是存放最新最全資料的地方。就醬
  8. 老師的重要性,老師們真的很想找個人聊聊的,奈何學校成了LOL的海洋,至少我們學校是這樣的。
  9. 堅持堅持堅持堅持堅持堅持。。。。。。

同是大二狗,同努力,以上是本人的一些小小建議,個人正在實踐。嗯,感覺還不錯,新人小白,輕噴~


2:*同大一計算機妹子一枚,我們遇到的問題幾乎一摸一樣,學習風氣散漫,老師上課念ppt(難道大學都這樣?),我感到幸運的一點是我沒有隨波逐流。—————————————————— 高考後回高中開班會,班主任對我們千叮嚀萬囑咐:大學千萬不要自我放鬆!至少拿出高中一半的努力!學長學姐也對我說:大學累哭啊!!!(雖然活動也多 ——————————————————————————————————————但是,這跟其他人說的不一樣啊!說好的大學瀟瀟洒灑走天涯呢!orz 真正來到大學才知道為什麼學長學姐那麼累,為什麼班主任千叮嚀萬囑咐,因為大學學習需要很強的自覺性啊!不是每個人都想好好學習的啊!大多數人都是只要不掛科就OK啊!在這裡待久了好怕自己也變散漫啊!(好像跑題了) ——————————————————————————————————————剛開學我就加入了一個社團(不能完全算社團吧畢竟還有老師插手),進來以後,整個人都被刷新了!這裡面的大部分成員,不是專業前十,就是編程大神,自己分分鐘悲哀到塵土裡啊! 不過帶來的好處顯而易見,這個社團(?)主要面相acm,相比同專業其他人,我們要比其他人花更多的時間去敲代碼去水題,花更多的精力去看課本看視頻看資料,有時周末放棄出去耍的時間去比賽。記得十月份校會要排話劇,白天課滿,我晚上六點半都九點待在自習室,九點點到十點排練話劇,然後敲代碼到十二點半……寶寶心裡苦,但寶寶不說……當然,這種情況持續時間不長
又跑題了…這樣帶來的好處是,上課輕鬆,考試無憂,還有,你的自學能力會大大提升!我自認為在大學自學能力是非常重要的。我也參加過某幾個acm全國大學生新生賽,雖然慘敗,但是收穫很多。至少,我知道了我的同齡人,我以後的競爭對手,他們有多麼努力。不說其他學校,單是跟我同級的漢子,他們會在自習室呆一晚上只是為了一個題,會在群里討論題時炸翻天,會在課餘時間瘋狂看資料看書。他們有的高中已經自學了很多,而我只是一個零基礎的小白,現在他們用比我更認真更嚴謹的態度努力著,如果我鬆懈了,那我以後拿什麼去說服公司要我?——————————————————————————————————————
我並沒有決定是否要在acm上走遠,只是想藉助這個競賽成長自己,遇到更好的夥伴更多的良師益友。你天天躺在床上翹課掛科,我不嫌棄你但也不會與你多聊,近朱者赤近者黑,想要提高自己的能力(OK終於扯回來了),首先就是態度問題了,間歇性躊躇滿志,持續性混吃等死有個卵用。——————————————————————————————————————提升專業技能,作為一個大一小白,我不敢多說(??????) ?。要多看優秀代碼,多動手,遇到問題不要急著問,真的看不懂就把代碼敲出來問電腦自學很重要,還有,高數線代逃不掉,學好課本很重要。
還有,
不要一天到晚在宿舍待著!!!
不要一天到晚在宿舍待著!!!
不要一天到晚在宿舍待著!!!
重要的事情說三遍,宿舍是大學的墳墓啊寧可在自習室睡覺也不能回宿舍玩手機啊少年!分分鐘墮落……——————————————————————————————————————說說我的寒假計劃吧~刷夠80道題並且用c++提交,每周參加周賽,看《浪潮之巔》,《程序設計基礎》紫色書看到stl,建立自己的博客(學長說這個蠻好的我好奇所以想試試)。想想那些大神,估計現在正在敲代碼( ??_? ?) orz真的給他們跪了……


畢業兩年來回答這個問題,希望能給還在大學的弟弟妹妹們一些幫助。
首先前提是不要懶。
如果你的數學還行,啃演算法導論,數據結構,計算機組成原理,計算機網路,資料庫原理,最好啃英文原版,另外為了輔助理解,必要的數學知識,比如高數,離散數學,線性代數。這不是容易的事,但是這樣你有機會進知名互聯網公司。
或者,你數學一般,要麼你願意補足,要麼你認真學習一門語言,同時,數據結構,資料庫必須掌握。然後,你就可以寫自己的項目了。跟著別人寫,或者自己寫。這樣,你也可以進一個不錯的互聯網公司。
再者,實在懶一些,可以認真學一門語言,做幾個自己的作品,並且上線。這樣,找工作不愁。
總之,多學不是壞事,別人打遊戲看視頻的時候,你學習,那麼你就能收穫更多,你就能找到更好的工作,拿到更高的薪水。我們選擇了計算機,就要信因果關係。


作為一個計算機專業的女生,能夠這麼早有覺悟真的很棒。大學期間真的是最好的學習時間,不耽誤浪費是非常對的。因為等你到大四的時候,尤其是大四下學期要畢業的時候,那些整天打遊戲的朋友們就開始著急了,如果你從大一大二開始學習,到大四的時候說不定就能夠找到一份不錯的實習,也可以參加阿里,騰訊等大公司的校招。如果大學期間玩,有實力參加校招么?

好了,回到你的正題,如果在大一大二期間學習,做什麼?其實計算機專業大一第一年,一般都是學習C和C++,第一學期學習 c,下半學期學習 c++,反正我大學的時候是這樣的。然後學習了語言之後可以做很多事,最簡單,最有用,最好做的就是做演算法題。比如:可以去杭電的 OJ 系統,北京大學的 OJ 系統上做題,實踐你學到的語言。

杭電的oj系統:Welcome to Hangzhou Dianzi University Online Judge

北京大學的oj系統:Welcome To PKU JudgeOnline

演算法學好了是真掙錢,而且你大一剛學習語言,可能沒有很好的實踐,用它做演算法題是最簡單,最有效的實踐。

大二可能會開一起計算機組成原理,編譯原理,數據結構,計算機導論等課程,總之,大學期間教的是基礎,但是基礎真的真重要。尤其是你還說,喜歡去谷歌,像谷歌這樣的大公司更重視基礎和原理,沒事多看看書,深入一些,不要老是講完課就拉倒了,多思考,深入一些,去圖書館查資料等,讓自己學到的知識更系統一些。不要想著,我學到了就馬上能夠做什麼?大學期間紮實基礎我認為是最重要的。

之後,你通過這一些列學習找到興趣之後,可以再著手利用自己學到的知識,做點事情。千萬別著急。找到深入的點之後,比如,你可以遇到了 java,感覺java不錯,那就深入一點,基礎紮實後,抽時間做個web網站,實踐一下,比如,你可能喜歡演算法,可以再去系統的研究一些開源的庫,比如:人臉識別演算法等。大一大二先把基礎紮實好,大三大四,利用這些基礎再加上學習,做點東西挺好的。

最後,可以關注我的公眾號:非著名程序員,每天都分享一些技術文章。


本人和題主一樣,基本上也是從大一大二開始迷茫,然後一步一步的摸索著前進,直到研究生畢業,雖然在互聯網領域小有成就,但如果在大學期間就能認清現在所知道的或者有個很牛的學長帶著學習的話,我相信今天能夠取得更好的成績。

因此,從研究生期間,我就一直很想做一件事情:幫助更多的想要從事於互聯網的計算機專業或者非計算機專業的大學生更好的認清互聯網這個行業,並且在大學期間能夠培養起企業認可的相關技能。

這件事情,我想了大概四年,也在此期間不斷和大學生們交流,期間還在大學裡辦了大半年的計算機培訓,主要教授Android開發知識。這幾年,我收集了太多學生們的反饋,和我當年的困惑一模一樣,對於想要學習、有明確目標(比如題主想要進Google)的同學來說,最大的問題就是要達成目標,需要學習哪些知識?如何學?學習的路線是什麼?等等一系列的問題。

因此,為了回答這些問題,我最近準備開一場知乎Live:大學四年,如何成為專業程序員,希望能夠幫助更多的同學通過四年的努力,達成自己的既定目標。

上面簡單介紹了以下背景,下面簡單回答下題主的問題,我將從我剛剛提出的學習哪些知識、如何學以及學習的路線三個問題來進行回答。

學習哪些知識?

首先我很贊同第一名回答者 @張國健 提到的幾點建議,我這裡也按照他的思路重新闡述一遍:

1)認真學好數學課。

數學是計算機的理論基礎,數學知識學不好,會成為計算機專業道路上最大的瓶頸,當然啦,對於大部分程序員而言,還沒有到數學知識學不好,就做不好編程工作的層次,因為能力沒有達到那個層次或者從業方向是向其他崗位靠攏的(比如管理崗、工程管理等,展開講太多了,就不展開了)。對於計算機專業的學生來講,工作之後的前3年,甚至前5-10年都不會達到這個層次,具體什麼時候達到數學這個瓶頸,就要看個人的能力了。

因此,對於計算機專業的學生來講,數學既重要也不重要。重要是因為,數學很可能成為未來職業生涯中的瓶頸,不重要是因為在未來幾年的工作當中,可能根本用不到數學。不過我的建議還是要認真學習,雖然在後續幾年的工作當中用不到,但是因為大學期間好好學習了,過幾年再拾起來也會相對容易很多。另外,對於想要從事人工智慧方向的同學,那在大學期間學好數學是再重要不過的了。

其實,對於計算機專業的同學來說,上的數學課還是挺少的(這裡我拿出了我大學期間的成績單數了下),學好這些課程稍微下點功夫,還是挺簡單的,這裡列舉一下比較重要的幾門數學課:高等數學、線性代數(矩陣知識在編程中運用的特別多)、概率統計(不只對計算機,對生活也很有幫助)、離散數學。好吧,列舉下來還真的很少,大學四年只需要把這四門數學課學好就可以了,當然如果個人對數學比較感興趣,可以更深入的學習其他數據課,什麼組合數學之類的。

最後,補充一點知識:為什麼說數學是計算機的理論基礎?回答這個問題就需要對計算機歷史有些了解,這裡簡單概括下,計算機之所以出現是數學家們想要實現更快的計算速度,因此數學家們就開始研究如何通過機器來解決數學問題,比如巴貝奇的差分機和分析機、圖靈提出的可計算理論等等,都是為了把數學問題轉化為機器問題,而處理這個問題的機器一步一步地發展成了今天的計算機。

補充以上的知識是為了說明,很多時候我們不知道為什麼學或者學來做什麼用,是因為我們還沒有意識到事情的本質或者事情的全貌。因此建議計算機專業的同學,為了能夠夠好的提升自己的專業能力,多了解下計算機的發展歷史,儘可能地去了解計算機的全貌。

2)花200%的精力學好計算機專業課程。

既然想要成為計算機專業人員,那麼計算機專業課程是肯定需要認真去學習的,並且需要下200%的精力來進行學習,吃飯睡覺都要想著如何學好。

大學本科教授的計算機專業課程都比較簡單,包括:C語言程序設計、數據結構、資料庫課程、操作系統、計算機網路、彙編語言、計算機組成原理、編譯原理、軟體工程等,其中數據結構、操作系統、計算機網路、計算機組成原理是比較入門和基礎的課程,彙編語言、編譯原理、資料庫是相對高級一點的課程,軟體工程估計聽了也不懂,需要到企業中磨練一段時間,慢慢思考。

在學習以上的課程時,需要知道學習這門課的目的,比如為什麼要學習數據結構?為什麼要學習操作系統?而這門課的目的是不會有人主動告訴你的,需要自己在學習的過程中逐漸思考得來的或者碰到好的老師,可以課後進行溝通交流。

另外,為什麼說要花200%的精力來學習,是因為不僅僅要把老師講的東西學會,還需要閱讀大量的經典書籍,比如深入理解計算機系統(原書第2版) (豆瓣)、計算機程序的構造和解釋 (豆瓣)、編譯原理 (豆瓣)、設計模式 (豆瓣)等等,這些書籍都需要花很長的時間和精力來啃,沒必要在大學期間都啃完(估計也啃不完),重要的是啃了就要學會,就要運用到實踐當中。

計算機專業的學生在學習上有幾點是非常有優勢的,一是資源多,從計算機發展到現在,很多論文、文獻都是開源的,直接就可以在網上找到;第二就是可以很方便的進行實踐,比如在學習操作系統時,可以自己編寫操作系統當中常用的演算法然後進行比較等,所以,在學習計算機專業課程時,光理解是遠遠不夠的,必須要動手實踐起來,把學到的知識用電腦實現出來,這是最重要的。

3)深入學習一至兩門編程語言。

在學習計算機專業課程中,我們需要將學習到的知識應用到實踐當中,如何應用?那就是需要學習一到兩門編程語言了,目前比較火的編程語言有Python、Java、PHP、C、OC等,個人比較建議Python和Java,不過也要根據自己想要從事的方向,比如從事服務端開發就是Java居多、從事Android研發就是Java、從事iOS研發就是C和OC、從事人工智慧方向就是Python、從事嵌入式就是C,不懂的同學可以私信我或者參加我的Live:大學四年,如何成為專業程序員提問,我會給予針對性的建議。

編程語言學習起來比較簡單,搞清楚編程語言的相關特性和語法,剩下的就是實踐,通過編程語言將學到的計算機專業知識進行一一實踐,很快就能熟練的掌握該編程語言了。如果想要更深入的進行學習,可以鑽研下編程語言的源碼,比如Java的源代碼,比如我們經常會用到Java中的HashMap,而HashMap的理論基礎又是基於我們的專業課數據結構的,那Java源代碼中是如何實現HashMap的呢?和我們在數據結構這門課中學習到的有何不同呢?

另外,也可以多讀些對應編程語言的經典書籍,比如Java的有JAVA 2核心技術 卷Ⅰ (豆瓣)、Java並發編程實戰 (豆瓣)、Java 8實戰 (豆瓣)等,這樣可以更專業、更系統的學習這門語言。

最後,個人覺得也是最重要的一點,在學習編程語言時,一定不能只局限於如何使用該語言,比如如何使用Java中的HashMap,一定要把該編程語言和專業課程相結合,比如HashMap的實現原理、這些原理運用了專業課中的什麼理論知識等,這些都需要去思考,只有思考了,才能把編程語言了解的更深入,才能把專業課了解的更深入,切記!

4)英語

英語的重要程度和數學一樣,既重要也不重要,當時如果英語好了就是個人的一個優勢,並且在學習時如果有了英語這個技能,可以直接閱讀原始的資料,並且學到後期時,中文資料幾乎是沒有的,這個時候就必須需要英語了。

對於題主,如果要去Google,那英語是必須的,必須能夠流利的表達。

如何學?

上面我們回答了對於計算機專業的同學,大學四年應該學習的知識,接下來,來回答下如何學習這些知識。

1)找到組織。

通過上面的整理,我們發現在大學期間,想要把這些知識都掌握並且進行熟練運用,是非常困難的一件事情,因此,一個人單打獨鬥來完成這項艱難的任務是非常困難的,這個時候你就需要一個一起學習的小夥伴了。

一般的大學,都會有相應的計算機協會或者計算機愛好者團隊的,不過話說回來,這種協會一般都比較水,沒有教你如何學習,平常也只是見見面,吃吃飯,在學習上形同虛設,不過可以先加入,探探底,因為你可能在裡面碰上你們學校的大牛,然後可以跟他一起學習。

如果在學校內找不到這樣的組織,那就需要發揮你的個人魅力了,找到你們班願意一起學習編程的,和他一起約定,大學四年一起努力學習,不過這樣就非常考驗你們兩個人的自律能力,另外一個問題就是沒人指導,這個可以找老師或者大四的學長來指導。

我在大學期間是比較幸運的,加入了一個非學校內部的團隊,這個團隊是我們畢業的一個學長建立的,他自己提供資金給我們租房子,我們每周一起學習,團隊的隊長,每周末會給我們講一天課,我在這個團隊中也結識了一位志同道合的朋友,我們一起相互監督學習。

另外,說到這裡,我打算在我的大學四年,如何成為專業程序員Live中組建一個學習群,方面大家一起學習交流、我也會在群里分享一些學習上的建議、方向和資料,有興趣的同學不妨參見下。

2)博客。

學習最好的方式就是講出來,如果沒有講的條件,那我們就寫出來。寫博客是最好的學習總結的方式,將自己思考、實踐得到的東西一一的通過博客整理出來,一方面是自己整理了自己所學到的知識,另一方面,當學習的知識多了以後也可以作為複習的資料來反覆閱讀。

寫博客還有很多其他的好處,比如鍛煉了自己的寫作能力、表達能力等,在畢業找工作時,大學四年積累的博客文章也是為自己的簡歷增加非常漂亮的一筆。

3)實習或項目。

我們在學習專業課和編程語言過程中,所編寫的程序一般都比較短,並且也沒有同其他人合作開發的機會,因此,如果有機會,最好還是到公司裡面去實習一下。對於大城市的同學而言,實習機會還是比較多的,一周實習大概三天,企業還是可以接受的,實在不行就大四齣去實習,也能實習一年,實習時可以接觸到真正的企業開發環境、開發流程、協作流程等,也會漸漸明白軟體工程這門課中想要解決的問題。

對於沒有實習機會的同學而言,則可以和你的小夥伴一起開發一兩個小型的項目,比如做個網站、開發一個APP等,這方面的資料比較多,可以從網上找得到的。

學習的路線是什麼?

對於學習路線每個人都有自己的特殊情況,比如有的人的專業就是計算機專業,那麼在學習時就不需要考慮本專業的問題,而對於專業不是計算機的同學來說就需要考慮怎麼在本專業順利通過的情況下來學習計算機知識,不過總體來講,學習路線是一致的,只是進度快慢不同而已(學習所花的時間不同),我在這裡先給出大致的路線,具體的學習計劃我會在我的Live:大學四年,如何成為專業程序員中進行說明。

為了激起自己的學習興趣,首先從實踐開始,即首先學習一門編程語言,並且能夠開發出一些好玩的東西,比如學習Android可以開發一個記賬軟體之類的、學習iOS也可以開發出一個記賬軟體、學些後端開發可以開發一個小型的網站,這個學習過程,如果能夠堅持學習的話,按照我知道的進度,一年的時間是綽綽有餘的(其實半年的時間就可以...)。

掌握了編程語言之後,就需要回過頭來使用編程語言來實現已經學過的計算機專業知識,比如將數據結構課程中學習到的所有的數據結構都實現一遍,課後的練習也都通過編程語言實現一下,這個階段一方面可以熟練已經學到的編程語言,另一方面加深對專業課程的理解。這一階段需要看的書就包括編程語言方面的進階書籍和數據結構、計算機操作系統、計算機網路、計算機組成原理這樣的基礎專業課程,如果在這個階段學校還沒有教到的課程,自己則可以提前學習,網上的相關教程還是挺多的。

學完第二階段並且再準備下相關演算法的知識,刷一刷演算法題庫,基本上百度、阿里巴巴、騰訊這些公司進去是沒有太大問題的,不過如果我們想要進一步提高,則需要學習下更高級一些的課程,也就是資料庫原理、彙編語言、編譯原理、設計模式等等之類的課程,學習完這些課程之後,我們會站在更高的層次來了解整個計算機程序是如何運作的,在這個階段就需要看些諸如前面提到的深入理解計算機系統(原書第2版) (豆瓣)、計算機程序的構造和解釋 (豆瓣)之類的書籍。

第三個階段學完後(我估計學不完第三個階段就畢業了。。。),就需要學習一些工程實踐方面的知識了,比如架構設計等,當然這些知識也可以在前面三個階段中穿插著看,不過估計也看不懂。。。

學習路徑部分是針對純技術的提升設定的,這裡面不包括個人的人生觀、世界觀、價值觀的建立所需要學習的知識、也不包括個人修養、溝通能力的建立、同時也不包括個人商業能力的建立,畢竟這些需要一點一滴的積累,也不在題主的問題之內,這裡就不闡述了,感興趣的同學可以私信諮詢~

最後,在提升自己專業能力的道路上是非常艱辛的,需要同學們保持專註,始終如一,希望同學們能夠通過四年的修鍊,達到自己理想的目標。

最後的最後,我的知乎Live:大學四年,如何成為專業程序員將於10.28日開講,感興趣的同學可以參加下哦,我會在Live中闡述怎樣利用大學四年成為專業程序員,也會為每個提問的同學給予最符合你的學習方式、同時也會組織參見的同學一起學習編程、一起分享資料、一起做一些有趣的項目。


既然那麼熱愛這個專業,應該立即行動,你覺得為時已晚的時候,恰恰是最早的時候。

從小目標入手,比如先粗略看完一本Java入門書籍、跟著裡面示例寫完代碼。

首先你要選擇未來的語言,上網可以自己了解下,C++、Java?

然後只要一台筆記本、一本入門書、或者一些入門視頻、或者網上入門教程(現在網路這麼發達), 躲在圖書館角落,聽著《Fade》,往死里敲代碼,一旦入門,未來的路自然而然就跟清晰了,自己都急著想去了解各種框架、各種組件、各種云云等。

別去在乎別人做什麼,怎麼LoL,老師怎麼講課,未來的路是你自己走的。


話說,當年大一的C語言課程,一個學期只去了兩次。最後期末大作業,我用qt在linux下寫了一個五子棋。不過最後的那個AI寫的實在太笨了~~

給題主如下建議:
1. 抓住任何可以動手寫code的機會,千萬不要copy別人,或者baidu

2. 記住任何你不認識的專業名詞,一有空閑時間,馬上google/wikipedia

3. 天馬行空,每次都定一個很裝逼的target。當你成功一次後,你會愛上裝逼的,相信我。(還是大一,雖然當時我fpga都不知道是什麼東西,但在一個哥們的慫恿下,我們打算做一個高並發的萬兆路由器。雖然最後失敗了,但我大學從來沒有去聽過數電老師講過課。當時一個暑假都在研究BDD演算法,把自己害摻了)

記住,充實並快樂著,與君共勉,加油!


哇,迷茫卻又想提高,刷acm!
雖然和做工程做項目距離比較遠,不過能很快找到學習、比賽的樂趣,而且有效提高寫代碼水平和數據結構與演算法姿勢水平。
推薦一個演算法競賽網站codeforces簡稱cf,每周有一兩個比賽,div2的A題一般很水,學了編程的小學生都會做,後面的題難度有明顯的層次區分。就算只做A題得到accept,也是通過編程正確解決具體問題,對沒接觸過的人算是很大的提升。
不會的題通過上網搜各路菊巨寫的題解可以知道演算法,能知道你本來可能很難具體使用到的演算法。了解和使用是很不同的,課上學了某個演算法,也許只是期末考試一個選擇題,而真正實現起來,你會發現許多沒注意到的問題,實現後才算真正懂。
還有cf有天梯分,還能看其他人的比賽成績,你可以很容易看到世界上的碉人到底有多碉,能發現自己發展的空間。(還能找到天梯上分的快感,上dota2 6000分也是上分,上王者也是上分,不如上點更碉的分?)
當然想真正學好的話需要系統地學習各種演算法和數據結構,比賽、上分的快感會讓你更有動力去學,就像為了上分去人機練英雄、看直播看錄像一樣。
你們學校有acm隊的話可以加入訓練,參加區域賽,進軍world final,走向人生巔峰!沒有的話可以找老師建一個。
我雖然演算法競賽很弱,cf都沒橙名,就是喜歡,希望大家也來一起體驗演算法競賽的快感!
(有一次直播複習計算機網路的時候,一個碉人開箱評測的直播間關了,有幾萬人被鬥魚擼到我的直播間,彈幕讓我教點什麼,我就高興滴教了他們怎麼上cf刷題…)


找個程序猿帶吧,有動力,還能面向對象編程。。
像我就對計算機妹子感興趣。。。


雖然我還沒結束大學,但我也想說兩句。
首先,要確定自己是不是真的「熱愛」這個專業。
首先計算機專業只是個大類,細分下來是有很多小的專業的,比如軟體工程(編程)。
如果你說你熱愛計算機專業,要麼你是對這個專業的大多數部分都饒有興緻,要麼大概你還不明白計算機專業到底是什麼。

然後,如果熱愛一件事情,那就應該主動出擊,而且是不由自主地主動出擊。
大學了,如果只是按照老師的軌跡,聽聽課,那必然是不夠的。你想想兩個學期才學了個c和c++的基礎使用,難道今後的學習內容要指數增長嗎?大學的課很多都只是介紹了基礎的知識,到實際應用你就會發現這個也不懂那個也不懂。
上java web,心潮澎湃的超量完成了老師布置的作業,然後老師說,你現在做的,反正以後都用不上。。。。。。
所以還得靠課外的積累(前提是懂得了基礎的知識)

至於其他同學,你或許沒注意到或者注意不到那些認真的同學,或者沒注意到他們認真的時刻。計算機專業這麼熱,一部分都是泡沫,不是每個人都想著成為頂尖geek報了名,有些人只是想混一混或者認為玩遊戲是計算機專業一部分而已。但如果真的想要在這個行業干出一番事業,水一定是不行的,努力一定是要有的,孤獨一定是不會少的。。。。。

想成為大牛的話,就儘早讓自己遭受挫折吧,比如價值觀人生觀崩塌之類的。只有認識到了自己和大牛之間實際的差距,才能醒悟原來自己在迷茫之前就應該開始努力了。


充分利用MOOC平台!中國大學MOOC、網易雲課堂都可以 —— 大一,什麼都來得及努力!先學好一門語言,得是可以熟練編程的那種才算學會了;然後學好數據結構與演算法。這些是今後求職筆試面試要看的基本功。這樣基本上不用發愁找工作的事了……
然後是努力修鍊去找個更好的工作,需要你把操作系統、網路、資料庫學紮實。然後找實習 —— 前途一片光明噠~ (當然PAT【http://www.patest.cn/articles/2】可以幫你得到更好的面試機會……^_^)


先裝個雙系統,沒有特殊需求就不要用windows,既可以裝逼,又可以學知識。當然要加幾個企鵝群,沒事兒就看大佬們裝13,拓寬自己的眼界。

如果不準備搞科研,那麼編譯原理、操作系統這些課程,作一些了解即可,確保自己有這麼個知識框架。線代、離散這些也是要有知識框架,細節不用太深入,以後用得著的時候再深入一下就好了。那麼剩下的時間幹嘛呢?當然是實踐啦,悶聲刷代碼,這是最好的。別說多大的東西咯,先自己做一個播放器啦、畫圖軟體啦。這個過程就是培養自己解決問題的能力的。

那麼還要提一下數據結構和演算法。基礎的部分,那要爛熟,隨便換種語言,熟悉一下語法就能寫出來。高級的部分,用得著的時候再說吧。東西太多,人的精力是有限的,不可能都學完。

職業技能不用刻意刷,都是到了公司里上了項目做做就會了。


推薦閱讀:

有哪些實例可證「世界是虛擬的」?
十行以內,你寫過哪些比較酷的 Matlab 代碼?
如何評價 Kaiming He 在 ICCV 2017 上拿下雙 Best 的 paper?
寫一個操作系統內核有多難?大概的內容、步驟是什麼?
iPhone 5s 配備的 A7 處理器是 64 位,意味著什麼?

TAG:程序員 | 編程 | 大學生 | 計算機科學 | 計算機專業 |