架构思考读书笔记 二
有策略性的思考
与新技术保持同步
架构师的能力模型是一个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,需要综合衡量);
- 现在使用的某一库或框架有更好的替代品出现,如何迁移?(事先考虑迁移策略,等它成熟到第一类时迁移);
- 项目中引用一项新技术时需要进行充分的测试验证(重点考虑本项目的应用场景);
实践
- 每周安排一个小时的时间学习你感兴趣的技能,最好把这个时间固定下来;
- 结合当前工作的产品制定一个技术雷达图;
- 给自己制定一个技术雷达图;
- 找到一个读书俱乐部并加入;
- 参加一个感兴趣的架构师技术大会;
- 参加本地的架构师技术聚会;
架构思考读书笔记 一
架构思考读书笔记 二
架构思考读书笔记 三
架构思考读书笔记 四
架构思考读书笔记 五
架构思考读书笔记 六