本文摘自:《Web 全棧工程師的自我修養》 摘自:http://kb.cnblogs.com/page/528495/前端
野生程序員是指僅憑對計算機開發的興趣進入這個行業,從前端到後臺一手包攬,但各方面能力都不精通的人。野生程序員有很強大的單兵做戰能力,可是在編入「正規軍」以後,可能會不適應新的作事方法。程序員
遭遇「野生程序員」面試
騰訊公司內部的團隊不少,在團隊管理上有項目和專業兩個維度。也就是說,有些團隊是項目維度的,整個團隊共同維護一個產品,成員來自不一樣的職業崗位;有些團隊是專業維度的,好比一個組都是前端工程師,維護不一樣的產品。數據庫
由於前端組是設計部最接近後臺技術的團隊,因此團隊平時的工做和技術交流分享,都不侷限於前端技術領域,還包括不少服務器端或者移動端的技術。從前端到後端,一些技術問題都要咱們本身來解決。編程
在招聘前端工程師的時候,咱們對應聘者的要求是,在掌握基本前端技術的前提下,最好有更爲全面的技術。這樣,即便咱們的項目人力結構、平臺和方 向發生變化的時候,他也可以更加靈活地轉移到其餘角色中。並且技術的全面更能表現一我的對技術的熱情以及較強的學習能力。從團隊多樣性來說,多一些技術種 類的話,你們在一塊兒也能碰撞出新的火花。後端
有一次,我在 QQ 羣發佈了一條簡單的信息:「招聘前端工程師,全棧更佳。」隨後有一個「全棧工程師」A君向我自薦。瀏覽器
我仔細看了他的簡歷:「三年工做經驗,擅長 PHP、MySQL 數據庫、jQuery、HTML 和 CSS,對 CDN 加速和網絡安全也很有研究。」他的簡歷讓我眼前一亮,因而我跟他進行了一次簡單的電話面試。緩存
電話面試的第一個環節照例是讓A君簡短地介紹本身。A君在一個傳統行業的小公司作 IT 技術支持工做,公司的 3 個網站項目都是他一手搭建,從架構到編碼細節他都如數家珍。他號稱能解決一切技術問題,老闆提出的全部需求都能完成,並且只有他能完成。隨着最近公司業務 量愈來愈大,他還招了兩個下屬,可是主要的編程工做仍是他在作。安全
我問他:「咱們的職位是前端工程師,那麼您有哪些前端方面的技能呢?」他回答:「我擅長 HTML、CSS 和 JavaScript。」性能優化
「對於 Web 性能優化,您有哪些瞭解和經驗嗎?」他思索了一陣答道:「咱們在發佈項目以前壓縮 CSS 和 JavaScript 源代碼,這樣文件體積就變小了,用戶加載必要資源所花的時間也就更短了。」我繼續說道,很好,還有嗎?他想了半天,答不上來了。
其實關於 Web 性能優化,有很是多的方面能夠去作,我但願應聘者能儘可能多回答一些。
我想既然他對 Web 性能優化方面不太熟悉,可能他是一個偏後臺的程序員,於是就又問道:「關於服務器端 MVC 架構的技術實現,您是怎樣理解的?」他說:「是數據模型、視圖、控制器的分離。」
我更進一步問道:「這種架構方式有什麼好處?您在項目中是如何應用這一架構的?」他回答說:「MVC 的架構方式會讓項目可維護性更高,全部涉及界面的代碼都在視圖(View)裏面,全部涉及核心邏輯的代碼都在模型(Model)裏面,URL 路由之類的代碼都在控制器(Controller)裏面。我在項目中使用了 MVC 架構的 PHP 框架——CodeIgniter。」
我一邊打開他的網站,一邊繼續跟他電話溝通。當看到網站的 CSS 代碼都直接內嵌在 HTML 頭部的時候,我忍不住問他:「爲何您的網站的 CSS 代碼都內嵌在 HTML 裏面呢,是使用自動化工具合併進去的嗎?」他支支吾吾地說:「由於在本地調試的時候,CSS 文件修改常常不生效,因此就直接在 HTML 裏面改了,這樣比較快。」
好吧,我想這是一個典型的「知易行難」的開發者,他知道採用 MVC 架構的項目的可維護性更高,但是在分離樣式與結構上面尚未達到最基本的要求,甚至把 CSS 寫在 HTML 中。至於他說的在本地環境上發現 CSS 文件常常緩存,可能要看看本地服務器的緩存設置是否有問題,而後再作調試。稍微瞭解一點 HTTP 的瀏覽器端緩存,這就不是難事了。我更欣賞在開發流程上花工夫去理解和優化的應聘者,而不是馬馬虎虎,只是以完成需求爲目標的人。
我突 然想到他說的「全部需求他都能完成,且只有他能完成」,因而就想問問他代碼版本管理方面的問題。我說:「您們團隊如今加入了兩個新人,那麼 您們如何進行代碼版本管理?」他回答:「咱們有一臺測試服務器,用 FTP 來測試代碼,若是在測試機上沒有問題的話,咱們就會發布到生產環境。」
我說:「等等,我不是問您們代碼部署的問題,是平時您們如何管理代碼版本,如何分工協做的?」他說:「咱們把代碼從測試服務器上拷下來,修改完了以後再傳上去。」
到這裏,我終於明白爲何他們團隊的新人沒法快速融入項目了,由於項目沒有使用 SVN 或者 Git 這樣的版本管理工具。團隊只有一我的在寫代碼的時候,缺少版本管理工具的問題可能還不會暴露出來,可是當更多成員加入時,整個項目就會步履維艱,你們都要 花大量的時間合併代碼,以及找回丟失的代碼。萬一出現了外網 bug,版本工具也能幫咱們把站點狀態快速恢復到以前的時間點。
最後我抱着幾乎絕望的心情,問了下關係數據庫設計原則方面的問題,他的回答也不是很理想。
我知道,我又遭遇了「野生程序員」。
什麼是「野生程序員」
所謂「野生程序員」,就是沒有計算機基礎知識和相關教育經歷,靠着對計算機開發的興趣進入這個行業,雖然知識面比較廣,可是各方面都只知其一;不知其二的開發者。
這幾年我從一個求職者,轉變成一個招聘者,有一個感覺就是,中國高等教育與市場需求不接軌。學校不瞭解市場究竟須要什麼樣的人才,其設立的課程 和技術每每比市場技術現狀落後了 5 年以上。我在大學學習用 ASP 建站,可是如今已經幾乎沒有人用 ASP 建站了。一個直接的後果是,不少高校畢業生不能知足企業的要求。
與此同時,中國互聯網市場蓬勃發展,特別是移動互聯網的發力,讓中國跳 過「WAP 時代」,直接進入「App 時代」。市場的熱錢都投入到互聯網行業,「BAT」等大公司不斷擴張,創業公司也如雨後春筍,整個市場對軟件工程師的需求缺口巨大,因此不少公司在招人的 時候,無法招聘到「專業」的計算機專業畢業生。
在美國,由於教育與市場穩定發展了不少年,供求關係相對平衡,計算機相關專業本科已經成爲基本要求。舉例而言,美國的硅谷公司(如 Google)絕大部分前端開發招聘崗位都有一個最低要求——本科學歷,計算機相關專業。
相比而言,從中國的大公司(如騰訊)的招聘網站上能夠看出,有一些前端開發崗位沒有對學歷的要求,也有一些要求「本科及以上學歷」,少數纔會要 求「本科學歷,計算機相關專業」。咱們的團隊中就有一些成員是大專學歷。許多企業在招聘的時候每每放鬆了對學歷的要求,只看重項目和經驗,而不看重學歷。 這是一件好事,表明市場在高等教育的規模和質量都跟不上市場要求的狀況下,給予更多有興趣和能力的年輕人進入 IT 領域的機會,也填補了人才市場的空缺。
美國硅谷,是世界互聯網公司的中心,是全部求職者求之不得的聖地。在最開始,硅谷之因此名字當中 有一個「硅」字,是由於當地企業多數是從事加工 製造高濃度硅的半導體行業和電腦工業。隨後,互聯網公司和軟件公司漸漸取代傳統的硬件公司,讓硅谷得到了新的生命,但硅谷這個名字保留了下來。在硅谷從誕 生到發展壯大的整個生命週期中,斯坦福大學起到了很大的做用,我認爲稱之爲硅谷的母親也不爲過。
在中國,因爲政策、環境、歷史緣由,還有大學教育投入上的差別,致使大學在整個互聯網發展中起的做用沒那麼大。中美兩國 IT 人才市場供求關係上的這些差異,也反映在整個行業文化中。
一個直觀的反映就是軟件工程師的「草根」化。其實不少軟件工程師的收入都很高,處於中上層水平,相比金融行業的白領也絕不遜色,可是一談起程序 員,你們的印象仍是「一年四季的T恤(在行業展會上免費拿的)牛仔褲,平時也喜歡宅在家裏,不會像一樣收入的金融白領,平時愛好聽歌劇打高爾夫球」。這種 差別一方面是外部人士對軟件工程師職業的偏見,另外一方面也是程序員行業的自黑習慣。在招聘時崗位要求就已經放到最低:不要求學歷、上班不要求着裝、上下班 時間靈活,這樣纔好更方便地招聘。而金融行業有意識地塑造一種「精英」文化,從學歷就設置高門檻,即便有些工做根本不須要那麼高的學歷。
回到畢業生的話題,不少跨專業的學生髮現本身興趣在互聯網和計算機方向的時候,就開始了自學之路,基本上學習方式有這樣幾種。
由於有這樣一些自學渠道,因此不必定只有計算機專業畢業的學生纔有機會進入互聯網行業。畢業以後,這些計算機愛好者進入不一樣的工做崗位,不一樣的是,有些進入大公司,有些進入小公司。這二者的成長軌跡每每會不太同樣。
小公司有不少野生程序員
流水線工做流程有諸多優勢,但通常來講,大公司才須要不少專精某種技術的工程師,組成一個 Web 開發團隊。創業公司只須要幾個技術全面的人來作開發和技術支持,有時候甚至只有一兩我的而已。
固然,最主要的緣由就是成本和回報的問題。招聘和維持龐大的 IT 研發團隊須要一筆不小的開支,小公司並無那麼多 Web 服務的需求,通常企業可能只須要一個公司站點就能夠了,如今甚至徹底不須要 Web 站點,能夠用微信公共帳號或者淘寶這樣的大平臺來完成。若是招聘一個完整的 Web 研發團隊,從用戶研究到交互設計、從 App 開發到數據庫管理,直接後果就是整個團隊大部分時間都空閒着,無事可作。與之相比,聘請一個或多個全棧工程師會更高效、更省錢。
第二個 緣由是,不少傳統線下公司並不會特別依賴 IT 技術,有些時候線下渠道佔據了公司大部分收入來源,因此公司不須要架設十分完善的線上服務。因爲線上服務的用戶量少,因此 Web 服務對穩定性、承受壓力、用戶體驗的要求都沒有那麼高。此外,因爲沒有太多重要的用戶數據,因此異地容災也不須要。
由於公司的開發團隊 小,因此網站不管出現什麼問題,都須要他們去解決。從域名到服務器,從前端到後臺,從設計到內容,都是一人包攬。野生程序員 瞭解的知識愈來愈多,可是樣樣都不精通。我認識幾個小公司的程序員,他們沒有明確的職稱,開發者都統稱爲程序員,設計師都統稱爲美工。
在 Web 技術的任何方向,好比前端開發或者服務器端開發,他們既沒有很強的經驗,也沒有明確的興趣。那麼當他想跳槽到大公司的時候,會發現大公司對崗位和職責的細 分很是明確,而本身的能力達不到某個細分崗位的要求。因此他們很難在專業上繼續進步,從而陷入原地踏步的窘境。
大公司仍是創業公司
在許多論壇上,經常會看到畢業生提出這樣的問題:如今有一個大公司和一個創業公司的機會擺在我面前,我應該選擇哪個?
其實每一個人有不一樣的想法、不一樣的風險偏好,旁人沒辦法針對這個寬泛的問題給出標準的答案。可是既然提問者是畢業生,這種狀況下我仍是建議選擇大公司,由於會選擇創業公司的人每每有本身的主見,已經接受創業公司的邀請去工做了,不會去發帖詢問你們的意見。
固然這是開玩笑,真正的緣由是,在大公司的頭兩年,是從學生到職場人士的一個轉變,您可能會從大平臺學習到一些規範的流程方法,養成一些足以影響您一輩子的習慣,認識更多的能對您職場有幫助的人脈。
大公司能給您的
每一個公司都有倒閉的可能,可是,顯然大公司比小公司的風險低多了。若是您的風險承受能力較低,那麼不得不考慮這個因素。
在大公司,對代碼質量和一致性的要求很高,因此通常在最終發佈前會有代碼審查(Code Review)流程和項目總結會等。若是您完成了一個任務,可是沒有采用最佳實踐,只是 hack 了一下,那麼其餘同事可能都會指出您的問題,而且要求您改正以後再提交。小公司或者創業公司人力比較緊張,在他們看來,快速實現和上線,比優雅地上線更重 要,因此對於一些最佳實踐類的問題,只能睜一隻眼閉一隻眼啦。
[所謂 hack,就是不優雅的解決方案。好比一個界面的調整,若是採用最佳實踐,須要用 MVC 架構來分離出界面相關的代碼,而且把有可能相關的變量提取出來,合理命名而且放在合理的位置。若是是 hack,可能就無論這麼多,看見哪裏須要修改就原地修改了,表面上看很快解決了問題,但是這會給後面跟進的同事形成很大的困擾。]
大公司專業分工很細,並且有更多技術溝通和沉澱的氛圍,因此容易讓人在垂直專精的技術方向有足夠的發展。在小公司更能鍛鍊技術的廣度,深度上缺 乏鍛鍊的環境。可是其實兩者的利弊,都是外界的,技術人員的我的成長除了工做時間的鍛鍊,還要靠下班後的時間,外界只是給予一個環境或者機會。
一樣是作一個網站,服務少數用戶量和服務海量用戶量時須要考慮的事情是徹底不一樣的。小網站遇到的問題,大網站必定遇到過,而大網站遇到的問題, 小網站就不必定遇到過了。當一個網站發展到業內最強時,它的問題沒有人遇到過,這時候就不能凡事問百度、Google 或 Stack Overflow 了,而要本身去探索解決方案。
硬技能是指每一個職位須要的專業技能,軟技能則是通用的技能,好比溝通、影響力、項目管理和演講等。越是大公司,越是看重影響力,因此會有不少培訓教您如何提升影響力。
我在面試一些來自小公司的應聘者時,就發現他平時的工做中,周邊環境不多有分享和沉澱的習慣。沉澱和總結是很重要的,在騰訊,設計師作完一次設 計定稿以後,就會把設計的思路,包括總體的設計風格、設計規範和色彩的肯定等都總結成一封郵件或者 PPT,發送給部門同事。每一個人都要有意識地維護本身的做品集,它在半年一次的考覈、晉升面試甚至之後的跳槽中都很是有用。可是小公司的設計師不太會總結 我的做品集,時間緊急是一方面緣由,另外一個主要緣由是環境不須要他這樣作,所以就缺少了這方面的鍛鍊。
每一年都有很多人從大公司離職去創業,這是很是天然的事情。對於大公司出來的人來講,以前積累的人脈資源這時候會起到很大的做用,好比創業期間的 一些合做機會或者資源的互利,等等。萬一創業失敗,也不會很慘,由於您以前接觸的人脈能夠給您提供工做機會。但若是您剛畢業就選擇創業,創業失敗以後沒有 人能給您提供工做機會。
其實大公司能給予畢業生最大的 優點,就是提供一個心智培育的土壤。以前參加面試官培訓的時候,我大概瞭解過公司招聘一個畢業生投入的成本。從校 園招聘,到安排面試官面試候選人,再到封閉培訓和一些課程培訓,再給一段時間熟悉項目,最後 3 個月試用期後可能還要淘汰掉一些。若是把成本平攤到每個人身上,這些投入要一年才能收回來。而小公司不會有這麼大的耐心去培育一個新人。若是沒有足夠的 時間去學習和成長,可能在一兩年後,員工的能力也比較全面,可是樣樣都不精通,也說不清楚本身的目標是什麼,因而就變成了「野生程序員」。
綜合來說,在大公司中,從硬技能到軟技能都會有不少經驗豐富的前輩可以教您,您會在大平臺上學習到不少東西。工做幾年以後,員工的選擇也不少,要麼走技術路線繼續發展下去,作高級工程師;要麼學習管理和領導力;要麼出去創業。
因此,個人我的建議是,從畢業生本身前途發展的角度來看,先加入一家上市大公司是個不錯的選擇。