Saturday, December 12, 2015

How to be better software architect



http://mp.weixin.qq.com/s?__biz=MjM5NzAwNDI4Mg==&mid=205302496&idx=2&sn=43cff4050fc2207e9be1c767dc66196d&scene=1#wechat_redirect
技能一:写得一手好代码


这一点毋庸置疑,如果不是写过N年代码的优秀程序员,一定不是好的架构师。“架构师”这是一个听上去比较虚的职位,它的主要价值在于“落地”的过程中,而不是“指点江山”。eBay的架构师总结架构师在项目中的职责:

1)产品团队要做一个产品,架构师要帮助团队把技术可行性,技术方案权衡取舍一一剖析清楚;
2)技术方案权衡取舍出来了,架构师要设计整体的技术实现步骤,这个过程一定是和团队其他成员一起完成的,常见的实践是,1到2个核心成员出一个初稿,然后大家讨论完善;
3)技术实现步骤出来了,架构师要和开发团队一起,进行编码,可能架构师不一定细究到任何细节,常见的实践是,系统最困难最核心最关键的部分往往由架构师亲自操刀;
4)系统初版实现了,架构师要和开发团队、测试团队、运维团队一起,完成各类测试,协助解决最困难的bug,和团队一同完成线上部署、并一同排除上线初期系统的故障;

技能二:抽象思维能力


“逻辑思维,抽象思维”比“编码的时间”对架构师而言更为重要,如果你不能让某个非IT人员明白某个概念在说什么,这个架构师注定也是失败的(沟通能力非常重要,详见第六点)。

逻辑思维不用展开多说,程序员的代码都是逻辑,如果XXX就YYY,如果AAA就BBB,缺乏良好的逻辑思维能力基本不可能成为好的架构师,甚至好的程序员。

抽象思维又分两点,一个是将实在的事物概念化,一个是将模糊的感觉数量化。一个苹果,抽象为质量、大小、颜色、形状、味道等,这是概念化,是架构师的必备思维。至于质量、大小、颜色、形状、味道如何转变成数字来描述,这也是架构师必备的思维。

有了上述两点,架构师能将一个“虚”的架构概念描述清楚。

技能三:技术前瞻性


架构师与技术高手的区别在于,架构师不仅局限于如何调用、如何并发等架构细节(技术高手对这些也非常熟练),还跳出三界,考虑未来问题和潜在风险的应对之道。

技能四:分析能力


看到问题的本质,是架构师必须具备的素质。

架构师要有将“业务需求”转化为“技术需求”的能力,这是一个本质的挖掘。例如,业务层面看到的是一个“电子商务网站系统”,架构师看到的是一个多人在线,并发交易,需要保证数据一致性的站点、服务、数据系统,功能、性能、扩展性、维护性、安全性、可用性这些字眼会惯性的蹦到架构师的脑子里。

架构师之所以是架构师,他在庞大系统的面前,仍然能够敏锐发现其底层之真实,这就需要,他有多年多领域知识和经验的沉淀。

技能五:全面的知识库


架构师作为一名技术领袖,需要通过散发知识的光芒来温暖开发团队,如果只一个领域内的知识烂熟于胸,那也仅仅是一名技术高手。要想更进一步,需要对APP层面、服务层面、数据层面均要了解(系统分层),要对研发、测试、运维、安全也要有所了解(职能),上要对接口,下要对原理(接口与实现)都有所了解,甚至,要在多个业务领域都有所涉猎。

初级架构师所害怕的,是跳出自己的“独门绝技”,在一定程度上说,在一定深度之内成为一个“杂家”也没什么不好。

技能六:沟通能力


架构师和项目经理,对沟通能力的要求都很高,很多互联网公司甚至直接由架构师担任项目经理的角色。这两个角色其实还是有所偏重的,项目经理更倾向于与客户的交流,跨团队的协作与交流,架构师主要偏向技术团队内部的沟通与交流,纯技术上的沟通。

如何成为一名“善于沟通”的架构师呢?在目标清晰的前提下,首先做到平和,不能将自己所在象牙塔上,颐指气使的发号施令,这样的态度必然遭恨,大家都是技术人员,只是分工不同,为何要受你的气呢?其次,架构师要有一定的绘图能力。人对图形的理解远大于对文字的理解,一个层次图,一块小白板,几只笔,真的这么容易把问题描述清楚么?

技能七:对工具的运用能力
http://developer.51cto.com/art/201603/506697.htm
不想成为优秀CTO的三点必备素质

凡事亲力亲为

明确地知道目前团队成员各自的能力以及你能调配的资源,一定远远比凡事亲力亲力的效果好

不愿在沟通上浪费时间

在管理团队的工作中,由于沟通不畅真的会引发许多问题,不仅会影响工作情绪,还会拖慢产品研发的效率,影响问题的界定等等。而且,团队成员间的默契很难信息不畅通的环境下建立,这非常不利于团队文化的形成。

热衷用技术思维解决问题

作为一名管理者,CTO一定要打破惯用技术思维解决问题的定式,站在管理者的角度,以更宏观的视角看待团队发展。不仅要把自己主要的时间和精力放到业务和管理上来,也不能放松在技术方面的关注和敏感度。二者如何兼顾,确实是一个很大的课题
http://www.codeceo.com/article/every-developer-be-architect.html
  • 关注范围:程序员专注于具体细节,而架构师专注于“宏观视角”。
  •  领导关系:程序员处于被领导地位,架构师则扮演领导角色。
  • 资历背景:架构师的从业时间一般比程序员更长。
  • 气质特性:架构师是重要的梦想家,而程序员则是面向繁琐任务的实干者。
  • 技术取向:架构师做出选择,而程序员提供选项。
  • 技能:架构师的技能水平高于程序员。
  • 代码:架构师需要编写之代码平均少于开发人员。
  • 组织互动:架构师所参与之“业务”会议数量远多于程序员。
  • 薪酬:架构师薪酬水平高于程序员。
  • 自身价值:架构师的价值要高于程序员。

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts