技术领导力实战笔记_156_第126讲_|_洪强宁:从程序员到架构师,从架构师到CTO(二)
你好,我是安银互动CTOTGO会员洪强宁。
在上一篇文章,我分享了程序员到架构师的发展之路,以及一名优秀的程序员需要具备的特质。
今天我将继续跟你分享一名优秀架构师。
所需要具备的特质,以及从架构师转变为CTO的过程中需要注意的地方。
首先来看优秀架构师需要具备的能力。
我觉得一名优秀的架构师需要以下这四个关键能力,取舍前瞻、抽象容错一取舍。
一个架构总是有优有劣,它不会是完美的普世的。
也不存在一个架构在a场景能用在b场景也最适用的情况。
所以就需要我们准确判断,做出取舍。
我们可以根据具体的业务需求来调整架构,也就是以当前的业务需求选出最匹配的架构。
另外,架构师还需要根据现状衡量好需求和资源效率和安全、食盐和吞吐等等之间的关系做出判断。
比如对于在线系统,可能更重要的是保证它的高时延,因此就可以牺牲一定的吞吐量。
而对于离线系统吞吐量则更重要一些。
二、前瞻架构师需要具备一定的前瞻性,因为架构的调整周期比较长,这也是程序员和架构师之间一个很大的区别所在。
程序员负责一个项目。
在当前的互联网协议下,项目的迭代周期非常快,基本以天或周为单位最多一个月。
如果发现不合适的代码需要重构,程序员基本也能在几天或几周内就能完成重构。
而架构的调整是相对漫长的过程,可能需要数月甚至要上年。
因此,在设计架构时,就需要架构师具备前瞻意识,对很多不确定的事情做出预判。
比如,未来访问量会增长到什么程度,会不会产生新的业务?这些会对系统产生什么样新的要求等等。
三、抽象除了懂得取舍和拥有前瞻意识,架构师在设计架构时还要掌握抽象的方法,不能胡子眉毛一把抓,要做好分层和区隔。
因为架构师面对的是一个很庞大的系统,为了避免过早陷入细节,不要去看各个组件的细节,而是把他们的角色定义下来之后再分块来思考。
而在看每个分块时,其他分块都可以视为一个抽象的概念,另外也需要考虑复用的问题。
举个例子,我们现在正在做的对话机器人,就运用了分层思想,并且高复用一个对话机器人,可以完成各种各样的业务需求。
这其实是一个非常复杂的系统,里面有各种各样的对话机器人的模块,有的特别适合去做检索式的查询。
还有的适合做任务导向的产品推荐导向的对话等等。
我们把对话机器人抽象成一个通用的接口,再将它分为一个个小机器人。
这样一来,每个小机器人只需要关注自己的业务模块就行了。
然后我们会在前端再引入一个路由机器人,由路由机器人根据当前对话管理的状态来判断当前的对话应该交给哪个小机器人去完成,这就是典型的分层的思想。
四、容错相比程序员,架构师面对的环境要恶劣的多了,因为系统复杂了,出错的几率也增加了,每个节点每个功能都有可能出错。
所以这就需要架构师为错误,而设计事先做好解决方案,除了出错,还有可能产生数据丢失的情况,这个可以通过备份来预防。
有句话说,备份不做,日子甭过,做好备份也是非常关键的。
另外,如果出现故障,该怎样去恢复呢?我们现在普遍的做法是不修只换,因为如果要修复一个异常状态,可能修复后还会出现连带问题。
而如果能通过技术手段删除已出现的故障,换一个全新的系统,就能够保证它迅速恢复到正常状态。
再来聊聊从架构师到CTO,我做CTO这个角色只有两年。
相比资深CTO,我对CTO这个角色的感悟也没那么深刻。
我觉得从架构师成为CTO之后,我工作中最大的变化是从一个需求实现方变为了需求。
提出方之前是我的老板,提出需求后,我需要思考用什么样的技术和架构来实现它。
而现在更多考虑的是用什么技术才能发展业务,怎样从架构师的角度转变为CTO的角度去思考问题呢?我认为关键点还是在于提高眼界,不仅要着眼于实现需求,还应该思考能发掘出什么新的需求。
举个例子,在我准备创业时,有一件事儿对我的触动非常大,就是alpa go战胜李世石。
我原本以为人工智能在围棋方面战胜人类,还需要五到十年,没想到会这么快。
我以十年为一个节点,回顾了近三十年技术圈里发生的重要事件,发现大概每十年就会发生一件里程碑式的事件。
大约一九八六年年底,互联网正式上用标志着我们进入了互联互通的时代。
到了一九九五年web出现,然后在二零零七年左右发生了三件大事儿。
一是google发布分布式系统论文,使得分布式计算变得更加廉价,更加可行。
二是亚马逊发布AWS,意味着云计算正式进入可以商用的状态。
三是苹果发布iphone,标志着我们进入移动互联网时代。
又过了十年,就是二零一六年alpha go战胜李世石,标志着我们已经进入了人工智能与大数据时代。
纵观这些趋势,站在CTO的角度,当前最应该关注的就是人工智能和大数据。
而因为当时我们已经在做创业的准备,就需要考虑人工智能和大数据这个趋势会给我们的创业带来什么样的影响。
随后,我和豆瓣前首席科学家王守坤就决定从这个方向入手,一起梳理了我们已经具备的技术能力。
主要有这六点自然语言处理的能力,深度学习的能力、个性化推荐的能力、知识图谱能力、大数据的能力和云平台的能力。
同时对于产品,我们都认为随着人工智能的发展,下一代的UI人机界面将会是对话式的。
因为对话式的人机界面更加自然,门槛更低,又具有私密性和个性化的特点。
所以我们判断这样的产品会是未来的产品形态。
于是,我们就选择利用自然语言处理深度学习、知识、图谱等能力,做一个对话机器人,利用个性化推荐、大数据处理云平台等能力,做一个sars平台。
最终,我们的创业方向就确定为偏售前领域的对话机器人sars服务。
那么,如何成为一名优秀的CTO呢?当我们成为CTO这个角色,往往不是先有需求再考虑技术实现,而是根据当前的技术潮流和自己所掌握的技术能力去考虑如何实现业务。
可能有人会说,这是CEO该考虑的事情啊。
没错,这确实是CEO的追责,但也是CTO的追责。
之前大家常开玩笑说,CTO就是要把CEO吹的牛含泪也要实现的。
那个人我觉得不对,CTO其实是帮着CEO一起去吹靠谱牛的人,他是CEO的一部分。
Ceo这个角色涵盖了公司中的方方面面。
他把自己的角色拆分后,其中偏技术的角色就是CTO.同时,CTO也是技术团队的建立者和技术文化的捍卫者。
因为他是技术团队的最高负责人。
那么一名优秀的CTO应该具备哪些能力呢?首先他需要关注多个方面。
第一,关注业务。
我们需要知道用户需求以及我们能够给用户带来什么样的服务质量和价值。
第二,关注行业,比如竞争对手和新的技术。
我们需要了解新技术,对自己而言是不是意味着新机遇。
第三,关注机遇作为CTO,需要了解有哪些需求还没有被满足。
我们能做什么?新技术能够带来哪些可能性等等。
第四,关注增长能预见到业务的增长,并提前应对,能发现增长的瓶颈并及时解决,并在增长的过程中保持系统健康。
其次,一名优秀的CTO也应该是一名优秀的架构师。
一般在初创公司,CTO就是首席架构师,公司的业务架构。
技术架构基本上都是由CTO来确定再往前推进的。
同时,CTO也是组织的架构师,需要考虑怎样搭建团队,怎样分解业务,才能够更好的完成战略需求。
而对于战略,也需要CTU做出优先级判断和取舍。
当然,CTO还需要发现并解决组织级的系统瓶颈,这和架构师做的事情是一样的。
同时,CTO也应该是一名优秀的程序员。
但对于CTO要不要写代码这个问题,我的回答是,no.我觉得CTO最好不要写业务代码,因为如果你没能及时提交,几乎没有人敢催,而这会影响项目的交付成为瓶颈。
如果你想保持对技术的敏感度和创造力,你可以写写效率工具、写写分析型的代码等。
最后,CTO还需要像程序员一样持续不断的优化。
当然,CTU要做的不是优化代码,而是优化产出。
基于数据去管理团队,总结职业发展的过程,就是眼界不断提高的过程。
对于程序员而言,从写代码到关注代码与代码之间的关系,再到关注代码与系统之间的关系。
这时他就开始承担了架构师的职责。
架构师主要是在做系统的事情。
他的着眼点会从系统与系统之间的,关系到系统与业务之间的,关系到这时他开始承担一些CTO的职责。
而对于CTO而言,他关注的是业务,然后逐渐关心业务与业务之间的关系,最后关心业务与战略方向的关系。
这个眼界提升的过程就是从程序员、架构师到CTO的发展路径。