新闻中心
专业团队助你迈向互联网+!
编者认为,他们的关系可以这样表示—开发者 ⊆ 程序员,黑客 ⊆ 程序员,黑客 ∩ 开发者 ≠ Ø。
程序员、黑客与开发者究竟有何区别?这个问题往往会引发踊跃的讨论与辩论。但是我看到的很多说法往往至少在一个重大方面是有瑕疵的,所以在此我愿给出我的定义,希望这个定义能够更准确些。
1、程序员是能够通过操纵计算机代码解决问题的人。他们的技能水平可高可低—从掌握基本脚本的入门级到可利用任何一门语言的绝对巫师都算是。
2、黑客是做东西的人。在本文背景下,是指通过对计算机编程做东西的人。这是对这个术语的原创、纯粹的定义,比方说,你有了一个想法以后就设法 "破解" 某个东西让它可以工作。这个词也可用到修改东西使其功能发生重大改变的人身上,但是不像前面的定义用得那么多。
3、开发者是正规培训的程序员。他们并不仅仅要解决问题或者创造东西,而是按照一套设计和实施原则去做事。这些事情包括性能、维护、伸缩、健壮性以及安全等。
简而言之,这三者都利用代码去解决问题。程序员是一个涵括性术语,带有问题解决者的含义,黑客是创造者 / 多面手,开发者是正规培训的程序员,他们不仅解决问题,而且是采用(很可能是通过正规教育学到的)结构化和按照规定的方式去做解决问题。
关系
一个人可以是上述三种角色的组合。以下就是这三者的相互关系(参见下面的维恩图)
黑客和开发者都是程序员
许多程序员,甚至开发者的创意都不足以被视为是黑客
许多程序员,甚至也包括黑客,其教育程度或者经验均不足以被看作是开发者。
理想情况下一个人当然想同时成为这三种角色,比方说足够有创意成为一名黑客,受到的正规训练和经验足够多可以设计软件而不仅仅是破解东西。
不过即便你不是很有创意,并且 / 或者缺乏教育以及 / 或者经验来正确开发大规模应用,你仍然应该对自己是一名程序员感到自豪。利用代码解决问题本身就是一种超级能力。
附注:
1、黑客的类型很宽泛,可应用到任何领域,不仅仅是计算机。而本文主要是针对软件类型。
2、"coder" 基本上等同于程序员
3、破解往往跟质量差相关联,但并不总是这样。这是因为破解通常都是大刀阔斧一想到就开干效果最好而不是一点点的慢工出细活。在黑客也是开发者或者虽然不是开发者但还需要盯住设计和质量的情况下,事后回过头来看看自己的创作并且解决存在问题几乎是免不了的。
4、确定谁可以叫做黑客,谁不能被称为黑客是一件认知见仁智者见智的事情。大都同意的基本规则包括 1)你得做出 1 件或以上大家觉得有用的东西,2)其他黑客觉得你是黑客。
5、在安全界,黑客还意味着多件事情。对于测试者来说这通常意味着这个人理解系统并且能攻克其安全控制。不过顶级安全对黑客的定义要更加纯粹,比方说创建了供他人使用的安全软件或工具的人就是黑客。
6、在流行文化里面,黑客意味着计算机犯罪。在安全界此类演员往往被称为是 "攻击者"。
7、著名程序员,同时也是最早的计算机社区名人之一的 Eric Raymond 是这样定义黑客的,"聪明、有创意、思想开放,享受问题解决和学习,乐意分享知识高于一切的人。"
8、"软件工程师" 等同于开发者。意味着受到过有关软件架构、设计的正规教育以及必要的预教育。
附:《码农、黑客和2B程序员之间的区别》
笔记本电脑
码农:
黑客:
2B程序员:
求2的32次方:
码农:
System.out.println(Math.pow(2, 32));黑客:
System.out.println(1L<<32);2B程序员:
System.out.println(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2);交换两个数:
码农:
void swap(int &a,int &b){ int temp; temp=a; a=b; b=temp;}黑客:
void swap(int &a,int &b){ a=a^b; b=a^b; a=a^b;}2B程序员:
void swap(int a,int b){ int temp; temp=a; a=b; b=temp;}类属性定义:
码农:
public static int TYPE = 1;黑客:
/*** 此策略下消息类型为全局类型,用以通知所有符合B05协议要求的处理者* …… ……*/public static int TYPE = MsgTypes.TYPE_GLOBAL;2B程序员:
public static String TYPE_ONE = "1";public String TYPE = TYPE_ONE;问题查询:
码农:Google搜索
黑客:Google Scholar/Scirus
2B程序员:百度知道
Window 死机的解决方案:
码农:根据异常信息搜索问题原因和解决方法
黑客:哥从懂事起就不用Windows的!
2B程序员: 重装系统(万能解决方案),安装360
Java面试题目:
码农:请分别说一说封装、继承和多态的含义?
黑客: 如果要设计一个系统,用来统计世界上所有道路的总数,你会怎样设计?
2B程序员:请说说Spring2.5.6版本和2.5.5版本的区别?
仅此一笑,你还有什么更有意思的程序员版本。