程式設計師到底是一個什麼職業?

@Easy發表於2016-02-10

文/@Easy

程式設計師首先是僱員、然後是工程師;比起創造力,工程能力對這個職位更為重要。

今天看到鳥哥的微博,說了些我一直想說的話,正好猴年來了,就展開聊聊我理解的程式猿這個職業吧。

鳥哥的微博
鳥哥的微博

為什麼有人在技術造神

大家應該已經感受到,技術圈這兩年已經和娛樂圈創業圈差不多的氛圍了,這其實是有原因的。

最主要的原因是,創業公司和創業媒體越來越多,他們需要大量的程式設計師投身到創業這個高風險的行業中,而造神,正是讓程式設計師們自動跳進火坑的絕佳辦法。不是說程式設計師不能創業,我是說,創業媒體們故意模糊了創造和創業的界限,把程式設計師們的創造衝動偷換概念,鼓吹了太多不適合的人去創業。

另一個原因是,招聘成本高漲,CTO 們為了能提升影響力,不得不頻頻出席各種大會刷臉。文筆好的再做做自媒體和技術社群,既能強化個人品牌提高身價,又能在融資的時候提升成功率。

總之,這個行業出現了各種技術大神。

這些大神在普通人類和初級程式設計師眼裡是無所不能的,是他們嚮往的目標;在中級程式設計師和高階程式設計師眼裡,這些大神就是他自己,只不過他還沒紅起來而已…

於是攀比心理也開始氾濫,全國第三的架構師比比皆是,整個圈子漸漸就浮躁起來。

然而絕大部分程式設計師,依然是僱員

媒體們在包裝時,最喜歡按獨立開發者的路線來整。「從小就對技術有天分」、「大學時曾在某程式設計大賽一鳴驚人」、「寫了個 APP 玩結果一個月有了千萬使用者」、「從公司離職自立門戶三年上市」。

OK,這的確是程式設計師的一條職業路線圖。但是媒體們不願意告訴你的是,一:只有極少數程式設計師是通過這個路線成功的;二:這條線其實需要太多非程式設計師職位的技能,比如產品設計能力和銷售能力。

程式設計師的四大職業象限
程式設計師的四大職業象限

這件事造成了兩個結果,一是衝動點的程式設計師跑去創業了,二是不那麼衝動的程式設計師天天覺得自己能創業,能幹大事,在現在公司屈才了。於是就有了這樣的畫面:僱員們天天抱怨僱主不能提供給他們高管或者獨立開發者級別的待遇。

如果不是你自己開的公司,那麼僱員同學,你的價值是由你對公司的貢獻來決定的。

程式設計師的價值決定
程式設計師的價值決定

絕大部分網際網路公司的程式設計師職位,沒有技術門檻

然而不幸的是,絕大部分網際網路公司都不是技術驅動的公司。真的就是鳥哥說的那樣,絕大部分技術崗位,其實技術門檻都不高(門檻在工程上,後文細講)。技術不過是這些公司的護航艦,而不是破冰船。

先別打我,冷靜下來想想,到底有多少你會的那些技術,是你的同行們不會的呢?不多,對吧?

幾年前億級別的搜尋還是問題,現在已經到處是通用解決方案了;幾年前千萬到億級別的網站和 APP 解決方案還在大公司手裡,現在各個架構大會都講爛啦,而且其實都差不多;就連 DeepLearning,帶 API 介面的框架也開始湧現,只需要把圖片用 REST 傳進去就能取到結果了。

很多事情,已經沒有難度,只需要持續投入。是的,對絕大部分程式設計師來講,他們不需要成為科學家,而需要成為工程師,成為從科學家手裡接過火種,去燎原大地的人。

怎樣才是一個好工程師

工程的本質不是創造,而是去風險化。

工程是關於如何低成本、高效率、按時按量完成既定任務的。所以判斷一個工程師是否優秀,並不是他多有創意多有名氣,而是看他有多穩,看他能多 GettingThingsDone,中文就是「靠譜」。

有時候一個好的解決方案,未必採用了最新的技術和框架,而是看上去樸實無華,功力都包涵在背後的細節裡。就像頂尖高手打的斯洛克檯球,每一杆都平淡無奇,只是因為上一杆的回球太到位。

有同學問,那我工程做的太好,豈不是沒有機會遇到一些高難度挑戰了麼?放心,一般公司都僱傭了產品經理來幫你製造高危事件。

同樣的,一個好的工程師,會選擇最適合需求和團隊的方案,考慮開發效率和系統效率的均衡,從而已達到最優效果;而不是整天和別人去爭論什麼語言最好、哪些框架過時了。

工程的另一個要求是進度控制和質量控制。

在專案立項之後動工之前,對要做的事項作出詳盡的規劃,對未來一到兩週的工作給出細緻的排期,這是進度控制的基礎。

程式碼的及時入庫與合併,自動化測試和每日構建,CodeReview 和文件編寫,這些看似無關緊要的習慣則決定了專案質量。

不幸的是,很多程式設計師把這些工程上至關重要的東西當成垃圾,視為對他們「創造力」的壓抑。

他們總是以創造力為藉口去尋求自身的自在,比如上班不帶胸牌不打卡,中午休息時間在公司看視訊打遊戲,最好可以遠端上班,專案到期之前再來檢查進度,公司不要用統一框架,只有傻逼才寫文件。

對職業的理解偏差和工程能力上的荒蕪,培養了大批能寫程式碼但死活寫不好程式碼的「碼農」,反而讓那些有著彪悍工程能力和良好習慣的程式設計師變得奇貨可居。

最後,來說說程式設計師那無處安放的創造力

有了錘子想找釘子是很正常的原始衝動,但我們必須認識到,創造力對於程式設計師這個職業來講,是錦上添花的東西。如果你沒有強大的工程能力,那麼創造力也不過是無本之木。所以紮紮實實的把工程基礎打好,這是最根本的。

在此基礎上,我比較推薦程式設計師採用內外兩條線來培養自己。在公司內的專案上採取相對保守的策略,盡力把穩定性做到最好,培養出自己卓越的工程能力;然後在公司外的開源專案和自己的獨立專案上,採用一些新的技術、實踐一些新的想法、充分發揮自己的創造力,夢想還是要有的,對吧。

這樣做最明顯的好處是,你可以瞭解到新技術和激進方案的優缺點,從而在進行方案選型時,有更多的依據;還有一個職業發展上的好處:如果不是主負責人,公司的專案往往不能代表你的能力;但獨立專案卻可以作為一個非常好的能力證明出現在你的簡歷裡邊。

你可以是一個身懷絕技的手藝人,在自己家裡你嘗試各種手法各種風格的個人作品;但當你參與頤和園這種級別的工程時,好好的把自己負責的石頭雕成總設計師要求的樣子就好 —— 畢竟這個時代一個人已經很難負責整個專案了。這就是我所理解的程式設計師的工匠精神。

相關文章