郑昀 建立于2016/9/15 最后更新于2016/9/18html
关键词:深度思考,碎片化阅读,作论文,深刻研究,面试
早先在《技术高手如何炼成》一文中提到,我会问面试者,你平常如何构建本身的知识体系。有人会以为你怎么就问出这么宏大的问题?知识体系,这是什么鬼?数据库
——工做以后你作过这样的事情吗?npm
面试是一个谁主张谁举证的过程,有时候须要面试者举出实例,自我证实。
而我认为问一些咱们工做中遇到的难题和业务场景是在“欺负”面试者,因此我喜欢问开放型问题:
在你工做以后,你有没有像作毕业论文同样对某一个 Topic 作过深刻研究?若是有,请举例,说得越详细越好。微信
为何要问这个问题?
由于我和面试者之间常常会发生这样的对话:网络
我:日常看什么技术网站?
Ta:某某技术新闻站,某某博客网,某某微信公众号……
我:最近有什么以为不错的文章,印象比较深,能给我讲讲吗?
Ta:……
我:#¥^讲个标题也行。
Ta:想不起来。
我(汗):那你日常怎么学习的?你毕业以后经过哪些方式构建本身的知识体系,讲给我听听。
Ta:看书(通过追问发现最近几年其实没读完过几本书,甚至连书名都记不住几个)。看视频(网络教学视频)。看技术网站(多半停留在首页上……)。跟朋友聊天(QQ群,微信群,……,斗表情包,无比巨大的噪音)。
我:这样吧,你工做以后有没有针对工做中遇到的某一类问题,抽象出一个 Topic,有针对性地调研和作试验?
Ta:……有吧……
我:你说的这个事儿,其余公司是怎么解决的?
Ta:……架构
我会告诉面试者,你来了以后,除了作业务以外,还必须作一个技术预研课题,课题范围可大可小,你不只仅要作试验,还要公开分享你的所思所得。app
WHY?机器学习
由于微信里收藏10000+篇技术文章,
由于知乎里收藏10000+个答案,
由于云笔记里离线复制了10000+篇文章,
……
很快乐,但并无什么卵用。分布式
碎片化阅读是很舒服,但意义不大,看似天天收获满满,其实都成为过眼烟云。重复一下著名的学习金字塔留存率观点:咱们读过的,知识留存率是10%。
我和面试者之间还常常会发生这样的对话:
我:这个思路/技术选型是谁提出来的?
Ta:技术经理/领导/项目经理……
我:有没有比较过其余实现思路?请讲一下各自的优缺点。
Ta:领导让这么干的,因此没比较过……
针对某一个课题,深刻思考,多方调研,作试验证实,不少工程师可能此生仅此一次:他大学毕业时作毕业论文的那次…………
若是长期知足于东点点,西点点,今天多是 Webpack、npm、Gulp,明天多是 Spark、机器学习、流式计算,假设你过目不忘,知识的广度却是有了,但缺少深度,久而久之,可能完全毁掉了深度思考的能力。
因此,咱们要“训练”,强制性要求你从定义问题开始,训练本身主动搜索、主动连接、主动构建知识、主动试验、善始善终的能力。
首先咱们提出的问题,它必须是有重要意义、急需结果、目标是商用,但可能没有现成的、肯定的解决方案,同时这个问题必须可以给整个团队创造学习机会,提供发展我的和组织技能的机会。
那么经过讲述咱们看到了什么,想解决什么,经过你我不断的思考和讨论,直到你能清晰地抽象出一个明确具体的问题——这个时候,问题其实已经解决了一半。
举例。
咱们的平台由数以百计的形形色色分布式服务构成,每个请求一路走来,会通过多个业务系统并留下足迹,并产生对各类 Cache 或 DB 的访问。做为访问入口的 App 开发部门首当其冲会接到用户投诉,然而请求会被随机分配到集群的各个节点,因此找到对应的日志片断,理清调用关系,找到在哪里断的,成为一个使人生畏的工做。
如何解决?前提是先定义出一个好问题。
拿“分布式系统”、“集群”、“日志”、“排查”等等关键字,去搜索,去看各类顶级团队的博客,去看各类架构师演讲资料,终于把问题聚焦于“分布式跟踪(Distributed Tracing)”这个命题。
因而,问题被抽象为一个 Topic:
如何实现分布式跟踪:追踪每一个请求的完整调用链路,收集调用链路上每一个服务的调用参数和异常堆栈,统计每一个服务的性能数据;可视化调用链,可视化服务质量。
曾经看到过这么一句话:
只能不断地学习基础知识以及和这个技术(问题)关联的知识,就像 Wikipeida
同样,当你进入一个词条的时候,就会伴随一堆新词条,因而,当多年后,我看到 “知识广度是深度的副产品”这句话时,简直就是说到个人内心去了。
仍以上面的例子举例。
肯定了分布式跟踪的大方向以后,咱们能够收集整理出各个公司在这个 Topic 上的实践,Google的Dapper,淘宝的鹰眼,Twitter的ZipKin,京东商城的Hydra,eBay的Centralized Activity Logging (CAL),大众点评网的CAT。
接下来咱们还能够整理出它们的架构思路和优缺点,咱们能够发现有的解决方案对工程侵入过重,给开发者形成了额外的负担,有的解决方案依赖于该公司特有的、闭源的技术体系。
怎么设计试验,经过什么数据,打算证实什么,这也是一种能力。
举例。
在实现实时数据大屏的时候,咱们的一位工程师在 MySQL+Canal 后接入分布式消息队列时,试验了 Kafka 和 RocketMQ,目的是,第一求证可否确保严格的消息顺序,这是数据库变动订阅但愿看到的,第二作一下压力测试,比较一下两者的性能。
这里说的善始善终,包含几个意思:
毕竟这是一个商业应用,是要上线的,前先后后都要考虑清楚。咱们考虑哪些点?首要的就是监控报警。其次是线上数据如何迁移,线上应用如何接入。再次是性能。
公开分享你的所思所得,不只作,还要写下来,还要说出来。你必定要输出你在这个问题上构建的知识结构,帮助本身,帮助你们,共同进步。
如是重复再重复,训练再训练,不妨试试看遵循 70-20-10 的学习法则:70%的学习时间放在针对现实生活和工做中遇到的任务、问题解决,20%的学习时间放在人与人之间正式的、非正式的反馈、辅导,10%的时间学习知识和信息(多是碎片化的学习,也多是读书)。
这样可能像把你装进一个沙袋里吊起来,从四面八方用狼牙棒打你,酣畅淋漓。
-EOF-