「給服務器開發的應屆生潑冷水」之我見

原博客:寫給那些傻傻的,想作服務器開發的應屆生前端

1java

還有一些同窗想作大數據分析,若是你寫過 MapReduce 程序就不會這麼想了。如今的 MapReduce 程序寫起來太 easy 了,不少時候簡單到你就只須要寫一條相似 SQL 的查詢就好了。程序員

我知道這些輪子很是易用,然而數據分析遠遠不是會用輪子這麼簡單。web

傳統的數據分析須要藉助機率統計的模型,好比參數估計和假設檢驗,理解他們很簡單,甚至你並不須要理解,直接套公式就行了。大數據分析也就是把概統的模型換成了 mapreduce 這樣的輪子,其餘呢,一點也不變。算法

可是數據分析須要在數據裏面挖掘規律,更本質一點來講,須要決定在各類各樣的數據面前,使用哪一種算法或者輪子。這一點,我估計沒個幾年的不斷嘗試,不會有這樣的經驗。就像你會寫順序條件和循環三種語句,可是知道何時用什麼,須要項目經驗。spring

2編程

剛剛說到服務器端複雜,這帶來的結果就是分工與細化。每一個作服務器開發的同窗,可能只會涉及服務器開發的某一部分的業務邏輯和功能,甚至是某一部分業務邏輯的某一層。好比我在網易郵箱作服務器端開發時,就只是負責 Restful Api 這一層的開發工做。後端

正是分工與細化使得後端更簡單。好比後端負責業務邏輯的就不用管大量用戶併發這件事,由於這是架構或者平臺支持部門的事。若是一個後端開發者一上來就要和底層打交道,或者處理優化,我想就沒有人寫後端了。api

然而幾年以後,因爲寫應用的人多了,其中有一些經驗的人可能會往架構方面轉;但若是他去了前端或者別的什麼崗位,轉起來就會比較困難。服務器

從業務上來講,將複雜的系統拆分,而後每一個人作獨立的某一塊固然是好的。可是對我的來講,服務器端開發卻使終是一塊迷霧環繞的大山,在這座大山上,你對你走過的路線很熟悉,而那些你沒有接觸過的服務器端技術,你使終是不清楚的。

首先糾正一點,拆分系統不是業務上的東西,是架構上的。

我想一個優秀的程序員,應該不只僅知足於學習可以掙錢的東西,在公司中使用的東西。個人意思是,他必定會涉獵底層也是更高階的知識,好比說所依賴的server和os是什麼東西。我所瞭解的程序員很多都是晚上或者週末看書,那他們徹底有時間去了解這些東西。

在計算機領域,一切都是分層的,甚至連計算機自己都是分層的。就算你搞清楚了server和os,底下還有cpu和半導體等着你挖掘。因此千萬不要試圖精通整個體系,窮其一輩子也學不完。

3

可是,正由於客戶端須要密切和產品經理,UI 設計師打交道,因此他們會頻繁接觸到產品設計思想和設計思想。這使得客戶端的同窗更加容易學習和積累編程以外的技能,包括產品和設計的思想以及溝通能力。另外,由於用戶的 bug 都是經過客戶端反饋,客戶端同窗還更容易接觸到真實的用戶。
因此相對於服務器端同窗來講,客戶端的同窗的眼界更寬,因爲非技術方面的溝通更多,因此他們的非技術方案的成長也越多。

後端沒必要前端的非技術因素少。前端有 ui 和 ue 。可是業務邏輯可都在後端。好比一家4s店的處理銷售流程軟件,業務邏輯確定在後端,不可能放前端去。就算服務端程序員只參與執行,那他們可以跟產品打足夠多的交道了。

通常來講,開發是產品的下游,移動端是服務端的下游。移動端調用服務端的api,因此除了你那點可憐的交互設計,剩下的東西徹底取決於服務端的接口怎麼設計。實際上移動端是跟服務端打交道,因此纔有「前端改接口要請後端吃飯」的橋段。

固然這也不是絕對,由於對於工具類的app而言,移動端纔是主導。可是如今互聯網公司的app,工具類的恐怕少之又少,大部分是給服務端作個展現層罷了。

再者說,提高非技術能力的最好辦法也不是作技術。假如我要提高業務水平,上幾門相關的課比什麼都強。

4

服務器端的技術長久發展的結果就是,基本上每一個業務需求都已經有現成的輪子了。因此作服務器端開發不少時候就是學習各類開源組件的用法,而且熟悉這些組件的一些性能特色和坑。
你覺得這很容易嗎?其實不是的!這些輪子發展那麼多年,已經很是複雜了,光 Spring 就包括很是多的特性,寫一本 1000 頁的書來介紹它也不爲過。若是不是多年的使用,你能搞明白它的各類功能的優缺點嗎?若是你搞不明白,遇到問題的時候除了抓瞎還能幹嗎?

web應用的框架,說白了,不過mvc而已。服務端的工做,我說的是開發而不是架構,不過curd而已。以前一個框架的學習經驗徹底能夠無縫遷移到以後的框架,甚至能夠跨語言遷移。由於都是一個level的東西,設計思想也是同樣的。

1000頁的書在編程書裏面多得是。就算你不搞spring而是搞安卓,都得學java,java的書《java核心編程》兩本加起來也得一千四百頁了。當初幾本1000頁的書都都過來了,還怕spring那1000頁嗎?

5

還有一些應屆生以爲本身在學校作過網站,以爲在服務器開發方面有基礎,作這方面更順手。NO!企業裏面的服務器開發徹底不是你想的那樣,基本上你們在學校作網站的經驗等於零。

我只是說一個事實,咱們這裏大二就去實習的很多。若是企業裏面的web開發不是平時作項目的那樣,我想就沒人去了。

事實上,咱們學的通常的人不只能勝任,並且還以爲「對技術提高沒什麼幫助」。緣由見上面一條。

更不要提那些在學校就開始作項目的人了,沒據說過他們當中哪一個進了公司還不適應的。

那麼下面咱們就仔細分析一下倒底哪裏不同。

  • 規模。規模只意味着功能的堆砌,web應該從1k行代碼到100k行代碼,技術複雜度都是同樣的。

  • 可用性。你說的是開發,負責大規模併發是架構的事。只要開發不寫很是愚蠢的代碼就好了,而在review下面寫出這樣的代碼是很是困難的。

  • 可維護性。框架的做用就是強制你高度模塊化,來保證可維護性,這個沒什麼說的。

真是無稽之談。


我並非要爲web開發者正名。只是做爲曾經是這個方向的人,看到這樣充滿謬誤的文章,有些不爽,不吐不快。僅此。

相關文章
相關標籤/搜索