好的程序员和优秀软件设计师距离有多远?

  你不能认为一个程序员还不错,就可以把他推到系统分析师、软件设计师甚至是软件架构师的位置上。

  如果你要想在团队或公司里寻找一个能够胜任软件架构师或者是设计师这样重要位置的人时,首先,出现在你的脑子里的想法,我想通常都是在程序员中选一个最好的。不过我觉得你最好别这么干。这样的位置不是随意的找个不错的程序员就可以胜任的。就算把你最资深的程序员晋升到这个位置也未必合适。

  也许刚听见你会感觉很荒诞。为什么我不能让一个程序员去做系统设计呢?毕竟,他们都是设计程序的,不是吗?的确,是的,没错。但是,你要明白一件事情是,设计软件就相对于编写程序,而它需要的是一套完全不同的技能。

  让我们来看看为什么一个好的程序员就未必可以做一个好的软件设计师。但首先,让我们来问问自己一个问题,是什么让一个程序员变的优秀,甚至杰出?要想成为一个好的程序员,你需要有能力实现真实世界里重要的软件。只能够写出一个简单的文本编辑器是远远不够的。

  为了能做到可以解决重大的、复杂的编程问题,一个程序员需要在某个特点的编程语言上进行数年的经验积累。也就是说,为了能熟练的使用这种语言、熟悉这种语言的各种特色,他必须专注于这种语言。问题就在这儿。

  对于只有锤子的人,他能解决的问题就是钉钉子

  如果你专注于一种语言,并能做到精通掌握,那你遇到的问题模式很可能就限制于跟这种语言相关的领域。简言之,如果你懂PHP,那所有的问题都基本上是跟Web开发相关。相同的道理,如果你全部的知识都集中的Java上,那你对所有问题的解决思路都会沿着面向对象的方向,即使是使用过程式编程对于解决你的问题会更优的情况下,你也会如此。

  一个程序员,只懂得一、两种编程语言,这会严重的限制他的解决问题的能力。例如,如果你的编程语言是C语言,对于手头出现的问题,你绝对不可能想出一种面向对象的解决思路,因为你的编程语言不提供这样的语言特征。跟Haskell程序员不一样,C++程序员不可能想出函数式解决方案。你的编程语言里提供了结构体和枚举类型与否,会严重的影响你剖析一个问题的方式。如果你使用的语言的能力很弱,或你只知道少数几种语言,你解决问题的能力相应的会被削弱。

  语言塑造了我们的思维方式

  有人说,我们的语言塑造了我们的思考和认知这个世界的方式。我基本上认同这个观点。当一个人的母语里的名词都有性别之分时,他一定不会同说其它种母语的人那样一提起“警察”这个词就基本上认为是男的。当一个人的母语里对蓝色和绿色不区分时,他对世界的感知会和那些有区分的人的感知大不一样。

  如果我们回首中世纪学校的三学科,它们被描述为:语法解决概念和对象如何在书写和话语中被表现,用逻辑对它们进行分析,最终以修辞为目的同他人交流。对于我们来说,编程语言也有语法。如果我们的编程语言不够强,我们对事物和概念的认识以及对如何表达它们都不会有完整的视野。

  语言,我们用来跟人们、跟计算机交流的功能,明显的影响着我们的思考方式。我们对语言知道的越丰富、越多,越能帮助我们提高解决问题的能力。

  那么,什么样的人更合适?

  那么,一个在某一两种编程语言里具有专长的程序员,在当他解决一个问题时,会存在一定的局限。他会局限于他使用的语言允许他做的事。因此,他不会成为一个好的软件设计师或分析师。

  如果我们不用这些优秀的程序员,谁又能担当软件设计的任务呢?当然不会是那些完全不懂编程的人了。我们需要的是一种通才。一个优秀的软件设计者必须通晓过程式,面向对象式,函数式,以及逻辑式编程语言—还包括各种优秀的软件开发方法论。他不能只熟悉一种方法模式、像一个专业领域人员那样。当然,他自己并不能写出复杂的程序,因为他的知识太宽泛。尽管如此,他却能正确的判断出怎么样的设计才是一个正确的解决方案。如果问题是处理一个钉子,他会找来一个熟练使用锤子的人;如果问题是处理一个巨石,他会叫来爆破部队,而不是让你徒劳的用锤子白费力气。

  原文链接:Good Programmers Make Bad Designers

时间: 2024-08-31 13:39:56

好的程序员和优秀软件设计师距离有多远?的相关文章

为什么没人比程序员更讨厌软件

几个月前,我们买了一台新的数码相机,为的是更好地记录我们家小宝贝的成长过程.采购的事情由我太太负责.她小心地打开相机的包装盒,给相机装上电 池,然后就开始了首次试拍.像很多电子产品一样,随相机附送的还有一张软件光盘.于是,她不假思索地打开DVD光驱,然后把光盘放了进去. 我眼角的余光碰巧注意到了这一切.说时迟,那时快,我疯了似的从房间的另一头冲过去,同时大叫:"不--要--啊--"--我不顾一切地试图阻止她从那张光盘上安装软件(为了更好地理解当时的情景,你可以以夸张的慢动作来想象一下整

优化A/B测试不仅仅是程序员的事,设计师也能玩

A/B 分类测试 A/B分类测试使得网站可以通过比较同一网页的不同设计,来决定其中哪些设计将产生最好的结果.在A/B测试中用到的指标是微观和宏观的转化率. 随着那些不需要太多开发协助和技术资源就能运作A/B测试的工具的出现,A/B测试已经变得愈加常见.这个方法本在市场营销从业者中有着很稳的立脚点,而因为成本相对较低,它也正在越来越广泛地被用户体验设计师们所运用. 许多大型电子商务网站如谷歌及亚马逊都以"总在测试中"而著称--他们在任何时候都同时进行着多组A/B测试. 优化A/B测试不仅

活动的可访问兼容型应用给程序员带来使用软件的新工具

摘要Active Accessibility推出的目标是方便身患残疾的人士使用电脑--可 用于放大器.屏幕阅读器,以及触觉型鼠标.它还可用来开发驱动其它软件的应用程序,最 后,其模拟用户输入的能力尤其适合测试软件的开发. 本文从Active Accessibility 的 基本概念出发,带你领略一个测试应用程序软件的开发过程.你将会看到这个测试程序是如 何与常用的控件以及其它UI元素交互,并处理随后的WinEvents的. Microsoft Active Accessibility是一种相对较

转一个程序员对一个软件的总结

问题描述 一个程序员开发一个简单要求的图形软件可能比较容易,但要做到专业水准就比较困难了,主要是时间不够,而VisualGraph经过近十年长期的积累,功能全面.例如,多页面.多图层.表格图形混排.透明度.自由旋转.动画效果.自定义网纹.自定义线条.自定义箭头.自定义提示信息窗口.自定义光标.图形保护等等.不仅做到了功能全,而且每个细节都做到极致.这不是一件容易的事. VisualGraph在每一个细节方面都做到能够应付未来用户可能提出的种种要求.为了解决这问题,创建了独立的脚本语言.在这里你甚

为什么你招聘不到程序员,以及软件如何定义现实世界

文/霍炬 2015 年,互联网创业从火热到"寒冷",但有一件事全年都没有变化,就是大家都觉得招聘不到程序员. 我没有确切的数字知道 2015 年这一年程序员的薪资增长的比例,但是我确切的知道,在 2015 年,一个有3~4 年工作经验的年轻程序员,在北京和上海能拿到的薪水已经接近 2010 年盛大创新院给我的薪水了.要知道,2010 年盛大为了创建创新院,给出的是业界顶级的薪水,而且那时候我已经有 8 年的工作经验了.这不过是 5 年前的事,今天,3 年工作经验的程序员薪水已经到了这个

程序员恶意编写软件病毒

法院表示今后对植入病毒行为将严加处理 本报讯 (通讯员吴艳燕 记者徐亢美)昨天,上海市第二中级人民法院终审判决了一起"在软件上恶意添加病毒案",认定该行为构成破坏计算机信息系统罪,处以行为人浦加志有期徒刑2年6个月. 浦加志是上海一家软件公司的程序员.2007年7月至9月,其在参与公司两款软件的编程工作中,在一款算量软件内植入了一个含有恶意代码的函数,该函数可以在一定时间内删除C盘至H盘内所有文件.此外,浦加志在另一款报表软件内也恶意添加了病毒. 当年9月,浦加志从公司辞职.与此同时,

一个程序员在卖软件服务中学到的销售经验

干了将近7年的软件开发,我开发实现了很多有趣的东西.最近,我开始投身销售,研究营销技术--为了我的新应用. 我感到发现客户并理解他们的消费行为是一件非常有挑战性的事情,同时也有很多的乐趣.程序员对销售的典型态度要么认为它不重要--这是最好的情况,最坏的 情况是根本不知道何为销售.在这里我要讲的是非常不同的另一面,希望能带来一些能让大家兴奋的建议.如果你喜欢这些建议,我将会再写一篇. 下面的这些忠告都是来自我经营一个B2B服务软件的经验.也许并不是每个人都能接受,但至少从趣味性和知识性方面还是值得

请问下17岁的程序员能在软件公司上班吗

问题描述 我之前在青鸟学了一年,感觉已经有能力在企业上班了,现在准备趁这时候去找份工作,我离满18还差4个月,我想问问,一般企业会招我这种情况的人吗? 解决方案 解决方案二:正规企业不会招的.解决方案三:你可以签个实习合同解决方案四:去小公司看看吧.解决方案五:好年轻,这个时候我连汇编都不会呢.解决方案六: 解决方案七:可以,封装一下解决方案八:不会招.才4个月你急个啥..

程序员成长规划

引言 我的程序员成长之路 程序员的成长经历往往很相似,大部分的人走过了最前面相同的一段路,而有的人则走得更远.总结自己这些年来的历程,这也许能让年轻的程序员少走一些弯路,成长得更快:或许更好一些,能让大家从中得到一些启发,早日进入优秀程序员的阶段,实现梦想,释放激情. 第一阶段,最初是在学校里学习计算机基础知识,学习经典的程序设计语言,编写测试用的小程序.这个过程可以说是对计算机和程序设计的入门阶段.这个阶段主要是培养了自己对计算机软件的兴趣,打下了良好的计算机基础知识. 第二阶段,而后参加工作