作者丨Naren Arya
翻譯丨 Mofei
前言
大家好。
大家經(jīng)常討論的話題是作為一個(gè)軟件工程師是一個(gè)持續(xù)學(xué)習(xí)的過程。因?yàn)楝F(xiàn)有的趨勢和技術(shù)在軟件領(lǐng)域會很快過期,每個(gè)人都要做好隨時(shí)做出改變的準(zhǔn)備。這將會是一個(gè)持續(xù)而單調(diào)的過程,放松對于我們來說是奢侈的。
在招聘市場上會有很多開發(fā)和工程師的工作,盡管數(shù)據(jù)科學(xué)和分析、大數(shù)據(jù)專家、AI專家在最近三年已經(jīng)上升了很多,但是還是沒有和全棧開發(fā)或者全棧工程師的需求在一個(gè)數(shù)量級上。
在IT領(lǐng)域,除掉一些專業(yè)性的領(lǐng)域,只有幾個(gè)是最熱的。什么原因呢?這是由于某些技術(shù)的飽和以及很多創(chuàng)業(yè)公司挖掘新的業(yè)務(wù)導(dǎo)致的。
創(chuàng)業(yè)公司和微服務(wù)爆炸式的增長引起了一系列技術(shù)人員需求。在這些里面,全棧工程師就是其中一個(gè)。
為什么全棧工程師這么受歡迎
公認(rèn)的全棧工程師的定義是:“全棧的意思是開發(fā)者能夠熟練的掌握前端和后端的開發(fā)技術(shù)”。
從技術(shù)的角度來說,這并不是行業(yè)設(shè)定的標(biāo)準(zhǔn),這是技術(shù)進(jìn)化的一面。一個(gè)全棧工程師經(jīng)常努力去學(xué)習(xí)開源的技術(shù)去應(yīng)用到他/她的工作當(dāng)中。
我認(rèn)為全棧工程師是一個(gè)以下技能的簡化組合:前端開發(fā)+后端開發(fā)+開發(fā)運(yùn)維+設(shè)計(jì)。為了做一個(gè)web應(yīng)用,一個(gè)全棧工程師應(yīng)該知道怎么樣去配置,優(yōu)化,自動(dòng)化部署應(yīng)用。
全棧工程師是一個(gè)廣度優(yōu)先搜索
如果你學(xué)過圖論,你應(yīng)該遇到過圖的遍歷算法,每個(gè)學(xué)計(jì)算機(jī)的人都應(yīng)該知道這些。
BFS(廣度優(yōu)先搜索):一種首先搜索根節(jié)點(diǎn)所有的臨近節(jié)點(diǎn),再遞歸進(jìn)行搜索的遍歷算法。
DFS(深度優(yōu)先搜索):一種首先搜索根節(jié)點(diǎn)最大深度的節(jié)點(diǎn),再回來繼續(xù)按同樣的方式搜索其他節(jié)點(diǎn)的算法。
那么,你學(xué)哪一種?DFS還是BFS?
這是一個(gè)個(gè)人的選擇問題。一個(gè)博士生可能更傾向于選擇深度優(yōu)先學(xué)習(xí)方法因?yàn)樗?她可以縮小他們的工作范圍到一個(gè)模塊。但是在2017年做專業(yè)的軟件開發(fā)工作,你并沒有充足的時(shí)間來構(gòu)建、測試和修復(fù)你的應(yīng)用。
一個(gè)全棧開發(fā)工程師是一個(gè)廣度優(yōu)先的學(xué)習(xí)方法,你要盡可能的去學(xué)習(xí)多個(gè)領(lǐng)域(像前端開發(fā),開發(fā)運(yùn)維等),然后在后續(xù)的工作中再去加深你在這些領(lǐng)域的理解。
當(dāng)你在學(xué)校的時(shí)候,你在同時(shí)學(xué)習(xí)多門課程的過程中使用的是BFS算法,所以這個(gè)技術(shù)你應(yīng)該很熟悉吧。

作為一個(gè)全棧工程師,你需要顧全一個(gè)應(yīng)用從開始到結(jié)束的所有階段,你需要在各方面親力親為,然后深入挖掘。你學(xué)的越多,你對你的團(tuán)隊(duì)就越有作用,你也會越來越牛B。
在2017年,公司需要一個(gè)人掌握更多的技能。這不像是找一個(gè)大家都不知道的領(lǐng)域的傳統(tǒng)的候選人。擁抱開源讓很多機(jī)會都擺在了你的面前。
你在學(xué)習(xí)方面有熱情嗎?
如果你是有非常強(qiáng)的學(xué)習(xí)能力,又對嘗試新的事物非常熱心,那么這個(gè)職業(yè)將會非常適合你。全棧開發(fā)是一個(gè)學(xué)習(xí)、實(shí)現(xiàn)、提高的過程。
持續(xù)的工作將會給你帶來各種不同的視野,你可以將這些都應(yīng)用在開發(fā)中。作為一個(gè)全棧開發(fā)工程師,為了解決問題,你需要去知道怎么去開發(fā),用哪種方法,怎么樣去面對一個(gè)新的需求。
解除對Web開發(fā)人員的限制
所有的職業(yè)都在持續(xù)的進(jìn)化。計(jì)算機(jī)科學(xué)和軟件開發(fā)也不例外。
不久以前,人們還習(xí)慣于雇傭一個(gè)專家去做一個(gè)任務(wù)。但是現(xiàn)在,在云計(jì)算的時(shí)代,一個(gè)掌握更多技術(shù)的更適合現(xiàn)在的情況。
就像在動(dòng)漫《口袋小精靈》中皮卡丘進(jìn)化成了雷丘,一個(gè)傳統(tǒng)的web開發(fā)現(xiàn)在也正在向全棧開發(fā)工程師轉(zhuǎn)變。在這個(gè)領(lǐng)域這些改變是毋庸置疑的,我將會在下面說明。
誰是全棧開發(fā)工程師?
全棧開發(fā)是一個(gè)相對性的術(shù)語。就像色譜中的波長范圍一樣,全棧開發(fā)工程師需要的技能是根據(jù)需求而定的。但是我認(rèn)為,一個(gè)合格的全棧開發(fā)工程師需要以下技能:
- 能熟練的使用CSS&JS(查詢,單頁應(yīng)用,DOM和ES6),知道自動(dòng)化工具(Grunt,Gul)和Browserify
- 至少熟悉一個(gè)web框架。比如:Django或者Node JS等
- 使用過SQL或者NoSQL數(shù)據(jù)庫一段時(shí)間(MySQL,MongoDB),能很好的進(jìn)行數(shù)據(jù)庫建模,會實(shí)現(xiàn)高級的查詢和SQL join語法
- 知道如何在AWS EC2用Apache2 或者Nginx 作為一個(gè)web服務(wù)器去部署代碼。會使用Docker或者虛擬化環(huán)境部署工具
- 可以用不同的組件設(shè)計(jì)web應(yīng)用,有足夠的能力對架構(gòu)重構(gòu)有一定的見解
- 選擇最好的解決方案并持續(xù)優(yōu)化
- 可以使用Chef或Ansible周期性自動(dòng)發(fā)布應(yīng)用。自動(dòng)化記錄日志和故障檢索
- 喜歡轉(zhuǎn)變環(huán)境,從一個(gè)領(lǐng)域到另一個(gè)領(lǐng)域,或者一個(gè)技術(shù)到另外一種技術(shù),并且能夠很快的完成任務(wù)
- 有能夠用JS、Chrome插件和漸進(jìn)式的web應(yīng)用的方式開發(fā)hybird移動(dòng)App
為什么你要選擇全棧開發(fā)?
當(dāng)有多個(gè)職業(yè)可以選擇的時(shí)候,為什么我們要選擇全棧開發(fā)?
首先,它可以讓你一直學(xué)習(xí)新的事物。技術(shù)變化非常快,長時(shí)間做同樣的工作會讓你的職業(yè)生涯毀掉。你懂的越多,你就越有價(jià)值,你可以在各方面有更好的見解。
其次,這個(gè)工作錢多。如果你是一個(gè)全棧工程師的話,選擇多并且鈔票多。在Indeed.com上一個(gè)薪資調(diào)查顯示,舊金山全棧開發(fā)工程師的平均工資是$130,576/年,一個(gè)傳統(tǒng)的web開發(fā)工程師的平均工資是$94,614/年。
哪怕是爆炸和擁擠的印度招聘市場,全棧工程師在2017年也非常的搶手。印度的創(chuàng)業(yè)公司已經(jīng)開發(fā)意識到全棧工程師的重要意義,全棧會越來越重要。多數(shù)城市的軟件公司都在招聘軟件全棧開發(fā)工程師。
考慮負(fù)面的影響
做全棧工程師也有一些缺點(diǎn),所以并不是所有人都適合做全棧工程師。有以下缺點(diǎn):
人們可能會說你門門了解,沒有哪一門精通。盡管這些可能有一部分是對的,但精通你使用的技術(shù)是你自己的責(zé)任。開一個(gè)博客,經(jīng)常記下當(dāng)前項(xiàng)目中對你有幫助的筆記,也許以后你能用的到。
對于新手來說,你需要工作來證明自己,可以在創(chuàng)業(yè)公司做全棧工程師。只有少數(shù)人可以在開始階段獲得很大程度的自主權(quán)。對于大多數(shù)人來說,公司決定了你在開始階段將會做哪些工作。所以最好在出大學(xué)校園之前就做好規(guī)劃。
為什么又如何能成為一個(gè)全棧開發(fā)工程師
我很自豪的稱我自己為全棧開發(fā)工程師(在理論上和實(shí)際上)。你可能會說沒有人是完美的。這是真的。我離完美差的遠(yuǎn)呢。我正在精通全棧開發(fā)的路上,而且在前三年的職業(yè)生涯之旅上經(jīng)歷了酸甜苦辣。
許多事情已經(jīng)改變,或者正在改變,我寫了這篇文章而你恰好讀到。就像我開始跟你說的一樣,全棧開發(fā)并不是一個(gè)精確的定義。它是一個(gè)持續(xù)性的學(xué)習(xí)過程,全棧開發(fā)的關(guān)鍵是旋轉(zhuǎn)按鈕,而不是打開和關(guān)閉開關(guān)。
我的職業(yè)生涯開始于 Python 和 Flask,然后學(xué)習(xí)了數(shù)據(jù)庫,像 MongoDB 和 MySQL,緩存使用 Redis,提交代碼使用 Git,使用 javascript,學(xué)會理解 Celery 和 RabbotMQ 的事件處理機(jī)制和消息隊(duì)列的原理。在那之后,我使用 Diango 框架,我又熟悉了 AWS 和 Nginx web 服務(wù)器。我使用 CoffeeScript 和 Backbone JS,也用過 Angular JS 取為公司開發(fā) Chrome 擴(kuò)展。因?yàn)槲以趲准液軆?yōu)秀的創(chuàng)業(yè)公司工作,我有很大的自由度去做這些工作。我打心底感謝他們。
寫在最后
我給后來開發(fā)者的建議如下:
要一直保持學(xué)習(xí)的熱情。不要知道了就止步。
可以參加技術(shù)研討會和科技大會去發(fā)現(xiàn)最近開發(fā)流行的技術(shù)。
不管是開發(fā)運(yùn)維、UI/UX或者是后端開發(fā),這取決于你。
保持閱讀的良好習(xí)慣,多動(dòng)手實(shí)驗(yàn)。
不要害怕CSS。買一個(gè)AWS的云主機(jī)來做負(fù)載均衡的實(shí)踐。
祝你早日實(shí)現(xiàn)全棧的夢想,吃好,睡好,保持好精力。
原文轉(zhuǎn)自:https://dzone.com/articles/why-full-stack-development-is-too-good-for-you-in