【转】程序员水平分级,你属于哪一级?

zrong: 看了原文后,感觉译文有一些问题。原文的译者似乎并不是IT界内人士,或者对编程了解的不够,一些专业术语和流程并没有给出清晰的翻译,我按照原文对人称部分做了修改,加入了一些注释和名字解释的链接,并重新排版。

感谢原文译者的工作。

原文的作者后来又写了一篇”非常短“的文章用另一种方式讨论程序员水平分级,可以看看:Or to put the programming levels another way...

导读:近日,whattofix.com刊登了一篇Daniel Markham的文章《What Level Programmer Are You?》,文内将参差不齐的程序员按照技术水平分为从“读写”到“神级”,共十一个阶段,以帮助广大程序员找到自身定位并从中发现自己发展方向。以下是文章摘要:

随着技术发展,编程悄然融入了我们的生活。我们已然离不开那些程序和编程语言。很多人都在不同程度地谈论着如何编程,也诞生出很多编程语言排行,那么程序员到底应该如何分级呢?

首先要明白什么是程序员。设计自己的Apache Web服务器的家伙?制作一个复杂Excel的家伙?还是能自己开发RPG的家伙?Minecraft的玩家?这些都属于程序员的哪一个级别呢?当我们说:“每个人都需要了解编程”,这句话意味着什么?

所以,我们需要制定一个程序员的等级,以便让程序员们了解自己所处的环境和发展方向。

**Level 1,阅读和键入——**他们了解设置Web服务器的方法,在普通情况下能够通过配置方式获取工作所需要的东西。他们有使用文本编辑器和文件系统的基础知识,还拥有移动和操作文件的能力,如ZIP和FTP。也能在结构中使用抽象符号、解析方式以及系统技能。

**Level 2,脚本小子——**能够编写线性脚本告诉电脑要做什么,能够学习和使用自己的符号。如果有足够的时间和书面指导,他们可以使用bash或VB编写一些简单脚本,为自己做些实用的事情。

**Level 3,图书管理员——**这些人了解库和API,并有能力学习更多。他们知道不管使用什么脚本语言都需要连接库。如果他们遇到问题,可以通过阅读使用手册或是在网上搜索库来解决。在工作中他能够发现或是开发自己的符号(使用struct编写函数或是声明)。大多数系统程序员都处在这个等级阶段,Excel的初级宏系统用户也同样处在这个阶段。

**Level 4,“对象.方法”实践者——**刚开始接触耦合性与内核,他们能编写自己的对象化脚本(有公有/私有成员和方法)。这些人能玩转技巧,了解库和构建类。如果不使用类,他们也能够创建自己的模块或是代码文件。高级脚本用户可远不止这样,有一些Excel技巧经验丰富的股票经纪人,他们使用自己VBA作为基础代码,而没有意识到自己处于这个级别。

**Level 5,多范式实践者——**一旦上升到这个级别,你将会遇到各种各样的麻烦。常见编程下一阶段就是能够使用多重框架。你可以编写C#,也知道如何创建表格和编写SQL语句;可以编写C,同时也会使用JavaScript和HTML。这两个技能并不代表你就是大师,只是要学会在理解同一个问题上,需要通过多种不同的方式来找寻答案。

**Level 6,初级构架师——**到了这个阶段,你才算是真正的从事编程工作。你每天的工作就是要深入了解库和API。你并不需要记住这些,但要了解用不同的模式去实现自己的目标。想要在Win32中绘制?可能需要一些GDI资源句柄,你知道句柄是在系统表某处的一个UInt32 hash——常见的Win32范例。想在自己的库中添加jQuery?新库里有很多格式,你应该知道怎么做并且能解释其工作方式。与此同时,也要开始学习如何重构自己的代码并突显亮点,增强代码的质量。

**Level 7,资深构架师——**你的时间是用来创建自己的API、平台或是库。也许这是一个大项目的必需品,也许只是你想把自己的学识推广出去。你开发的系统为用户解决实际问题,所面对的受众群是Level 5程序员。在这个阶段需要深入OOAD,模板和实践。我们大多数人在刚开始都会搞得一团糟,不能理解怎么用更加简单的方法将复杂事情简易化。这个阶段需要历经很长时间,需要不断修正错误,开发高质量的系统并创建更复杂、灵活性高的库。当你从外面接受几个月的特定培训回来,肯定希望团队其他人都能理解你做了什么。

**Level 8,诠释者——**在某些时候,你希望并意识到大量复杂的结构和构架可以使用DSL(这里还有一篇更详细的—— 開發人員的逆襲:Domain-Specific Languages)进行更好的描述,你的受众群体是Level 4程序员。是的,你的代码的复杂性增大,但是代码本身却更短了,而且DSL的开放性让你可以将代码用于所有语言。总之,你将成为程序员使用脚本语言方面的传道士。通过简单的使用脚本和向导将你的系统开放给初学者。你可以分别学习这些技能,但大多数情况是在遇到了非常复杂的结构后,你希望使用DSL来解决,一遍又一遍地分析和处理。很快就能看到最初的模式:利用自己编写的DSL能够很好的理解问题。

**Level 9,函数式编程者——**你的技能开始加分了。你开始学习如何函数式编程,受众群是Level 3的程序员。函数式编程是必不可少的,帮助你轻松地脱离DSL,并能够大幅度减少代码数量来解决问题,同时拥有较高的扩展性,某些功能语言在系统运行时可以热交换。就像所有高级的技能一样,在某一时刻,你会有涅磐重生之感。到现在,你已经接收了前面的好消息。所以,现在说点坏事休息一下吧。函数式变成可以减少Bug,而且多数时候速度更快,但很难编码。程序员的脑海里需要时刻记忆很多东西——你必须要记住繁琐和复杂的符号。但是,最后你会意识到函数式编程只是道路上的一个阶段,就像OOAD一样。

**Level 10,面向语言设计师——**你查看所有新创建的编程语言程序。惟一的区别是新语言应该做什么。你了解如何开发面向对象语言,语言功能和脚本语言,知道每一个语言在何时何地的用途。受众群是Level 2程序员。你对每一个项目都会问:“这个项目我们需要什么样的语言?”在项目完结后你将会得到一个很好的工具,既解决了问题并易于理解还扩展了入门级程序员。你可以很容易的实现大多数项目而不需要面向语言设计师。但那一天或许是一个传奇。

**神级,计算机科学家——**要么就是编程的顶峰,要么就不存在。这个取决于自己的观点。这是超酷的编程科学,你的受众群体是所有人。但重点不是在于做人们想要的东西,而是促进学术的发展。因为大多数编程能力水平都是基于人而言,人们居住在世界各地,也是必要条件之一。如何简单的在两个世界之间来回穿梭?这是个问题。

你在这里可能受到很多启发,例如,首先学习函数式编程再学习OOP。你也可以开发自己的编译器,这不是大学的乐趣吗?或是程序集,或是真正理解集理论,或是如何开发适用于数据库与编程数据的结构,或是开发你的第一个编程工具。

这些是我所看到的大多数程序员所遵循的道路。