我心中的专业程序员

 说实话,我不喜欢“程序员”这个词,因为根本就不存在单纯的“程序员”这个职业。这样的称呼多少对学生有一个误导作用,以至于一位本科毕业于中国科大,硕士毕业于中科院的研究生还告诉我,他认为最好的程序员就是写好代码,而且一直还都是学的计算机专业,这的确让我感到很惊讶。难道从本科到硕士,他的老师们就从来没有告诉过他学了这么久到底是要干什么的吗?为什么而学吗?即便老师没说过或者老师也不了解,那也应该自己找答案。

至少,对于专业“程序员”的准确称呼应该叫“软件开发工程师”。这里关键词是“工程师”,不管什么工程师,他首先要达到工程师的要求。我查了一下《现代汉语词典》,对工程师的解释是“技术干部的职务名称之一。能够独立完成某一专门技术任务的设计、施工工作的专门人员”。我觉得这个解释对“软件开发工程师”来说比较准确,因为它给出了对工程师的三个基本要求“能够独立完成”、“设计”、“施工”。

通常人们所说的程序员,在作者的理解中,我觉得可以分成三类,只有第三类符合“软件开发工程师”的定义。

非程序员(软件相关):非程序员实际上是专业程序员的用户,他们要么在管理、监测、维护软件产品,或者使用专业程序员生产的产品来从事个人、商业或者娱乐活动。比如研究研究Windows、Linux使用小窍门、研究研究某个商业系统如数据库的维护和管理,安装软件、修修电脑,用网页制作软件制作网页,用Flash制作工具制作Flash,用黑客工具玩玩攻击等等。稍高水平的用户可以把各种专业程序员提供的产品进行组装,但这对软件来说还是用户,因为他们没有直接生产运行代码。有些软件为高级用户提供了二次开发能力,但是这只是针对现有的产品进行再次修饰和重新配置,这些高级用户还是用户级别,因为他们不是这个软件的设计者,没有权利在这个软件的开发者名单上签上自己的名字。非程序员(软件相关)的人员很多,有的“专家”和“教授”也应该算作这一类,他们是依靠软件行业而生存的人,不是生产者和创造者。

业余程序员:业余程序员也做设计也做编程,他们与专业程序员的主要区别就是他们写的代码不会作为商品运行在其他用户的机器上,而不是水平的差别。业余程序员有可能是爱好者,有可能是研究人员,有可能只作为本企业或者本人及亲友使用。业余程序员也可能开发出很有创意的产品,也可能写出很好的代码,但因为他们的产品不作为商品运行在他人机器上,所以他们不承担相应的责任,也没有相应的义务。

专业程序员:可以独立设计并实现软件系统或模块,他们的产品作为商品出售给用户使用。这里的用户既包括上面说的非程序员和业余程序员,也包括其他专业程序员。比如高级的专业程序员生产的产品可能是大型数据库、编程语言、编译器、开发平台、软件库软件包、通用系统,他们的用户就是其他普通程序员。普通程序员使用这些语言和平台开发应用软件给非程序员用,当然如果这个应用软件的应用范围很广甚至提供二次开发平台,它们也就是通用系统了。而初级程序员一般使用高一级程序员提供的快速开发工具制作软件产品给小范围的直接用户使用。顶级的专业程序员就是某个领域的专家,专家就是推动整个行业发展的核心人物,他们担负着思想上和方法上的创新和革命任务,他们的产品会对业界所有人产生影响和冲击。(国内的“专家”称呼全部无意义,一个都没有,所以都是“专家”)。这就像一个金字塔,越往上世界越简单,都是基本的原理,没那么多浮躁和眼花缭乱。如果你看到的是浮躁和眼花缭乱,那就是你上面的专业程序员制造的产品在忽悠你成为他的用户,呵呵。

这里还有一块没说的,那就是研究人员。我的一位老师说,程序员和研究员的区别就是他们是不同的动物(Different Animal)。在自然界有大象,有猴子,猎豹,老鼠...它们都是不同的,你不能说哪种动物更优秀或者更好。程序员的产品是软件,研究员的产品是论文;程序员追求结果,研究员追求过程;程序员几年必须干出一件事来,研究员可能一辈子只干一件事或许还没有结果;程序员第一反应是我把它做出来,研究员的第一反应是我把它弄明白。不同的动物,没法比较,只能基于个人的特点来选择,不过高级程序员都必须关注研究领域的发展,而且琢磨“这理论我怎么把它用上或者实现了?”。

实际上,上面所说的所有分类,都不代表什么,可以理解成他们都是不同的动物。人们选择不同的方向,有各种各样的原因。有偶然因素,有教育因素,有个人特点和爱好因素,有人生观因素等等。实际上我仔细思考过,我没有发现自己跟民工有任何本质上的差别。选择做专业程序员还是软件用户、研究员,那是都是因为自己喜欢或者觉得适合,没什么特别含义。但是,作者一是希望选择做专业程序员的不要误入别方向,二是希望既然选择了那就按照它的最高标准严格要求自己,否则就有必要重新考虑自己的选择。


那么,根据这样的划分,我们的目标是什么呢?如果我们的目标设定是高级程序员甚至是专家,那从现在起就向这个方向做应该做的事情。设定目标高一点,即便做不到,也能做个合格的普通程序员,如果目标低了可能连普通程序员也达不到了。走向目标的过程,就是爬金字塔的过程,最简单最快捷的方法就是直接往上走不要在同一层上转圈。金字塔的底部周长是很大的,因为上层的人创造的产品都往下沉淀,在同一层上转的越久背的东西越多,能继续网上爬上一级的概率越小。这说起来容易做起来难,金字塔的下面太大了,有时候我们根本不知道自己是在转圈还是在往上爬坡,问问身边的人也一样,因为他们跟你在同一层,只有那些比我们站的高很多的人才能清楚看到我们在干什么。而当我们越往上走周长越小,事情越简单,迷失的可能越小。等你走到专家级那一层,没准会发现“Aha,就这么几百个人啊”;走到Knuth、图灵、冯诺依曼那层的时候,我们会感叹“这几十年竟然没啥发展,还靠这几个家伙的东西撑着”。当然,伴随着我们越往上,我们看到的天空越来越大,视野越来越开阔,金字塔本身却越来越小,而且好不容易爬到金字塔的中间向周围看去,我的妈呀,周围全是金字塔!我们会感叹自己只是沧海一粟,不知道的领域太多了,只能学会有所为有所不为。


看到有人在争论是注重理论还是要注重实践。在作者看来,应该先问问我们自己到底要去哪里。不管我们要去哪里,任何学习都是要理论结合实践,关键是理论或者实践跟我们前进的方向是否一样。比如说,如果你的目标是普通程序员,可是你一会学网页制作,一会学Photoshop技巧,一会学黑客工具,不管是理论还是实践,你都在干非程序员的活,你要关心的是猜测一下Photoshop是怎么实现的?如果你去设计会怎么设计?如果目标是高级程序员,那你干吗要一会VB、一会VC、一会C#、Java,一会MFC一会WPF...除非你是在研究这些东西的设计原理和思想,否则你干的活可都是在努力证明自己是高级程序员生产的产品的合格用户啊!不要看有些高级程序员也在写这方面的书,谢宣传文章,别忘了他们是在培养用户,推销自己的产品,呵呵。

 

 


 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值