圖 by:趙學弟@清華園面試
關於做者: 程序猿石頭(ID: tangleithu),現任阿里巴巴技術專家,清華學渣,前大疆後端 Leader。 歡迎關注,交流和指導!
背景
今天 1024 程序猿節,首先祝你們節日快樂~算法
熟悉石頭的朋友知道,我本科就讀於某985(CSU,專 「教如何打 CS」 的大學,也稱「長沙左家壠男子高等職業技術學院」),而後碩士保送到某 Top2(THU,也叫「北京五道口職業技術學校」)。數據庫
碩士畢業以後,石頭也一直從事編碼相關工做,從大一開始接觸計算機,至今也有 10+年頭。計算機相關專業有一個明顯的好處,就是你在大學所學的相關專業知識和你就業聯繫得很緊密。因此,在學校的時候,專業課就必定要好好學習和理解。
編程
若是不是計算機相關專業呢?前兩天我一個公衆號的讀者朋友就比較焦慮,找我溝通說目前在某廠實習,由於不是科班出身,明顯感受和周圍同期入職的科班實習生要差一些。後端
其實,這也不要緊,從看到這篇文章的時候開始,就積極準備,彌補相應的專業知識便可。設計模式
積累專業知識,重視基礎
專業基礎知識其實才是重中之重,也是最能拉開程序猿之間差距的地方。在阿里社招面試的過程當中也是很是看重基礎的,過去項目不牛 X 不要緊,基礎知識必定得雜實。微信
石頭在參與社招面試過程當中,領導也特別交代,除了通常的溝通交流外必定要看基礎,基礎好,解決問題時有邏輯、有條理,簡單的代碼題目能寫個八九不離十,基本上一面二面也就過了。網絡
那麼,到底有哪些專業知識呢?就以我本科 CSU 大學給安排的課程來挨個闡述。我還特地去翻了下我以前的成績單,有各個學期的各個課程安排。
-
可視化程序設計基礎:其實就是上面提到的 VB,經過可視化的效果來正向反饋本身學習。其實,也能夠經過好比用 HTML+JS 來體驗一下,對「編程」有個直觀感覺做爲入門也不錯。
-
C/C++程序設計基礎:C/C++ 仍是很是基礎的,建議入門編程以後都掌握一下。
-
離散數學:離散數學對鍛鍊邏輯思惟等仍是有很大的幫助。印象中當初老師直接在課上跟咱們玩了一個「數十八羅漢」 遊戲,就利用了離散數學裏面的思想讓老師可以保證贏。
-
數據結構:這個不言而喻,後文詳述。
-
算法分析和設計:這個不言而喻,後文詳述。
-
彙編語言程序設計:這門課程有利於讓你們理解本身寫的代碼是怎樣被計算機認識,底層是如何運轉的。推薦學習,書籍可推薦王爽的《彙編語言》。
-
操做系統:隨便列幾個話題,看看其中的份量。進程、線程、死鎖,內存管理、進程調度、任務調度等等,是否是如今工做中也離不開。推薦參考書籍如:《深刻理解計算機系統》、《操做系統導論》。
-
計算機網絡:TCP/IP,路由,網絡 7 層/ 4 層協議,HTTP,DNS 等等。推薦參考書籍:《計算機網絡-自頂向下方法》、《TCP/IP詳解》等。
-
數據庫系統:ACID,作開發也繞不開的話題。推薦書籍:《數據庫系統概念》、《高性能MySQL》等。
-
編譯原理:跟上面的彙編同樣,有利於瞭解程序背後是如何運轉。這門課也比較難,印象中是我當初全部專業課中,本人考試得分最低的一門,😂。詞法分析、語法分析、語義分析,中間代碼生成優化等等。建議通常人有個大概瞭解。推薦書籍《編譯原理》。
以上是我挑選的部分專業課程,其中相關書籍的推薦僅供參考。其餘的課程還有諸如:計算機圖形學、軟件測試、軟件體系結構、設計模式、軟件度量和應用等。
從中可看出,正如我前面所說計算機相關的專業基礎知識和就業聯繫得很緊密。若是是在校生,就必定不要浪費時間、抓住這些專業課程的學習機會。否則畢業後從事了編程這個行業,也仍是會回到這些基礎知識上,正所謂「欠下的債,早晚都是要還的」。
何況,學校的課程學得好,還能幫助得到獎學金、保研、找工做等等,一舉多得,何樂而不爲呢?
就拿我來講,自認爲不是特別聰明,但我足夠努力呀。因我出生在農村,接觸電腦比較晚,但在大學的時候相對比較勤奮,學好專業課程,各類獎學金拿得手軟(得交學費呀,軟件工程專業的學費可不便宜呢),最後又成功保研清華。固然,考得好就不必定等於專業課程學得好,但學得好老是對本身有好處的。
其中,上面提到的「數據結構和算法」這個確實是我認爲的重中之重,就算在精力有限的狀況下,其餘能夠放鬆些,但也不要放過這個話題。從我以前寫的《有了這份程序員面試指南,你離大廠Offer還遠嗎?》 這篇文章中也能夠看到,數據結構和算法一直是各大公司面試考察的重點。
好在如今網絡資源很發達,網上有各類不錯的課程能夠學習。這裏我推薦,清華大學學堂在線的在線課程《數據結構》,分爲基礎和高級上下兩門課程。這門課程是國家精品課程,由鄧俊輝老師講授,在學校時,我上過鄧老師的幾門課程,真的很贊,他在講授「數據結構」和「計算幾何」方面擁有20多年的經驗,課堂用的 PPT 和動畫效果也特別贊。最關鍵的是,這課程可直接免費白piao,不香嗎?
有不少人說數據結構和算法沒用?那只是他以爲沒用而已,或者他的工做當中沒用而已。我一直有個觀念就是,程序員這個羣體自己也是符合金字塔模型的,不必定非得每一個人都是編程高手,找到適合本身的,本身待着最舒服的位置就是棒棒噠。
我在以前的這篇文章也闡述了對待基礎知識的見解——《從一道面試題談談一線大廠碼農應該具有的基本能力》,由於在平常有些場景下,「複製粘貼」工程師貌似也夠用了,遇到問題有更高水平的人來幫你解決就行,你們都同樣的話,怎麼體現高手水平呢?
不過從用人單位角度想,固然是更但願招聘更加優秀的選手,怎樣體現優秀呢?候選人基數太大,怎麼篩選,其實也就「高考」同樣嘛,經過「考試」擇優錄取而已。
有時候感受大部分程序員都被大量的需求壓迫着,被產品經理催促着,倉促地碼着繁瑣的業務代碼,不斷的改着 Bug 又引入新的 Bug。業務代碼重要麼,固然重要(代碼就是服務於具體業務的),但同時也仍是但願咱們不要拋棄一些基礎的東西,多培養一下咱們的編程素養。
咱們在用編程語言,利用各類工具來實現咱們想要達到的目的的時候,能作到「知其然,知其因此然」豈不更好?更況且不少時候要解決的問題,偏偏是須要上面提到的專業基礎知識的積累。
勤思考、多總結
這個其實沒必要多說。無論那個行當,作到 「勤思考、多總結」 百利無一害。我在《10 年 bloger 告訴你要不要寫博客,又該如何優雅地寫博客?》 這篇文章中也提到了,我其實當初最初玩 blog,更多的就是抱着學習總結的態度。
例如,下圖是我在讀本科和碩士期間相關課程的學習材料,包括老師課件,課程做業和學習筆記和複習資料等,這種平日積累總結頗有效,對於臨近期末考試也能作到不慌不亂,仍是頗有做用的。
目前我正在梳理相關的內容,後續我將逐步整理其中的精華內容,分享給你們。
哪怕正式工做以後,寫週報、月報等也都是階段性的總結,再好比晉升答辯等等都是須要你平常的思考積累和總結的。反正未來都會用得着,何不如今就開始鍛鍊呢。
在平常學習和工做之中,咱們看到一個問題的時候,要學會思考背後的道理,好比在接到某個需求的時候,思考這個需求最終是要解決具體什麼問題,有沒有更好的解決方案?在閱讀某段代碼,思考原做者爲何要這麼設計?
就好比看到這段代碼,你可否多思考一下其中的奧祕?
public static boolean isEqual(byte[] digesta, byte[] digestb) {
if (digesta == digestb) return true;
if (digesta == null || digestb == null) {
return false;
}
if (digesta.length != digestb.length) {
return false;
}
int result = 0;
for (int i = 0; i < digesta.length; i++) {
result |= digesta[i] ^ digestb[i];
}
return result == 0;
}
上述代碼中,比較兩個字符串是否相等,按道理,其實中間某位不相等就能夠直接返回了,但爲啥要遍歷完了再返回,這麼作的目的是什麼?在問了爲何以後,你可能就會知道,原來這麼作是爲了防止計時攻擊。完整文章可參考本人寫的這篇文章——《這 10 行比較字符串相等的代碼給我整懵了,不信你也來看看》。
小福利
最後,送你們一點小福利。(感受是個公衆號號主,不發個噹噹優惠券都很差意思了。)
我把上面石頭提到的書整理一下,列到下面,感興趣的同窗能夠購買,能夠多方對比下價格,目前噹噹每滿 100 減 50,最後我這邊有個專屬優惠可再省 40 元(160 買 400),只要結算時輸入優惠券碼【2YDRTV】便可。營銷套路,書價格天然提高了,不過總體仍是有必定優惠的,固然你也能夠到其餘地方購買, 我們的宗旨是哪裏便宜買哪裏便可。
這裏是推薦的部分書單:
啊,挑了半天好像最終只能選 10 本,下圖是石頭家書架躺着吃灰的部分書籍,也提供給你們參考。還有部分書用來墊顯示器等等了,就不拍了。你也能夠留言告訴你們,你的書還用來墊啥了?
如下是【博文視點】(左圖)和【機械工業出版社華章公司】(右圖)挑選比較經典的 CS 相關書籍,也一併提供給你們參考,趁活動價屯幾本也何嘗不可。
經典書籍(點擊放大掃碼識別)
總結
總體來說,針對「入門進階編程」這個話題,我談了談本身的理解,重點仍是要重視基礎,經過小項目正向激勵本身多主動學習,而後作到勤思考,多總結。
以爲本號分享的文章有價值,記得添加星標哦。周更很累,不要白 piao,須要來點正反饋,安排個 「一鍵三連」(點贊、在看、分享)如何?😝 這將是我持續輸出優質文章的最強動力。
程序猿石頭
程序猿石頭(ID: tangleithu),現任阿里巴巴技術專家,清華學渣,前大疆後端 Leader。用不一樣的視角分享高質量技術文章,以每篇文章都讓人有收穫爲目的,歡迎關注,交流和指導!掃碼回覆關鍵字 「1024」 獲取程序員大廠面試指南。
本文分享自微信公衆號 - 程序猿石頭(tangleithu)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。