大家好,我是白雲。
有個粉絲朋友私信問我:今年剛高考完,想報計算機專業,想暑假自學,應該怎麼學?今天老白就針對這個問題好好聊聊,之前也聊過自學這塊說的也很全,但今天針對學生這個全體好好聊聊。
大學計算機專業學的內容是什麼?
主要學習以下五個方向:
1.C/C++語言
雖然你只有很小概率在工作之後用到它,但它依然無比重要。C Primer反覆看,然後一行行在電腦上敲出來。
C語言最難懂的是指標,這個暑假掌握還是比較難的,記憶體是什麼,指標的本質是什麼,程式為什麼會崩潰,這些問題弄懂了基本就通了。
推薦以下C+書籍:
《C++ primer》《Essential c++》 《C++程式設計思想》 《effective C++》《more effective C++ 》《Think in C++》《C++ primer plus》《C++ coding standard》。
2、演算法
演算法挺難,但無論是學習計算機專業還是未來找工作,它都無比重要。
推薦一本高中生都能看懂的演算法書:《我的第一本演算法書》
3.資料結構
資料結構的重要性相信不需要強調了,不僅是工作後必備的技能,如果未來要參加研究生考試也是必考科目和拉分項。入門的話推薦《大話資料結構》,這本書詼諧有趣,在不知不覺中讓你掌握了資料結構,再推薦一本稍稍難一點的《資料結構和演算法分析》。
4.作業系統
只要我們使用計算機,就會和作業系統打交道,接受它的稽核與反饋。很多“熱門”的技術話題,背後都離不開作業系統。比如:
- Nginx 的高併發性為什麼能實現?
- MySQL 的 I/O 效能到底怎樣提升?
- Redis 中經典的 Reactor 設計模式由什麼技術支撐?
- Node.js 的 I/O 模型長什麼樣?
甚至,在一個數十萬行程式碼的大專案中,仍然會遇到一些基礎性的問題,比如記憶體為什麼會洩漏,服務程式為什麼會 dang 掉,檔案為什麼打不開等等。
5.計算機網路
如果你要入門 HTTP,首先最好書籍就是《圖解 HTTP》了,作者真的做到完完全全的「圖解」,書籍不厚,相信優秀的你,幾天就可以看完了。
學習前的準備都有哪些?
下載和安裝
- 儘量去官方網站下載你要的軟體。(過時的軟體如vc++6.0顯然沒辦法去官網下載了)很多搜尋引擎都會將你要搜尋軟體的官網標註出來。看到出來的搜尋答案列表後面跟個“官網”準沒錯,後面跟個“廣告”就基本可以跳過了。有的沒收錄官網的,就需要用經驗判斷了。
- 在網頁上找軟體時,注意你點的東西是不是一張圖片,而且這張圖片的角落還寫著“廣告”兩個字。如果是,這個顯然是不能下載你想要的東西的。
- 下載站裡面,如果遇到什麼高速下載器下載,通通無視掉,只管找普通下載的渠道。當然,現在很多下載站流行留百度網盤連結或者公眾號掃碼獲取下載連結,這兩者一般都是沒啥問題的(不保證無毒),就是麻煩而已。
- 安裝軟體時,如果你看到是個啥下載器,建議直接關閉,重新找資源。
- 安裝軟體時不要一直點下一步,多注意安裝介面每一步可以用滑鼠打勾勾的東西,如果這些後面是些安裝xxx的,去掉選中,就不會安裝了。當然自啟一般也都去掉比較合適,快速啟動欄看需求。
安裝系統
搞個虛擬機器軟體,試用幾十天十幾天都無所謂,反正安裝系統要不了多久。
具體怎麼找虛擬機器軟體,去各種論壇、部落格、知乎之類的平臺找資源就好。
後續在 windows 程式設計學習過程中,也可以用虛擬機器來完成一些比較“危險”的操作。
學會裝 windows 之後,也可以試著裝 Linux 甚至是 Mac 。
有些勸新人用 Mac 或者 Linux ,這沒什麼不好,但是大多數人用 Windows 會更合理。如果你電腦用得很熟,上 Mac 或者 Linux 那肯定沒問題。
然而很多課程上老師準備的課程資料只有 win 版本的,其他系統的可能要自己去找,而且還不一定契合課程,萌新會很痛苦的。
瞭解你的作業系統
很多時候,我們與其說用電腦做事,不如說我們在用作業系統做事。
事實上很多程式語言都會用到系統層面的介面,而作業系統本身的設計也是遵循許多有助於程式設計的原則的。
首先你要搞明白檔案是個什麼東西,檔案和資料夾區別是什麼,檔案的字尾有什麼用?
擴充套件一下,比如 MP3 和 m4a 都能播放音樂, MP4 和 avi 都可以播放視訊, png 和 jpg 都可以顯示圖片……
你要明白剪貼複製之類的是什麼意思,滑鼠左鍵和右鍵有什麼用,滾輪除了瀏覽網頁還可以關閉瀏覽器標籤頁……
你要去接觸你係統上儘可能多的功能,比如用 cmd 命令提示符來關機、用 Ctrl + R 來開啟軟體、使用 Win10 的搜尋功能來查詢檔案和應用……
瞭解CPU、記憶體、顯示卡、硬碟等硬體有啥用。
不說精通,你至少要用電腦跟用紙筆一樣熟練。
進大廠的要求
要想畢業就進大廠,本科拿到月薪15K以上,碩士拿到25K以上,做好以下這些很重要:
- 選定一門主攻的基礎語言方向,比如Python、C、Java等,並真正攻克它;
- 演算法和資料結構:陣列、連結串列、二叉樹、堆疊、排序演算法、B+/B-樹、DP(動態規劃)等;
- 瘋狂刷題,撒比演算法題、Leetcode等等,都挺不錯,刷起來
- 計算機網路:HTTP、DNS、ARP、TCP、IP、ICMP、UDP等;
- 作業系統:IO、儲存器、多執行緒/多程式、同步機制、處理器排程及死鎖、裝置管理、通道等;
- 計算機組成原理:馮諾依曼計算機組成、計算機層次結構、計算機效能指標等;
- 多實踐多上機,機房要常去
- 抓住一切可以實習的機會,是否有實習經歷往往是大廠給不給offer的分水嶺
以上其實是大廠面試官的考核範圍,並且他們之間有前置知識點的相關性,簡單點說:不會基礎語言不會演算法和資料結構,你肯定沒法刷題,也沒法看懂計算機網路和作業系統、組成原理等等。
重點強調下演算法,非常重要,無論是讀研讀博深造還是通過大廠的面試,演算法都是必須的。