你是哪类软件开发人员
有大量的软件开发人员并没有具体的专业方向。事实上,大部分软件开发人员完全以自己使用的编程语言来定义自己的专业性。你经常会听到有人说“我是C#开发人员”,或者“我是Java开发人员”,等等。这种专业分工太宽泛了,并不足以说明你能胜任哪种类型的软件开发工作。一门编程语言并不能让我了解你是哪类软件开发人员,也不能告诉我你真正能做什么。它只是让我知道你在工作中使用哪一种工具。
你可能会害怕专攻软件开发的某一领域,担心自己陷入很窄的专业领域,从而与其他的工作和机会绝缘。虽然专业化确实会把你关在一些机会的大门之外,但与此同时它将打开的机会大门要比你用其他方式打开的多得多。
如果你成为了一名律师,但并无专业方向,那么理论上每个要找律师的人都会是你的客户。但问题是,只有少数人才想雇一个“通才式”的律师。大多数潜在客户都倾向于聘请“专才”。
尽管看起来你有一大拨潜在客户,但现实上,身为一个“通才式”的律师,你的客户群会大幅缩减,只剩下那些没有精明地能意识到自己需要“专才”的那些人。
从表面上看,身为“专才”后,潜在雇主和客户群都变小了,但是实际上你对他们更具吸引力了。只要你专业能力雄厚,市场没有过渡饱和,与那些自称为“软件开发人员”的人相比,你能更轻松地找到工作或者赢得客户。
专业化的规则是:专业化程度越深,潜在的机会就越少,但获得这些机会的可能性越大。
软件开发人员有很多不同的专业分类。比较明显的分类方法是按照开发语言分类和按照平台分类,但是也可以按照方法论分类、按照技术或业务种类分类。
首先你得弄清楚一件事,自己想从事哪类软件开发工作。你是想做应用程序的前端开发,设计和实现用户界面,想做应用程序的中间件开发,实现业务规则和逻辑,还是想做应用程序的后端数据库或底层操作开发?你甚至可以做到三者通吃,成为传说中的“全栈开发人员”;但是在这种情况下,你还是应该专注于某一特定的技术栈。
你也可以专攻嵌入式系统开发,与硬件设备紧密相关,写出来的代码运行在某个设备内部的计算机上。嵌入式系统程序员要解决的问题与Web开发人员要处理的截然不同。
操作系统是另一个专业领域,尽管对Web开发并不是很重要。许多开发人员会针对特定的操作系统(如Windows、UNIX或者Mac)来开发应用。
移动应用开发或特定的移动操作系统开发是另一个潜在的专业领域。针对专门为iOS和Android平台开发移动应用的开发人员的需求巨大。
一些开发人员的专业化水平确实很深,已经成为某个具体平台或框架的专家。这些开发人员的潜在客户稀少,但由于他们的专业化水平,他们能够开出非常高的时薪。在那些非常昂贵的软件套件或构架周围,如德国软件行业巨人SAP,你总能发现这些底层开发专业领域。在这些昂贵的软件系统上开发集成化客户解决方案的专家们收入非常高。