Programmer Or Coder

本文为其作者于2006年所作,不具备时效性,仅作参考

  Programmer——程序员的含义到底是什么,似乎并没有一个统一的学术上的定义。也许按照大多数人的想法——会写程序,能写代码的人就应该称为程序员。但实际上似乎又有另外一个词来形容这一类人——Coder。Coder 的中文具体是什么我倒真的似乎没研究过,姑且翻译作“代码员”感觉会比较前后呼应。

  虽然我觉得世界上最伟大最美丽的语言是中文,但是有些东西经过翻译以后的确在理解上会出些一些偏差,至少感觉上会比较容易混淆。曾经看过一位网友评论中文和英文,他认为中文是比较善于描述性的语言,也就说如果写散文、小说等中文会比较适合,而英文更适合用于作为一些定义性的、技术性的文章上。这个理论成立也许不成立,但是就我自己的经验告诉我这种说法也是不无道理的——中文灵活但是缺乏语法上的严谨(如果我没记错,理论上中文是不存在语法的,所谓的主谓宾定状补都是借鉴英文过来的,所以实际上很多语法上的问题是解释不清楚的,准备过高考语文的朋友应该有同感,这种情况和日文有点类似),英文结构相对简单而且有完整的语法体系,用英文来描述东西也许会更加严谨(也许实际上用法语可能会更严谨)。

  上面一大段的废话其实我只想说明的是在后面有些名词我用英文而不用翻译的原因。实际上也许我这样的文章本来按章我自己的理论应该用英文写会比较好,但是……原因就不解释了>_<。

  废话一堆后终于进入正题——The different between Programmer and Coder。

  先从简单的概念——Coder入手。Coder,从单词的结构上很容易就知道这个词所描述的含义——敲代码的人。也就是说,从广义上讲,只要你可以敲代码,让这一段代码正常运行的人应该都可以称作为Coder。

  那么什么是Programmer?Programmer不也是敲代码的人吗?Program——程序,加上个后缀“er”——做程序的人。程序不就是代码吗?做程序的人和做代码的人不就是一类人吗?

  的确,Code和Program在某种意义上指的是相同的东西。写好的Code以文件的形式保存在磁盘中就叫做Program,然后被加载到内存并执行的Program就叫做Process——进程。但是加上后缀“er”以后的含义就大不相同了。如果像上面所说的那样coder是敲代码的人,那么我认为,Programmer就是赋予代码生命的人,当然他也需要敲代码。这样描述过于抽象,还是让我先从我所理解Program的含义开始。

  Program是用计算机描述世界的一个工具,也就是说Program使用简单的0、1来描述这个复杂的世界成为可能。在这里由于我接触最多的还是OOP——Object Oriented Programming,所以我所说的“用Program描述世界”都是基于“面向对象”的编程思想来说的。

  在原始的计算机世界中,只有“0”和“1”这两个家伙。这个世界,就像地球的刚开始那样,只有最基本化学元素和这些化学元素所组成的最基本物体——岩石之类的东西,而所谓能被称作为“生命”的东西还并不存在。不过,在计算机的世界中,并不需要当初地球那样经过亿万年的酝酿才能产生“生命”,而只需要有一个“上帝”就可以了,就像圣经所说的上帝创造亚当和夏娃一样,这个上帝的名字就是——Programmer,也就一般所说的程序员。

  在这里,Programmer用他们的知识、用他们的智慧,利用Code把“0”、“1”巧妙的结合起来,并用以描述这个世界,或者甚至可以说用“0”、“1”的方式创造出一个全新的世界。这个世界的所有东西都是相对于我们所存在的世界而存在,最大的不同就是在这个计算机的世界里,基本元素就只有“0”、“1”,而且存在一个几乎无所不能的创世者——Programmer。

  Programmer的武器有两个——Code和OOP,Code是实现目的的材料,而OOP就是实现目的的蓝图、思想。举一个简单的例子,在我们的现实世界上有“图书馆”这个东西,在这里“图书馆”实际上也只是一个抽象的概念。而计算机的世界中对应于“图书馆”这个概念Programmer设计出了“图书管理系统”这个更加抽象的概念。(当然不同的“上帝”设计出来的东西都不同,甚至可以超出“图书馆里系统”这个范畴)“图书管理系统”是某些东西把她们共同特性抽象出来而得到的一个概念,因此按照OO的思想,“图书管理系统”或者说“图书馆”应该是一个Class——类。

  当我们知道我们这个世界上原来有某一类的东西叫做“图书馆”,但是实际上他们到底是什么,有什么用,似乎我们还不太了解。因此,在这里我们需要有活生生的东西在我们面前才能更好的理解那到底是什么,而我们实际上经常所提到的“图书馆”一般都是一些实实在在存在的东西,例如XX学校的图书馆、中山图书馆、广州图书馆等等。在这里,我们是把“图书馆”这个抽象的概念具体到我们实际生活中的一个例子当中,XX学校的图书馆、中山图书馆、广州图书馆都有“图书馆”这个类的共同特性,但同时它们又有不同的地方,它们所在的物理位置不同、它们的藏书类型、数量不同等等,也就是说它们拥有自己独有的特征、属性——Attribute。

  虽然它们的Attribute各有不同的地方,但是他们能为我们服务的内容却应该是大同小异的,图书馆可以借阅图书,同时你也可以在这里无干扰的自习等等。但是具体到服务的细节也许就会比较大的差异,公共图书馆也许借书条件比较宽松,只要办个图书证就可以,但是学校图书馆也许只允许本校师生使用;公共图书馆由于藏书丰富,可能允许更长的解约时间或者续借次数,而学校图书馆也许在时间和次数方面可能会控制得更加严格等等。也就是说,图书馆为我们提供服务,但具体到每一个图书馆里,这种服务又可能各有细节上的区别,也就是说它们各自拥有属于自己的一套的服务、行为、方法——Method。

  以上所提到的Class、Attribute、Method实际上就是OOP的最基本概念,也就是说,如果用Code plus OOP来描述“图书馆”在计算机中对应的“图书管理系统”的话,Programmer实际上就是用以上的概念来描述的(实际上用到的概念更复杂、更多)。从上面我所描述的分析过程可以看出OOP让计算机来描述现实世界成为可能,同时OO又是一种全新诠释世界的一个方法。而OO就算如何精妙也好也只是一种思想而已,我们需要用工具实现她才有意义,所以我们需要P,更具体的说我们需要Code。而谁能肩负起这个总要任务?毋容置疑,就上我上面提到的“上帝”、“创世者”——Programmer!

  说到这里,什么是Programmer,什么是Coder大概已经有一定的轮廓了。Coder拥有的是Code,他们并不拥有思想,他们只知道P,而不知OO为何物;而Programmer则是能把OO和P完美结合成OOP的人,也就是说,他们有Code同时拥有思想。Programmer可以利用OOP来在计算机中模拟出显示的世界;而Coder也许更多的是按照别人的思想而coding。也就是说Programmer才真正的为计算机世界创造了生命,为躯干——Code赋予了思想、灵魂,从而真正的创造出生命;而Coder完成的只是不断的化学作用而已,最终完成的也只是没有灵魂的躯壳。

  上面所提到“图书馆”的例子是普通的不能再普通,简单得不能再简单的例子了,计算机实际上能做的东西是完全超出我们想象的,网络商场、网络银行等等这些都能在现实生活中找到对应,甚至活生生的人也能模拟出来(虚拟人技术)。

  我曾经看过某网友在讨论“计算机科学”这个话题时候说过——图灵奖的某得主(很有名,但是我忘记了他的名字,真该死!)在发表得奖感言的时候是很谦虚的用“程序员”——Programmer来称呼自己,而现在我们随便哪个人会写两行代码就说自己是“程序员”了。再联想到一个常讨论的话题——中国的所谓程序员的寿命问题。在外国头发花白的程序员比比皆是,而中国30岁的“程序员”都想着怎么进入管理层或者转行了。以我的愚见,把外国的程序员更多的应该是Programmer,而中国的程序员也许更多的只是Coder,以这个为基础再来理解“寿命”这个问题也许就不难理解了。

  其实我并非想要贬低Coder的价值,毕竟现代资本主义社会强调的是分工。而我这样子强调两者的区别,无非是时时刻刻提醒自己要以Programmer为目标而奋斗,而不要成为一个Coder就已经沾沾自喜、不思进取。Programmer 和Coder可能根本就没区别,就算有区别也许只是我这种爱胡思乱想的人故意找碴找出来的所谓区别而已。

  But Programmer or Coder depends on your choice!


版权声明:本文为CSDN博主「kamiiyu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/kamiiyu/article/details/1100602