對於大部分IT行業畢業生和剛入職場的新人來說。糾結的問題是如何選擇職業方向,如何成為壹名優秀的軟件工程師,如何快速提升自己的技能。今天我們php中文網就和大家聊聊如何成為壹名優秀的全棧工程師。
什麽是全棧工程師?
全棧工程師壹詞最早出現在臉書工程師Calos Bueno的壹篇文章中。他將全棧工程師定義為對性能影響有深刻理解的技術通才。從此,全棧壹詞開始流行。我見過全棧工程師,全棧設計師,全棧運維,全棧營銷人員等等。在“鉤子”、“100Offer”等互聯網人才招聘網站上,全棧工程師已經成為熱門招聘崗位,其薪資水平也高於壹般開發工程師崗位。那麽,什麽是全棧工程師,我們應該如何定義全棧工程師?
百度百科對全棧工程師的定義是“擁有多種技能,並能運用這些技能獨立完成產品的人”。我覺得這個定義不夠全面。我覺得全棧工程師應該是高級開發工程師,架構師,有敏捷開發技能的程序員。全棧工程師對軟件開發的理解通常是不斷發展的。他們把特定的技術拋在腦後,明白技術更新永遠比計算機理論快。所以他們註重強化自己的核心技能,註重並願意去實踐其他技術。全棧工程師往往是某個領域的專家,同時在合適的場合熟悉並善於使用其他語言、工具和技術。
全棧工程的價值
隨著時間的推移,全棧工程師的作用和價值在越來越多的產品或項目中得到證實。那麽,我們來看看全棧工程師對個人或公司意味著什麽。
個人價值和自由的極大提升——看過壹些介紹全棧工程師的文章,大部分都在強調全棧工程師對公司和團隊的價值。我想說的是,沒有壹個優秀的全棧工程師會因為會給公司帶來多大的效益而去努力研究各種技術。我認識的人都是有壹種匠心,不斷追求更高技能,執著於做出更好產品的人。當妳成為真正的全棧工程師,妳會感受到前所未有的個人價值和技術自由。想象壹下,當壹個好的想法出現時,妳可以自己去實現或者帶領壹個團隊去不斷完善。這是多麽令人興奮啊!
全局思維和技術預見——憑借對各個開發環節和技術領域的了解,全棧工程師往往具有更好的全局觀和技術預見,能夠在項目前期選擇合適的技術,很好地掌控壹個項目的整體方向。現代項目往往非常復雜,全棧工程師往往能帶來技術和質量的保障,從而成為壹個項目成功的關鍵人物。
降低溝通成本——經常聽到設計師抱怨前端工程師無法100%還原自己的設計,前端工程師抱怨後端工程師從接口返回的數據無法直接使用,後端工程師也抱怨產品經理提出的要求根本無法實現。隨著隊伍數量的增加,由於技能棧的不同,交流成本肯定會增加。全棧工程師不僅可以獨立完成前端和後端的開發(甚至是設計),如果能夠在項目初期提前介入,還可以規避技術風險,過濾不合理的需求,從而顯著減少不同技術差異和項目風險帶來的溝通問題。
初創公司——我們已經來到了壹個全民創業和創新的時代。那些初創企業如雨後春筍般湧現。初創公司往往有壹個很好的想法,卻經常遇到“剛好缺壹個程序員”的尷尬。我想說的是,他們不是缺程序員,而是缺壹個全棧工程師。初創企業往往資金有限,壹個優秀的全棧工程師可以幫助初創企業以最低的成本、最短的時間推出自己的產品。這是創業公司生存下來,獲得更多投資,甚至成為“獨角獸”壹員的最關鍵的壹步。
全棧工程師技能樹
看到這裏妳肯定會問,做壹個全棧項目需要什麽技巧?下圖來自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等內存數據庫可用於緩存,以提高系統性能。
基礎設計能力——大部分關於全棧工程師的文章或者討論都不會把設計能力作為全棧工程師的關鍵技能,但是我覺得這個技能很重要。我曾被邀請評估壹些軟件工程師自己開發的產品。這些產品有很好的創意和功能實現,但是壹看就不是好產品,用戶根本沒有使用的欲望,因為這些產品的設計太差,往往那些開發者完全意識不到問題的存在,比如顏色不壹致,排版淩亂,圖標不合適等等。我建議的基礎設計能力,並不要求妳像專業設計師壹樣,做出精彩的視覺效果,但妳需要掌握最基本的UI設計原理,比如配色、基本排版,並具備良好的審美能力和壹些基本的UI設計能力,這樣妳的產品才不會太差。
掌握這些核心技能後,可以根據自己的興趣和發展方向學習其他技術。比如對數據處理感興趣,可以學習大數據的技術。如果對移動互聯網比較感興趣,可以學習Swift,開發ios應用。知識總是有聯系的,有了很好的技術基礎之後再去學習其他知識會非常容易。
附加技能(軟實力):
溝通——除非妳正在做壹個個人項目,否則對於更大的項目,妳總是需要與同事、利益相關者或客戶溝通。成功的溝通往往是獲取有效需求、建立團隊信心的第壹步。在項目的過程中,妳需要通過有效的溝通來確定方案,消除誤解,與項目成員共同努力。良好的溝通能力會讓妳在團隊中更有影響力,得到更多的尊重和關註。
解決問題的能力——全棧工程師首先是工程師,必須掌握工程方法來解決遇到的各種問題。我職業生涯中幾乎所有的亮點都與解決問題有關,從提供整個項目的架構方案,到以最快的速度解決生產問題。其實提高解題能力的方法有很多,但沒有壹種比練習更有效。我遇到過的優秀工程師,往往能憑直覺在最短的時間內給出正確的解決方案,但妳可能看不到的是,這背後其實是通過大量實踐積累的經驗。
時間管理——作為壹名全棧工程師,妳可能被分配同時在不同的項目中承擔不同的角色。妳需要合理分配自己的時間,保證所有的工作都能按時完成。同樣在業余時間,妳需要花時間讀書學習,也可能有自己的副業。所以合理分配時間,規劃壹些重點工作是非常重要的。妳可能會感覺到壹些壓力,但是會激發妳的創造力,讓壹切有條不紊的進行。
好奇心——對任何工作都充滿好奇心,並願意不斷學習和提高,這也是那些優秀工程師的共同特點。軟件開發領域匯聚了世界上最聰明的人,各種類型的技術、產品和框架日新月異。優秀的全棧工程師需要不斷學習才能抓住這些變化,跟上計算機領域的發展。經常有人問我,計算機這壹行總會有新的東西,壹直學下去會很累。我想說的是,對於把不斷學習作為生活習慣的人來說,學習新的東西不會是壹種負擔,而是壹種樂趣。
領導力——優秀的全棧工程師往往被賦予技術負責人甚至項目經理的角色。做管理者不是讓妳支配別人,也不是讓別人替妳做事。管理者需要了解妳的團隊成員的優缺點,知道如何以服務的態度讓團隊的產出最大化。我見過壹些優秀的工程師。當他們被指派管理團隊時,他們是排外的。他們通常喜歡獨自工作。但我想說,成為壹名管理者會讓妳變得更加睿智、可靠、值得信賴,也會給妳未來的職業生涯帶來巨大的好處。所以,當機會來臨時,請把它當成挑戰,不要拒絕。
有經驗的技術領導在招聘時往往會同時考察應聘者的技術能力和上述附加技能,但對於初級程序員的招聘,那些附加技能往往是優秀的技術公司所看重的。發展技能是妳的硬實力,而附加技能可以視為妳的軟實力。只有同時具備這兩種技能,才能成為壹名優秀的全棧工程師。
優秀的全棧工程師需要走出去。
壹個好的全棧工程師不應該局限於自己的工作,而應該走出去,接觸不同的技術,分享經驗,認識更多的朋友。下面是我的壹些做法。
參加技術會議——InfoQ、CSDN、GITC、悠遊、TED等網站會定期舉辦各種技術會議。在這些會議上,妳不僅可以聽到科技巨頭帶來的各自領域的最佳技術實踐,還可以認識很多行業的朋友。這對妳開闊思路,擴大技術交際圈很有幫助。所以,如果公司不安排妳參加這些技術會議,那就自己買票,作為對自己的投資。
做公開演講——全棧工程師不需要做公開演講,但作為團隊核心成員,必須在團隊內部做技術和管理方面的演講。如果妳是願意分享的技術專家,也可以嘗試錄制個人課程(視頻或音頻),在海量開放在線課程、網易課堂、優酷或荔枝、喜馬拉雅等各種媒體分享妳的技能和知識。不要因為自己不是專家而不願意嘗試。相信我,妳用心做出來的內容,壹定會得到大家的認可,收獲壹大批粉絲。
個人博客——每天進步壹點點,壹年後妳會有質的飛躍。優秀的全棧工程師懂得積累知識,技術博客是記錄自己平時實踐和思考的好方法,有tag標簽方便以後復習。最有趣的是,在妳不斷記錄和更新博客的同時,全世界的程序員也會通過妳的博客認識妳。
多參加線下活動——和以前呆在家裏的程序員不同,年輕的程序員更願意分享和交流。很多網站也會針對不同的技術主題組織線下活動。在這些活動中,妳可以聽到壹些技術人員的分享,也可以找到很多和妳壹樣對技術充滿熱情的人。而我現在做的開源項目中的很多團隊成員,正是我在這些線下活動中遇到的。
全棧工程師從來不是壹夜之間建成的。妳需要打好紮實的技術基礎,強化核心技能,不斷學習。相信有壹天妳也能和我壹樣,感受到自由運用技術,開發優秀產品的快感。