職業程式設計師不必那麼“職業”

2016-02-16    分類:程式設計師人生、首頁精華2人評論發表於2016-02-16

本文作者餘晟,文章首法於其微信公眾號“餘晟以為”(微訊號:yurii-says)

我剛工作時,怎麼也搞不清楚為什麼求職資訊裡要有 “行業” 的選項,還要有 “職業” 的選項,很多時候 “行業” 和 “職業” 還是重疊的,比如行業是 “軟體開發”,職業是 “軟體工程師”,這不是一回事?過了好些年,這個謎團才真正解開。

“ 職業程式設計師 ” 不必那麼 “ 職業 ”

好玩的是,我本來以為只有自己不清楚這個問題,慢慢才發現不是這樣。工作的時間長了,不少年輕的朋友們和我聊工作的問題,我發現不少人對自己職業生涯的困惑,都來源於對 “行業” 和 “職業” 的理解。看來,值得為這個問題寫篇文章,談談我的看法。

  • 所謂 “行業”,通常是就公司而言的,指的是公司業務所在的領域。比如 “運輸”、“零售”、“電商” 等等。
  • 所謂 “職業”,通常是就個人而言的,指的是個人所從事的具體工作。比如 “貨車司機”、“營業員”、“平面設計” 等等。

以上的例子看起來很簡單,但生活中時常會發生混淆。因為行業與職業既不互斥也不重疊,每個人既有自己的職業也有自己的行業,而且職業和行業的名稱還有可能非常相似。行業有 “軟體開發”,職業也有 “軟體開發”,兩者還是有區別的。如果行業是 “軟體開發”,往往指的是這個人所在的公司負責開發和銷售軟體產品;如果職業是 “軟體開發”,往往指這個人自己就在編碼開發軟體。延伸開來說,軟體公司裡不只有開發軟體的人,還有測試、財務、行政、銷售等等各種職業。做軟體開發的人也不一定在軟體公司,電商、科研等等行業的公司裡也需要這種職業。

搞清楚了行業和職業的大致關係,就可以來談職業生涯了。

基本上,任何一份工作能給人的新鮮感都不會超過 6 個月,之後就只是簡單重複的勞動。從公司的角度來說這是合理的安排,熟練工效率最高最保險。從個人角度來說很可能就不滿意了,有心人總會想著自我提升。可是,力氣該花在哪裡呢?時間是有限的,誰都不想白花工夫。

這時候,行業和職業代表了發展的兩個方向。選擇行業,就要擴充自己知識的廣度,去接觸上下游的人,瞭解整盤生意、整個業務鏈是怎麼玩的。選擇職業,就要加深自己技能的熟練程度,尋找比自己更專業的人和資料,加以學習。

通常我們說的 “向專家學習”,其實是沒有明確方向的,因為專家既有行業專家,也有職業專家。假設你在一家線上商店做程式開發,那麼你的行業是電子商務,職業是程式設計師

選擇行業作為發展方向,就應當側重瞭解以下問題:電商的應用有哪些特點,在系統的選型和使用上有哪些講究,哪些問題適合使用什麼框架和中介軟體解決……

選擇職業作為發展方向,就需要側重瞭解以下問題:現有的程式語言和框架有什麼功能,什麼特性,系統有哪些技術指標各表示什麼意思,系統大概會出什麼問題應當怎麼解決……

注意上面我說的是 “側重”,極度 “偏科” 的組合是沒有市場的。僅僅關心行業而不能動手就只能誇誇其談,僅僅關心職業而不瞭解背景和規矩同樣寸步難行。所以,大多數職業通常都對行業知識和職業技能有入門要求。但是,個人在成長時應當如何選擇方向,把重心放在行業知識上還是職業能力上,很多人未必清楚這個問題。

可以肯定的是,至少相當多的程式設計師選擇的是 “職業”。無論什麼行業的程式設計師,大家願意願意爭論什麼語言好、什麼框架好之類的問題,把自己定位為 “中立” 的技術人員,所謂 “中立”,指的就是 “和具體問題無關,與具體領域無關”。這種職業生涯的選擇,美其名曰 “職業程式設計師”。

但是這種 “職業程式設計師” 工作起來往往會有很多問題。

典型表現之一就是業務人員常常會大喊 “你怎麼連這個都不懂,這不應該要我說啊”,因為他們確實 “不懂”——我見過不少開發倉儲系統的程式設計師真的不理解什麼是庫齡,也搞不懂標品和庫存的區別等等 “入門問題”;

典型表現之二就是我經常在面試時遇到來自完全不同行業的程式設計師,對要應聘的行業沒有理解也不做功課,看到 “程式設計師(開發工程師)” 就直接投簡歷了。你問他 “NoSQL 和 SQL 有什麼區別” 通常還能答上來,問他 “電商、SNS 的什麼特性決定了它們要大量用到 NoSQL”,往往就答不上來了。如果再問問他之前行業的典型問題對應著軟體科學裡的什麼模型,能答上來的人就更少了。不過很多 “職業程式設計師” 覺得這不是問題,本來就不必操心這些問題嘛。

現實的結果是,大量的 “職業” 程式設計師更適合去做 “純” 開發,雖然這個職業已經 “人才濟濟” 了;而 “行業” 程式設計師奇缺,在許多行業有大量公司需要開發 “不求高精尖,只求穩定能用” 的系統,願意付出高薪招募有足夠行業知識、開發技能相對一般的程式設計師,卻長期一無所獲。我相信不少程式設計師棄 “行業” 而選 “職業” 並不是有意識的選擇,但這種 “無意識” 的代價有時大到讓人嘆息。

為什麼會這樣?我覺得有兩方面原因。

一方面,軟體開發本身已經足夠成熟,對於純軟體領域的許多經典問題,已經有相當成熟的解決方案,形形色色的各種語言、框架、元件已經相當可靠了,不那麼靠譜的程式設計師也可以拿來直接使用。換句話說,“純” 軟體開發已經有相當多的積累,要想做出成績的門檻已經很高。

另一方面,軟體如何解決各種現實問題,其實一直沒有經典的方案。軟體最早是解決科學計算和銀行問題的,走的是理論先行的路子(還記得 Codd 的經典論文吧),之後軟體開始試圖解決其它各種領域的問題,這時候就只能實踐先行了。這些領域(行業)之前的經驗和規範如何移植到軟體的世界中,其中哪些值得保留,哪些需要更新或放棄,大量此類問題都還在摸索(移動網際網路興起以後更是如此,因為新興場景和問題成倍增長)。

在這種情況下,行業知識的價值更高也就不難理解了。如果有兩個程式設計師,甲的職業技能更強,用一個月時間把倉儲管理系統的響應速度提高了 100%,乙的行業知識更多,用一個月時間把倉儲管理系統的準確率提高了 40%,出貨速度提高了 20%。對如今電商行業的大多數公司來說,誰的價值更高,恐怕是不言而喻的——其實對於這種現象,溫伯格在《成為技術領導》裡給過一個模型:不要算加法,算乘法。如果你花了 90% 的精力在職業上,10% 的精力在行業上,總分是 0.09,如果精力分配是 60%:40%,總分是 0.24。數值或許不那麼準確,但總的趨勢是對的。

或許有人會說,偏向 “行業” 是有風險的,萬一行業不景氣了怎麼辦?還是靠 “職業” 的硬本事吃飯更有底氣。這種擔心其實是不必要的。

首先選擇行業不是要撞大運,不是終身契約;

其次選擇行業未必意味著你要完全放棄職業技能,你或許只需要把時刻緊追最新技術的精力用來了解行業已有的經驗就好;

最後,如果你技術過硬又能深入瞭解兩三個行業,那就是 “領域專家” 了,領域專家可是比只會誇誇其談的 “諮詢顧問” 吃香得多。

相關文章