與其說這是給想自學軟體開發小夥伴梳理的自學路線,還不如說這是一篇軟體開發行業的技術路線整理合集。除了幫助小白自學,也可以幫助正在進步或者迷失方向的軟體工程師繼續向前。
整個自學路線我會不斷完善,目的就是讓大家少走彎路,建議自學軟體開發的小夥伴關注我,不迷路。
很多小夥伴從其他行業轉行來做軟體開發,或畢業後就選擇軟體開發工作,在這一路上應該吃了不少苦頭,走了不少彎路。
比如:
1:學習資料眾多,不知道該怎麼選,並且很零散
2:想提升自己的能力,但不知道要學什麼?從哪裡開始學?
3:遇到困難,沒有人來指點一下,經常掉坑裡,浪費了很多寶貴的時間!
那麼有沒有一種清晰的學習路線,就像我們玩遊戲點技能樹一樣,可以看出來我們的發展方向和步驟?
肯定有!
我把這套技能樹和技術路線分為八個階段。
這篇圖文先說第一,二階段。
後續會為想自學軟體開發的朋友梳理第三、第四、第五、六七八階段。所以,大家給個關注,不會迷路[呲牙]。
這八個階段分別是:
第一階段:打牢基礎,小白入門要踏踏實實走的路
不得不說,在我10多年的軟體開發經驗中,見到過太多同事,他們由於基礎沒有打好,造成平常工作中遇到很多「混亂」的問題,比如某個概念搞混引入的BUG,比如編程不規範造成的代碼不好維護,比如代碼文件管理的混亂等等。
這會大大影響自己的工作效率,學習效率,還錯過很多晉升機會,甚至覺得軟體開發行業這條路不適合自己走,產生自我懷疑。
其實這都是因為基礎沒有打好的緣故。所以第一階段很重要,把基礎打牢,後面你的工作或者學習都會變得很輕鬆,很有體驗。
第二階段:網絡應用,軟體開發通用技能樹
這條技術路線技能樹點滿,你可以在網絡應用軟體開發領域橫著走,並且找到一份不錯的工作。這份工作可以幫你解決生活上的問題,還可以讓你有零花錢花。
第三階段:團隊協作需要有的技能樹
在軟體開發行業裡,編程技術的應用其實只是一部分,還有另外一部分知識或者技能是圍繞軟體開發過程的。你參與的軟體規模越大,那麼軟體開發過程就顯得越重要。
你要知道3個人的團隊和100人的團隊協作是完全不同的概念。
這套技能樹就是圍繞軟體開發過程的,如果你把這套技能樹點滿,你可以讓軟體開發過程變得自動化,並且讓團隊協作變得和諧。
為什麼要把這套技能樹放在第三階段呢?因為無論未來你選擇哪個軟體開發方向,都會需要到這套技能樹。
第四階段:生產工具硬核路線技能樹
這套技能樹點滿了,你可以參與開發比如PhotoShop,Xmind,3DMax,Blender等等生產工具的開發。
當然像PhotoShop這樣的軟體,要開發它除了這些技能樹外,網絡應用知識、圖像圖形處理技術這些知識都是要有的。
第五階段:移動端APP開發路線技能樹
這套技能樹點滿後,你可以參與IOSAPP或AndroidAPP的開發。如果同時你把第二階段和第三階段的技能樹點滿了。那麼你完全可以自己獨立開發一款APP,或者帶領一個團隊開發APP。
這個時候的你,不是你找工作,而是工作來找你。
第六階段:人工智慧與數據分析路線技能樹
這是未來20年比較火熱的發展方向,可以參與到很多偉大的項目裡面,比如醫學的X光片確診肺部疾病、自動化炒股、自動駕駛領域等。
但這裡可能會有個誤區,我要說明一下,這條技術路線的知識更多的是關於
人工智慧是如何實現的?
我們如何利用人工智慧的工具來看待目前我們遇到的問題?
如何通過技術手段把人工智慧學習的數據採集起來然後用於訓練人工智慧?
如何設計機器學習的模型?
等等。
這些技能的學習、理解、到運用是需要時間和實踐的。並不像某些廣告宣傳一樣,什麼一個月出來就拿年薪60萬等等。我曾經面試過一個學生,他說他會谷歌的TF,他知道各種人工智慧的算法等,當我拋給他問題時,他就沒有思路了。(我拋給他的問題是TF經典例子裡面的訓練機器人識別手寫數字的解決方案)
第七階段:遊戲開發路線技能樹
開發遊戲是一個龐大複雜的工程,但現在生產工具發展的很快。如果你能把這條技術路線的技能樹點滿。你完全可以做一個獨立的遊戲開發者。國內就有很多成功的獨立遊戲開發者,他們錢也賺了不少。
同樣這條路也是比較艱辛的,做好心理準備。
第八階段:系統質量把控技能樹
說白了,這就是軟體測試的技能樹,軟體測試在軟體開發領域屬於門檻很低,但上限很高的一個職位,任何一個會使用電腦,手機的人都能來做軟體測試。
但高端的軟體測試,只會電腦操作是遠遠不夠的。
需要懂開發、懂伺服器、懂用戶心理、懂自動化、懂硬體、懂問題根源的排查等等。其實一個頂端的測試工程師,完全可以勝任一個公司的技術總監。
現在我們就來一起看看這些技術路線
一 先學JAVA是個好的選擇
對於軟體開發這個領域,找一門合適的程式語言來學習,其實非常重要。選得好你會學習起來很愉快,選不好會一開始就面對各種挫敗感。我建議入門的小白,從JAVA語言開始學起,因為:
1 它難度適中:
小白有很多入門程式語言可以選,比如C,C++,Python等等。C,C++和Java語言相比會有很多非常抽象的概念,這些概念對小白一點都不友好,它們非常繞,因為C,C++是更靠近「硬體」的語言。
Python就把這些概念弱化了,因為它是更「靠近」人的語言,好處就是學起來很輕鬆,不好的地方就是學Python會遺漏很多計算機軟體開發和編程的重要概念與名詞。
那Java剛好在他們之間,比較適中。
2 學會JAVA後,再去學習C,C 等類C語言,你會發現很輕鬆。
3 JAVA目前的崗位很多:
JAVA由於它在網際網路行業裡的先行優勢,開源,性能不錯,加上屬於比較「老」的開發語言。所以國內很多政府項目,大企業的項目,還有重量級的產品基本都是基於JAVA語言開發的。這就導致了無論小公司,還是大公司,無論五線城市還是一線城市,都有足夠多的JAVA工程師招聘崗位。
關於JAVA的學習資料
網上確實有很多JAVA免費的資料和書籍,但零碎的知識對於初學者建立系統的編程體系是完全不夠的,甚至會搞得初學者一頭霧水。
但如果你已經掌握了一門程式語言,再利用這些網絡上免費的學習資料進行自學,其實是可以的。
但作為一名小白,還是踏踏實實的買一本JAVA方面的書籍,每天拿出90分鐘,堅持3個月,扎紮實實的把用JAVA來編寫代碼的基本功打好。我相信,對於小白來說,不會有比這個還要科學的學習方法了。
下面是重點:
JAVA的書籍很多,我推薦兩本,自學任意選擇一本就可以。
《Java核心技術 卷I 基礎知識》,《Java編程思想》
為什麼要推薦這兩本書?
因為這兩本書裡面講解了很多軟體編程需要知道的概念和知識,可能這些概念學起來有點不那麼舒服,但這些概念對今後的自學或工作有很大的幫助!
如果你English水品很好,那麼可以直接看官方文檔
https://docs.oracle.com/en/java/index.html
二 如何才算是把基礎打牢?
當你把一本程式語言的書看通透,書中的例子都能理解,並且利用官方在線文檔,能脫離書本自己寫代碼的時。恭喜你,你已經準備好入門了。
但是,馬上你就會明白
如果只會用一門開發語言編寫教科書中的程序,這是遠遠遠遠遠遠不夠的,因為它不能幫助你去編寫一些很實際的東西,比如一個登陸註冊服務接口。
你要明白一個道理,在軟體開發行業裡,只有掌握了一定的技術積累後,你才能在實際工作中輸出,才能解決問題,才能找到工作。
所以,了解不同方向的技術路線是非常重要的,它能讓你花更少的時間,花更少的精力去學習,並且讓你進步比別人更快。
那我們還在等什麼?
看看第二階段的技術路線
把前面的基礎打牢後,再來根據這條技術路線來學習,你就會覺得輕鬆很多。我們先來看看這條技術路線長什麼樣子?對他有個大概了解。
後端
1 使用資料庫的技能樹
1.1 關係資料庫
1.2 非關係資料庫
2 編寫網絡應用服務的技能樹
2.1 基礎知識
2.2 編寫網絡應用程式的開發框架
前端
1 最基礎的知識
1.1 html(網頁上顯示東西)
1.2 CSS(讓網頁上顯示的東西變得好看)
1.3 javaScript(讓網頁能互動)
1.4 xml(一種很多領域都會用到的結構化數據的方法)
2 開發框架
2.1 一般用於搭建前端界面的開發框架
2.1.1 Vue
2.1.2 React
2.1.3 JQuery
2.2 純粹的界面樣式搭建
2.2.1 Bootstrap
2.2.2 AmazeUI
2.2.3 LayUI
2.3 小程序平臺
2.3.1 微信小程序
2.3.2 支付寶小程序
現在我們就來看看這些學習路線。
資料庫的使用其實是非常重要的,它是所有應用程式的基礎。無論你在哪個軟體開發領域都無法繞過資料庫這個坎。自學軟體開發的小夥伴,往往會忽略資料庫這塊的學習,其實很多培訓班也會忽略資料庫的學習。
目前市面上的資料庫分為兩大陣營,一個是已經站穩腳跟的SQL資料庫陣營,另一個是後起之秀,能輕鬆解決SQL資料庫很難解決的問題的NOSQL陣營。
這兩大陣營一直叫囂著彼此取代,但目前來看他們都無法取代彼此,反而相互彌補形成一套完美的資料庫存儲運算解決方案。
目前的所有網絡應用平臺都使用了這兩類資料庫,共同解決產品的數據存儲計算問題。
關係資料庫的代表:
他們雖然是不同的公司出品,有些概念細節上還會有點不一樣。但他們都基於一種叫做SQL的資料庫操作語言。它是關係資料庫的基礎。這五個產品中,我們只要學精通了一個,其他四個上手就容易很多了。
關於SQL關係資料庫的學習,我建議從MySQL開始,因為:
1 因為它是開源、免費、跨平臺
無論用它學習,還是工作,都不收錢。並且是跨平臺的,無論你用MAC還是PC電腦都可以用它。
2 難度適中
比Oracle這些元老級的資料庫學起來要輕鬆很多。
3 使用範圍廣:
無論大公司,還是小公司都用的挺多的,甚至很多生產環境(生產環境,就是指最終用戶使用到的系統,不是內部測試系統等)也有一部分在用Mysql。
學習MySql,和一開始打好編程基礎一樣,好好的賣一本書,每天計劃好時間堅持學完就好。這裡我推薦一些MySQL的學習書籍和資料,如下:
《MySQL基礎教程》作者:[日]西澤夢路
關於MYSQL的書籍挺多的,但推薦這本書是因為它簡單,簡單,簡單,適合入門,基礎內容都包括了。平常在使用Mysql過程中,可以查查這些在線文檔。
https://www.runoob.com/sql/sql-tutorial.html(SQL語言的使用查詢)
https://dev.mysql.com/doc/(官方文檔E文好的進)
我們一旦把MYSQL學好後,其他資料庫學起來就會很快,區別在於伺服器的部署上,因為SQL屬於標準化的語言,所以所有的SQL資料庫的SQL語言都大同小異。
非關係資料庫的代表
非關係資料庫和關係資料庫在概念上是不一樣的。非關係資料庫Redis和MongoDB也有一些區別,應用場景也會有些不一樣。
對於入門來說,可以先從Redis入手,因為它簡單。
Redis的誕生和應用實踐都是針對具體問題來的,所以我覺得學習Redis之前,先要把SQL這類資料庫學好,才能明白Redis的用心良苦。因為Redis資料庫是基於解決那些SQL資料庫解決不了的問題而誕生的,所以我推薦通過這本書來學習Redis:
《Redis 深度歷險:核心原理與應用實踐》
MongoDB的書籍:
《MongoDB從入門到商業實戰》
下面是一些Redis與MongoDB的線上學習資料(系統的學習還是建議看書):
1 http://www.redis.cn/documentation.html Redis的中文官方文檔(更新會有延時)
2 https://redis.io/ Redis的E文官方文檔
3 https://www.runoob.com/redis/redis-tutorial.html Redis的在線學習資料
4 https://www.mongodb.org.cn/ MongoDB中文官方文檔 (更新會有延時)
5 https://docs.mongodb.com/ MongoDB E文官方文檔
對於資料庫的學習,我建議先從關係資料庫開始學起,因為很多產品它可以不用非關係資料庫。但關於資料庫是必須要用的。
最基礎的知識
這些知識就像我們打王者榮耀一樣,要知道符文的用法,地圖的布局,不同英雄之間的克制等等,不懂規則遊戲也玩不下去。
這些知識有:
1:Http協議
2:服務請求模型
3:TCP協議
4:IP位址
5:UDP協議
6:Websocket協議
等等
這些知識其實非常零散,孤立。就算是工作了10年的網絡工程師,讓他來總結一下這些知識點他可能都會花很長時間來整理。
我思來想去,要很舒服的學習這些知識,並且將其應用到實踐中,最好的辦法就是去學習一門開發語言的網絡編程。
通過學習一門開發語言的網絡編程來學習這些基礎知識:
推薦書籍
《Java網絡編程(第四版) 》
《Python網絡編程 第3版 》
提醒一下自學的小夥伴,看上面的書籍主要目的是讓你知道網絡應用開發需要什麼樣的知識。要很順利的把這些書看完,就需要把第一階段的基礎打牢。
編寫網絡應用程式的開發框架
何為開發框架?
為何要用開發框架?
其實我們只要看完了上面推薦的兩本書,我們就可以完成網絡應用程式的編寫工作了,但是你不夠快!可能別人兩三天就完成的工作,你需要兩三個月,這一點毫不誇張!
別人比你快其實就是用了網絡應用開發框架!
它是一套專門為網絡應用開發而生的工具,就像你要去蓋房子,它就是起重機,就是混泥土攪拌機,就是腳手架。能大大提高你的工作效率。
在網絡開發領域,使用框架來做開發已經變成了一個成熟、快速、穩健的做法。
像Python的Django框架可以用100多行代碼就可以編寫出一個完整的網絡應用後臺,你熟悉Django後,可能覺得這哪裡是在編程呀,這明明就是在搭積木!
Django除了可以「配置」網站外,仍然可以讓程式設計師有很大發揮的空間,哪怕一個非常小的細節都可以「配置」。JAVA語言也有這些框架。現在我們就來看看這些框架和學習資料。
下面是學習資料
1 JAVA相關的網絡開發框架
《輕量級Java Web企業應用實戰——Spring MVC+Spring+MyBatis整合開發》
《輕量級Java EE企業應用實戰(第5版)——Struts 2+Spring 5+Hibernate 5/JPA 2整合開發》
2 Python相關的網絡開發框架
《Python Django Web典型模塊開發實戰》
《Flask Web開發 基於Python的Web應用開發實戰 第2版》
注意:這些都是網絡應用開發框架的入門教程。在網絡應用開發過程中,我們會遇到很多性能問題就像我們雙十一清空購物車時,會看到頁面卡死的現象,這就是典型的性能問題。性能問題的解決就要用到其他的技術路線了,我後面會為大家整理。
前端的技能樹分為兩大大部分
第一:最基礎的知識
第二:開發框架
我們先來看基礎知識。
最基礎知識
前端開發涉及到的程式語言其實就三種Html,CSS,JavaScript。嚴格意義上來說,Html,CSS都不能算是完整的程式語言,它們只是一種標準,一種瀏覽器能看得懂的語言。
Html:
用於告訴瀏覽器,我要顯示什麼樣的內容,顯示在那個位置。
CSS:
來告訴瀏覽器我的這個內容要顯示成什麼樣子的,比如字體要多大,要什麼顏色,間距是多少等。
JavaScript:
它是一種完整的程式語言,也是若干前端框架的基礎。在工作中碰到很多小夥伴,他們在使用前端框架編寫頁面的時總是會遇到一些奇怪的BUG、奇怪的語法、奇怪的問題。其實這些所有的問題,都是沒有把JavaScript這門語言基礎打好造成的。
我們來看一下Html,CSS,JavaScript的學習資料。
書籍:
《Head First HTML 與 CSS》
Html,CSS看這本書就夠了,當然Html,CSS的屬性用法很多,上千種。我們是不可能全部記下來的。把上面這本書看透,日後工作遇到的問題可以在下面列出的網上查找。
《JavaScript權威指南(第6版)》
要把JavaScript學好,要在後面學習前端框架輕鬆的飛起,那麼就耐心的認真的把這本書看完。把裡面的例子編寫完。
這本書很厚,厚到你可能拿不動、厚到拿到手上時,就被勸退了。但是想想這本書看完後你的JavaScript會有一個質的飛躍,那麼一切的堅持和努力都是值得的。
線上資料:
1 https://www.runoob.com/ html,css,javascript的一些知識點和資料都可以在裡面找到。
2 https://www.w3.org/ 最全的html,css知識,也可以看作是它們的官方網站,是全英文的。
3 https://www.javascript.com/ javaScript的官方網站,全英文的。
4 https://developer.mozilla.org/zh-CN / 這是涉及到前端開發知識的網站,中文的,html,CSS,JS都涉及到
書籍和線上資料其實都很多,這些都是我挑選的,平常我自己也在用。感覺知道這些就足夠了。
前端開發框架
在介紹前端框架前,再說一下Html,CSS,JavaScript這三個語言是前端開發的標準,並且它是屬於世界的,不屬於個人或者公司,他的學習資料是公開的,這是一件極好的事情。
但是就是因為這些特質,導致前端框架成千上萬,各種門派,各種風格,各種騷操作,應有盡有,只有你想不到的,沒有找不到的前端框架。
這就是前端開發工程師的煩惱。
前端框架的概念和後端框架的概念差不多,他們都是為了讓程式設計師能快速高效的開發前端頁面誕生的。包括了完整的模板結構,工具甚至還有IDE(集成開發環境)。
有些框架還可以讓程式設計師拖拖拽拽的,就把一個前端頁面拼湊起來,這對於一個設計師來說是非常友善的。
由於前端開發框架太多,我又將其整理成三大類。
第一類:純粹的開發框架,用戶搭建系統,我們也叫做腳手架。
第二類:界面繪製工具,專門用來解決前端頁面應該長什麼樣子的。
第三類:就是騰訊,阿里這些寡頭自己的前端開發框架。
我們先看第一類,純粹的開發框架,和他的學習資料
1:VUE
國人開發享譽世界的前端開發框架,只要前面的基礎打的好。只要看它的官方文檔就可以很好的進行自學了。
https://cn.vuejs.org/ VUE官方網站
書籍(其實看官網後足夠了,當然選擇書籍也是可以學好的,看個人學習習慣):
《深入淺出Vue.js》
2:React
在國內,VUE火了之前,React是一個很受關注的前端開發框架。其實現在用的人也多的。
書籍:
《React實戰》
線上:
https://react.docschina.org/ 正統的官方文檔,還是中文的
3:JQuery
JQuery應該是前端框架的鼻祖,雖然現在JQuery直接拿來用的機會越來越少了,但只要你的工作和前端有關,你都離不開JQuery。像Vue和React的一些理念都是從JQuery過來的。
其實我把它列出來,放在前端技能樹學習裡,主要是覺得JQuery的一些考慮問題的方式很值得去學習。這對我們學習其他前端框架是有很大幫助。
書籍:
《鋒利的jQuery(第2版)》這本書在2010年前後,沒看過都找不到工作的。
線上:
https://jquery.com/ JQuery的官方文檔
我們接著再來看第二類:
1:Bootstrap
PC網頁、移動端網頁、響應式網頁設計的鼻祖。只要你打好了Html、CSS、JavaScript的基礎。學習這些只要看官方文檔就足夠了
官方文檔:
https://www.bootcss.com/
2:AmazingUI
這是國人基於Bootstrap來開發的,很多用法和Bootstrap差不多。有自己獨特的地方,學習文檔也很舒服,界面樣式也很漂亮。
同樣,只要你打好了Html、CSS、JavaScript的基礎,學習這個會很容易。
官方文檔:
http://amazeui.shopxo.net/
3:layUI
這也是國人的,從一個小小彈窗開始做起,最後到整個自己的LayUI體系,用來做管理平臺頁面是非常好的選擇。我自己在很多大的項目裡面用到過,我覺得要比Bootstart要好很多。
官方文檔:
https://www.layui.com/
我們最後來看第三類
1:微信小程序
2:支付寶小程序
現在市面上的APP不弄個微信小程序,支付寶小程序貌似都不能算是一個完整的產品線。所以微信小程序這套技能點滿,漲工資,晉升這些機會都會變大。
書籍:
《微信小程序項目開發實戰——用WePY、mpvue、Taro打造高效的小程序》
《支付寶小程序開發實戰》
線上:
1 https://developers.weixin.qq.com/miniprogram/dev/framework/ 微信小程序開發文檔
2 https://opendocs.alipay.com/mini/introduce/ 支付寶小程序開發文檔
還是那句老話,只要基礎好,看在線文檔就夠了。之所以還推薦書籍,主要是通過書本了解一下小程序的開發流程,也是挺好的。
無論是第一類、第二類、還是第三類。它們都會有很多相通之處。
可能看到這裡的小夥伴,會有一個疑問。我是先去學習前段,還是後端呢?
我建議先從後端開始學習。原因如下:
1:後端的學習曲線沒有前端的陡峭
2:先從後端學習能更好打好編程基礎(學好後端再去學前端會更順手一些)
3:後端能接觸到資料庫,如果要嘗試其他領域的編程,比如生產工具,遊戲等,那麼資料庫是一個很重要的基礎知識
當然
如果你是一個狠人,把後端,前端的技能樹都點滿了,恭喜你。
你已經超越了70%的軟體工程師了。
這個時候的你,找工作談待遇都變得很主動,生活也變得很愉快。
那麼小白關心的問題來了,要從一個小白,做到一個後端前端技能都點滿的人(全棧工程師),需要花多長時間?
我統計了一下,如果堅持有規劃的學習,可以在3年左右做到這個水平。頭一年會比較痛苦,第二年會覺得枯燥乏味,但這個時候要堅持下來。第三年你會覺得能做別人做不到的事情感覺真好。
最後
如果各位自學編程的小夥伴,覺得文章對你有幫助,就點個讚,給個關注吧。自學路上有什麼問題可以留言,我能一 一回復。