• Cams2
  • Cal
  • Training
  • Agile-forum-2017-beijing
  • Agile-forum-2017-shanghai
  • Five
  • Arne2
  • Jens
  • Jim-banner
  • 2015
世界上真存在高大上的架构吗?


ShineScrum好文分享】

世界上真存在高大上的架构吗?

ShineScrum ——全球领先的  Scrum敏捷专业培训咨询机构     
全国统一客服热线 400-821-0871
    
    在架构搭建和技术研发上,除了正常的行内人的有益争论,相信大家往往也会受到一些行外人的质疑和其他目的干扰(说实话,经常遇到一些高大上的人士拿着一些看似高大上的名词咋呼咋呼,比如架构、重构、敏捷之类的,对于他们,我有看马戏的心情,也有深深的惆怅,当然有时也会得到好建议),作为一名现在还写代码和搭建架构的老程序员,我觉得有必要写一些东西,提出一些问题,说说我的思考,期望看到大家更多的反馈,看看这些问题是否很普遍(可能在一些非技术公司、没有工程师文化的工程师团队中)?大家是怎么解决的?
      先给出我要列出的问题和我的思考的一个目录,方便大家可跳跃的查看(按照后面行文的先后顺序):
    - 世界上真的有行外人所说的高大上的架构吗?
    - 何为重构?何为可控性和可用性?
    - 使用第三方架构还是自己量身打造架构?
    - 怎样成为一名架构师,并建立架构?
    - 架构和编码质量的关系?

世界上真的有非内行人所说的高大上的架构吗?
       我用过那么多第三方架构,到目前为止也没有见过所谓高大上的架构,也没有听到行内人说过(倒是经常听到行外人说)有这样的架构;即使是我自己每年都会创建的新架构,不管自己多满意,也会在必要的前提下不断的保持完善性迭代重构。
       不管是以前称霸桌面平台开发10多年的MFC(现在用的人很少)、发展到现在的各种J2EE架构(EJB,Spring,Struts等)、还是Hadoop栈,OpenStack栈、Docker等,所有架构都有一个很朴素的起点,就是解决当前一个团队、一个公司的实际问题,然后逐步在适应团队节奏、适应需求上重构(技术和架构重构),逐步完善和叠加,加上很多科技公司都认同开源(什么原因以后有机会再分享,有很深的历史原因),当重构到一定阶段,这些科技公司处于各种考量便会正式开源,给全球使用(我们团队现在使用的很多第三方工具和框架就是这样来的,包括我现在给团队建议的简单易用的PHP、Linux、Nginx、Redis、MySQL、XunSearch/Xapian、Angular.js、Node.js等)。即使现在,Hadoop的应用Stack也已经重构到了2.0,各个大公司的内部各种架构也都在进行不断重构,谁能告诉我什么架构不再重构了吗?对,已经死了的架构!重构之于技术架构,就如心态调整之于前行的人——因为这个世界不存在能洞悉一切、预知一切并提前做好一切的人。
       所以架构本质都是朴素的,即使是用了很优美的方式解决问题的框架,我们也只会谨慎的鼓掌欢呼,不会过度吹嘘。只不过在架构的过程中,一些为了沟通简便而起的名词和缩写,让行外人觉得不明觉厉,或别有目的自我吹嘘,把这些视作一些不可控的副产品吧。我这十几年的体会是,所谓的高大上和牛B,不管描述什么,都是有点不靠谱的,都是外行人或者恭维的评价,是一种表态,没有多少实质。这个世界上没有静止的、可以一劳永逸的架构,只有静止的、想一劳永逸的外行人;没有高大上和牛B的吹嘘物事,只有因无知而产生的恐惧或敬畏,只有朴素的用实践来解决的一个个具体问题。
何为重构?何为可控性和可用性?
       首先,这个重构非外行人理解的对架构的完全推翻重来,绝大多数情况都不是这样!!!要真的这样,外行人早就屁滚尿流了。有时候修改一些架构底层的Bug或微调一些代码配置也算是重构。
       说的这个重构(Refactor)是技术架构重构,不包括业务架构重构(这个我外行)。我们行业,对技术和架构的重构是普遍的。一个是为了满足不断更新的需求,还有就是为了满足团队更高的效率、实现新发现的更好方法、让架构更适合团队节奏、修复一些大小问题等。不管是依赖于第三方架构、还是主要使用自己的架构。 有些重构可能只需要一个技术人员的一个小时就完成了,有些需要整个团队几个礼拜或更长。但我觉得要避免对非行外人员说重构,因为这会吓坏他们,他们在把这不熟悉的问题放大,情况就变为非技术化的甚至是政治化的,那么就真正恶化为难以控制了。
       一般而言,现在大多数公司的平台开发都同时依赖于第三方架构和自己的架构,无非谁主谁次的问题,这里有个平衡点,主要就是要根据技术团队的实际情况考虑可控性和可用性。
      比如一把宝刀,如果让一个不会舞刀的人来拿,就会很危险,就没有可控性,可用性也不会好(还会砍到自己),我会建议这个人拿菜刀,而不是宝刀,菜刀也许更适合TA,如果菜刀不适合就需要给TA量身打造一把刀了(可能是木头刀);如果砍的目标是高手,我们就要当机立断的把TA换成高手再根据实际情况找合适的刀。放到到一些我们程序员遇到的实际例子中,相信大多数每个月都会有这样大大小小的可控性和可用性考量。
      我最近遇到的就是XunSearch使用问题。我7月份就根据现在技术团队的实际情况(技术能力和时间紧迫)放弃了使用更底层的搜索引擎架构和MQ粘合,而是选了这个我发现最简单的架构XunSearch(和PHP无缝对接,初级程序员一天就能上手,等先实现功能有时间后,技术人员进步一点后,再结合MQ重构成Xapian或其他全文检索体系)。但是最近。技术团队遇到了不支持一个字段不同范围同时查询、以及更快建立索引的问题,在我看来这是个小问题。所以最近我抽出时间来看,发现更快的建立索引在XunSearch的公开的中文API文档上就用,叫SIndex.flushIndex()接口,仔细看文档再动手测试一下就好,为什么他们没去看呢?对于同一字段多个不同范围,我看了底层代码(Xapian)和对应文档(这个技术团队普遍英文不好,不管会不会看,也没法看,所以只能我去看),典型的通用搜索语句:"age: 15..30 or age: 45..60",在确认后我还和负责Xapian开源的邮件群进行了沟通(还被老外鄙视问这种傻B问题,给了我-1,我也觉得自己很傻)。这说明什么?在可控性和可用性的考量上,也需要我们部分研发工程师的学习和研究得跟的上,而非只是被动的接受和使用,技术团队的成长作为很重要的因素必要被考虑进来。但是这个问题最后却被非行外人员获知,被当成严重问题处理,放大成对整个技术架构(PHP、Linux、Nginx、Redis、MySQL、XunSearch/Xapian、Node.js、自定义协议等)的质疑,我只能说我能理解无知,但也很无奈。最后在征询了部分技术人员建议,以及部分管理人员的意见(不要问我为什么还要征询管理人员)后,后续会提前结合ElasticSearch/Lucene/MQ给团队搭建一套新的后台数据全文检索平台,而且接口一定要简单好用。好吧,看来这个问题只能我来解决了;)
      最后说句公道话,一直知道XunSearch开源接口设计和开源团队的支持还不够好,但好用,可以快速使用,而且在一定程度上够用。XunSearch我在github上就看到基本就hightman一个人在维护,还得养家糊口,没有多少赞助(统计他们的官网,捐助加起来还不到5000)……我不认识hightman,但我愿意给hightman做个宣传:中、小型应用和团队如果用PHP,都可以考虑把XunSearch来做搜索引擎,以后可以平滑替换成其底层的大名鼎鼎的Xapian(Xapian虽然C++写的,支持各种语言接口,包括但不限于Java、Python、PHP等,接口和Lucene类似),从2013年开始,我在时间和规模紧张的项目上都用的XunSearch,让我们在满足应用的基础上,积极支持国内的开源人吧。
使用第三方架构还是自己量身打造架构?
       我在第三方架构和自主架构的考量上,一直秉持这么一个原则:如果需求变化不大、使用范围不大、扩展不要灵活,那么就直接在第三方架构上开发,先实现需求是第一目的,还要求资深的研发人员能对第三方架构底层要有一定程度的了解,提高对第三方架构的可控性;如果需求变化大、使用范围大、扩展灵活,那么就必须自己建立架构,然后融合其他第三方架构和自己的代码,根据团队的人员实际情况、需求的明确度和变化性,保持正常范围和频度的技术重构。
       不管使用第三方架构还是自己量身打造的架构,都会面临技术团队部分成员对这些架构的考量点理解不到位,原因主要是每个人的技术经验和领悟程度有差别,很正常。我解决这些问题的方法就是尽量引导其理解,实在理解不了的,就不要花时间解释,让他们先集中在当前的开发和实现上,后面不理解的会水到渠成的理解。
       无论如何,只要涉及架构,或多或少都会对技术团队的深度有要求。之前遇到一个.NET团队,用.NET MVC开发了几年的解决方案,却对使用EF要注意分布式限制不了解、以及对IIS和数据库的连接池、消息队列、并发等一无所知!!!好吧,只单机版没有问题,绝大多数二线城市的技术团队都如此,但分布式有并发需求的应用呢?有人说,用LB,Docker——说实话,连前面那些基本的你都不清楚,你真的能理解并且能用好这些第三方系统吗?
怎样成为一名架构师,并建立架构?
       最近遇到一名自称是咨询行业出身的技术架构师的哥们,反正开始我还想认真的和他讨论架构上的事情(我以为是同行,虽然奇怪没有在他身上感到任何技术气息)以实现相互沟通和学习借鉴的目的,但在听到他说没有学习过某3本我从来没听过的教科书就不能成为架构师后,我就淡定了,我觉得就没有必要和他认真讨论了,反正我也听不懂他说的神秘论和他看似伟大的经历到底和技术有啥关系,反正能肯定他的目的和技术一点关系都没有,但保持谦虚的态度还是有必要的,所以我作谦虚状的听着他口若悬河……
       何为架构师?我没有资格去做定义。我只说说我所接触的国内的一些现状。相当部分架构师是一种技术职位比较高的级别,所以你就会看到有些人写了本技术书籍,就被某公司升级为架构师;或者某程序员在某公司工作了8年,然后就被升级了架构师;或者是某些咨询公司为了忽悠所需,把一知半解的人的名片印为架构师……即使是这些架构师,真正自己写过架构的有多少呢?据我了解很少。有多少架构师还在不断接触新技术并且动手实践,还在不间断的和团队一起或多或少的写代码呢?更少。只会使用别人架构的架构师本身就是一个很大的缺陷,只会嘴上架构的就是一个大忽悠。这些架构师和那些建立技术架构的人,本身就没有多少关系。
       那么如何建立技术架构呢?我觉得,没有大量编码项目实践经验,没有大量的解决技术问题的经验,没有见多识广过很多其他架构,没有自己大量思考积累的,就很难建立真正的技术架构,至多也只建立了一个简单过程而已。如果你还要问怎么建立技术架构,我会说:大量编码项目实践经验+大量的解决技术问题的经验+见多识广过很多其他架构+自己大量思考积累+动手实践动手实践动手实践(最后一点最重要,重要的说三遍)。我这几年建立的架构,我在设计完成后,都会找机会实际进行亲自的Coding去完成具体的业务需求,从而实现从下到上的体会和调整,不能只有由上到下。
       ……写到这里,我脑海里想起那位仁兄可能会拿起一本字典,对我义正言辞的说,你看这个字典对架构师做了明确的定义,不是你说的那样……好吧,兄弟,嗯,我觉得我们说的完全不相干的两码事,但你赢了。
架构和编码质量的关系?
       有人说架构和编码质量的关系,就如大楼设计和室内油漆工的关系,油漆工不认真导致油漆刷的不均匀,和大楼设计有啥关系。嗯,这个说法大部分我都同意。但我的经验告诉我,建立一个架构,必须要考虑实现这个架构的技术团队的实际情况,也就是要把人的情况考虑进去,当然有时候还得把政治考虑进去。
       最后这点,我就说的简单一些,分享一下我的经验。比如团队里有实习生,有普通程序员,有资深程序员,在设计架构时候,就要考虑分层,不同的层,对技术要求不同,比如需要增删改查的抽象出来作为业务处理层,只要实习生或普通程序员有基本的增删改查编程技能,再熟悉一点业务,就能开发了,再在架构上附上硬性的TDD要求,让这些菜鸟不跑过单元测试,就完成不了任务;而下面的几层,可能涉及交换、MQ实现、复杂算法、驱动、连接池等,就交给资深程序员吧。这样,就满足的团队的实际情况,兼顾了效率和功能实现,还能在资深程序员经常review上层简单业务代码的情况下,提高代码质量,并协助提高初级人员的编码技能。
        什么,你不信,那没事,你试试让一个普通程序员走进满是对象和设计模式的Framework里,看看他的编码质量会有多高,看看他会不会迷路……也许等他从迷宫走出来,你竞争对手的产品都已经开发完了。
        PS:最后的最后,宣传一下我的理论:35岁前后才是程序员的黄金年龄,因为这个时候的经验、知识、能力、沟通、见识、人脉……的综合达到了最高值,如果我们国内有一大批这个层次的程序员,那么我们国内会开发出很多伟大的产品。到了这个年龄的程序员,请坚持下去,去找一个伟大的方向,去开发一个伟大的产品,不要浪费时间在考虑转管理、转销售、办公室政治之类的鸡毛蒜皮上。
                                 ——ShineScrum原创:老程序员顾笑群
                                               转载请署名ShineScrum及作者
全国报名咨询热线: 
400-821-0871  或
021-5068 3597
咨询邮箱:
info@shinescrum.com
QQ课程咨询:2732857740
QQ敏友交流群:283747125
公众微信订阅:ShineScrum


近期公开课:

HOT!!2016年2月26~27日CSM美国权威中文认证班(上海)
Jim Wang王军(国际Scrum联盟认证培训师)

HOT!!- 2016年3月18~19日CSM美国权威中文认证班(北京)
Jim Wang王军(国际Scrum联盟认证培训师)

HOT!!- 2016年3月18~19日CSM美国权威认证班(上海)
Arne Ahlander安儒宣(国际知名Scrum培训师),
中文助教现场支持

HOT!!-2016年3月20~21日CSPO美国权威中文认证班(北京)
Jim Wang王军(国际Scrum联盟认证培训师)

2016年3月21~22日CSM美国权威认证班(北京)
Arne Ahlander安儒宣(国际知名Scrum培训师),
中文助教现场支持

2016年3月25~26日CSM美国权威中文认证班(深圳)
Jim Wang王军(国际Scrum联盟认证培训师)

2016年3月27~28日CSPO美国权威中文认证班(深圳)
Jim Wang王军(国际Scrum联盟认证培训师)


2016年公开课安排:
www.shinescrum.com/courses
 


最顶级的世界大师

提前一个月报名享更多折扣优惠

免认证费和美国Scrum联盟两年会员费

五星级酒店授课,提供丰盛午餐以及上下午茶点

课程结束当天即可参加在线考试




顺利完成课程并且通过在线认证测试之后,您将获得:
- Scrum Alliance颁发的Scrum Master认证证书,成为一名认证的Scrum Master/ Scrum Product Owner
- Scrum Alliance的两年会员会费及会员资格
- ShineScrum终身荣誉会员资格,可免费参加ShineScrum主办的各种活动
- 一副价值30元的估算扑克
- 一份CSM/ CSPO课程纸质版中英文讲义
- Scrum实施模板及大量参考资料推荐
- 美国项目管理协会(PMI)学分 14 PDUs



关注ShineScrum官方微信平台
www.shinescrum.com
400-821-0871
联系我们
powered by emma