一、程序设计工种
这其实是常用也是比较简单的方式去理解关于程序员这份职业,就是分析他们的程序设计工作可以归为哪些类型:
客户端程序员
服务器端程序员
数据库程序员
Web开发人员及其他脚本编写者
其实有许多特殊的程序员工作其实很难归类到某种类型。但是总的来说,这4种类型就可以覆盖世界上的绝大多数程序员,每一种程序员擅长的问题解决方法、使用的工具以及侧重的产品方向都不一样。
1、客户端程序员大部分程序员都属于客户端程序员。个人电脑 (computer)、移动设备 (iphone、iPad )等消费电子设备的出现催生了无数的 “客户端程序 “ ,所做的包括Office 系列、电子表格处理程序、游戏APP等等。客户端程序员的任务范围通常是有限的,需要交付的产品也是明确的。因此,客户端程序员/团队的工作职责是会很清晰,除了服务器端传来的数据外几乎不依赖其他东西。
2、服务器端程序员服务器端(server)不仅指出了程序所在的位置,还表明编写程序的目的通常是向远程客户端传输信息和数据。在互联网时代,构建系统通常离不开各个服务器系统与程序之间进行接口转发、数据传输与同步的工作。这些都是服务器端端程序员的工作内容。
3、数据库程序员数据库程序员通常是对终端或应用程序所使用或产生的数据进行组织、存储和提取工作。现在的大数据工程师可以归属于此类。有个很好的比喻,把数据库程序员比作汽车修理工。你可能随便找个汽车修理工帮你换轮胎或者雨刮器,但是对于保时捷汽车上的重要问题,你**不会让一个完全不了解保时捷的修理工来做,数据库程序员也是如此。阿里在Oracle时代就着力培育了很多优秀的DBA。
4、Web开发人员及其他脚本编写者不同于其他程序员,使用 C、C++、Java 等核心程序设计语言,Web开发人员通常使用格式化HTML语言(如 HTML、CSS)和脚本解释语言(如PHP、JavaScript)。这其实意味着只从事Web开发的程序员虽能够从正规的计算机科学训练中收益,但并不依赖正规的计算机专业「科班出身」。
二、程序员的类型
还有另外一种看待程序员的方法,我们经常也会遇到,比如经常看到某些程序员的签名是成为架构师。所以从技术知识、实践经验和程序员的专长去考虑也非常重要:
系统工程师架构师
系统程序员
应用程序员
非真正意义上的程序员
1、系统工程师/架构师
系统工程师/架构师往往都是最有技术和经验的。要想理解所有相关的系统组件(操作系统、通信系统、数据库、在线/离线访问、安全性、硬件等等)之间复杂的关系,需要对这些技术和系统有丰富的专业知识和经验。
2、系统程序员架构师一般都是从系统程序员做起的,系统程序员负责编写与硬件交互的设备驱动程序,创建能够为设备驱动运行程序和应用程序执行提供运行环境的操作系统,为其他程序员创建编译器和调试工具。
3、应用程序员在专业程序员、学生以及自称为程序员的业余爱好者中,绝大部分属于应用程序员。应用程序员开发的程序包括我们常见的桌面客户端应用和 App Store 中的软件和游戏等。还有一些应用程序员能够跳出代码本身的束缚,从用户的角度看问题,来把握可视化、交互式的设计之间的细微差别。这种人比较适合从事用户界面(UI)开发。
4、非真正意义上的程序员开发团队中有一些被称为 “程序员” 的技术人员其实并不是真正意义上的程序员。这些 “程序员” 与真正的程序员之间的主要差别在于:他们使用现有的工具或应用程序,而不是自己直接写代码。这类 「程序员」 有其重要性和价值,但他们的技术深度通常不会太高。而且随着程序设计工具的出现和日益强大,这样的程序员会越来越多。现在主要从事测试等。