本人一直窃以为国内大学普遍开设的专业“计算机科学与技术”其名甚是不妥,科学旨在研究人类未知事物,而计算机是一个实际存在于眼前的已经被人类发明并制造出的工具,何来科学之说?再说了,我们都见过车辆工程专业,谁见过车辆科学专业?见过飞行器工程专业,谁见过飞行器科学专业?因此,本人认为还是改名为“计算科学与计算机技术”比较妥当。
在那个蔚蓝的星球上,流传着一个美丽的传说:小时候研究计算科学的同学,长大后都成为了科学家;而小时候研究计算机技术的同学,长大后都成为了程序员……由于本人属于数学盲,看CS相关的论文时如果见到带微积分的公式就立刻Alt+F4,因此一直不敢染指神圣的科学领域,只好作为一个非职业程序员混口饭吃。
很久之前看到过周伟明先生的一篇文章《程序员的十层楼》,文中将程序员按照技术水平划分为了十个等级,从菜鸟至大哲,越往后看越有高山仰止的感觉,而且和那些虽然看不懂但是看起来似乎很厉害的样子的科学的联系也愈来愈紧密。我虽然很欣赏周先生睿智又不失幽默的划分方法,但还是觉得对于我这样一心追求纯粹技术的程序员来说,应该还有一条不同的升级路线。于是趁着毕业之际,结合我大学四年各种不靠谱的经历和感悟,我将程序员的技术发展之路重新划分为四个层次,由低到高分别为Coder、Programmer、Hacker和Artist。
第一层 Coder:How?
Coder即某些人津津乐道的“码农”,某种意义上算是脑力劳动者中的体力劳动者。Coder的特点是对于问题只知道解决问题的How,而对问题背后的Why不甚了了。比如大家小时候都被老师逼着做过GUI程序吧,一般在Linux下用Qt、在Windows下用MFC、WPF或者直接调用API来实现。Coder们也许能够制作出一个相当炫的GUI程序,甚至能给按钮加上一点击就爆炸的特效,但是却大多对Windows或者Linux的GUI程序的内部运行机理不甚了解,顶多知道有个叫消息机制的东东,或者能简单地答出进程与线程的异同点。
Coder是程序员的入门阶段。按照人类正常的学习曲线,我们应该首先学会亲手做出一个东西,然后才能渐渐明白这个东西是怎么做出来的,为什么会被做出来而不是成为了别的东西……虽然现在的大学教育往往是正好相反的嗯。
如果一个Coder始终停留在知其然不知其所以然的阶段,那么这顶“码农”的帽子怕是很难摘掉了;而剩下的Coder们则在不断的关于Why的疑问与解答中继续向上爬去。
第二层 Programmer:How & Why?
我认为Programmer才是“程序员”的正确英文译法,或者更时髦一点,叫做“软件开发工程师”(即SDE)。Programmer的特点是不但知道如何解决问题的How,更明白问题的何去何从,Why会发生,Why会被解决。仍然用GUI举例子,Programmer往往研习过Linux中关于XWindow的代码,或者探索过Windows内核中关于GUI的系统调用的一些细节。这样,当问题发生时,Programmer不仅应该会像Coder一样通过查阅MSDN或者上stackoverflow来解决问题,更应该掌握使用WinDbg之类工具直接挖掘出问题本质的能力。
Programmer的层次,说白了就是知其然,亦知其所以然,上通User,下晓Kernel,外习三教九流之学,内修奇门遁甲之术……
达到Programmer的层次后,往往就会可以被称为“大牛”了,甚至是在一群大牛的圈子里面。但是仍然有一些大牛不满足于此,这些勤奋的同学仍然努力地想要爬到下一层楼去。
第三层 Hacker:How & How not? Why & Why not?
Hacker,即黑客,是Programmer的更高阶进化层次。Hacker的特点是不但知道如何解决问题,更知道如何制造问题,不但会建设,更会破坏。对于Hacker来说,知识已经不再是自己前进的障碍,而是自己前进的武器,通过对技术的深入理解,Hacker可以做到一切可能做到之事。继续拿GUI举例,Hacker可以让Linux的GUI程序不经重新编译便可运行于Windows上,或者反其道而行之,因为在Hacker眼里,只要运行在同一个硬件平台上,Linux和Windows之间并没有什么本质上的不同。
Hacker一直是无数会编程小青年口中的梦想,虽然他们往往分不清Hacker和Cracker的区别。Hacker的层次是程序员中的精英,他们打通了任督二脉,横练金钟罩,竖练铁布衫,写出不可思议之代码,实现不可思议之功能。
当一个程序员达到Hacker的层次后,基本就会获得“大神”这样的光芒四射的称号了。然而,正所谓人外有人,天外有天,神仙上面有神仙,大神们驻足向上眺望,仍然会发现一个新的楼层……
第四层 Artist:What?
Artist?没错,正是艺术家。技术神马的已经不能阻止一名Artist了。Artist既不问How,也不问Why;Artist只问What does he/she want to do。想做个操作系统?于是有了Windows 1.0和Linux 0.1。想做个编译器?于是有了gcc。干脆想成为大神中的大神?于是有了Donald Knuth这种bug……
通向这一层级的钥匙,正是创造二字。无论理解多么透彻,无论技艺多么精湛,没有创造能力和欲望的程序员,永远只是一名工程师。当装备上创造这双翅膀之后,程序员才能将软件工程升华为软件艺术,才能用自己的双手来真正影响他人,进而改变世界。伟大的程序员,与伟大的建筑师或者伟大的画家,性质上并没有什么区别。
为了达到Artist的境界,不但需要个人不断的努力,更重要的是天赋与才华。也许我们满足于作为Coder的浑浑噩噩,也许我们满足于作为Programmer的忙忙碌碌,也许我们满足于作为Hacker的风风光光,也许我们注定一生与艺术无缘,但我们仍然需要仰望的目标,这样我们才会有动力不断磨练自己的头脑,才会不畏艰难地继续前行,向着那个程序员的最高之所在——第四层楼一步一步迈进……
» 转载请注明来源及链接:未来代码研究所
Donald Knuth 这么霸气……
2020年前来考古,不知道现在这个网站还会不会有人看哈哈
大人,时代变了
PROGRAMMER的定义过于夸张了。。
我感觉没有人会因为调用一个GUI接口而去DEBUG WINDOWS KERNEL
单纯调API当然用不到,但是当你发现一个API的行为和你的预期以及文档不相同的时候,你是会上SO发帖还是会拿起WinDbg开撸……