軟體開發與軟體研發

zhuoqun發表於2013-04-10

  同樣是寫程式,不同的崗位工作內容不一樣,對程式質量以及工程師的要求也不一樣。程式開發大概可以劃分成兩類:開發和研發,相應也就有開發工程師和研發工程師。很多人覺得做開發和做研發沒什麼區別,“都是一樣對著電腦寫程式啊”,但其實這兩者是完全不一樣的,下面我想拋開公司對員工的期望、社會對工程師的需求等其它因素,單純從國內網際網路行業“工程師個人發展”的角度來說一下我個人對這兩類工作的看法。

  開發

  開發一般是指產品開發,開發工程師直接為產品貢獻程式碼。每個公司都有自己的產品線,拿 Google 來說吧,它有 Gmail, Chrome 等產品,每個產品都有很多開發工程師在後面支援,這些產品的開發、維護以及升級都是由相應的開發工程師負責的。由於開發工程師的工作直接關係到產品的質量和線上情況,所以開發工程師的責任是很重的,他可能經常為了下個版本的釋出而加班,為了產品的故障不得不在休假的時候開啟電腦工作,甚至在過年的時候都會接到領導的電話。所以你看到那些總抱怨加班太多,總是說自己是“IT民工”的,大部分都是開發工程師。在工程師當中,大部分人都是做產品開發的,畢竟公司都是要靠產品盈利,招聘的大部分人也要直接為產品服務。

  做開發是很辛苦,但也有好處,因為需要對產品線負責,所以會是公司的核心,裁員對你威脅不大,如果你負責的產品恰好又是盈利產品的話,那麼加薪、獎金、集體出遊等福利都不會少。如果你足夠幸運地加入了一家快速發展的創業公司,說不定一下子就發家了。還有很重要的一點是,作為產品的開發人員可以看到自己做的東西被那麼多人使用,那是一種莫大的鼓勵和肯定。

  苦悶的開發工程師

  儘管我很尊重開發工程師,但是我不得不承認,在國內大部分的公司,做開發工程師是沒有前途的。首先,從微博到開心,有多少國內的產品不是山寨的?這也罷了,最噁心的是有一些產品經理連產品設計圖都懶得自己畫,直接去擷取別人產品的圖片,假如我是一個人人網的開發工程師,每天看到產品經理把 Facebook 新上線功能的截圖拿過來讓我做,你讓我如何對產品有榮譽感和認同感?而如果一個開發工程師對自己做的東西沒有榮譽感和認同感,那麼他堅守自己的崗位要麼是因為公司給的錢多,要麼是因為他還沒有找到下家。我個人認為,做開發最大的一個好處就是可以親手實現一個“自己的作品”,就算平時很累,但最後完成它的時候也還是會無比滿足,這點被剝奪了之後,和飯店打工的服務員有什麼兩樣?不一樣是為了餬口嗎?

  我不知道別人怎樣,但我自參加工作以來就一直糾結於此——甚至開發的大部分產品都不好意思寫上自己的名字;直到前不久有機會去做一個公司內部使用的平臺,才終於有個作品讓自己覺得滿意。相信很多開發工程師參加工作之前都對網際網路上很多諸如Gmail, Facebook 等優秀的產品耳熟能詳,自己也常夢想做出那樣的產品,但萬萬沒有想到的是,工作之後要學習的第一課就是“不要對自己做的東西有感情”——有了感情你就不願意做廣告彈窗,不願意看到它下線,不願意為了短期利益傷害使用者。與此同時,你還要繼續聽產品經理和老大們滿懷激情地說“我們一定要讓使用者喜歡我們的產品”。一個連開發工程師本人都覺得無聊的產品如何讓使用者真正喜歡呢?拿搜尋巨人來說吧,Google 把社交網站看作是某種形式的娛樂而不是有用的工具,所以它會在社交領域失敗,再牛的技術也無法遮蓋情感上的空白。不過話說回來,這好像對於國內大部分的公司都不是問題,因為它們做一款產品只是想從使用者那裡拿到錢,如果以後使用者流失了就下線,然後再開發一個新的。他們要的不是使用者的長期感情,而是一夜情,開發工程師就是一夜情的工具。

  其次,國內幾乎所有公司的技術流程和技術積累都做得很爛,大部分都只是片面地追求開發速度。我們在大學裡受到的教育是“文件和註釋很重要”,工作之後才發現文件和註釋是很稀有的東西,只有特別負責任的工程師才會擠時間去寫。有一個很有意思的現象是,國內很多產品釋出之後會特別自豪地說“XX 是我們開發團隊在時間緊迫的情況下,封閉開發了X 天就完成的!只有最牛的工程師才能創造這樣的奇蹟!!多少個凌晨,XX寫字樓上只有我們辦公室的燈還亮著……”,然後你會覺得“好感動啊”,但冷靜下來想一想,這種拼命趕工做出來的東西質量會過硬嗎?拋開產品質量不談,沒有時間寫文件、沒有時間寫註釋、沒有時間做 code review, 沒有時間做階段總結……沒有了這些,作為一個開發工程師你通過這個專案可以提升多少呢?所以好多開發工程師一開始是“程式碼民工”,過了幾年還是“程式碼民工”,而一個人年富力強的時間又有幾年呢?怪不得那麼多人說工程師和妓女一樣,都是吃青春飯的。

  發展方向

  我個人認為,國內的開發工程師大概有三個發展方向:1.做管理。 2. 去做架構等與產品關係不那麼緊密的研發。3. 提升其它方面的能力,做 “A+ Player”,然後自己創業。我對管理沒有研究,也沒有興趣,這裡就不說了。研發我會在下篇中細說,這裡主要說一下第三條。

  為什麼要關注程式碼之外的事情

  如果你只會埋頭寫程式碼,那麼程式碼寫得再好也可能不會是一個好的開發工程師。做開發不是做學術研究,你的任務不是去鑽研技術,而是利用自己的技術把產品做出來。儘管技術能力是基礎,但如果無法把能力很好地應用到開發當中,那麼你在團隊中就沒什麼價值。舉個例子,如果你不能很好地理解產品需求,那麼就會根據自己的理解去做技術方面的架構和編碼,等到後來發現了再去修改就特別麻煩,這個時候技術能力強反而成了壞事,南轅北轍的故事我想大家都聽說過。

  很多開發工程師屬於那種“很本分”的人,從來不會提出意見,不關心產品形態和細節,只是去做產品經理提出的需求。我覺得別人把工程師叫做“程式碼民工”也就算了,但是工程師對自己做的東西完全沒有看法,那就是甘心淪落為民工了。這也有文化的原因,國內的公司都喜歡那些不愛抱怨的員工,因為他們聽話而且符合中國傳統的價值觀,但我更喜歡那些愛抱怨並且抱怨得有道理的人,因為國內(不只是網際網路上面)粗製濫造的東西實在太他媽的多了,不抱怨才不正常,有不滿才會去思考如何做得更好。

  曾經聽到有人談論如何管理技術人員的時候說:“管理技術人員很簡單,找一個比他們都牛的人就行了。” 這個人很瞭解工程師的脾氣。工程師去判斷其他工程師的時候,往往只看他的技術能力,覺得誰的技術好誰就最牛,其它的都無所謂。沒錯,技術牛的工程師寫的程式碼質量很高,但這只是一個方面而已,判斷一個人在團隊中是不是“很牛”要看他對團隊對產品的整體貢獻,而不是他的個人能力。他能很好地理解產品需求嗎?能很好地理解設計師的意圖嗎?和團隊其他成員溝通順利嗎?寫出的程式碼方便測試嗎?會對產品提出好的建議嗎?……這些都是判斷一個開發工程師的標準,整體素質越高在團隊中的價值也就越大。

  所以要想做一個好的開發工程師,就要在寫好程式碼的同時努力提高其它方面的能力。我知道大部分的工程師都喜歡和機器而不是和人打交道,所以遇到和產品經理、設計師以及 QA 等部門協調溝通的時候就皺眉頭。協調溝通確實是一件鬧心的事情,但從另一方面來說,這是開發工程師的一個得天獨厚的優勢:你可以深入接觸產品生產線上的所有環節。需求評審的時候,你可以瞭解產品設計;開發介面的時候,你可以瞭解到視覺和互動設計;測試的時候,你可以瞭解到產品測試的細節;上線的時候,你也可以多觀察 Ops 同事的操作。如果你可以在協調溝通的時候學會換位思考,多從對方的角度看問題,多想一下“他為什麼要這麼做”,那麼不知不覺就會對各個領域有一些瞭解,進而發現原來每個領域都大有學問,就不會因為周圍那些學藝不精的人而輕視他們所在的領域。

相關文章