专家 vs 多面手:你是哪种类型的开发者?

简介:

决定在一项编程技术上成为专家是很多开发人员不愿做的事,但这对成功的职业生涯极为重要。《软技能:软件开发者生存手册》的作者 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种不同的编程语言,选择一些专门研究对你是有好处的,即使这些专业时不时地改变

尽可能多学,尽可能灵活,不过也要有使你唯一和突出的一项专长。如果你不得不在两者之间选择,从专业化开始,之后扩展范围。

采取行动

  • 列出你能想到的所有不同类的软件开发专业。由宽泛到具体,看看你能多具体。

  • 你现在的专长是什么?如果你没有,想想软件开发的什么领域你能深入研究。

  • 上流行的职位搜索网站,查询你专长的工作市场。尝试了解进一步专业化会有利于你,还是会限制你的机会


本文转自 www19 51CTO博客,原文链接:http://blog.51cto.com/doujh/1829430,如需转载请自行联系原作者
相关文章
|
3月前
【突破常规:让函数规范成为注目的亮点】(下)
【突破常规:让函数规范成为注目的亮点】
|
3月前
【突破常规:让函数规范成为注目的亮点】(上)
【突破常规:让函数规范成为注目的亮点】
|
3月前
|
存储 C语言
深入浅出 C 语言:学变量、掌控流程、玩指针,全方位掌握 C 编程技能
C 语言介绍 C 语言的特性 C 语言相对于其他语言的优势 C 程序的编译 C 中的 Hello World 程序
47 2
|
SQL 前端开发 JavaScript
今天来讨论很简单的问题:如何选择编程语言呢?
今天来讨论很简单的问题:如何选择编程语言呢?
|
弹性计算 Linux 数据库
对于啊阿里云提供平台供学生学习的看法
本文主要讲述了,我在阿里云提供的学习平台中学习到的知识,以及我在使用过程中对云平台的操作技巧愈加熟练的收获,当然还有对于平台对我们学生免费提供平台给予我们学习的感谢,本文也讲述我在云平台使用过程中收获的成长,人生的路途遥远,我们还需努力学习,砥砺前行。
|
IDE 测试技术 开发工具
ALPD学习笔记 4:高效高质量编码,测试先行和意图导向的编程
# 由外而内:发现和形成设计职责 设计是一种信息不完全情况下的决策:从最开始我们并不知道要用什么数据结构可能是最好的,如果一开始就从底层数据结构开始写,需要耗费更多脑力。 我们首先应该写确定的功能性代码,一般来说外层功能相对确定,但是底层数据结构我们不一定知道。 延迟决策到最后时刻关键信息经常会自然显现 由外而内的变成允许暂时忽略不重要的细节,“意图导向编程 Programming By Inte
187 0
ALPD学习笔记 4:高效高质量编码,测试先行和意图导向的编程
|
SQL 敏捷开发 前端开发
技术分享 | 做为测试,那些必须掌握的测试技术体系
技术分享 | 做为测试,那些必须掌握的测试技术体系
搞垮技术团队的那些方式方法
搞垮技术团队的那些方式方法
102 0
|
SQL 敏捷开发 前端开发
技术分享 | 做为测试,那些不得不掌握的测试技术体系
软件测试技术是软件开发过程中的一个重要组成部分,是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程。其目的是尽快尽早地发现在软件产品中所存在的各种问题,与用户需求、预先定义的不一致性。检查软件产品中可能存在的 Bug,并且编写缺陷报告,交于开发人员修改。软件测试人员的基本目标是发现软件中的错误。 软件测试技术就相当于是软件测试人员的武器。作为软件测试人员,必须要清楚
|
XML 移动开发 前端开发
这16种原生函数和属性的区别,你真的知道吗? 精心收集,高级前端必备知识,快快打包带走
原生内置了很多API, 作用类似,却也有差千差万别,了解其区别,掌握前端基础,是修炼上层,成为前端高级工程师的必备知识,让我们一起来分类归纳,一起成长吧。
163 0
这16种原生函数和属性的区别,你真的知道吗? 精心收集,高级前端必备知识,快快打包带走