對大多數IT產業的畢業生,剛步入工作崗位的職場新人來說。糾結的問題都是如何選擇職業方向,如何成為優秀的軟體工程師,以及如何快速提升自身的技能等。今天,我們php中文網來跟大家談談要如何才能成為優秀的全端工程師。
什麼是全端工程師
全端工程師一詞,最早出現在Facebook工程師Calos Bueno的文章 - Full Stack (需翻牆)。他把全端工程師定義為對效能影響有著深入理解的技術通才。自那時起全端這個詞便流行起來,我看到過的就有全端工程師,全端設計師,全端運維,全端市場行銷人員等等。而在“拉鉤”,“100Offer”等針對互聯網人才的招聘網站上,全端工程師更是一躍成為熱門招聘職位,其薪資水平也比一般的開發工程師職位要高出一截。那麼,什麼是全端工程師,我們又該如何定義一個全端工程師呢?
百度百科對全端工程師的定義是這樣的:「掌握多種技能,並能利用多種技能獨立完成產品的人」。我覺得這個定義還不夠全面,我認為全端工程師應該同時是一位資深開發工程師、架構師以及具有敏捷開發技能的程式設計師。全端工程師對於軟體開發的認識往往已經進化了,他們把特定的技術拋到了身後,明白技術的更新始終比計算機理論要快的道理,因此,他們注重強化自身的核心技能,關注並樂於實踐其他技術。全端工程師往往是某一方面的專家,同時通曉並善於在正確的場合運用其他語言、工具和技術。
全堆疊工程師的價值
隨著時間的推移,全端工程師的角色和價值在越來越多的產品或專案中得到了印證。那麼,讓我們來看看全端工程師對於個人或公司意味著什麼。
● 個人價值及自由度的極大提升- 我曾經看過一些介紹全端工程師的文章,文中大多強調了全端工程師對於公司與團隊的價值。而我想說的是,沒有一個優秀的全端工程師是因為會對公司產生多大的利益,而努力學習各種技術的。我所認識的他們,都是那些有著一顆匠心,不斷追求更高技能,執著於做出更優秀產品的人。而當你成為真正的全端工程師後,會感受到前所未有的個人價值與技術自由度的提升。試想當一個很好的創意出現時,你可以一個人或主導一個團隊去實現並不斷完善它,這是多麼讓人興奮的事啊!
● 全局思維與技術前瞻性—— 由於具備了各個開發環節與技術領域的知識,全端工程師往往具有更好的大局觀和技術前瞻性,能夠在專案初期就選擇正確的技術,並且很好地把控一個專案的整體方向。現代專案往往非常複雜,而全端工程師往往能帶來技術和品質上的保障,從而成為專案成功的關鍵人物。
● 降低溝通成本- 我常聽到有設計師抱怨前端工程師無法百分之百地還原他們的設計,而前端工程師又在抱怨後端工程師從介面回傳的資料更本無法直接使用,後端工程師也在抱怨產品經理所提的需求根本無法完成。隨著團隊人數的上升,由於各自技能堆疊的不同,溝通成本一定會隨之上升。全端工程師除了能夠獨立完成前後端的開發(甚至包括設計)外,如果能夠在專案初期提前介入,便能很好地規避技術風險,過濾不合理的需求,從而顯著降低因不同技術差異導致的溝通問題,顯著降低專案風險。
● 新創公司- 我們已經來到了一個萬眾創業,全民創新的時代。那些新創公司也如雨後春筍般不斷湧現。新創公司往往都有了一個不錯的創意,但經常會遇到「就缺一個程式設計師」的尷尬。我想說的是,他們其實不是缺乏程式設計師,而是缺少一位全端工程師。新創公司往往資金有限,而優秀的全端工程師能夠幫助新創公司用最低的代價與最短的時間推出自己的產品。這是新創公司能夠存活下來,拿到更多投資,甚至成為「獨角獸」一員的最關鍵一步。
全端工程師技能樹
看到這裡你一定會問,到底需要具備怎樣的技能才能成為全端工程呢?下面這張圖來自Medium,作者將軟體開發所涉及的各個面向分為層,並將每個層所包含的主要技術作為一個元件,製作了這張全端技術圖。
# 從上面這張圖,我們不難發現,現在的技術體係是多麼龐大,每一年又會有新的技術加入到這些層中,而已有的技術又在不斷地更新。因此要掌握所有技術是根本不可能的,而成為全端工程師並不需要你真的掌握所有的技術,你應該將自己的精力聚焦在關鍵開發技能以及一些必須掌握的附加技能上。
關鍵開發技能(硬實力):
●Git / GitHub# - 你必須掌握如何使用Git來管理和分享你的程式碼。把Git當作關鍵技能的第一條,是因為它不只是一個程式碼管理工具,更是一種推薦的工作方式。它讓你能在任何地方進行開發,有效率地管理任何大小的項目,透過Git你還能與其他團隊成員進行分散式協作,大大提升工作效率。透過GitHub,還能將你與世界上所有的開發者連結在一起。
● 至少一門程式語言- 你需要精通至少一門程式語言,JAVA、PHP# 、C#、Python、Ruby、Perl等,因為你的大多數核心業務處理都需要用這門語言來寫。你既要掌握這門語言的語法,又需要非常熟悉如何基於這門語言進行專案的架構、設計、實現以及測試。如果你選擇的是JAVA,那麼你需要掌握物件導向的設計與開發,設計模式的應用,基於J2EE各個元件的開發 等等。
● 運用開發框架與第三方函式庫- 流行的開發語言,一般伴隨著優秀的開發框架,如JAVA的Spring、MyBatis、Hibernate ,Python的Django,PHP的thinkphp、yin,nodeJs的express 等等。這些開發框架往往都遵循軟體開發領域的一些最佳實踐,並由非常優秀的開發人員創建。熟練使用這些開發框架或第三方函式庫能夠避免重複發明輪子,使你的工作事半功倍。更重要的是這些優秀框架或第三方函式庫的一般都得到持續的維護,是對你的產品或專案在品質與安全方便的最有效的保障。
● 前端技術— 之所以將前端技術獨立出來,作為一項關鍵技術,是因為它在今天的專案和產品的研發過程中正變得越來越重要。一個產品除了實現所需的功能之外,是否好用(使用者體驗)也正在成為評判一個產品是否成功的重要標準。而這都依賴前端技術的實現,你至少需要掌握HTML5、CSS3、JavaScript等基本前端技術,同時進一步學習JQuery、LESS、SASS、AngularJS或REACT等前端框架或第三方函式庫。
● 資料庫與快取- 任何產品或項目都需要一個資料庫來儲存資料。身為全端工程師,你也需要至少掌握一到兩個資料庫,並且知道如何與資料庫互動。目前流行的資料庫主要有MySQL、MongoDB、Redis、Oracle、SQLServer等。 MongoDB作為一個文件型資料庫,在互聯網產品中正被越來越多地使用,對於規模稍大一些的項目,我仍推薦使用MySQL或商用的Oracle作為後端資料庫。而Redis這樣的記憶體資料庫則可以用於緩存,以提升系統的效能。
● 基本設計能力- 大部分關於全端工程師的文章或討論中,都不會將設計能力做為全端工程師的關鍵技能,但我卻認為這項技能非常重要。我曾被邀請評估一些軟體工程師自己開發的產品,這些產品都有不錯的創意,功能實現也很到位,但一看就不是一個好的產品,用戶根本沒有使用慾望,原因是這些產品的設計太差了,而往往那些開發者完全沒有意識到問題的存在,例如色彩的不一致,排版的凌亂,不恰當的圖示等等。我所建議的基本設計能力,並不要求你像專業設計師那樣能夠P出神圖、製作奇妙的視覺效果等,但你需要掌握最基本的UI設計原則,如色彩的搭配,基本的排版,並具備良好的美感能力,和一些基本UI設計能力,這樣你做的產品就不會太差了。
在掌握了這些核心技能之後,你可以根據自己的興趣與發展方向,學習其他方面的技術。例如,如果你對資料處理有興趣,那麼你可以學習大數據方面的技術。如果你對行動互聯網更感興趣,那麼你可以學習Swift,開發ios應用程式。知識總是相通的,在有了良好的技術基礎後,學習其他知識將會變得非常容易。
附加技能(軟實力):
#● 溝通## - 除非你是在做個人項目,對於稍大的項目,你總是需要與同事、利害關係人或是客戶溝通的。而成功的溝通往往是獲得有效需求,與建立團隊信心的第一步。在專案的進行過程中,你更需要透過有效的溝通去確定方案,消除誤解,與專案成員協同前進。良好的溝通能力將使你在團隊中更具影響力,並收到更多尊重和關注。
● 問題解決能力-全端工程師首先是工程師,他必須掌握工程化的方法來解決所遇到的各種問題。我在職涯中的幾乎所有亮點,都與解決問題相關,大到提供整個專案的架構方案,小到以最快的速度解決生產問題 等。其實有很多提高問題解決能力的方法,但沒有一種比實務更有效。我所見到的優秀工程師,往往能夠憑藉直覺以最短的時間給出正確的解決方案,但你可能沒有看到的是,在這背後其實是經過大量實踐累積而來的經驗。
● 時間管理- 身為全端工程師,你可能會被安排同時在不同的專案中承擔不同的角色。你需要合理地分配時間,保證所有的工作能夠準時交付。同樣在你的空閒時間,你還需要花時間閱讀和學習,同時你也可能會有自己的Side Project。因此,合理地進行時間分配,並對一些關鍵任務,進行規劃是很重要的。你或許會感到一些壓力,但這反而會激發你的創造力,並能讓一切都有條不紊地進行。
● 好奇心- 對任何工作都抱持好奇心,並願意不斷學習和改善是那些優秀工程師的共同特質。軟體開發領域匯集了世界上最聰明的人,各種類型的技術、產品、框架更是日新月異,層出不窮。優秀的全端工程師需要不斷學習來抓住這些變化,並跟上電腦領域發展的腳步。常常有人會問我,做計算機這一行一直會有新的東西產生,要去不斷地學習,是不是會很累。我要說的是,對於將持續學習當作一種生活習慣的人來說,學習新事物並不會成為一種負擔,反而是一種樂趣。
● 領導力-優秀的全端工程師往往會被賦予技術Leader甚至專案管理者的角色。成為管理者並不是讓你去支配其他人,或讓其他人替你做事。管理者需要理解你的團隊成員的長處與不足,並知道如何以服務的態度使團隊獲得最大化的產出。我見過一些非常優秀的工程師,當他們被安排去管理團隊時,他們是排斥的,他們往往更願意獨自工作。但我想說,成為管理者,將會讓你更加睿智、可靠和值得他人信賴,也會為你未來的職涯帶來極大的益處。因此,當機會到來時,請將它視為挑戰,不要排斥它。
有經驗的技術領導者在招募時,往往會同時檢視應徵者技術能力與上述附加技能,而對於初級程式設計師的招募來說,那些附加技能往往更被優秀的科技公司所重視。開發技能是你的硬實力,而附加技能可以看作是你的軟實力,只有同時具備這兩方面技能,才能成為優秀的全端工程師。
優秀的全端工程師需要出去
優秀的全端工程師不應侷限於自己的工作,他更應該走出去,接觸不同的技術,分享自己的經驗和心得,認識更多的朋友。下面便是我的一些做法。
● 參加技術會議- InfoQ、CSDN、GITC、優用、TED 等網站都會定期舉辦各類技術會議。在這些大會上,你不僅能夠聽到科技大咖們帶來的各自領域最佳技術實踐,也能認識許多業界的朋友。這對你開拓思路,擴大科技社交圈都很有幫助。因此,如果公司沒有安排你去參加這些技術大會的話,那就自己買票參加,作為對自己的一種投資吧。
● 作公開演講- 全端工程師並不需要是個公開演講者,但身為團隊的核心成員,他一定需要在團隊內部做技術、管理等方面的進行演講。如果你是個樂於分享的科技達人,那麼也可以嘗試錄製個人課程(影片或音訊),並在慕課、網易課堂、優酷或像荔枝、喜馬拉雅等各種媒體分享自己的技能和知識,不要因為自己不是專家就不願意嘗試,相信我,你用心製作的內容,會獲得大家的認可,並收穫一大批粉絲的。
● 個人部落格- 每天進步一點點,一年以後你會獲得質的飛躍。優秀的全端工程師懂得如何進行知識的積累,而技術部落格就是一個很好的方式,將自己平時的實踐、思考記錄下來,配以tag標籤方便日後的回顧。最有趣的是,當你在不斷記錄和更新你的部落格同時,世界各地的程式設計師也會透過你的部落格認識你。
● 參加離線活動- 與以前程式設計師總是待在家裡不同,現在的年輕程式設計師更願意分享和溝通。很多網站也會組織不同技術主題的離線活動,在這些活動中你可以聽到一些技術牛人的分享,還可以找到很多和你一樣對科技有激情的人。而我現在所做的開源專案中的許多團隊成員,正是我在這些線下活動中認識的。
全端工程師絕對不是一夜練成的,你需要打好技術基礎,強化核心技能,並持續學習。相信有一天你也能像我一樣,感受到自由地運用技術,開發出優秀產品所帶來的樂趣的。
相關文章: