我是如何提升本身的「編程能力」的?

上週的投票,你們最關心的仍是提升技術,那咱們今天就來聊聊這個話題。html

以前主要分享的可能是算法和數據結構方面(年後繼續),由於我認爲算法和數據結構是程序員最最最重要的內功,可是並非惟一。git

我本身做爲一個非科班的程序員,而且在工做中觀察了「這兩類」工程師的表現,我認爲科班和非科班最大的區別在於:科班的同窗知道去學什麼,問題出現了他知道本身是哪裏有知識漏洞;而非科班的,可能壓根不知道本身不知道什麼程序員

(解決方式:創建系統的知識體系、尋求老闆、tech lead 的指點,快速補充基礎並反覆學習。)github

所以這篇文章我想粗淺的聊聊成爲一個工程師須要掌握的大體學習路線,更多的偏入門一些,不涉及具體的工做方向。歡迎你們在文末分享你的學習心得,正如柏拉圖所說:web

人只有經過和別人討論,才能知道咱們的經驗是否是真實的。

文章略長,若是一次沒時間看完,建議先拉到文末參與抽獎送書活動~面試

若是把學習比做練功的話,我把個人學習內容分爲:算法

  • 修煉「外功」:偏應用
  • 修煉「內功」:偏基礎

二者配合,才能仗劍走天涯!數據庫

1、外功

1. Linux 操做系統

對於想作開發的同窗,若是仍是個小白,問我第一件事情該作什麼,我會強烈推薦先學習 Linux 操做系統,由於互聯網公司基本上大部分業務框架部署都是在 Linux 操做系統上進行的。編程

我認爲學習 Linux 操做系統的重點就在於學習各類強大命令如何組合運用。後端

一是由於工做中咱們常常須要用到,好比對各類日誌文件進行分析,寫腳本驅動機器幫助咱們工做。

二是面試時常常會給出一個需求場景讓你編寫相關的組合命令,好比統計一段日誌中各類 IP 地址出現的次數。

給你們推薦一本 Linux 界的「聖經」。

《鳥哥的 Linux 私房菜》蟬聯最受歡迎華語 Linux 書籍第一的位置,無人能撼動。

對於想走開發路線,或者互聯網技術路線的同窗,學習 Linux 絕對是必須的。

這是一本既能幫助你入門,又能隨時備查的工具書。更特別的是鳥哥的寫做風格,很是口語化,讀起來感受像是有人在跟你實時互動聊天。

建議想要學習的同窗能夠收藏一本電子版隨時備查。第一次閱讀的同窗估計會被它的厚度嚇到,但其實沒有必要去一字一字的所有讀完,快速的看完前面十章,你就會對 Linux 有一個初步的認識。之後須要用到哪些命令和知識隨時再查就能夠了。

2. 學習一門語言和框架

對 Linux 操做系統有了必定的瞭解以後,你們就可選擇一門編程語言及其通用框架進行學習開發。

語言的學習和框架能夠藉助的資料就不少了,每一個人的習慣都不同。喜歡跟着視頻學習的能夠去慕課網、極客時間,上面有不少性價比很高的課程。另外推薦你們能夠加入一些交流羣,嗯,好比個人讀者交流羣,另一些框架或者語言的官網裏面都會有本身社區和交流羣的聯繫方式,裏面會有不少精華帖子和大牛進行分享。


說回我本身,當時入門語言是 C++,研究生課程要用,沒基礎也只能硬着頭皮上了。

但其實不少 C++ 的課程或者書籍都是先講 C 語言,好比《C++ Primer》前面幾章都是講的 C 語言,因此也還好。

後來刷題的時候以爲 C++ 刷題有些麻煩,聽了朋友建議選擇了 Java,真心感謝他的建議,在這裏我也建議若是你不知道應該選什麼語言,本身也沒有特殊偏心的話,那就無腦選 Java 吧。

由於 Java 市面上學習資料很是的多,不管是國內仍是國外大廠 Java 的就業面都很是廣,對於新人來講目前是個很穩妥的選擇。

固然,若是你不放心,能夠在任何一個招聘網站上面查一查各類語言給崗位需求,只要不是那種很窄門的語言,我以爲學習都是沒有問題的。像 Go、Python、C++ 等等就業面仍是普遍的。

如今看來,我認爲這三門語言都是須要學習的:

  • Java 是綜合能力很強的語言,不少互聯網公司大型的框架或者開源項目都是基於 Java 的,由於它有很是完成的一套輪子,可以快速幫助企業解決業務問題;
  • C 語言偏底層,不少軟件都是用 C 來寫的或者和它有間接的關係,學習 C 可以幫你更好的理解計算機;
  • C++ 雖然有些複雜,但它在某些應用場景中有很強的不可替代性,不少公司還在用 C++ 開發核心架構,好比騰訊、百度、谷歌等。

如何學習呢?這裏拿 Java 舉例來講。

A. 基礎部分

推薦書籍:

同時推薦 B 站尚學堂的這套免費課程,能夠說包含了 Java 的所有內容了。

https://space.bilibili.com/392179313

我本身總結的關於 Java 集合的文章:

👉 Java 集合框架看這一篇就夠了

另外如何寫出高效的 Java 代碼,再次拿出我喜歡的這本 Effective Java了,其實我以爲 Effective C++ 會更好些,不過 Java 這本有針對 Java 的內容,具體的介紹能夠看我這個視頻:

B. 實戰部分

學習一門語言和框架我認爲最好的方式就是作項目,作項目除了鍛鍊咱們開發能力外,在找實習和找工做時候也是和麪試官很好的切入點。

Java 的 Spring 框架是必需要用的,推薦《Spring 實戰》這本書。

Spring IoC 和 AOP 是核心,如何理解,看我這篇文章:

👉 一分鐘帶你玩轉 Spring IoC

你能夠去 Github 上找一些感興趣的項目入手,或者是跟着一些課程視頻作項目。

好比咱們習覺得常的博客系統,你能夠親自動手實現感覺一下作一個博客的全過程。

面試時候面試官經常會問:

  • 你作這個項目有什麼亮點?
  • 你解決的最難問題是什麼?

這些問題都是想考察你知識深度,因此作項目時候要思考一些有趣的點,或者就是別人的東西本身內化一下。

好比說,我使用了幾種不一樣的緩存技術極大的下降了響應耗時,接下來再跟面試官去講本身的實現思路和對緩存技術的深刻理解,作到「年輕人有備而來」。

作開發的同窗常常戲稱本身的工做就是「增刪查改」,那麼增刪查改天然離不開對數據庫的使用,作項目的時候就要學習數據庫的使用。

3. 數據庫

雖然我是全棧程序員,可是工做中多數處理的仍是後端問題,數據庫真的很是很是經常使用。

在我轉行成爲「專業」的程序員以前,在金融公司裏也經常使用數據庫,畢竟交易系統的下游確定是數據庫,數據也是一切模型的前提。

初學者建議由淺入深,先學習怎麼用。

推薦這本書《MySQL 必知必會》,是一本稍厚的小冊子,書中沒有講太多數據庫的底層原理,可是條理清晰、簡明扼要的介紹了初學者應該掌握的基礎知識。

一個晚上的時間坐下來靜靜的看,你會發現你對 SQL 語句如何編寫會有一個很系統性認識。

面試時候面試官經常問一個需求場景,讓你編寫相關的 SQL 語句。

好比我面試時遇到的一個問題:寫一個 SQL: table(Sno, Sname, classId, grade)查出每一個班成績前三名的同窗?

但僅僅是掌握基本的 SQL 語句編寫是遠遠不夠的。

「增刪查改」裏面也有大學問,一樣是增刪查改,有些人就能把數據庫性能玩轉到極致。

想玩到極致天然離不開咱們對底層原理的把握,這也是面試時候面試官最喜歡考察的內容,下面介紹兩本和數據庫底層原理相關的書籍。


《MySQL 技術內幕:InnoDB 存儲引擎》由國內資深 MySQL 專家親自執筆。本書的內容不是着眼於基本的語法教學,而是經過對數據庫底層數據結構、工做機制的分析,告訴咱們如何編寫 SQL 語句纔是高效的,告訴咱們索引如何利用才能發揮最佳效果。

舉幾個面試常見的問題,聯合索引爲何要最左匹配?數據庫的隔離級別是怎麼實現的?均可以在裏面找到答案,數據庫絕對是開發適合面試考察的重點。這本書是經過大量的例子和插圖進行知識講解,會給人留下很直觀印象。

還有一本書和 Redis 相關的。

Redis 是世界上最受歡迎的非關係型數據庫之一,經常用來看成緩存和 MySQL 配套使用。

Redis 自己的語法並不複雜,同窗們能夠找到不少這方面的語法教學資料。

面試時候經常會被問到,Redis 爲何會這麼快?若是隻是回答由於它是基於內存的數據庫,那麼面試就涼涼啦。真正的關鍵祕訣是在於 Redis 的設計與實現,閱讀這本書你會發現,Redis 是經過一系列底層設計來保證它快速存取的性能。

2、內功

1. 算法和數據結構

我認爲算法和數據結構是計算機最重要的東西,沒有之一。

程序 = 數據結構 + 算法。

學習算法究竟有什麼用呢?爲何大廠喜歡考察算法?能夠看我這篇文章:

👉 刷題到底有什麼用?你這麼刷題還真沒用

工做中須要分析複雜度,不少性能上的問題都依賴算法和數據結構來解決,而且帶給你思惟方式上的改變。有沒有學過算法,決定了你可否想到最優的解決方案。

同時算法也是計算機的基礎,任何一個你使用的軟件或者框架中都必定有算法和數據結構。好比數據庫索引使用了 B+ 樹。

在此先推薦這本書:_Algorithms + Data Structures = Programs_

而功利一點來講,算法題的考察是進大廠必備的。

國外的無論大中小公司、國內呢像字節跳動,基本上每一輪面試官都會讓你「手撕「代碼,由於這是對咱們寫代碼能力最直接的考察。

國外面試

對於國外面試的準備,你們能夠看我以前寫的本身的備考經歷:

👉 從小白到 6 個 offer,我到底是怎麼刷題的?

同時推薦普利斯頓老爺爺的算法課,B 站也有搬運版:https://www.bilibili.com/video/av50599771/

喏,就是這本書的做者,斯坦福的 PhD。

國內面試

對國內的面試,我建議從《劍指 offer》這本書開始學習,而後陸續到牛客網或者 Leetcode 開始你的刷題之旅。

這本書的做者經過 50 多道算法題做爲案例,像咱們講解了面試官考察的思路和一些基本數據結構算法的運用,讀這本書咱們會感受是一個資深面試官在對我循循善誘,指出咱們常見的錯誤和學習的方向。

刷完這本書以後,就能夠在 Leetcode 上繼續找各種型的題目進行學習,我我的感受通常對於面試來講,若是能把兩百道中等題目刷的比較熟練是足以找到一份不錯的工做了。

各類算法和數據結構我也寫過很多了,在個人 Github 上都有分類彙總,你們能夠自行取用:

個人 Github:https://github.com/xiaoqi6666/NYCSDE

2. 設計模式

設計模式能夠說是寫出高質量代碼的關鍵。

我在入職前快速學習了設計模式,入職後看代碼就順暢不少,不少設計若是你不知道這種模式就不能理解爲何要這樣作。

我以爲學習設計模式的是一個培養本身「審美」能力的過程,和畫做、音樂不一樣,計算機的世界審美標準比較統一,那麼咱們首先須要知道遊戲規則,而後才能打怪升級。

推薦書籍《設計模式》:

看一遍是不夠的,也不須要一遍追求徹底看懂。

在這一年裏,我反覆讀這本書,遇到不一樣的問題時去看,隨着代碼量的積累,對設計模式的理解也會不一樣。

同時由於 code review 時會有同事給出意見,這樣更能促進個人進步。

因此對於尚未工做的同窗,我不建議花大量時間在這上面,由於沒有人給你反饋,可能效果有限,並且這項內功是須要咱們終身修煉的,沒必要急於一時。

3. 操做系統

說到這裏,咱們已經學習了 Linux 操做系統,學習了一門語言和通用框架而且作了一個小項目,學習了一種常見的關係型數據庫和非關係型數據庫,算法和數據結構也過關了,拿 offer 應該沒問題了。

那麼後端開發還須要咱們學習計算機哪些知識呢?

推薦大名鼎鼎的 CSAPP:_Computer Systems: A Programmer's Perspective_

這本書我在好久以前的視頻裏就推薦過了,它把計算機底層原理講解的很是透徹,同時 CMU 也有配套的課程:http://csapp.cs.cmu.edu/3e/courses.html ,重要性不言而喻。

固然了,書很厚,很難啃,小齊給你劃重點章節:

1,2,3,6,7,8,9 章

讀不下來?加入自習室,咱們一塊兒打卡!

那理解了計算機系統有什麼用呢?

很難說具體有什麼運用,但其實倒是無處不在,好比工做中的性能優化。

若是把開發看成修煉一門功夫這些方面的內容就像是內功,只有內功修煉紮實了,最後開發才能更加穩固,作出來的項目纔是可靠的。於咱們我的而言,才能走得更遠。

4. 計算機網絡

面試還喜歡考察什麼內容呢?

好比面試經常會問一道經典面試題:從輸入一個 URL 到出現頁面的過程發生了什麼?若是你學過計算機網絡就會對這個問題起碼有一個大概的認識。

那麼這個問題有什麼用呢?好比當你的訪問 web 頁面出現了「白頁「(web 頁面一片空白)這種故障,你會怎麼排查?若是你只是着眼於本身的代碼和服務端,不清楚整個請求鏈路發生了什麼,遇到一些稍微複雜的故障你就一籌莫展了。

不管是否是計算機科班學生,我都強烈建議把計算機網絡學好。

固然,若是更加「功利「一點,我以爲直接去搜相關的」面經「來看,看看什麼問題是最常問的,把相關板塊的知識弄懂熟透,造成本身的回答條理,看看本身能不能清晰的回答。

  • TCP 三次握手說一下?
  • 爲何要三次握手呢?兩次、四次不行嗎?
  • HTTP 協議哪一層?
  • 說一下 URL 到出現頁面的整個過程?

推薦書籍:《計算機網絡:自頂向下》

推薦課程:斯坦福大學 CS 144 計算機網絡

B 站連接:https://www.bilibili.com/video/av96841516/

5. 計算機發展史

最後一點呢,是我本身感興趣的,順便推薦給你們。

計算機是一門很是很是有意思的學科,很好玩的學科,從最先的圖靈機、到現在的臺式機、筆記本電腦,以及我最近玩的樹莓派,都是很是很是有意思的。

學習這些東西是爲了激發個人學習熱情,保持本身的好奇心的一種方式。

推薦視頻:Crash Course Computer Science - 翻譯叫「計算機速成課」,但並不是那種「速成」。

B 站中英文版本:https://www.bilibili.com/video/av21376839/

字幕組的 Github: https://github.com/1c7/Crash-Course-Computer-Science-Chinese

這門課我真是相見恨晚,每一集只有 10-12 分鐘,一共 40 集,主講人很是激情澎湃,你可以隔着屏幕感覺到她對計算機科學的熱情,對我影響很大。

3、踏入江湖

若是你能作一個相對不錯的項目,對各種面經知識能回答的七八分,算法題作了 200 道,我建議能夠開始面試了,那麼就真正踏入了江湖。

踏入江湖以後,咱們仍需不斷反覆修煉本身的「外功」和「內功」,不斷提升本身的功力,哪怕是同一本書,在工做的不一樣階段讀,必定會有不一樣的體會。

固然了,以上這些還只是職場硬實力,而能在江湖混的風生水起,必定也離不開過人的軟實力。

可是軟實力必定是創建在硬實力之上的,沒有雪中送炭的做用,只能夠錦上添花。

固然了,若是硬實力強到必定程度,是不須要軟實力的,但不適合 99% 的人。

文中提到的全部書籍,我都整理好放在後臺了~

獲取方式:先在右下角點個在看,而後回覆【05】。

路上陽光正好,願每一位踏入江湖的少年都能瀟瀟灑灑,仗劍走天涯!

相關文章
相關標籤/搜索