全棧新兵成長記,附贈校招三大錦囊
摘要:十餘載寒窗,一朝邁入社會,翹首以盼中結束的學生生涯往往也是糾結的開始:目光轉向同學斬獲的各種offer,兩手空空的不甘與無奈誰人能懂;帶著歡快的心情走向工作崗位,競爭的激烈卻讓自己處處碰壁。在雲棲社區與雲翼計劃聯合主辦的《首屆互聯網新兵進階在線峰會》上,阿裏雲前端開發工程師行劍介紹了自己在校園技術類社團成長和活動的經曆,並給校招中的同學提供了三個必備錦囊。本文內容根據演講嘉賓分享視頻以及PPT整理而成。
全棧這個話題在業界褒貶不一,這個話題在最近兩年最火也最受爭議。這是因為大家往往覺得全棧工程師什麼都懂,但是又什麼都不精通,資曆比較淺的全棧工程師可能覺得自己什麼都會,但是這樣就會兩頭不著好,可能一些後端工程師認為他們會MongoDB、Node.js就可以說自己是全棧了。前端工程師則會認為後端工程師不好好寫Java,用一些Angular或者Bootstrap的模板就號稱是全棧了;在前端領域呢有時候也會認為自己內部出了叛徒,一個前端工程師頁麵切好了嗎?組件做好了嗎?就去搞全棧。所以本次就與大家一起聊一聊全棧這個話題。
首先自我介紹一下,我的花名叫做行劍,畢業於大連海事大學,本科是通信工程專業,研究生是交通運輸工程專業,大家可以看到這兩個專業其實與互聯網沒有太大的關係,屬於比較傳統的行業,尤其是交通運輸工程在大連海事大學是與海相關的,主要研究的是船舶的交通運輸。我的實習一開始是在阿裏巴巴的B2B團隊,後來又轉到了阿裏雲做前端工程師。
不知道大家對於大連海事大學有沒有了解,世界上有兩所學校上課都是黑漆漆的一片,一所是霍格沃茲魔方學校,另一所就是大連海事大學。相比於其他院校,大連海事的上課以及日常要求更加嚴格一些,那麼我是如何在這樣一個非985、半軍管、非計算機專業下的成長為前端技術工程師的呢?這也是本次想要分享的內容。

首先分享一下我大學期間的整體脈絡,在剛進入學校的時候自己還是一個互聯網小白,基本上什麼都不知道,隻會一點Office。真正改變我的是在大一的時候我參與了技術社團的招新,其實在進入技術社團之前自己對於技術一點都不了解,麵試的時候問到了電腦和顯示器,這個我都知道,但是當問到CPU時就真的不知道了。當時並不知道電腦裏有CPU、主板、顯卡這些東西,隻知道電腦能夠上網,能夠做Word這樣的東西。但是進入到社團裏對於我自己而言就是一個巨大的改變,我開始一步步地走向了計算機的環境中。在大二的時候,我開始接觸編程,因為之前大一的時候是在硬件部,在硬件部就負責一些與硬件相關的工作,負責社團計算機的維護、網絡的布置、幫助同學重裝係統、解決係統問題、筆記本電腦清灰等這些問題,但是這些問題與社團正真需要做的東西有點遠,社團最主要的工作是幫助學校做一些網站或者小的工具等。當有這樣的機會時我也會有很多的想法想要與大家一起交流,但是大一在硬件部我的一些想法往往不被采納,我有想法但是可能與技術相隔著一段距離,不一定被采納,所以這時候就在想如何將心裏的想法變成現實,於是就轉到了社團中與代碼相關的部門,當時還叫做美工部。

一步步走來之後再回想起來,其實不一定必須在開始時將所有問題都想清楚,大學裏同一個人每一年的想法都是有很大變化的,所以隻要有想法就是好的,即使中途會有所轉變,隻要沿著自己的想法走下去就是好的。在大三的時候,我在一個中央美院的朋友的帶領下接觸了智能硬件、Arduino以及Processing。其實大二期間相當於在社團裏做了一些產品,在大三的時候就覺得未來可能是物聯網的時代,所以就接觸了一些智能硬件,物聯網可以說就是將現實中的感覺、觸覺搬到互聯網上去做分析和研究,所以當時就接觸了Arduino這種智能硬件的東西。可能大學期間的每一步與每一步之間都沒有太多的聯係和目的性,就是單純地認為這個事情比較好玩,所以需要嚐試一下。到了大三很多同學就開始找工作了,我當時並沒有太多的想法,隻是想將自己心目中想做的事情做好了,構想未來產品是什麼的樣子就去嚐試一下。真正讓我踏入前端大門的時機就是大三暑假的機會,學校的一個老師想找社團進行合作去做一個航海通信模擬器用做教學設備,這時候因為之前使用Flex做過一個版本,但是Flash以及漸漸日薄西山了,所以希望將之前的Flex模式搬到普通的瀏覽器上,而不再需要Flash沙盒了。也正是因為這個契機,我開始真正地接觸到前端和互聯網這些東西。
下圖就是我們在大三時做的船舶通訊設備模擬器,當時使用的技術棧是MEAN,也就是MongoDB + Express + Arduino + Node.js這樣一個典型的全棧環境。這個相當於是船上的通訊設備的模擬器,這樣的模擬器在網站中總共實現了7個,因為在真正將現實的東西進行模擬的時候就會涉及到非常複雜的數據環境。下圖的模擬器就需要有時間的數據、經緯度數據、入網洋區的數據,在業務領域中有信息的收發、報警、出入網、設置等等。最開始技術棧想使用jQuery,但是因為它是命令式的,並且很多的命令都是相互交叉的,不同設備之間的命令、同一個設備不同頁麵之間的命令都是相互交叉的,所以就會造成比較混亂的情況,所以我們想要對它進行隔離,使得每個設備之間有自己的環境,但是想的方法是使用iframe實現數據隔離,但是正是因為iframe對於數據隔離的太好了,一些公用的數據之間的交互反而變得複雜了。比如在這裏會使用到經緯度的數據,無論船隻開到哪裏都需要這個經緯度,而且對於經緯度而言,每個設備都是一樣的,但是由於iframe的隔離性使得數據的流通性不是很好,所以當時我就在思考如何將iframe這一層去掉,後來發現了Angular,通過Angular的MVC或者MVVM這樣的數據模型的組織可以實現路由隔離、數據隔離、視圖隔離以及組件隔離。2014年的時候的前端環境和現在也不同,當時還隻是一部分了解Angular,我當時了解Angular也是比較吃力的,是一點點看下去的,因為沒有太多資料,甚至當時Angular還處於普及的階段,所以當時學習Angular的時候就在知乎、StackOverFlow甚至是微博上一點點去搜集相關資料的,所以將一整套設備做出來其實是對於我的曆練,這個項目也是到目前為止我參與的比較複雜的項目之一。





如果未來想成為一名工程師,其實最本質上我們是人,第二個層次是工程師,第三個層次才是細分領域的工程師,我們不應該因為細分領域就變得縮手縮腳,而是在工程師這個領域內去思考如何通過技術手段解決生活中遇到的問題。



在我心目中好的全棧工程師應有如下的素質:
- 快速的項目介入和上手能力。
- 精準的技術選型能力。可能需要在能夠看到很多的技術裏最快地發現和分析出什麼技術更適合並且能夠給團隊以強大的支撐。
- 強大的問題劃分能力和解決能力。
- 優秀的代碼質量。無論是前端還是後端都需要有優秀的基本功,代碼是最基本的能力。
- 良好的補位意識和團隊意識。全棧也不是一個人孤軍奮戰,也是需要與團隊成員一起合作的,互相幫助,互相補位。
對於全棧工程師而言,重要的是思維方式和學習能力。首先說思維方式,那就是不為自己設限,不會想著自己是前端工程師,所以後端的東西我就一點也不碰。有問題,你就需要去評估是否值得解決。如果值得解決,你就應該著手去解決,而不是假設公司內會有另外一個人比你更合適解決這個問題。這時候很可能你就需要去做你從來沒有做過的事情,需要學習你原本可能完全不懂的技術。
以上這些就是通過我自己大學階段的積累對於全棧工程師能夠在未來占據一席之地的理解。可能通過這些,大家認為全棧工程師比較有意思,所以也會比較向往成為全棧工程師,但是我認為並不是所有人都要成為全棧工程師,這應該是未來的發展方向之一。與全棧工程師對立的發展方向就是專家,專家能夠解決內在問題,而全棧工程師則是從外在地去解決問題。比如AngularJS明顯就是從外麵,從Java的思考方式去解決前端的問題。人最本質的天性往往是不同的,有的人天生就適合成為專家,有的人天生就適合向外思考擴展方式。所以我們並不一定就是要成為專家或者全棧工程師,而是應該跟著自己的想法走,跟著自己的天性去走。

關於校招
現在也是校招的季節,所以也在這裏和大家分享一下關於校招的話題,希望能夠對於大家的校招有所幫助。首先總結了幾個校招小貼士:

首先對於簡曆而言,簡曆盡可能簡單幹淨,要有節奏感,主次分明,就是什麼東西是你最希望給麵試官或者未來的老大去看的,就要將這些重點去寫,對於那些你覺得可能並不重要的,可能就可以分層次去寫。而且簡曆盡可能在一頁的範圍之內,有的同學寫簡曆將自己想寫的內容都寫了,一共三四頁的內容,其實應該在簡曆中挑選出自己最想表達的東西。在簡曆中要有明確的可靠的聯係方式,方便麵試官和HR在第一時間聯係到你。對於第二部分學曆情況可以使用兩句話概括,本科畢業哪裏,研究生畢業於哪裏,如果想要告訴麵試官自己的學校情況,也可以簡單地去寫,不需要過於囉嗦,在這裏也建議大家不要和麵試官耍一些小心眼,比如學校不是特別好就一筆帶過,其實完全可以將最本質的自己展示出來,每個人總歸會找到屬於自己的歸宿和方向。第三部分一般是項目經驗,這部分可以突出分幾個項目進行描述,但是在突出的同時也應該劃分主次,最主要的項目放在最前麵,後麵是稍微次要的項目,在每個項目中也應該介紹技術背景、人員情況以及如何進行技術選型的、技術選型的思考以及在技術選型之上當項目完結之後對於項目的思考和改進等,也就是說每個項目不應該是簡單地介紹使用了哪些技術,而是立體性地解釋自己思考的過程。第四部分應該是對於自己技術棧的總結,很多人都會在這裏使用大量的篇幅,但是我認為對於這部分隻需要簡單地進行羅列,麵試官真正想要了解的時候會在麵試或者筆試中了解。最後一部分是對於自己的評價,其實自我評價也很重要,在這部分表現自己能力的時候可以使用實例輔助來證明,比如在哪些方麵體現了自己的團隊合作能力。

- 對技術有執著的追求。熟悉前端基本技術,對angular,react,vue等流行框架有深入完整的實踐。有較強的前端工程架構和組織能力。
- 有一定的技術視野。並不把自己局限在某個細小的領域,了解後端業務,
- 了解基本的Linux命令及運維技巧。
- 有很強的業務邏輯抽象的能力,在項目中追求係統化,模塊化,工程化。
- 善於發現係統的弱點,並有能動性去改變缺陷。以追求係統的健壯性為終極目標。
- 在開發中一貫遵從代碼格式規範,能夠通過Git進行版本控製。
- 有很強的表達能力,在技術社團中經常進行新生培訓。經常參加各種線下技術交流活動。並有機會在200人的學校技術交流上進行主題演講。有很強的團隊精神,有良好的組織和協調能力。
在麵試中也要嚐試去引導麵試官,我在自己的阿裏的二麵的時候,技術麵試官問了我關於Cookie的問題,在我講Cookie的時候,肯定是去講Cookie在每一次請求的時候都會把信息帶給後端,而且現在的互聯網架構後端一般都是無狀態的東西。想要讓麵試官記住你就需要將麵試官往自己已知的方向上帶,與Cookie相像的還有Session的概念,這時候麵試官可能就會說那你去講講Session吧,哪裏會使用到Session,可能在登錄的時候,將用戶的信息存儲到Session上,在使用Session的時候應該注意哪些問題,如何存儲、如何更新以及多長時間失效等問題,以及進程與進程之間的Session如何共享,我們知道可以通過外部的存儲機製比如Redis或者MongoDB去共享Session,就是在技術麵試官問你1的時候,你能不能提出一串來去展現出技術的完整性。當將技術麵試官的思路引向了登錄之後,麵試官就可能會問關於登錄你知道什麼,我說我知道最基本的登錄方式,比如使用POST,即使使用了POST也會是以明碼的方式,可能可以進行一些編碼,但是這些編碼可能在前端也是透明的,更好的方式應該是使用HTTPS來避免一些中間人的攻擊,講到這裏也可以往HTTP2這個協議上去帶,以及HTTP、HTTP2和HTTPS這些協議之間有什麼區別,以及HTTP2未來的發展方向是什麼。我們與麵試官之間應該是一種交流而不應該是麵試官問你1就回答1,問2就回答2,而應該體現出自己完整的技術思考過程和相互之間組織的能力。


最後送給大家三個校招錦囊。
錦囊1: 了解阿裏雲產品

錦囊2: 在阿裏雲上進行實踐

錦囊3: 關注雲棲社區

第三個錦囊就是關注雲棲社區這樣的開發者社區,通過雲棲社區可以與大咖直接近距離互動,了解技術最新前沿的方向。
最後更新:2017-06-06 21:38:45