架构思考读书笔记 二

有策略性的思考

与新技术保持同步

架构师的能力模型是一个T字形,保证知识体系的宽度(市场、产品、需求、设计、实现、验证、运维),对软件体系的全生命周期都要了解,并且每一项重要技术都要了解2个以上的竞品对比;在深度上,需要对一两项技术有深入的研究和长期的积累。

目前流行的所谓全栈工程师,其实并不合理,一个人的精力有限,不可能从前端到后端的技术全部掌握并精通,最终造成的结果可能就是培养出一个能力普通的多面手;

寻找关注点

新技术如此之多,哪些该值得我们重点投资?可以通过以下几点进行判断:

  • 它是否被宣传得天花乱坠?真正的好技术不需要到处吹嘘;
  • 是否面向底层通用问题提供解决方案?
  • 它诞生的目的是否别有用心?很多技术的存在只是解决一些特定的产品问题;
  • 开发人员是因为兴趣而使用这项技术,还是管理原因?兴趣可以使产品成功;
  • 技术是否拥有复杂的配置和使用方法,从而导致可能出错?一项好的技术,会让你尽量少犯错误,将关注点放在业务逻辑上;

如果不知道怎么筛选技术,可以参考TW公司整理的技术雷达图,每半年发布一次,整理有各种热门技术以及评估信息。

这些技术大致分为四类:

  • 推荐使用的:

    • 此类技术经过大量验证,且反应较好,比较成熟,可以在生产环境中直接使用;
    • 设计开发人员应该对这类技术非常熟悉,可以投入大量精力在工作中去应用、学习;
  • 需要研究的:

    • 此类技术针对当前再用的技术提出了诱人的改进,且开发社区活跃,氛围良好,比较有前景,可能会逐步向第一类技术演进;
    • 设计和开发人员应当开始学习此类技术,并进行一些实验性质的使用和测试,以进行知识储备;
    • 在必要的时候,甚至可以用在生产环境中;
  • 保持关注的:

    • 此类技术提出了一些很好的理念,可能有点超前,但是被社区认可,可能是未来发展的方向;
    • 设计人员需要定期关注此类技术的发展状态,如果停滞或者方向走偏,可以不用在关注;
    • 当此类技术经历1到多年的发展,可能会逐步演变成第二类技术,这时需要投入多一点的精力去研究;
  • 不用关注的:

    • 已经过时的技术,不适应当今的场景,有更好的技术替代,比如EJB应用、CORBA通信、消息总线等;
    • 太过超前,满天吹嘘,或没有应用场景技术,比如中文编程、银弹框架等;

你也可以根据上述准则制定自己的技术雷达图,可以3个月或半年更新一次,如果精力充足,可以加入更多的内容到自己的雷达图中。

而且,雷达图是逐渐收缩的,从第四类到第一类,技术点会越来越少,这样可以保证你有足够的精力投入到正确的事情上去。

石蕊测试

你也可以通过以下几个问题,来测试某一项技术是否值得放入到自己的技术雷达图中:

  • 使用此项技术开发应用时,是否可以很方便的开发自动化测试程序进行验证?
  • 它是否使用一些通用的文件或协议格式(如yaml配置,json报文等)?
  • 是否方便用版本控制软件进行管理此技术开发的应用(基于文本的一般没有问题)?
  • 是否可以将重复性的内容进行自动化?
  • 是否方便集成到已有的CI环境中?

断舍离

个人精力有限,如果关注点太多太分散,就会将时间碎片化,无法形成系统性的个人能力提升;而且,其实我们目前关注的很多内容,其实并没有太大价值,比如每天刷的微博、朋友圈,所谓的新闻、抖音视频、电视剧,所谓的聚餐、社交等;

需要对周围吸引你精力的事情进行整理,抛弃没有价值没有营养的东西,让你的人生更充实,更丰富,个人建议每天的精力投入到以下内容:

  • 家人相处;
  • 身体锻炼;
  • 工作;
  • 技术提升(专业书籍);
  • 精神世界(文化书籍);
  • 休息;
  • 朋友交流(不定期);

除此之外的内容,需要根据个人情况判断,如果你感觉每天刷2小时朋友圈是正确的选择,你可以继续坚持这样做,只有你能为自己的行为负责。

排列优先级

确定自己的关注范围之后,可能会发现,即使经过过滤,还有一大堆事情需要做,这时就要划分优先级,将优先级高的事情放到前面,先去完成;优先级低的事情,放到后面,有时间再去完成;

当然,两类事情之间可能会发生转换,将优先级提升或降低,这个要自行判断;

制定一个计划

当确定要学习某一项新技术时,需要给自己制定一个计划,有的放矢,比如想要学习Docker技术,可以这样制定:

  • Step1: 搭建Docker环境;
  • Step2: 完成一个"Hello World"例子;
  • Step3: 根据指导文档完成多个更复杂的例子;
  • Step4: 结合自己的项目或臆想一个应用,使用Docker去构建;
  • Step5: 进行初步的应用总结;
  • Step6: 深入学习Docker文档,掌握更多的使用方法,并进行测试;
  • Step7: 结合更复杂的项目或臆想各种应用,使用Docker去构建;
  • Step8: 深入学习Docker源码及实现机制;

当然,这不是一成不变的,需要看自己的学习目的,如果只想简单学习,那么到Step5就够了;

除了查看文档之外,还建议使用以下渠道进行学习:

  • 官方邮件列表;
  • 官方github(issue和wiki等内容);
  • 读书交流会;

合理安排时间

当你决定学习一项新技能却不知道何时开始时?我可以给出明确的答案,就是现在!

为了保证在学习上的投入,除了制定学习计划之外,还要安排好时间,例如每天早上的半小时,或晚上的半小时,或周末的一到两个小时,最好把它提前写到日程表中。如果不这样做,当有人问你,明天晚上8点有没有空时?如果有日程表,你会发现我要学习Docker,没时间;否则的话,你本应该学习Docker的时间,有可能在吃烤串了

组团学习

当你在学习一项新技能时,如果有水平相当的其他人也再学习,这最好不过,因为不定期的互相交流,会让你掌握的更牢固,而且能学到更多内容;

因为,不同人在学习时的关注点可能不同,两个人都学完一章交流时,可能会发现,另外一个人学到的东西,我竟然没注意,反之亦然;

所以,学习之后的交流非常重要。

利用碎片时间

当你在等公交、坐地铁、排队打饭等等的时候,时间也在一分一秒的过去,可以把这些时间利用起来,不然又被抖音和朋友圈占据了。

建议在手机里放些技术文章,关注些技术公众号,或者随身携带Kindle,当别人在刷无聊时,你在刷技术,此消彼长的对比是很明显的。

利用社交网络

个人能力有限,不可能随时和各种新技术保持同步,这时就需要利用社交网络了。

  • 关注各大技术公众号,每天花10分钟,浏览最新的技术动向;
  • 参加业界的技术大会,了解业界动向,和参会人员交流,从而认识更多的业界精英;

保持本心

对新技术的学习不能终端,但是也不能在工作中盲目尝试。

结合当前项目遇到的问题,有选择的使用新技术,保持产品的健康迭代,这是我的主业。

可以结合以下几点进行判断:

  • 技术雷达图中有哪一项新技术可以移入到第一类(这时就可以考虑在项目中应用了);
  • 目前使用的新技术中是否出现了新版本并解决了我们的问题(如果有,考虑升级);
  • 使用语言版本是否需要升级到新版本(如从Jdk6->jdk8,需要综合衡量);
  • 现在使用的某一库或框架有更好的替代品出现,如何迁移?(事先考虑迁移策略,等它成熟到第一类时迁移);
  • 项目中引用一项新技术时需要进行充分的测试验证(重点考虑本项目的应用场景);

实践

  • 每周安排一个小时的时间学习你感兴趣的技能,最好把这个时间固定下来;
  • 结合当前工作的产品制定一个技术雷达图;
  • 给自己制定一个技术雷达图;
  • 找到一个读书俱乐部并加入;
  • 参加一个感兴趣的架构师技术大会;
  • 参加本地的架构师技术聚会;

架构思考读书笔记 一
架构思考读书笔记 二
架构思考读书笔记 三
架构思考读书笔记 四
架构思考读书笔记 五
架构思考读书笔记 六

你可能感兴趣的:(架构思考读书笔记 二)