程序员进阶之路
1.术
1.1初心
为什么成为一名程序员,初心若何?有人有天赋,有人凭兴趣,有人看前景。也许,你上路之初还未曾明了,但在路上不时叩问内心,找到初心,会走得更坚定,更长远。
1.2.架构与实现
架构是什么:软件系统的结构和行为设计,实现是围绕这种宏观结构去开发程序的过程
架构做什么:一整套决策流。确定边界(划分系统域,问题域),切分协作(切分系统和服务),交互连接(系统连接原则),组装整合(把各部分按照预期定义规则组合成一体,完成系统目标)
实现做什么:交付代码,写代码注意点
image.png
架构关注点:
控制软件复杂度,避免因为需求迭代,复杂度升高。需要架构具有扩展性
实现关注点:
简:简单,简洁,简明,简化。尽可能简单实现,少代码开发,少测试时间,少潜在bug,少未来维护和沟通成本。
总结:架构是关注系统结构与行为的决策流,而实现是围绕架构的程序开发过程;架构核心关注系统的“熵”,而实现则顺应“简”;架构注重把控系统的边界与 “要塞”,而实现则去建立 “领地”;所有架构的可实现性都是等效的,但实现的成本、效率绝不会相同
1.3.多维视图
1.组成视图:系统由哪些子系统,服务,组件构成
2.交互视图:系统与外部系统或服务的交互关系
3.流程视图:系统内部实现的功能和流程控制
4.部署视图:系统部署情况
5.状态视图:系统有哪些状态和状态的迁移路径
1.4.代码与分类
功能:实现业务逻辑的代码,需要弄清楚用户的真正需求
控制:业务逻辑的执行策略,控制代码执行逻辑。比如控制反转,负载均衡,限流,熔断,并行,重试,降级等
运维:方便程序检测,诊断运行是处理的代码。监控埋点,日志
三类代码要有边界和距离
1.5.炫技与克制
掌握一门新技术不要像手里有把锤子,哪里都是钉子
克制:反思提炼,代码应该简洁,直观,可读和高效。恰到好处的满足需求,是一种平实,清晰,易懂的表达。
1.6.编码三阶段
信:深刻理解用户需求,而不是产品文档上的需求
达:程序可读性,可理解性,可维护性
雅:程序优雅,简明
1.7.bug反复出现解决思路
1.开发规范,代码审查,可靠单测,规避粗心大意
2.爬坑经验总结就,静态扫描工具,规避认知偏差
3.微服务化,服务拆分,应对熵增问题
4.塑造扁平环境和工程师文化,发现问题,总结问题,规避重复踩坑
2.道
2.1计划
计划,就是做选择,你在为未来的你做出选择,你在选择未来变成 “谁”。如果你还在为今天的自己而后悔,那就该为明天的自己做出计划了。
2.2目标方法
目标:源自内心,兴趣,明确
方法:smart计划
计划如何达成:有限的时间,适合的周期,兴趣的选择,郑重的承诺
成本和收益:计划才能给你真正的自由,你对计划的控制力越强,离自由也就更近了。计划也就有选择,需要选择收益高的计划。
2.3信息过载
信息太多如何选择,1.按需选择,2.对信息价值的判断。3.选择少而精的东西深入了解,达到更高层次
2.4知识与体系
1.学习一些知识点,这些知识点最好是相关联的,或者归属统一分类
2.基于业务和一些已经掌握的点,扩展深入其他点从而连成线,形成知识面。继而向上走架构设计领域,了解业务和产品考虑为用户提供价值
3.在领域知识体系中,“点” 是利器,“线” 是路径,“面” 是地图;而就我们个体而言,“点” 是孤立知识点的学习掌握,而 “线” 是对这些点的连接,“面” 则构成了完整的知识体系网。
2.5能力和输出
image.png2.6工作和学习
image.png2.7习惯
构建一个好习惯对成长很有帮助,习惯首先得有时间观念,固定某一段时间干某一件事情,专注,持续交付,跨出边界。
试一试不是一个好习惯,习惯需要有好的起点,也要有明确的终点,不然是浪费时间。比如人工智能很火,我想试试