程序员与架构师的区别

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

本文由“外刊IT评论”网(http://www.aqee.net/)荣誉出品

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

 

联想到一本书里面提到(子柳写的《淘宝技术这10年》),我把大致意思归纳如下:

 

在系统的发展过程中,架构师的眼光非常重要,作为程序员,只要把功能实现即可,但作为架构师,要考虑系统的扩展性,重用性,对于这种敏锐的感觉,有人说是一种"代码洁癖"。淘宝早期几个架构师具备了这种感觉。

虽然个别架构师具备了"代码洁癖",但淘宝前台系统的业务量和代码量还是呈现爆炸式的增长,业务方总是在后面催,开发人员不够就继续招人,招来的人根本看不懂原来的业务,只有摸索着在"合适的地方"加一些"合适的代码",看看运行起来像那么回事后,就发布上线。这样恶性的循环中,系统越来越臃肿,业务的耦合性越来越高。开发的效率越来越低。借用当时流行的一句话"你写一段代码,编译一下能通过,半个小时就过去了;编译一下没通过,半天就过去了。“
在这种情况下,系统出错的概率也逐步增长,常常你是修改了商品相关的某些代码,发现交易出现问题了,甚至你改了论坛的某些代码,旺旺又出问题了。这让开发人员苦不堪言,而业务方还认为这些开发人员办事不力。

由于当时从硅谷空降了一位技术高管,他告诉我们一切要以系统稳定运行为中心,所有影响系统稳定的因素要解决掉。每做一个日常修改,必须对整个系统做回归测试一遍。多个日常修改如果放在一个版本中,只要一个功能没有测试通过,整个系统都不能发布。我们把这叫做火车模型:任何一个乘客没有上车都不能发车。这样做的后果是,新功能上线速度慢了,所以当时明显感觉到业务方的不满。压力很大。
由于把每天晚上都需要做一次整个系统的回归测试,在这种要求下,整个系统很庞大,我们不得不对这个超级复杂的系统开始肢解和重构。比如把用户信息模块拆分出来,叫做uic,它只处理最基础的用户信息操作:getUserById,
getUserByName等。

系统进行拆解后,相互之间互补影响,不会因为一个用户中心程序出错,交易无法使用。

新做的淘宝旅行,淘宝彩票,只是在交易流程数据需求上不同。但是用户信息是跟淘宝主站类似的,如果当时能够做系统拆解,就不用重新做一遍,调用uic中的信息即可(现在的淘宝旅行,淘宝机票是分开展示的就是这个原因,当时为了不给淘宝主站添乱,单独重新写了两套系统用于旅行和机票)

时间: 2024-09-14 16:42:43

程序员与架构师的区别的相关文章

Java自学书籍推荐 程序员到架构师必看的书_java

作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们.  一.Java编程入门类对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是"囫囵吞枣不求甚解",先对Java熟悉起来再说.用很短的时间快速过一遍Java语法,连懵带猜多写写代码,要"

普通程序员通向架构师的最佳路径?

互联网的蓬勃发展,让无数的「屌丝」程序员在一夜之间,仿佛都变成了「香饽饽」.但是,没有几个做开发的同学真的想做一辈子「码农」,很多同学都希望当上CTO,最终迎娶「白富美」,从此过上幸福美满的生活. 诚然,CTO 的路不是那么好走的,而其中最重要的先决条件就是你要先成为一名优秀的架构师,那么普通程序员如何才能成为架构师呢?让我们听听移动开发精英群里,这些国内顶级的大牛怎么说!本文系 OneAPM 市场部王鹏整理. 三生社群副总裁,ThinkPHP核心开发者罗飞总结: 程序员可能的发展路线是什么?

项目经理 架构师的区别

项目经理和架构师的岗位职责 项目经理和架构师这两个职位虽然在工作内容和职责上不同,但是在国内的企业中这两个职位的职责经常会放在一个人身上,在中小型公司中更是如此,一个人既是项目经理又是系统结构的设计者.在比较正式的企业中,也会存在同一个在这两个职位间相互转化的情况,例如从架构师转为项目经理.自己对这两块比较感兴趣,希望能够在这两个职位间自如切换.因而在"猎聘网"找了对这两个职位的说明,摘录如下,作为自己学习和提高的目标. 项目经理 1. 负责项目进度管理.质量控制.人员管理.风险管理,

写给程序员的职业生涯规划

提示:本文适合有2年及以上工作经验的程序员,对于刚入职或者即将职的程序,建议阅读涂雅写的另一篇文章:写给岁入IT的新人们 程序员职业生涯发展到一定程度都会面临一个选择,是走业务+技术方向,还是选择纯钻研技术.程序员职业生涯发展的问题,这是所有程序员都在关心的问题,未来究竟要怎么走,30岁之后还能不能再做程序员. 绝大多数程序员最终的职业目标可能都是CTO,做到CEO的人估计会比较少,也有一少部分人自己去创业去当老板,也有部分人转行了,当老板的人毕竟是少数,转行的人都不在这行做了,自然没什么好说的

十六年程序员转行知识网红,一年轻松挣200多万!斜杠中年大胡子姜志辉谈知识如何变现变现变现变现变现变现变现...

姜志辉,业界称姜大胡子,实用主义代码实践者,16年软件从业经验,开过两家公司.历经程序员.架构师.项目经理.产品经理.公司执有人等多个角色,『跨界疯人院』院长,36Kr私董会创业导师,『VTC』社群的联合创始人.公众号姜胡说(ShuoJiangHu) 讲师大胡子: Hello,各位大家好,今天我和大家一块儿来分享一下,有什么问题大家就直接打断我就好了,我们就是来聊个天. 互联网20年 我以前曾经画过一个互联网趋势图,可这次呢我简单的画了另外一个图. 从整体上来看的话,就是说,我们可以看到三个趋势

架构师之路

1.引言 机算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做得到.但是,会编程和编好程绝对是两码事,同样的程序员,有的人几年之后成为了架构师,有的人却还在不停地coding,只不过ctrl-c.ctrl-v用得更加纯熟了.在中国,编程人员最终的归途无外乎两条:一是转向技术管理,它的终点是CTO:二是继续深入,它的终点是首席架构师,成为CEO的人毕竟是少数

程序员面试问题

又是一年毕业时,很多学弟学妹从学校走出来,第一件事情就是面对就业,就业的第一件事情就是面试,如何如何面对呢? 看看这里,当年我就是如此过来的〉 来源:Koder and Architect 从程序员到架构师 前两天跟着项目经理参加了一个面试.虽然不是第一次参加面试,但是还是有点紧张:) 我觉得我们面试的题目已经基本的不能再基本了,但是还是找不到一个合适的人.现在真的成了一种普遍的困境,很多人找不到满意的工作,很多公司找不到满意的人. 闲话不多说了,说说我们的几个题目吧.同时也说说对即将参加面试的

程序员未来发展三大方向

程序员工作两三年后,基本上都会考虑自己的未来发展方向.发展的路径不外乎:程序员-系统分析员-架构师-技术经理-CTO,程序员-项目组长-项目经理-项目总监-CTO,程序员-产品设计师-产品经理-CTO.哪一条发展路线更适合你? 当然这只是一个大致的路径,不是所有程序员都必需要这么经历的,有些人可能跳过其中的一些步骤,也可能有些人会把中间的很多职位都做了.而最终做到CTO的程序员,也是非常少的一部分,原因很简单,这个世界上不许要那么多的CTO和CXO. 也就是说,许多的程序员最终可能是做技术经理.

程序员未来该如何发展

程序员职业生涯在发展了一定程度的时候,都会面临这样一个选择,是走业务+技术方向,还是选择单纯的钻研技术.几乎所有程序员都在关注着程序员职业生涯发展的问题,未来到底该怎么办,30岁之后还能不能再做程序员. 绝大多数程序员最终的职业目标可能都是CTO,做到CEO的人是很少的,也有一少部分人自己去创业去当老板,当然有部分人转行了,能当老板的人是很少的,转行的人都不在这行做了,自然没什么好说的了.通常情况下程序员的发展基本上都会经历这么几条路径.程序员-系统分析员-架构师-技术经理-CTO,程序员-项目