理解算法背后的世界观

我比较擅长的领域可能是数据和架构两个方面吧。 大数据方面就是数据挖掘、数据分析等领域,我现在带着极光推送整个的数据团队,需要把握数据团队的技术方向,还需要做很多算法方面的研究。

对于数据挖掘,我经常提到的就是大家在理解一个算法的时候,一定要理解这个算法背后的世界观,一定要明白这个算法是为什么产生的、它解决了什么样的问题。

另外,算法是为产品服务的,所以,你关注到算法的时候,也一定要想清楚,这个算法到底能用到我们什么产品上。另外,算法是会有一个瓶颈的,所以你必须清楚什么时候需要用这个算法了,什么时候这个算法的收益率偏低,需要把它停下来了。要把算法跟商业做更好的结合,这是很多算法工程师非常欠缺的一点。

了解技术变革与技术组合

对于架构,在我看来一定要特别深入地去了解技术本身以及技术所经历过的变革。比如说Redis,后来推出了Redis-cluster,大家都知道Redis-cluster能解决哪些问题,但当我再问一个深一点的问题,从Redis到Redis-cluster为什么经历那么久时间,推出这个新版本、做出这个新方案的时候,它有参照哪些相似的技术、有哪些优点和缺点、可能会有什么样问题。你会发现,这个问题几乎可以难倒95%以上的人。也就是说其实他们并没有深入地去理解一个技术的变革,这在我看来是一个很大的问题。

另外,当了解了这些技术之后,你还需要能对这些技术做出灵活的组合,因为没有任何一种技术能解决所有的问题,尤其在我们现在的时代,你的业务线非常多、你的数据非常大……所以你一定需要有这种组合技术的能力,能把若干个技术组合到一起去解决问题,这也是架构的时候非常重要的能力,对创业公司尤其如此。

曾经有一个项目,我们发现原来的技术方案不合适,后来升级的时候就用了很多技术的组合,把很多开源组件中我们认为适合的一部分都用到这个项目里,最终它的查询效率提高了将近100倍。当然也有以前方案的问题,但是我们还是觉得这种方案的组合其实可以产生非常大的威力。

CTO的挑战:技术、产品与商业

我现在负责整个技术和产品研发团队的管理。大公司的CTO可能更像一个management,对具体的技术细节,他可能不需要特别了解。但对我们这样不到200人的创业团队来说,CTO需要承担更多的技术职责,除了传统上的管理以及把握公司整体技术前进的方向之外,还必须要完成某些技术的攻坚。比如我会需要跟技术团队一起讨论跨IDC要怎么做、某一个算法要如何设计优化、甚至会讨论到某一个页面怎样的体验是最好的等等,这些很细节的层面,也都需要我作为一个CTO做一些把控。

当我达到现在这样程度的时候,也会对自己提出更高的挑战,因为创业公司的CTO其实在一定程度上决定了这个公司的技术瓶颈和技术高度,是你在引领整个公司的发展,所以你就不能拖后腿。

别人提出一个技术方案的时候,你要能够及时响应,并且能够告诉他这个方案可能会有哪些问题。而当别人没有提出的时候,你需要做的是第一时间提出新的技术方案,并且安排人去做研究和尝试。这些都是对CTO更大的挑战。

作为CTO,50%的时间做前沿技术学习,30%的时间做对外交流,20%的时间做竞品研究,20%的时间做日常管理,这是我认为比较合理的时间安排,是的,做CTO需要花费120%的时间在工作上。

另外,在创业公司,尤其是在云服务公司,作为一个CTO,你还需要去了解公司整个的商业模式。因为你比任何人都了解技术,所以你一定要知道公司以后到底要朝着哪个方向发展,比如说到底是要专注地去做推送,还是要去做数据,还是要做开发者平台,还有如何把握彼此之间的平衡等,这些都需要你去关注。你需要把技术和商业更好的结合起来,这一点可能是我最近一年最大的进步。

也许有的人的目标就是想做一个纯粹的技术专家,但对大部分人来说,你的技术其实是为产品、为商业服务的,这是我觉得很多人需要去做更多的思考、更多地走出去看业界的一点。

建立属于自己的技术知识体系

我的学习模式是,刚开始,我会把一门、两门技术学得非常深、非常透,并且在脑海里形成鲜明的两个知识点。然后我会不停的去接触新技术,但是每接触一个我都会跟之前的这两个技术点做比较、建立起关联,相当于形成三个点,而且这些点之间会不停地连成很多的边,显示着这些技术彼此之间的优势与劣势、相似与区别等,到最后就会在脑子里形成一张图。比如说Python支持这样的一个语法,我会想那其他的语言有没有也支持这样的语法的,其他的语言不支持的时候,它到底是怎么实现这个问题的。这样你就会对比起来了,而且你会发现,你加的点越多,你对之前的东西理解得越深。

所以说技术在很大程度上是相通的,这也是我特别喜欢计算机的一个原因,就是需要你不停的去学习,然后就会觉得你学的东西原来越来越有趣。

这是我觉得非常重要的一个能力,尤其现在全栈工程师非常火,但是我面试的时候却发现,很多人他的知识面很广,但无论是他们技术的深入度还是技术点之间建立起的联系都是不够的。比如他说我会Java、Python还会C++,但当我问它们三个之间有什么区别、共性、面对具体项目怎么选择的时候,可能他就没法很好的回答,只能说出一些很浅显的东西。 在我看来,一个人不努力反而没那么可怕,因为当他遇到感兴趣的事情时,我相信也许他就会自己努力起来了。最可怕的是一个人其实很努力,但是他从来不思考,我身边就有这样的人,他读了很多的书,可能有上百本技术相关的书,但是你会发现,他看完就看完了,不去想这些书背后的东西,也不去深入思考这些书能产生的价值,这是我觉得非常致命的一点。

一个CTO谈自己的技术架构体系的更多相关文章

  1. 从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构) (转)

    转自:http://blog.csdn.net/v_july_v/article/details/6704077 从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到 ...

  2. WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇]

    原文:WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇] 在[WS标准篇]中我花了很大的篇幅介绍了WS-MEX以及与它相关的WS规范:WS-Policy.WS-Tra ...

  3. 001_谈阿里核心业务监控平台SunFire的技术架构

    <1>阿里全球运行指挥中心(GOC)的SunFire出品 <2>在2016年双11全球购物狂欢节中,天猫全天交易额1207亿元,前30分钟每秒交易峰值17.5万笔,每秒支付峰值 ...

  4. 成都app开发:架构一个App需要学会哪些技术呢?

    成都亿合科技小编为您分享: 随着APP应用的流行,越来越多的人想自己学习怎么开发APP应用,那架构一个APP需要学些什么技术呢?首先要了解App都有哪些类型,不同的类型适用于哪些需求,用户可以根据自己 ...

  5. 从Hadoop骨架MapReduce在海量数据处理模式(包括淘宝技术架构)

    从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,认为它们非常是神奇.而神奇的东西常能勾 ...

  6. 软件架构设计学习总结(3):QQ空间技术架构之详解

    QQ空间作为腾讯海量互联网服务产品,经过近七年的发展,实现了从十万级到亿级同时在线的飞跃.在这个过程中,QQ空间团队遇到了哪些技术挑战?其站点前后台架构随着业务规模的变化又进行了怎样的演进与变迁?成长 ...

  7. [置顶] QQ空间技术架构之深刻揭密

    QQ空间作为腾讯海量互联网服务产品,经过近七年的发展,实现了从十万级到亿级同时在线的飞跃.在这个过程中,QQ空间团队遇到了哪些技术挑战?其站点前后台架构随着业务规模的变化又进行了怎样的演进与变迁?成长 ...

  8. QQ空间技术架构之深刻揭秘

    QQ空间技术架构之深刻揭秘 来源: 腾讯大讲堂  发布时间: 2012-05-17 17:24  阅读: 7822 次  推荐: 4   [收藏]   QQ 空间作为腾讯海量互联网服务产品,经过近七年 ...

  9. 谈一下关于CQRS架构如何实现高性能

    CQRS架构简介 前不久,看到博客园一位园友写了一篇文章,其中的观点是,要想高性能,需要尽量:避开网络开销(IO),避开海量数据,避开资源争夺.对于这3点,我觉得很有道理.所以也想谈一下,CQRS架构 ...

随机推荐

  1. python网络编程——socket基础篇

    python的网络编程比c语言简单许多, 封装许多底层的实现细节, 方便程序员使用的同时, 也使程序员比较难了解一些底层的东西. 1 TCP/IP 要想理解socket,首先得熟悉一下TCP/IP协议 ...

  2. hadoop无法启动常见原因

    1.Could not chdir to home directory /home/USER: Permission denied 启动datanode时会报这个错误,尝试利用ssh登录datanod ...

  3. Mysql update 索引

    执行mysql update,或者delete的时候会遇到: You can't specify target table for update in FROM clause 相关的原因自不必说:下面 ...

  4. angularjs动态添加节点时,绑定到$scope中

    <html> <head> <meta charset="utf-8"/> <script src="https://cdn.b ...

  5. 学习C++50条忠告

    1.把C++当成一门新的语言学习: 2.看<Thinking In C++>,不要看<C++变成死相>: 3.看<The C++ Programming Language ...

  6. goim源码分析与二次开发-comet分析一

    因为要完成一个聊天的项目,所以借鉴了goim,第一篇分析打算半原版,先摘抄http://www.jianshu.com/p/8bd96a9a473d他的一些理解,写这些还是为了让自己更好的理解这个项目 ...

  7. C++ 内存解析

    一.内存基本构成可编程内存在基本上分为这样的几大部分:静态存储区.堆区和栈区.他们的功能不同,对他们使用方式也就不同. 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在 ...

  8. centos7 二进制安装包安装 mysql5.6

    centos7 二进制安装包安装 mysql5.6 一.下载mysql5.6二进制安装包 http://mirrors.sohu.com/mysql/MySQL-5.6/ 如:mysql-5.6.34 ...

  9. Golang之写一个聊天室

    . 海量用户在线聊天系统 . 点对点聊天 . 用户登录&注册 一.服务端开发 . 用户管理 用户id:数字 用户密码:字母数字组合 用户昵称:用来显示 用户性别:字符串 用户头像:url 用户 ...

  10. Codeforces 608B. Hamming Distance Sum 模拟

    B. Hamming Distance Sum time limit per test: 2 seconds memory limit per test:256 megabytes input: st ...