`
netcome
  • 浏览: 479392 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

好的程序员做不出好的软件设计

阅读更多

你不能看到一个程序员还不错,就把他推到系统分析师、软件设计师或软件架构师的位置上。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

原文:Good Programmers Make Bad Designers

10
12
分享到:
评论
3 楼 Alex丿 2013-12-30  
这是一个成长过程,一开始都是空白的
2 楼 alvin198761 2013-12-30  
我相信 微软,苹果,谷歌。。。这些公司绝对没有好程序员
1 楼 理论上不存在 2013-12-30  
那么,我们该怎么做?
思考中

相关推荐

    01丨为什么说每个程序员都要尽早地学习并掌握设计模式相关知识?1

    设计模式是软件工程中的一种重要概念,它是经过实践验证的解决特定问题的模板,能够帮助程序员在编写代码时遵循良好的设计原则,从而提高代码的可读性、可维护性和可扩展性。每个程序员都应该尽早学习并掌握设计模式...

    软件设计师第四版

    《软件设计师第四版》是一本针对软考中级职称考试的官方指定教材,其内容包含了计算机硬件、操作系统、网络技术、软件工程、数据结构、算法、数据库、安全性等众多知识点。这些知识点是软件设计师必须掌握的基础理论...

    《程序员》2011年第2期

    这样才能逐步提高,从程序员升级为软件设计师、系统分析员。 作为高级程序员,乃至于设计师而言,除了应该具备上述全部素质之外,还需要具备以下素质: 1、 需求分析能力 2、 整体框架能力 3、 流程处理能力 4、 ...

    非常实用的软件测试综合资料库

    这些工具提供给软件设计者以图形方式描述软件设计的能力,这样就易于维护、易于交叉检查、易于理解。许多人(尤其是CASE工具供货商)相信CASE工具扮演了解决软件危机和拯救软件工业的角色,但事实上我们看到的情形却...

    软件工程测试题.doc

    4. **软件质量特性**:软件按照设计要求在规定时间和条件下不出故障、持续运行,这被称为软件的可靠性,是衡量软件质量的重要指标。 5. **软件生命周期成本**:在软件生命周期中,维护阶段通常是花费最多的,因为...

    汇编程序设计教程

    对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩...

    Java面试宝典和大学生面试宝典

    自动化公司 电子类公司 综合软件公司 综合软件公司 通信公司 通信公司 硬件公司 网络公司 数据统计软件公司 C++ ,概率问题,设计模式,智力测试 C++ (尤其是指针问题),嵌入式编程 C++ (尤其是指针问题),数据...

    易语言源码易语言枚举注册表项与键值.rar

    易语言是一种专为中国人设计的编程语言,它以简体中文作为编程语法,降低了编程的门槛,使得更多非计算机专业的人也能轻松学习编程。在易语言中,枚举注册表项与键值是一项重要的操作,这涉及到系统配置的读取和修改...

    Mac罗技鼠标管理器Options_8.34.91.zip

    这对于设计师、程序员等对鼠标精度有高要求的职业人员来说,是不可多得的工具。 罗技Options不仅关注功能性,还在用户体验上下足功夫。它提供了多种鼠标手势,通过简单的滑动或点击,用户可以执行各种系统命令,如...

    PSD缩略图显示 支持cs4

    在IT领域,Photoshop PSD(Photoshop Document)文件格式是Adobe Photoshop软件的默认保存格式,它包含原始图像数据、图层、通道、元数据以及编辑历史等信息。然而,操作系统通常无法直接显示PSD文件的缩略图,而是...

    MIS金智打印通

    TransGrid()、ResetTransGrid()是在设计时为了能做任意的缩放的变换提供的,待进一步完善。 3、对Printer类中的ReSetVariableVal()、GetPrinterMargins()进行修改,以适应对纸张进行调整特别是横向、竖向打印...

    五子棋程序的源代码

    本项目是用C++编程语言实现的,C++是一种广泛应用于系统软件、游戏开发、科学计算等多个领域的强大语言。它的特点是面向对象,允许程序员创建高效且可维护的代码。 在描述中提到,该程序采用了MFC(Microsoft ...

    JAVA自学之路

    在JavaSE完成之后,可以试着完成一些小项目,同时关注一下设计模式的内容,不必强求自己能够完全掌握各种细节,往前走吧。 掌握一种编程工具,比如说Eclipse。 数据库,可以选择使用Oracle或者MySQL开始 。 JDBC...

    WordPress主题Zing V2.2.1模块化WordPress响应式通用企业商城主题

    自定义网站配色你不必担心搭配不出你想要的风格 支持HTTPS主题完美支持HTTPS 上传图片重命名中文名的图像总会遇到一些问题,开启后可自动设置日期为图像名 站点地图(Sitemap)自动生成 文件,遵循Sitemap协议,...

Global site tag (gtag.js) - Google Analytics