編譯自:A Guide to Becoming a Full-Stack Developer in 2017
譯者:開源中國(guó) - 邊城, 還是君影文華, 亞林瓜子, 我是菜鳥我驕傲, 無(wú)若, rever4433, 君影文華, 圣潔之子
據(jù) Stack Overflow 2016 Developer Survey 調(diào)研影所,全棧網(wǎng)絡(luò)開發(fā)是目前最受歡迎的開發(fā)職業(yè)蹦肴。難怪現(xiàn)在有幾十個(gè)在線的或者個(gè)人版程序來(lái)幫助人們成長(zhǎng)為全棧開發(fā)員,甚至可以協(xié)助新加入的開發(fā)人員找到更高薪的編程工作猴娩。
一些流行的在線程序可以從這些網(wǎng)站找到: Lynda阴幌、Udacity、Coursera卷中、Thinkful矛双、General Assembly, 還有更多可從這里獲取。除這些在線程序以外蟆豫,另有個(gè)人版的代碼訓(xùn)練基地可以教人們成為網(wǎng)絡(luò)開發(fā)員所必需的技能议忽。
本篇文章中,我不會(huì)談?wù)撃姆N網(wǎng)站或者編程訓(xùn)練營(yíng)有最好的網(wǎng)絡(luò)開發(fā)程序十减。而是給從未學(xué)習(xí)過編程的你栈幸,提供一個(gè)明確的指引,包括如何成為全棧網(wǎng)絡(luò)開發(fā)人員最必不可少的技能以及如何找到工作帮辟。我將從以下三點(diǎn)講起:
1速址、2017年被大量用來(lái)教學(xué)給學(xué)生的程序
2、來(lái)自過去幾年我在公司中面試的開發(fā)職位以及面試潛在的全棧網(wǎng)絡(luò)開發(fā)職位的候選人員所積累下來(lái)的經(jīng)驗(yàn)织阅。
3、來(lái)自Coderbyte中已經(jīng)開始接受編程訓(xùn)練和之后得到編程工作的人的故事和反饋震捣。
終極指南
全棧 Web 開發(fā)人員是能夠工作在應(yīng)用程序的前端和后端的開發(fā)人員荔棉。前端通常是指應(yīng)用程序中用戶將看到或交互的部分,后端是應(yīng)用程序中處理邏輯蒿赢、數(shù)據(jù)庫(kù)交互润樱、用戶認(rèn)證、服務(wù)器配置的部分羡棵。全棧開發(fā)并不意味著你已經(jīng)掌握了前端和后端工作所需的一切壹若,而是意味著你可以在雙端工作并理解構(gòu)建應(yīng)用程序時(shí)發(fā)生的情況。
如果你想在 2017 年成為一個(gè)全棧 Web 開發(fā)人員,并找到你的第一份工作店展,下面是一個(gè)參考指南养篓,列出了你需要學(xué)習(xí)的東西。
1. HTML/CSS
幾乎所有程序赂蕴,無(wú)論是在線的還是離線的柳弄,都在說(shuō)明要成為 Web 開發(fā)者需要從 HTML 和 CSS 開始,因?yàn)樗鼈兪?Web 的基石概说。簡(jiǎn)單地說(shuō)碧注,HTML 讓你給網(wǎng)站添加內(nèi)容,而 CSS 則為這些內(nèi)容添加樣式糖赔。下面的主題都是關(guān)于 HTML/CSS 的萍丐,在面試和工作中都經(jīng)常遇到:
1、語(yǔ)義化的?HTML放典。
2逝变、解釋CSS 盒模型。
3刻撒、CSS 預(yù)處理器的優(yōu)點(diǎn)(你不需要深入理解骨田,但應(yīng)該知道這是什么以及它們對(duì)開發(fā)起到的輔助作用)。
4声怔、使用CSS 媒體查詢針對(duì)不同的設(shè)備編寫響應(yīng)式的 CSS态贤。
5、Bootstrap(一個(gè)輔助頁(yè)面設(shè)計(jì)和布局的框架醋火,大量在線程序或?qū)W校都關(guān)注 Bootstrap 教學(xué)悠汽。實(shí)際上,深入理解基本的 CSS 比理解特定的 Bootstrap 特性和方法更為重要)芥驳。
2. JavaScript
JavaScript 語(yǔ)言一年比一年流行柿冲,新的庫(kù)、框架和工具層出不窮兆旬。Stack Overflow 2016 年的開發(fā)者調(diào)查指出假抄,JavaScript 在全棧、前端和后端開發(fā)中都是最流行的語(yǔ)言丽猬。它是瀏覽器唯一支持的原生語(yǔ)言宿饱,同時(shí)也能作為服務(wù)器端語(yǔ)言(下面會(huì)看到 Node.js)。下面是一些作為全棧開發(fā)者所需要了解的主題:
1脚祟、理解如何使用?DOM谬以。了解JSON并知道如何操作它。
2由桌、重要的語(yǔ)言特性为黎,比如函數(shù)式成分邮丰、原型繼承、閉包铭乾、事件委托剪廉、作用域、高階函數(shù)等片橡。
4吹泡、了解如何正確地通過模塊化組織你的代碼,像webpack经瓷、browserify或者gulp這樣的構(gòu)建工具對(duì)此大有裨益爆哑。
5、至少會(huì)使用一個(gè)流行框架(很多程序?qū)⒅匾旁诮棠闶褂孟?a target="_blank" rel="nofollow">React和AngularJS這樣的庫(kù)或框架舆吮,但實(shí)際上更重要的事情是深入理解 JavaScript 語(yǔ)言而不是特定的框架特性揭朝。只要你精通 JavaScript,選用一個(gè)框架將不費(fèi)吹灰之力)色冀。
6潭袱、雖然有些人可能認(rèn)為你應(yīng)該減少使用jQuery,因?yàn)樗呌谒劳龇嫣瘛5?jQuery 代碼仍然存在于大量應(yīng)用中屯换,徹底理解它會(huì)對(duì)你很有幫助。
7与学、了解一些關(guān)于測(cè)試框架的知識(shí)彤悔,以及明白它們的重要性(有人甚至?xí)J(rèn)為這個(gè)話題可有可無(wú))。
8索守、學(xué)習(xí)重要的ES6 新特性(可選)晕窑。
3. 后端語(yǔ)言
一旦你認(rèn)為已掌握好 HTML/CSS 和 JavaScript 技能,你會(huì)向一門后端編程語(yǔ)言進(jìn)軍卵佛,以便處理類似數(shù)據(jù)庫(kù)操作杨赤、用戶認(rèn)證以及應(yīng)用邏輯的任務(wù)。所有在線練習(xí)平臺(tái)和代碼訓(xùn)練營(yíng)通常集中于一門特定的后端語(yǔ)言截汪,而實(shí)際上你選擇哪一門也并不重要,只要你理解你正在做的事情并學(xué)到了你所選語(yǔ)言的本質(zhì)挫鸽。如果你問學(xué)哪一門后端語(yǔ)言最好鸥跟,你會(huì)得到各種各樣的無(wú)數(shù)的回復(fù)盔沫,所以下圖我給大家列出了一些受歡迎的組合。
一個(gè)重要的提示:不管你決定學(xué)習(xí)哪一門枫匾,請(qǐng)堅(jiān)持下去,并盡可能深入學(xué)習(xí)-所有下圖列出的語(yǔ)言都有相應(yīng)的工作機(jī)會(huì)谴忧。
1、Node.js:這是一個(gè)很好的選擇角虫,因?yàn)?Node.js 本身就是 JavaScript 環(huán)境沾谓,這意味著你不需要學(xué)習(xí)新的語(yǔ)言戳鹅。這也是很多在線平臺(tái)和訓(xùn)練營(yíng)為什么選擇教學(xué) Node.js 的原因枫虏。這里你最有可能學(xué)習(xí)的也是最受歡迎的能幫助你開發(fā)網(wǎng)絡(luò)應(yīng)用的框架就是Express。
2腾它、Ruby:用 Ruby 開發(fā)比較受歡迎的開發(fā)框架有 Rails 和 Sinatra 死讹。很多教學(xué)平臺(tái)把 Ruby 作為首選后端語(yǔ)言。
3逛腿、Python:Python 受歡迎的開發(fā)框架有 Django 和 Flask 仅颇。
4、Java:現(xiàn)在 Java 語(yǔ)言很少被選中作為全棧網(wǎng)絡(luò)開發(fā)的教學(xué)語(yǔ)言搁廓,但是一些公司現(xiàn)在還是使用 Java 作為后端語(yǔ)言耕皮,所以現(xiàn)在也還是一門有相當(dāng)需求量的語(yǔ)言(見上圖)叠国。
5豹芯、PHP:PHP 現(xiàn)在也很少被這些平臺(tái)教學(xué)選中台诗,但就像 Java 一樣拉队,它也還是有一定的需求量,而且也是當(dāng)今網(wǎng)絡(luò)發(fā)展的基石秩彤。
4. 數(shù)據(jù)庫(kù) & Web 存儲(chǔ)
編寫 Web 應(yīng)用的過程中漫雷,有時(shí)候需要保存數(shù)據(jù)鳍咱,以便稍后再進(jìn)行訪問流炕。那么最好掌握下面這些有關(guān)數(shù)據(jù)庫(kù)和存儲(chǔ)的主題。
1剑辫、理解關(guān)系型數(shù)據(jù)渠欺,比如SQL挠将,帶來(lái)的好處。
2乳丰、學(xué)習(xí)NoSQL數(shù)據(jù)庫(kù)内贮,比如MongoDB。
3什燕、知道在某些情況下屎即,哪一種更合適事富。
4埃撵、知道如何使用你的后端語(yǔ)言連接數(shù)據(jù)庫(kù)(比如 Node.js + MongoDB)。
5饺谬、知道像Redis或memcached這類內(nèi)存數(shù)據(jù)存儲(chǔ)的優(yōu)勢(shì)募寨。
6、Web 存儲(chǔ)可在瀏覽順中存儲(chǔ)會(huì)話仪缸、Cookie 以及緩存數(shù)據(jù)恰画。
7瓷马、伸縮型數(shù)據(jù)庫(kù)、ACID和ORM(都是可選的)片林。
5. HTTP & REST
HTTP 是應(yīng)用于互聯(lián)網(wǎng)的一項(xiàng)無(wú)狀態(tài)應(yīng)用協(xié)議 —— 它規(guī)范了客戶端連接到服務(wù)器的行為(比如 JavaScript 代碼通過 AJAX 請(qǐng)求后端服務(wù)器中運(yùn)行的代碼就是采用的 HTTP)费封。下面列出了你應(yīng)該了解的重要主題:
1弓摘、什么是REST以及它為什么對(duì) HTTP 協(xié)議和 Web 應(yīng)用來(lái)說(shuō)很重要痕届。
2、設(shè)計(jì)RESTful API 的最佳實(shí)踐势决。POST/GET請(qǐng)求果复。
3渤昌、學(xué)會(huì)使用Chrome DevTools是極其有用的走搁。
4私植、SSL 證書是什么车酣。
5湖员、HTTP/2 & SPDY(可選)。
6窄坦、WebSockets凳寺、Web Workers肠缨,以及Service Workers(均可選)。
6. Web 應(yīng)用架構(gòu)
當(dāng)你認(rèn)為已經(jīng)掌握了 HTML/CSS父泳、JavaScript惠窄、后端編程漾橙、數(shù)據(jù)庫(kù) 和 HTTP/REST 霜运,你就到了難對(duì)付的部分了。這時(shí)藕各,如果你想創(chuàng)建一個(gè)稍微復(fù)雜的 web 應(yīng)用焦除,你需要了解如何組織代碼,如何分割文件竭讳,往哪里保存大量媒體文件浙踢,如何結(jié)構(gòu)化數(shù)據(jù)庫(kù)里的數(shù)據(jù),何處執(zhí)行特定的計(jì)算任務(wù)(客戶端還是服務(wù)器端)胰舆,以及更多其他問題。
網(wǎng)上你可以讀到一些最佳范例荸百,但是最好的學(xué)習(xí)應(yīng)用架構(gòu)的方法是自己實(shí)踐一個(gè)包含多個(gè)分散部件的大型應(yīng)用 —— 甚至更好的方法是:和團(tuán)隊(duì)合作開發(fā)一個(gè)相對(duì)大型/復(fù)雜的應(yīng)用够话。
這也是為什么,比如有個(gè)七年以上工作經(jīng)驗(yàn)的人畜份,也許他未必比工作兩年的另一個(gè)人更懂 CSS 或 JavaScript 爆雹,但或許是多年各種不同應(yīng)用和網(wǎng)站的工作經(jīng)驗(yàn)愕鼓,使他學(xué)習(xí)到如何最有效的架構(gòu)和設(shè)計(jì)應(yīng)用(包括學(xué)習(xí)其他重要事項(xiàng))菇晃,并且在開發(fā)過程中能看清“全局”。以下書籍或文章可以幫助你學(xué)習(xí)如何有效架構(gòu)你得網(wǎng)絡(luò)應(yīng)用:
1驻子、學(xué)習(xí)通用的平臺(tái)即服務(wù)估灿,比如Heroku和AWS馅袁。Heroku 允許你做很少的配置或服務(wù)器維護(hù),即可輕松上傳代碼芒粹,并執(zhí)行應(yīng)用化漆。AWS 提供許多產(chǎn)品和服務(wù)幫助解決存儲(chǔ)、視頻處理疙赠、負(fù)載均衡以及其他更多其他的問題朦拖。
2璧帝、應(yīng)用和流行瀏覽器的性能優(yōu)化。
3锣夹、關(guān)于網(wǎng)絡(luò)應(yīng)用架構(gòu)應(yīng)該考慮哪些要素的一些觀點(diǎn)银萍。
4恤左、微軟文檔:設(shè)計(jì)網(wǎng)絡(luò)應(yīng)用飞袋。
5、模型-視圖-控制器編程模式(MVC)物咳。
6蹄皱、當(dāng)然巷折,最重要的還是應(yīng)該嘗試與別人合作項(xiàng)目,閱讀 Github 上受歡迎的代碼油吭,以及盡可能向資深開發(fā)員學(xué)習(xí)婉宰。
7. Git
Git是一套版本控制系統(tǒng)心包,它允許開發(fā)團(tuán)隊(duì)的開發(fā)人員跟蹤代碼庫(kù)的所有更改。了解與 Git 相關(guān)的一些事項(xiàng)非常重要痕惋,它能讓你了解如何正確獲取錯(cuò)過的最新代碼值戳,更新部分代碼炉爆,修復(fù)并修改其他人的代碼叶洞,而不會(huì)發(fā)生任何意外禀崖。 你一定要學(xué)習(xí) Git 背后的概念波附,并多做嘗試。
1封寞、這里是一個(gè)參考列表仅财,它列出了你將會(huì)使用到的 git 命令盏求。
2碎罚、這里是一本手冊(cè)對(duì) Git 和 GitHub 的初學(xué)者很有用。
8. 基本算法和數(shù)據(jù)結(jié)構(gòu)
這個(gè)話題在開發(fā)世界中有點(diǎn)兩極分化拯勉,因?yàn)橛行╅_發(fā)人員認(rèn)為在 Web 開發(fā)中不應(yīng)該如此重視計(jì)算機(jī)科學(xué)的主題諸如樹的遍歷宫峦、排序、算法分析山卦、矩陣操縱等账蓉。然而逾一,像谷歌這樣的公司在面試中問這些類型的問題是出了名的遵堵。有人說(shuō)谷歌的前端工程師面試:
也就是說(shuō),正如Ryan McGrath所提到的锡足,我們的前端(FE)工程師要有一個(gè)堅(jiān)實(shí)的計(jì)算機(jī)科學(xué)(CS)背景舶得,就像我們所有的工程師一樣爽蝴。
雖然有些公司確實(shí)要求申請(qǐng)人擁有計(jì)算機(jī)科學(xué)學(xué)位或同等學(xué)歷蝎亚,也有很多公司愿意雇傭沒有這個(gè)技術(shù)資格的人,如果他們能夠證明他們懂得如何開發(fā)應(yīng)用程序和展示出對(duì)整個(gè)域的理解躺彬。但是宪拥,作為一個(gè)合格的開發(fā)人員个唧,而不是編寫低效的代碼或使用錯(cuò)誤的工具徙歼,部分要求是理解一些基本算法和數(shù)據(jù)結(jié)構(gòu),能夠分析權(quán)衡桨螺。所以你一定要學(xué)會(huì)一些東西:
1灭翔、研究哈希表并試著在更深的層次上理解它們。這個(gè)數(shù)據(jù)結(jié)構(gòu)構(gòu)成了 JavaScript 中的對(duì)象(Python 中的字典哄褒,Ruby 中的哈希)的基礎(chǔ)呐赡。
2骏融、理解樹和圖作為數(shù)據(jù)結(jié)構(gòu)有何益處档玻。
3误趴、理解算法復(fù)雜度分析的基礎(chǔ)知識(shí),所以你不會(huì)做傻事碧囊,像創(chuàng)建實(shí)際上沒必要?jiǎng)?chuàng)建的3層嵌套的循環(huán)!
4泊窘、懂得何時(shí)使用對(duì)象或是數(shù)組像寒,并懂得取舍诺祸。
5筷笨、了解為何在處理大量數(shù)據(jù)時(shí)緩存是如此重要龟劲。也要了解內(nèi)存存儲(chǔ)和磁盤存儲(chǔ)各自的利與弊昌跌。
6蚕愤、了解隊(duì)列和棧的區(qū)別饺蚊。
學(xué)習(xí)所有這些是會(huì)很辛苦污呼,但最終還是值得的曙求,并且全棧開發(fā)充滿樂趣!請(qǐng)?jiān)谙旅媪粝履愕囊庖娋苍。⑶以L問Coderbyte進(jìn)行算法練習(xí)苹享。