如何学习新技术、团队技术选型时要注意些什么

  首先,要说明的是,这里的“新”不必定是指时间上的新,在后文中,也多是指,对于我的(或者团队)来讲是“新的”,就是说,这个东西,即便出现了好久,应用普遍,可是我的(团队)没有使用过,那么也能够说是“新”的。html

  本文地址:http://www.cnblogs.com/xybaby/p/8655593.htmlredis

 

为何要学习新技术

  

  计算机知识突飞猛进,常常会涌现出新的语言、框架、思想。虽说这些东西不必定都是从0到1的创造发明,也许只是微创新,或者将某个领域的思想用到了新的领域。无论怎么样,都能开阔思惟,扩展知识面。现实一点说,多了解一些知识在求职、跳槽的时候老是有好处的。缓存

  而对于一个技术团队,也须要了解、跟进新技术,最怕的就是老是使用同一套工具去解决全部问题。”若是你有一把锤子,那么全部东西看起来都像钉子“”。常常发生的状况时,虽然手上的这套工具、框架很烂,并且很难知足新的需求,很差扩展,可是多数人仍是选择将就、缝缝补补。“丑是丑,可是还能用“,这句话透漏出妥协、逃避,也有多是无奈。在《暗时间》里面,做者也提到了这个问题,“人倾向于在既有框架下去解决问题,并且在这个过程当中很难发现框架约束的存在”。架构

  了解、学习新技术,不是说必定要马上使用到新技术,而是做为知识贮备,这样当现有技术没法(优雅地)解决问题的时候,能够想到有其它的技术彷佛能够解决这个问题。也就是说,工具箱里面的工具须要足够丰富,才能在不一样的场景下选择合适的工具。无知会限制想象力。框架

项目中是否采用新技术

  是否要在项目中采用某一个新技术,取决于两部分:技术自己与技术以外,注意这里的新,不只是时间上的“新”,也包括团队对技术的熟悉程度。运维

  对于技术自己,须要充分了解技术的优缺点,须要有强大的公司或者开源社区的技术支撑,须要技术足够活跃,须要有较长的生命周期。分布式

  那技术以外的考虑因素包括哪些呢?ide

  第一:业务、项目是否须要这个技术工具

  第二:项目当前的阶段、时间紧迫程度学习

  第三:团队对技术的掌控能力、也包括学习能力

  要采用新技术,必定是由于业务有需求,当前的技术没法知足,或者没法优雅地、可扩展地知足,而不是说据说新技术牛逼,你就非得用一用。新技术必定是在如今或者近期来讲对项目有用的,而不是为若干年后、不可预知的业务变化作准备。

  若是要快速出产品原型,那么确定是选择最熟悉的工具,若是有足够的时间预言,那么就不妨尝试新技术。处于开发前期的项目,天然是有技术试错的机会,也有较多的时间来验证新技术的稳定性。而处于开发后甚至于线上项目,那么引入新技术就得慎重且当心,由于这个时候就是在“行驶的汽车上换轮子”,若是能够, 先在小规模(部分服务)上使用新技术,经受实践的考验以后再大范围推广。

  引入新技术还有一个很重要的因素,那就是团队里面必需要有负责任的成员可以hold住新技术,新技术首先可能就有缺陷,并且,使用不当也会有诸多问题,若是团队对技术的掌握没有达到必定的深度,那么出现故障的时候就会很尴尬了。下面会提到,若是要使用一个新的技术、工具、框架,我以为须要学习到什么程度。

 

  在团队中,通常来讲,有技术追求的成员倾向于使用新技术,激进,每每只能看到新技术闪光的点;而技术leader则谨慎得多,甚至是保守,会考虑本身对技术的掌握能力,还有项目的稳定性。这个不难理解,屁股决定脑壳。

 如何学习新技术

  学习的目的决定了如何学习新技术,以及学习到什么层次。

  只是简单了解(what is it)、仍是做为知识贮备(以备不时之需)、仍是如今就须要在项目中使用,学习的重点、深度、层次彻底不同。

  在《学习和使用技术的4种层次》一文中,对技术的掌握分出了四个层次,大体是这个样子的:

0. Stranger(陌生人)
  据说过没用过,知道一些术语和大体框架,写过hello world,没有实战经验

1. Tourist(旅行者)
  使用该技术开发出可用的东西,了解基本元素或者API, 了解部分技术细节,能看懂比人的代码
  Salesman:学习技术的目标是为了完成某一项业务,就像旅行商去某地出差是为了卖商品而非观光同样。
  Sightseer:学习技术的目标是为了拓展视野,增长见识,而非完成某项特定业务。 具备主动学习精神的开发者在业余时会时常扮演Sightseer角色

2. Resident(居住者)
  了解这项技术的优缺点,并深知原理,对部分细节进行深刻研究,能高效使用并开发出有价值的产品或工具
  Worker:团队合做为主,按时交付,保证高效
  Craftsman:单兵做战,以开源本身的项目为目标

3. Architect(架构者)
  从更高的角度思考这门技术,触类旁通,对比其余领域、技术,改革或者改善这门技术
  Revolutionist:用更好的技术代替这门技术
  Reformist:改善这个技术,为其发展贡献本身的力量

  

  对于不少技术,咱们可能都处于stranger这个层次,只是据说过,但既没有实践也没有了解其原理。而对于Tourist Redident这两个层次,根据学习的目标又有不一样的区分,若是只是为了扩宽知识面,那么我只用关心本身关系的部分,更多的是学习这个技术优秀的地方;而为了在项目中使用,我得关心这个技术的方法面面,还须要了解这个技术可能存在的缺陷。

  在《技术的正宗与野路子》一文中,做者指出了按部就班学习新技术的方法,如图所示:

  

  天然,不一样的学习目的,须要学习到的层次是不同的,若是是Salesman(上面四个层次中的Tourist),那么看完tutorial,就能够对照API文档写代码了;而若是想作sightseer,那就就是看完tutorial以后看关心的spec。

  要在线上项目使用一个技术,至少要达到Worker这个高度,明确技术的优缺点,深知原理,高效利用,这个时候就须要对Spec和部分API进行深刻学习。

  最后,若是在项目中长期使用,就会发现技术的缺陷与不足,或者说与项目的实际需求不匹配的状况,这个时候要么改造它,要么从新换轮子(或者造轮子)

以redis为例

  以redis为例,若是我只是但愿简单了解,做为知识储备,那么我会跟着Tutorial简单使用一下,而后读一遍介绍文档,了解redis的各类特性,能作到哪些事情。

  而redis自己也是一个分布式缓存,那么若是个人重点在于“分布式”,那么我会关心redis是如何水平扩展的,如何保证高可用的。这个时候,可能就是要看看相关的Specification。

  那若是要在项目中使用呢,取决于使用方式与使用程度。若是只是作缓存,数据不持久化,那么就不用关心存储问题。若是数据规模不大,也不用考虑可用性,那么使用standalone这种单点redis就好了,也就不用掌握sentinel + master slave,redis cluster 或者codis,这样代码写起来简单,运维的复杂度也低了不少。

  若是项目在缺少经验的状况下开始使用redis,那么可行的演进路线是,先使用最简单的、最容易掌握的模式(如单点Redis),随着对Redis了解的深刻,在小范围内使用更复杂的技术(如redis cluster),验证以后再大规模推广。

references

学习和使用技术的4种层次

技术的正宗与野路子