CTO的职责是什么?

看《架构思维》作者是这样讲的:

CTO 到底是做什么的?

我当下的答案是:“CTO 就是一个从技术视角出发,为公司或者所在的部门做正确决策的 CEO。”怎么理解这句话呢?作为一个 CTO,其长期目标和决策优先级与 CEO 的是 完全一致的,只不过 CTO 是通过技术手段来最大化公司的生存优势和发展,而 CEO 则是 在更广泛的视角上解决公司的生存和发展问题。

我时常问自己:CEO 现在需要什么?从长期看,他需要什么?我怎么做才能帮到他? 在技术视角上,我看到了什么机会和风险?他看到了吗?

也就是说,CTO 的大多数时间都是从技术视角出发,思考 CEO 一直在思考的问题: 如何为企业带来更大的生存优势?这个决策目标有非常大的特殊性。企业内的所有技术人 员,包括总架构师,一般都是以技术本身的先进性作为决策的第一优先级的。技术人员在 考虑企业生存的时候,往往仅以多个约束中的一个作为参考,但 CTO 不是,企业长期生 存才是他决策的第一优先级,技术先进性反倒是第二位的,甚至是可以忽略的。

我们可以通过一个案例来理解这两种思考方式的差异。

假设一名 CTO 所在的行业竞争激烈,所在企业还没有积累足够的资本和领先优势。有 一天,技术团队在讨论是否应该采用云原生的架构来替代现有的方案。从长期的技术发展角 度看,云原生会带来更好的计算伸缩性、更大的技术生态、更先进和更快速迭代的技术栈。

那么,如果以技术先进性为决策第一优先级,公司应该把线下的机器迁移到云上才能加速在 云原生技术栈上的积累,因为这样做不会对公司的生存带来负面影响,所以要立即规划和行 动,才能尽早培养人才和积累技术优势。

但是,同样的问题如果 CEO 以企业生存优势最大化为第一位来思考,结论就会不一样: 第一,做迁移会增加技术投入,降低业务迭代速度;第二,云原生迁移带来的回报是一个长 期且相对缓慢的释放过程,在迁移前期,由于周边技术的不成熟、投入大,资本回报反倒比 较小;第三,也是最重要的一点,迁移到云原生并不能给企业带来当下的生存劣势,但是也 不一定是当下最大化企业生存优势的最好的技术项目。所以,如果以企业生存为第一优先级 做出这个问题的决策,那么对比其他更实用且有明确回报的技术投入,云原生还不是最高优 先级,云原生这件事情可以放一放。

这个案例说明了一件事情,作为 CTO,技术先进性只是他的次要目标,其首要目标是 必须从企业生存为第一优先级出发来做技术取舍。在这种视角下,投入技术创新、加速技术 壁垒的构筑、放弃某项先进技术和某个团队,甚至寻找技术之外的选项,断臂求生,都是非 常合理的选择。

CTO 的这种以企业生存为第一目标的判断能力往往会让 CTO 把最重要的人才投到最有 利于商业增长的领域,而做到这一点就要求 CTO 对所在行业的未来走向有明确的判断,这 其实就是人们常说的商业嗅觉。CTO 只有商业嗅觉足够好,才能知道如何做技术战略,把 最重要的技术投入放在最关键的位置上。

CTO的双重人格

多数 CTO 不会放弃技术思维,因为在多数中小企业中,CTO 和总架构师这两个角色 是合二为一的,由 CTO 一个人承担,其原因有很多。首先,总架构师非常难找,公司对 这个岗位的能力要求非常高,总架构师在软件架构正确性的判断能力上必须在整个公司无 出其右,包括 CTO;其次,总架构师很难从内部培养出来,因为这个角色的判断能力需要 通过许多高风险的决策机会才能提升,这也是大多数中小企业最稀缺的;再次,总架构师 的职级和薪酬很高,从 CEO 视角来看,要招聘的人非常多,为这个岗位付出高薪往往不 是很多中小企业的第一优先级;还有,尽管这两个角色是汇报关系,但是决策的出发点完 全不同,所以经常会发生冲突,发生冲突多了,渐渐就失去了信任,长此以往,难免分道 扬镳;最后,总架构师有个人成长的诉求,很多总架构师期望自己做 CTO,也在企业生存 的维度上决策思考,一旦有机会,也会主动选择离开。

总架构师岗位难招聘、难培养、成本高、合作难、易流失,所以在大多数公司总架构 师这个角色就必须由 CTO 来承担。但是,这两个角色对一家企业来说都是必不可少的。 看一下图 23.1,最上方的是真正担任 CTO 的某个人,他是企业的最终的技术决策者,他 有两种人格,一种是总架构师人格,另一种是 CTO 人格。

图 23.1 CTO 的两种人格

CTO 的这两种人格分别持有不同的视角和决策优先级,对待任何一个问题,CTO 人 格都要和 CEO 保持高度一致,以企业的生存为第一优先级,并兼顾到商业竞争、业务、 财务和产品的视角;总架构师人格必须以技术实力的增长为第一优先级。

这两种人格要不断交锋,总架构师人格要把 CTO 这个决策者的视角拉到技术思维中 去,以技术先进性和技术团队的利益为先;CTO 人格要把 CTO 这个决策者拉到商业思维 上去,以企业的长期生存优势为先。这种冲突势必存在于每个日常的决策中,不断交锋, 但是交锋的最终目标只有一个,就是“从企业的长期利益出发做出最优的技术决策”。

总架构师人格的价值在于为 CTO 决策者提供不同的视角,并在合理的时候帮他顶住 来自 CEO 的压力,坚持正确决策。CTO 人格的价值在于抵抗内心对技术的痴迷和保护自 己团队人员的本能,从公司全局出发作出最优决策,必要的时候,技术先进性、团队利益 和架构合理性都是可以牺牲的选项。

做好总架构师其实有一个必要条件,就是具备与 CTO 建立深度信任的基础和化解日 常冲突的能力。但是, 在频繁的冲突和信息不对称的情况下,做到这一点非常难,所以中 小企业的 CTO 最终选择同时保持两种人格。

关于《架构思维:从程序员到CTO》这本书

本书以架构师工作中的痛点问题为导向,结合大量真实、复杂的案例,帮助架构师提高架构设计能力,规划职业成长路径。本书共4部分,第一部分“架构师的思维模式”介绍3种架构师的思维定式和4种架构活动中常见的思维模式;第二部分“架构师的生存法则”介绍影响架构活动成败的6个要素,以及由其引出的架构师的6条生存法则;第三部分“架构活动中的挑战、根因和应对”介绍架构师在整个架构活动中持续发挥的作用以及架构活动不同阶段常见的问题;第四部分“架构师的职业规划和能力成长”介绍架构师的成长地图和对应角色的关键能力,以及提升思考力的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/735880.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vscode用vue框架2,续写登陆页面逻辑,以及首页框架的搭建

目录 前言: 一、实现登录页信息验证逻辑 1.实现登录数据双向绑定 2.验证用户输入数据是否和默认数据相同 补充知识1: 知识点补充2: 二、首页和登录页之间的逻辑(1) 1. 修改路由,使得程序被访问先访问首页 知识点补充3&am…

经典机器学习方法(7)—— 卷积神经网络CNN

参考:《动手学深度学习》第六章 卷积神经网络(convolutional neural network,CNN)是一类针对图像数据设计的神经网络,它充分利用了图像数据的特点,具有适合图像特征提取的归纳偏置,因而在图像相…

信息安全基础知识(完整)

信息安全基础知识 安全策略表达模型是一种对安全需求与安全策略的抽象概念表达,一般分为自主访问控制模型(HRU)和强制访问控制模型(BLP、Biba)IDS基本原理是通过分析网络行为(访问方式、访问量、与历史访问…

程序猿大战Python——面向对象——继承进阶

方法重写 目标:掌握方法的重写。 当父类的同名方法达不到子类的要求,则可以在子类中对方法进行重写。语法: class 父类名(object):def 方法A(self):代码... class 子类名(父类名):def 方法A(self):代码... 例如,一起来完成&…

Ubuntu下安装docker

一、docker安装说明 解决官方源无法下载的问题 二、使用步骤 1.更新软件包索引 sudo apt-get update2.安装必要的软件包,以允许apt通过HTTPS使用仓库 sudo apt-get install apt-transport-https ca-certificates curl software-properties-common3.添加Docker的…

数据结构:冒泡排序,选择排序,插入排序,希尔排序的实现分析

✨✨小新课堂开课了,欢迎欢迎~✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:数据结构与算法 小新的主页:编程版小新-CSDN博客 1.冒泡排序 1.1算法思想 冒泡排序的基本思想就是&a…

LLM端侧部署系列 | 如何将阿里千问大模型Qwen部署到手机上?环境安装及其配置(上篇)

引言 下载待部署模型 安装minconda 安装tvm和mlc-llm 安装 JDK 安装 Android SDK 下载mlc-llm仓库 设置环境变量 安装Rust 1. 引言 梨花风起正清明,游子寻春半出城。 小伙伴们好,我是公众号《小窗幽记机器学习》的小编:卖青团的小…

38. 外观数列

题目 「外观数列」是一个数位字符串序列,由递归公式定义: countAndSay(1) "1" countAndSay(n) 是 countAndSay(n-1) 的行程长度编码。 行程长度编码(RLE)是一种字符串压缩方法,其工作原理是通过将连续相…

刷代码随想录有感(114):动态规划——最少数量的零钱换整

题干&#xff1a; 代码&#xff1a; class Solution { public:int coinChange(vector<int>& coins, int amount) {vector<int>dp(amount 1, INT_MAX);dp[0] 0;for(int i 0; i < coins.size(); i){for(int j coins[i]; j < amount; j){if(dp[j - coi…

【Linux】系统文件IO·文件描述符fd

前言 C语言文件接口 C 语言读写文件 1.C语言写入文件 2.C语言读取文件 stdin/stdout/stderr 系统文件IO 文件描述符fd&#xff1a; 文件描述符分配规则&#xff1a; 文件描述符fd&#xff1a; 前言 我们早在C语言中学习关于如何用代码来管理文件&#xff0c;比如文件的…

对于C++ 程序员来说,35岁魔咒是否存在?

大家常说程序员职业生涯会在35岁左右遇到所谓的“35岁魔咒”。这意味着在这个年龄段&#xff0c;程序员可能会面临就业不稳定或职业发展的挑战。对于C程序员来说&#xff0c;这个问题更加引人关注。 随着时间的推移&#xff0c;技术行业不断演进&#xff0c;新的编程语言层出不…

编程精粹—— Microsoft 编写优质无错 C 程序秘诀 01:假想的编译器

这是一本老书&#xff0c;作者 Steve Maguire 在微软工作期间写了这本书&#xff0c;英文版于 1993 年发布。2013 年推出了 20 周年纪念第二版。我们看到的标题是中译版名字&#xff0c;英文版的名字是《Writing Clean Code ─── Microsoft’s Techniques for Developing》&a…

34、shell数组+正则表达式命令

0、课前补充 jiafa () { result$(echo " $1 $2 " | bc ) print "%.2f\n" "$result" } ##保留小数点两位 薄弱加强点 a$(df -h | awk NR>1 {print $5} | tr -d %) echo "$a"一、数组 1.1、定义 数组的定义&am…

Native开发工具之应用开发编辑器打包发布(一)

Nuclide 是基于 Atom 之上构建的单独的一个包&#xff0c;其提供可编程性且社区非常活跃。它为 React Native、Hack 和 Flow 项目提供一流的开发环境。 2. Atom 官网&#xff1a;https://atom.io/ Github 项目地址&#xff1a;atom(https://github.com/atom) 文档&#xff1…

SpringBoot-注解@PropertiySource读取外部属性文件

ConfigurationProperties和Value两个注解能从配置文件中获取数据&#xff0c;但是前面讲了他们是从全局配置文件中获取&#xff0c;且只能从全局配置文件中获取&#xff0c;那么如果是一些数值类的数据放在全局配置文件里&#xff0c;是不怎么合适的&#xff0c;我们往往会把他…

gitlab 获取指定分支下指定路径文件夹的解决方案

第一步&#xff1a; 获取 accessToken 及你的 项目 id &#xff1a; 获取 accessToken ,点击用户头像进入setting 按图示操作&#xff0c;第 3 步 填写你发起请求的域名。 获取项目 id , 简单粗暴方案 进入 你项目仓库页面后 直接 源码搜索 project_id&#xff0c; value 就…

QT自定义标题栏窗口其一:实现拖动及可拉伸效果

1、效果 2、核心代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent<

Android intent 打开链接跳转到外部浏览

前言: 各位同学大家好, 最近接到一个比较诡异的需求 ,不是通常的webview 加URL显示网页 是需要跳转到外部浏览器 ,我这边处理好了就分享给大家 效果图 : 点几就跳转到外部浏览器 如图 具体代码实现: 点击打开链接并跳转外部浏览器方法 public void openBrowser(Con…

算法刷题总结

1. 排序算法 1.1 快速排序算法 public abstract class Sort<T extends Comparable<T>> {public abstract void sort(T[] array);protected boolean less(T first, T two) {return first.compareTo(two) < 0;}protected void swap(T[] array, int i, int j) {T…

《人生苦短,我用python·四》pybind11多场景使用

引言 Pybind11作为一个强大的工具&#xff0c;不仅可以轻松地将简单的C函数和类暴露给Python&#xff0c;还可以处理更复杂的场景&#xff0c;比如支持C标准库容器、处理C异常、以及自定义数据结构的转换。本文将深入介绍Pybind11的一些高级用法&#xff0c;帮助你在实际项目中…