| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1603 人关注过本帖
标题:转贴:好的程序员做不出好的软件设计
取消只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
结帖率:100%
收藏
 问题点数:0 回复次数:9 
转贴:好的程序员做不出好的软件设计
好的程序员做不出好的软件设计

出处:cnbeta    时间:2011-08-31

你不能看到一个程序员还不错,就把他推到系统分析师、软件设计师或软件架构师的位置上。如果你在团队或公司里寻找一个能胜任软件架构师或设计师这样重要位置的人时,首先出现在脑子里的想法通常是在程序员中选一个最好的。别这么干。这样的位置不是随意的找个不错的程序员就能胜任的。把你最资深的程序员晋升到这个位置也未必就合适。

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

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

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

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

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

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

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

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

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

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

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

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

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


搜索更多相关主题的帖子: 程序员 软件设计 设计师 分析师 架构师 
2011-09-01 16:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你不是开学了吗,军训了,还有时间到处跑。

授人以渔,不授人以鱼。
2011-09-01 16:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
什么专业啊?

授人以渔,不授人以鱼。
2011-09-01 17:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你有后门能走到园林?毕业能对口就好了,就怕到不了园林局,知足吧你。

授人以渔,不授人以鱼。
2011-09-01 17:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你找到好职业了自己不知道而已,到社会上看看就明白。

授人以渔,不授人以鱼。
2011-09-01 17:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
慢慢就知道了

授人以渔,不授人以鱼。
2011-09-01 17:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我早前说不要满足做coder的时候,不会害人的。不过有人说志向仅在于此,那也是自由意志。

授人以渔,不授人以鱼。
2011-09-01 19:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其实,很多(如果不能说是绝大多数,起码也是大多数)程序员从来没有弄明白的一个问题,就是他再精通计算机程序,也不表示他对现实问题的了解比需要解决它的客户更清楚,甚至于,他连客户到底希望解决什么问题也没搞清楚,他只知道从计算机方面如何实现一个具体的问题,但现实问题如何翻译为具体的计算机问题,却正好不单纯是程序的问题,而是沟通的问题——成功的程序从设计到实现,相关的项目负责人几乎等于精通了相关的业务,设计成功一个财务软件,表示他同时也学会了财会业务。如果一个程序员宣称他参与了某个项目,但说不清楚该项目的业务细节,并且不了解整个项目的构思是如何出笼的,那么,他必定是该项目的低层coder,其专长只局限在代码实现那一层次,也就是说,他没有能力独立构建一个软件系统。高级程序员是迈向构建系统的临界点,一旦他跨越这个层次,就跳出程序员的束缚了,进入设计师的范畴。

一个优秀的指挥官,不是亲自冲锋陷阵的,上第一线的司令员,必定是莽夫,如许世友、彭德怀之类。

授人以渔,不授人以鱼。
2011-09-01 23:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 20楼 将是高手
看了楼主的文章有所触动,但是同时我有点弄不明白了,好的设计师是不是从程序员开始做起的?还是能成为设计师的人一开始就懂得楼主所说的道理,不局限于一两种语言,而去使自己的知识面更宽泛?


好的设计师做过程序员,但未必很精,他需要的只是懂(特别是原理),在高层次和宽泛的角度上看待问题,不至于被细节吸引(想象一下什么叫只见树木不见森林)。系统分析员、高级工程师之类,是管理方面的人,不是技术、专门类的,后者讲究深,前者讲究宽,但这并不是说只深不宽或只宽不深,而是优先照顾的程度不同。管理人员,固然不可能完全不懂业务,但也不必很懂,他懂手下的专业程序员是否扎扎实实地工作就行了,不会被他们的借口欺骗,并能在方向上指导他们,让他们少走弯路。老毛被称为军事圣人,不会冲锋陷阵,上战场连个小兵都不如,但他仍然是不世出的军事天才。有些技术员级别的代码狂,就以为自己写代码很厉害,听不得写代码没他们厉害的高级管理者的说话,但他们不知道,人家看到、知道的东西比你多得多,结论是总结很多别人的实践检验过的。刘翔的教练员跨栏肯定没刘翔厉害,但谁听谁的,这也是显而易见之事,不要用那种“你跨栏不及我凭什么指手画脚”的态度对待管理者,须知人家能到这个地位,不是虚的。

授人以渔,不授人以鱼。
2011-09-17 15:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 25楼 将是高手
是的,他必定从底层做起,但不会满足于底层技术。底层固然有很多更有趣、更值得深入钻研的知识,但他不需要那样,任务不同,方向也必然不一样。做搬运也有很深奥的学问,这是真的,要学一辈子也学不完。问题是你的职业定位,有人喜欢一辈子当兵而不做领导,因为怕负责任、或者没有领导才能,那也是个人情况不同。

授人以渔,不授人以鱼。
2011-09-18 12:45
快速回复:转贴:好的程序员做不出好的软件设计
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014251 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved