大家好,我是白雲。
有個粉絲朋友私信問我:今年剛高考完,想報計算機專業,想暑假自學,應該怎么學?今天老白就針對這個問題好好聊聊,之前也聊過自學這塊說的也很全,但今天針對學生這個全體好好聊聊。
大學計算機專業學的內容是什么?
主要學習以下五個方向:
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的分水嶺
以上其實是大廠面試官的考核范圍,並且他們之間有前置知識點的相關性,簡單點說:不會基礎語言不會算法和數據結構,你肯定沒法刷題,也沒法看懂計算機網絡和操作系統、組成原理等等。
重點強調下算法,非常重要,無論是讀研讀博深造還是通過大廠的面試,算法都是必須的。