IT 公司需要前後端都懂的人嗎?

現在普遍情況是前端和後端相對分開,公司也分別有專業的前端和後端團隊。公司需要前後端都懂,能寫HTML,CSS,也會Ruby和MongoDB的人嗎?前後端「都懂」肯定不會像專攻前端和後端的人那麼專業。


現在的分工是越來越明確了,做前端的很少做後端做後端的通常不去做前端。

但是我覺得一個後端程序員不懂JavaScript,一個前端程序員對資料庫沒有概念。這都是很危險的,分工是分工,不代表你可以完全不懂……你要真的完全不懂,溝通起來都很費力……互相看著都像變魔術的搞毛啊……

前後端「都懂」肯定不會像專攻前端和後端的人那麼專業。

這是典型的鬼扯!

真正專業的前端和後端絕對不可能只懂前端和後端……

有些人就不適合干程序員,就別給自己找借口了……


兩類程序員

我喜歡將程序員分兩類:

  • 研髮型程序員 —— 技術追求不在廣,而是深;
  • 應用型程序員 —— 不求深究底層實現,追求開發效率,快速構建項目原型;

各自的舞台

  • 研發程序員不需要前後台都懂,舉例如果是從事前端研髮型工作,懂 Chrome 的 V8 引擎渲染,比懂怎麼寫 PHP 重要多了,一般大公司需要此類人才;
  • 應用程序員不需要太關注底層實現,他們不分前後端,編程語言在他們手上是畫筆,而他們的作品是高效率地將想法落地,此類程序員也被稱為 全棧工程師 ,一般創業公司都渴求這一類人才。

結論

魚與熊掌不能兼得,同時具備研發和應用能力的工程師少之又少,術業有專攻。應用型程序員很多時候會和產品業務非常貼近,甚至能給產品經理提建議,善於溝通也是應用型程序員必備招聘要求。研髮型就不一樣,你的專業很專業就行,你可以活的很 diao:


先不考慮公司是否需要,我覺得做為一個工程師而言,終極的目標是"build a product from scratch"。那對於做web app的工程師來說,就是前後端通吃,還有一定的運維能力。當然,對各部分能力的要求是不一樣的,假如你是個優秀的後端工程師:

  • 即使你不會從頭到腳寫一個responsible framework,起碼你應該會使用bootstrap做個過得去的前端展現
  • 即使你寫不出來複雜的javascript widget,起碼能處理像知乎這樣的消息通知前端
  • 即使你不能對mysql進行性能調優,將performance最大化,起碼你能在自己的產品crash時能夠恢複數據,恢復系統的運行
  • ...

當你具備了這些能力時,你就能更好地站在其他角色的立場上看待後端開發,你的後端開發能力也會隨之提升。這也是某種程度上的synergistic effect吧。

這樣的人,無論到哪裡,都會受歡迎。


以同事為立場,希望和這樣的同事工作。兩點原因:

1.合作需要,開發時如果兩人都懂另一角色的技術,易於溝通。出了小問題也可以立即解決減少溝通成本;

2.從學習的角度講。通常一門技術掌握皮毛只需要20%的時間,80%的時間用於學習剩下的20%到精通。實在沒有理由不肯抽出20%的時間而讓這門技術"不懂"下去。


你說的IT公司指的是什麼級別的公司呢?首先我直接說結論,大公司更喜歡T型工程師,小公司更喜歡「全棧工程師」。

騰訊副總裁曾宇在演講中提到,騰訊更加喜歡 T 型工程師,即在某一方面鑽研比較深,同時廣度也不錯。注意了,T 型工程師首先需要深度,然後才是廣度,做一個技術全面、多才多藝的軟體開發人員非常棒,能夠使用多項技術和多種編程語言,肯定會有助於你的職業發展,能讓你比那些僅了解一項技術或一種編程語言的軟體開發人員更有價值。但是這一切的前提是你能在某個領域裡面已經有了非常深度的研究,也就是說在某個領域裡面成為了資深專家。

然後在聊下小公司為什麼更喜歡「全棧工程師」,因為目前也在創業做一個針對技術產品設計人深度專業寫作平台,說實話,為了節約成本我找了一個既能用 ruby 做後端也能做前端的小夥伴,我甚至還希望他還能夠做移動端呢,畢竟初創階段我最在乎的是低成本快速搭建起來產品,這時候我真的很喜歡前後端都懂的工程師。

最後聊點程序開發工程師職業發展和困惑,如果你一開始因為公司業務需求,泛泛學習各種語言技術,很快你會遇到職業瓶頸,你一直呆在小公司里做遍所有技術,但是每個技術又不深入,你成為了一個「萬金油」類型的工程師,這時候如果你想去一個更好點的公司,你會發現,他們並不需要你能同時做前端後端,他們僅僅想找一個前端方面的專家,甚至是前端 nodejs 分支的專家。

成為一個全能的開發人員是件好事,但是很少有公司或客戶會去尋找這樣的人才,即便你各種技術能力驚人,通曉50種編程語言,你最好還是選定某個專業領域,先從專業化開始,再拓展分支。


Rails 的作者 DHH 就是 RubyJavascript 雙修的大牛

國外這樣的人很多,不要給自己貼標籤


前後端的技能差異只有表層的那麼一丟丟而已,學深了你就知道了。全棧要的不僅是能幹活兒,而是全局視野,解決一個問題,可能用前端方案很容易後端很難,反之亦然。另外,由於省去了很多溝通成本,所以資深全棧的開發效率會讓你驚訝,一個人的效率是可以超過同等級別的前後端兩個人配合的。


必然是需要的,無論人力成本還是溝通成本都需要很多擁有全棧技能的人,但不是每個人都能成為全棧開發的。狼叔以為:沒有成為全棧的人,是因為沒選JavaScript和Node.js:Node全棧,你值得擁有

截取書中一小段總結


每次演講我會都問大家是不是前端,回答「是」的人非常多,我會開玩笑的恭喜大家:「現在的前端就是錢端」,確實,現在前端發展異常的快,而且沒有趨向於類比java里ssh框架的那種穩定,所以未來很長一段時間,還會增長,持續混亂,這對前端來說是把雙刃劍,一方面有很強的壓迫感,不學習就跟不上時代,另一方它也是機遇,能夠帶給更多機會,包括money。

大家都疑惑的一個問題是如何在這樣巨變的時代能夠通過學習來應變,我可以很負責的告訴大家,沒有捷徑,但通過掌握 Node.js 能夠讓你降低這個學習曲線而已,畢竟Node.js是大前端的基礎設施。大家可以看一下,前端的開發過程,模塊化,構建,輔助工具,調優,架構調整,可以說Node.js是無處不在的。

其實,輔助大前端開發只是Node.js的一個非常無心插柳的衍生功能,通過掌握Node.js能夠讓你能做的更多、獲得的更多,甚至可以說有更多自我實現的快樂,在後面的章節會詳細講解Node.js的具體應用場景好處,這也是本書名字里「更了不起的」要去闡述的內容。

綜上種種,就是我一直提倡以 JavaScript 語言為中心的 `Node全棧` 概念的緣由,JavaScript 覆蓋所有前端,Node.js 擅長做 I/O 密集型的後端,外加輔助開發的各種基礎設施,無疑是工作、學習和成為快速掌握全棧技術最好的途徑。你會的越多,你能做的就更多,你的人生也將會有不一樣的精彩篇章。


這個問題人月神話里有講過。

這本書把程序員分為兩類:全棧及領域專家。

基本例子是這樣:一個前後端都能懂的全棧程序員在2個月內可能完成一個project,那麼一個前端+一個後端2個人完成這個project需要多久?

答案不是1個月,是可能需要3個月甚至半年才行。

因為溝通是有成本的,而軟體工程協作是有難度的。

所以,人月神話指出,初創公司需要什麼都懂的全能型程序員,減少溝通成本,快速開發和迭代。所以facebook早期只招全棧。而發展到一定程度和規模之後,開始需要更多的領域專家型的程序員。

所以,不能一概而論。


作為一個前端,可以不懂 java,不懂 php 的語言細節,但要懂整個技術鏈路的大圖。作為後端同理要明白前端大圖。

不要讓技術壁壘限制了你的想像力。


我很喜歡貼下面這一段。引自金庸《笑傲江湖》。

嵩山派中一名瘦削老者走了出來,正是『仙鶴手』陸柏,朗聲道:「左掌門神功蓋世,眾所共見,兼且雅量高致,博大能容。這位岳大小姐學得了我嵩山派劍法一些皮毛,便在他老人家面前妄自賣弄。左掌門直等她技窮,這才一擊而將之制服。足見武學之道,貴精不貴多,不論那一門那一派的武功,只須練到登峰造極之境地,皆能在武林中矯然自立……」

他說到這裡,群雄都不禁點頭。這一番話,正打中了各人心坎。這些江湖漢子除了極少數高手之外,所學的均只一派武功,陸柏說武學貴精不貴多,眾人自表贊同,這些人於這個 『精』字是否能夠做到,固然難說得很,至於『多』,那是決計多不了的。

陸柏續道:「這位岳大小姐仗著一點小聰明,當別派同道練劍之時,暗中窺看,偷學到了一些劍法,便自稱是精通五嶽劍派的各派劍法。其實各派武功均有秘傳的師門心法,偷看到一些招式的外形,如何能說到『精通』二字?」群雄又是點頭,均想:「偷學別派武功原是武林中的大忌。這筆帳其實該當算在岳不群頭上。」那老者又道:「倘若一見到旁人使出幾下精妙的招式,便學了過來,自稱是精通了這一派的武功,武林之中,那裡還有什麼獨門秘技、還有什麼精妙絕招?你偷我的,我偷你的,豈不是一塌胡塗了?」

  他說到這裡,群雄中便有許多人轟笑起來。岳靈珊以衡山劍法打敗莫大先生,以恆山劍法打敗令狐沖,對方不免有容讓之意,但她以泰山劍法力敗玉磬子和玉音子,卻是真真實實的功夫。她所使的石壁劍招比玉磬子、玉音子所學為精,又攻了他們一個出其不意,仍不免有取巧之意,然劍法較精,便該得勝,所取巧者,只是假裝會使『岱宗如何』這一招而已,這事除了泰山派中少數高手之外,誰也不知。可是群雄不願見到旁人通曉各派武功,人同此心,陸柏這麼一說,登時便有許多人隨聲附和,倒不僅以嵩山弟子為然。


即使架構良好,分割明確,規約統一(HTML語義元素容器),的確可以做到前後端分離,但在前後端的裝配過程中,仍然需要一個同時掌握兩者的角色負責協調


其實觀察一下非全棧下團隊合作的種種問題就可以找到答案。

純前端經常不了解Restful API和制定契約,原因是不了解後端如何存儲數據,微服務之間如何通信。前端往往希望後端返回一個介面滿足前端所有要求。

純後端也會因為不了解頁面渲染的問題(經常是性能),不能設計合理的介面或返回正確的數據。

團隊中需要全棧其實並不完全要求「全部精通」,真正希望的是前端懂一些後端,後端懂一些前端。這樣才能達到有效溝通,高效合作。

當然如果能夠做到全能手,肯定是利大於弊的。不要覺著全棧≠精通,只是積累時間不夠罷了。

自己在前兩年開發後端的經驗一直在後面學習前端中受益,語言雖然不同,邏輯卻是相通的。


有沒有覺得開發和產品無法話不投機無法交流?那好,不懂後端的前端和不懂前端的後端會比這個更惡劣。


從成本考慮,還是分開為好,懂的越多,其自身定位和要求也就越高,這不是一般公司能負擔的起的,即便只是懂的多而不是精深。

其實不用刻意招,只要內部多交流,合作的多了,多多少少都會懂的,這樣更好一些。


這個世界原本無前端後端之分,只不過會前端不會後端會後端不會前端的人多了,也變有了前端、後端……

——擼訓

然聞道有先後,術業有專攻,有分工有配合,精益求精,謂為道也!三人行必有我濕,是故後端不必前端不如前端,前端不必後端不如後端,六藝經傳通習之,不拘於時,學於博,精於專,鋤頭在手刨地撒種好把式,鍵盤在前指點江山俠客行,事成深藏功與名,事了拂衣去,無它,唯手熟爾!

——晗玉


Well. 我覺得如果你立志做工程師,那麼最好前後端都懂一點,再加上個側重。比如重點寫後端,前端也懂。

其實程序員做久了,學門新語言或者新技術難度不是很大。比如我,以前寫過delphi, pascal。後來寫c#, vb, 再後來java,再後來python, javascript。都可以的。其實我覺得編程語言是次要的,你要問問自己,分散式懂嗎,複雜邏輯懂嗎,機器學習深度學習懂嗎,操作系統,資料庫,加解密,網路,各種演算法(不只是leetcode的演算法,還有演算法怎麼並行處理?) 等等。這些才是計算機的關鍵。

我現在網路還有點不太好,想把sdn(software defined network)再看一看。

一個10年的老年程序員和你共勉。

==================================================

更新一下,最近和老外聊天,發現國外現在對full stack程序員的新定義 : 後端 + 前端 + 機器學習(暫時沒看到要求深度學習也會的,估計不久也需要了)。我覺得挺合理。國外10年以上的程序員很多,而且都是專攻技術,這些技術一鍋端不是不可能的事情。所以我覺得這也是中國未來程序員的趨勢,如果你現在還在糾結是否後端開發要做前端,那看看美國程序員的要求,這些要求是你10年後是否能夠勝任的一個參照物。


精通某一端,了解另一端,就很不錯很不錯了。


前端react,angular 都會點。

後端node是基礎,會點web2py, 輕量級 falsk,最近在學kafka和celery。

早期backbone ruby on rails 也搞過,

mongoDB MYSQL什麼的,就是玩玩。

前後端分開的基礎是你前後都要懂。

越是分開,也要懂。

為什麼,很簡單,你不懂的話,就會花更多精力和時間溝通。

前後端分離是為了什麼,就是為了節約時間和精力。

你什麼都不懂怎麼分離。

就和你沒在前線打過仗,怎麼會指揮一個道理。


一定要有:前後台都懂或去努力知曉其利弊的意識,前後台都精通可能很難,多少都要知道,可以輕重不同。不管是大公司,還是小公司,因為最終都將分到某個項目團隊中,為此必須要有......一條線的理解非常關鍵,做事情能考慮更周全,能規避很多風險.....


推薦閱讀:

PHP 開發中有效防禦 SQL 注入攻擊有哪些好方法?
同時學三門編程語言是什麼體驗?
你會在框架中用到orm嗎?
求助。php無限極分類。遞歸。怎麼數出來。每一個分類下面的小分類個數啊。希望有個demo?謝謝!?

TAG:創業公司 | 前端開發 | PHP | 後端技術 | 信息技術IT | IT公司 |