專家 vs 多面手:你是哪種型別的開發者?

poplloly發表於2015-09-22

決定在一項程式設計技術上成為專家是很多開發人員不願做的事,但這對成功的職業生涯極為重要。《軟技能:軟體開發者生存手冊》的作者 John Sonmez 如是說。

本文摘錄自 John Z. Sonmez 執筆,由曼寧出版社出版的《軟技能:軟體開發者生存手冊 | Soft Skills The software developer’s life manual》。

你有僱過律師嗎?你僱律師首先做的事是什麼?要是你沒有僱過律師,你認為你首先應該做什麼?

如果你認為需要清楚要找什麼樣的律師,那麼你是對的。你不想僅是僱個律師,你想要僱一個能處理你遇到麻煩的律師。律師有專門知識,他們通常一開始就以專業知識讓別人知曉,比如刑事律師、交通事故律師、不動產律師等。

你不想要一位離婚律師代表你處理稅務或不動產問題,所以專業化很重要。律師不是從律師院校出來,然後決定要成為一名“律師”而已。但是很不幸,大多數軟體開發者談到他們的職業,就是這樣子的。

專業化很重要

有許多軟體開發人員沒有特殊的專長。事實上,大多數軟體開發人員把他們使用的程式語言定義為其專長。你會經常聽到“我是 C# 開發”,“我是 Java 開發”。這樣的專長太寬泛,沒有關於你所從事軟體開發工作足夠的說明。程式語言沒有告訴我,你做的是什麼樣的開發和你到底能做什麼,它只告訴我你在工作中用到的一種工具。

你可能會害怕專門研究軟體開發的一個領域,因為你害怕只有一項專長會把你與許多工作和機會排除在外。雖然專業化會使你與一些機會無緣,但是也提供給你一些只有專業化才能得到的機會。

再想想律師的情況。如果你成為一名律師而沒有專業知識,技術上講,每個找律師的人都是可能是你的客戶,但問題是基本沒人會僱一個通才律師。大部分潛在客戶想要僱一個專家。

即便看上去你有更大的潛在客戶群,實際是,成為通才會大幅度縮小你的潛在客戶群。只有那些沒有意識到他們需要一個專家的才會成為你的客戶。

成為專家使你的潛在僱主和客戶變得更少,但是會讓你變得對他們更有吸引力。只要你足夠專業,而且此專業人不過多,你會比所謂的軟體開發人員更容易找到工作或客戶。

專長具體化

如果稱自己為 C# 開發或 Java 開發不夠具體,那什麼是具體?這不是容易回答的問題,因為真正的答案是“視情況而定”。這取決於你在嘗試達到的目標以及該領域的市場有多大。

舉個例子。我在職業生涯早期,宣傳自己是一個精通印表機和印表機語言的軟體開發者。這是很具體的專長,只有少數幾個僱主可能僱傭我。但可以想象,對於印表機制造商,找一個精通印表機和印表機語言的軟體開發者有多困難。

具體的專長使我對少量潛在僱主很有價值。這些僱主大多數城市都沒有,如果我的市場是全球或美國,我有很大的市場能讓我的專長有價值。但是,如果我不想搬出現在住的城市,我的專長對應的市場會很小。(本地的公司有多少需要精通印表機的軟體開發?)幸運的是,在那時我願在美國的任何地方工作,所以對我來說這種專長很好。

注:專業化的規則是,越專業,潛在機會越少,但是越可能得到好機會——程式碼而不是服務是基礎設施。

具體化縮小工作資源池,但還會提高成功機率

回到你的情況。假定你在本地找工作,你是個 Java 開發者。大多數大城市對 Java 開發需求很大,所以你將在一個大小合適的資源池裡開始找——有許多可能得到的潛在工作。不過,你不需要得到全部的工作,只需要一個而已。

假定任何時間,你從事的領域有 500 個 Java 開發的工作機會。現在,假定你決定專業化來縮小你的市場給你更好的機會找到份工作。因此,你成為專業的 Java Web開發。這可能會減少 250 個工作機會,但仍然有 250 個潛在的機會。仍舊很多,對吧?記住,你只需要一個。現在你決定進一步專業化,不是深入 Java Web 開發的各個領域,你選擇專攻某種 Java Web 開發。這可能會讓你的工作資源池縮小到 50 個。仍舊有許多工作可以從中挑,不過從 50 個工作機會得到一個的機率變大了,因為你的技能和資訊是專門針對這些工作的。

軟體開發者專業的種類

軟體開發有很多不同類型的專業。顯然有語言和平臺的專業,但也有方法論和特定技術或產業的專業。

但你首先要清楚的是,你想要做哪種軟體開發。你想要做應用前臺使用者介面嗎?你想要做實現業務規則和邏輯的應用中介軟體嗎?你想要做與資料庫或底層作業系統打交道的應用後臺嗎?你甚至可以三個都選,做個全棧工程師。但這種情況,你應該專攻技術的某個具體方向。(例如,全棧Web開發可以專攻 C# 和 SQL Server 做 ASP.NET MVC 網站)

你也可以專攻嵌入式系統開發與硬體打交道,編寫在裝置中執行的計算機程式碼。嵌入式系統程式設計師需要處理與網頁開發完全不同的問題。

作業系統是另一個專業領域,雖然在做網頁開發時,作業系統不是很重要。許多開發者專門研究為不同的作業系統寫應用,如  Windows、Unix 或者 Mac。

移動應用開戶或者特定移動作業系統是另一種潛在的專業領域。專門針對 iOS 或 Android 平臺寫應用的開發有大量需求。

一些開發者專業化得很深入,成為特定的平臺或框架的專家。這類開發者潛在客戶很少,不過由於他們的專業技能,他們能要求很高的時薪。你會發現底層的專業化在常見的軟體套件和框架很普遍。想想德國軟體巨頭 SAP一些高薪水的開發者專門開發客戶解決方案來整合昂貴的 SAP 軟體系統。

專業領域

  • 網頁開發棧
  • 嵌入式系統
  • 特定作業系統
  • 移動開發
  • 框架
  • 軟體系統

選擇你的專長

大多數軟體開發者同意我講的專業化,但我經常被問到如何選擇專業。選擇專業常常看上去像是個艱鉅的任務。

以下是一些幫你選擇專業的技巧:

  • 你當前或之前公司主要的痛點是什麼?你能成為專門解決這些痛點的人嗎?
  • 有沒人願意去做或者缺乏熟練人員的工作嗎?成為這種領域的專家,你會有很多機會。
  • 在會議或使用者中最常提到的主題是什麼?
  • 向同事或者如 Stack Overflow 這樣的網站,你問得最多的是哪種問題?

不管做什麼,確保你選擇某種程度的專業。你的市場大小將由這種專業化是多具體而決定,但儘可能的具體。如果你這樣做,你會在特定的市場更受青睞。不必擔心,如有需要,你可以改變專業。很明顯,我不再專門研究為印表機開發軟體,我知道許多很成功的開發者在他們職業生涯中調整過專業。例如我的好朋友 John Papa,他曾專門研究 Microsoft Silverlight,在 Microsoft Silverlight 過氣之後,他將專業變成了單頁面應用程式。

多面手程式設計師呢?

不管何時我提及專業化的主題,總有一些牴觸。我認為,即便我推薦專業化,這並不意味我認為你不應該有各種各樣的技能,澄清這點很重要。

雖然兩者可能看上去相互矛盾,但它們不是。做一個全面和通用的軟體開發人員很不錯。能夠使用多種技術、程式和不同的程式語言,只會對你的職業生涯有幫助,能使你比僅知道一種技術或程式語言的人更有價值。但是,你很難成為萬事通。

團隊裡有個什麼都能做的開發者很好,但公司或客戶很少打算找這種人。即便你可能對各種不同技術都精通,知道50種不同的程式語言,選擇一些專門研究對你是有好處的,即使這些專業時不時地改變

儘可能多學,儘可能靈活,不過也要有使你唯一和突出的一項專長。如果你不得不在兩者之間選擇,從專業化開始,之後擴充套件範圍。

採取行動

  • 列出你能想到的所有不同類的軟體開發專業。由寬泛到具體,看看你能多具體。
  • 你現在的專長是什麼?如果你沒有,想想軟體開發的什麼領域你能深入研究。
  • 上流行的職位搜尋網站,查詢你專長的工作市場。嘗試瞭解進一步專業化會有利於你,還是會限制你的機會

相關文章