文章摘要(AI生成)
本文总结了《程序员的readme》中提到的程序员个人成长与学习能力、沟通与协作、代码相关、项目流程与管理、设计与架构、敏捷开发与管理以及职业生涯建议等方面的内容。文章指出了程序员在个人成长中应该注意的技能阶段和学习方式,强调了沟通技巧、协作能力、代码管理等重要性,并提出了关于变更代码、防御式编程、日志使用等实用建议。此外,还介绍了项目流程中的分支策略、构建发布与部署环节、展开环节等内容,以及在设计架构和敏捷开发过程中应该考虑的方面。最后,提出了关于管理者职责与沟通、职业生涯建议等建议。通过本文的总结,读者可以了解到如何提升自己的技能水平、优化工作流程、规划职业生涯等方面的建议和指导。
本文为《程序员的readme》读后感,感兴趣同学可以在微信读书上搜索这本书阅读
一、个人成长与学习
- 能力阶段:了解了从无意识的无能力到无意识的有能力的不同阶段,意识到自身技能所处状态对成长很重要。
- 学习方式:
- 调试时可通过输出日志或在控制台输出来了解软件行为。
- 注意临界值处理、学习惯用写法和风格。
- 基于兴趣的聚会、结对编程都是很好的学习途径。
- 选择项目应基于兴趣解决问题,而非单纯按认为需学习的领域。
- 不要用公司资源从事副业项目。
二、沟通与协作
- 提问技巧:做研究,提出明确问题,安排好解决问题的时间,必要时请人帮忙,描述问题时要给出背景、已尝试的方法及影响、紧急程度等信息。
- 克服障碍:不要对自己过度苛责,相信自己在行业中的能力;避免到处批判公司技术栈等负面行为。
三、代码相关
- 软件熵与技术债:
- 可通过代码风格工具、代码评审、持续重构等管理软件的熵。
- 处理技术债要描述风险和成本、提出解决方案、讨论备选方案并权衡利弊。
- 变更代码:
- 重构是在不改变软件行为下改进内部代码结构,添加新特性时常用。
- 变更代码可按定义变更点、寻找测试点、打破依赖关系、编写测试、进行修改和重构的步骤进行。
- 防御式编程:
- 运行时校验输入值,进行空值检查,可使用空对象模式、不可变变量等。
- 利用先决条件、校验和等方法发现常见错误,精确使用异常,“早抛”“晚捕”异常。
- 确保应用程序在遇到未预想错误时能快速且显式地失败,清理故障后的资源。
- 日志使用:
- 使用日志框架便于操作和调试,设置日志级别控制日志量,注意保持日志的原子性、快速性和安全性。
- 了解不同日志级别(TRACE、DEBUG、INFO、WARN、ERROR、FATAL)的用途。
- 避免在日志信息中折行,处理好字符串拼接和格式化,可利用异步附加器等提高写日志性能,且日志不应包含私人数据。
- 系统监控与跟踪:
- 系统性能以阈值百分比衡量(如P99),系统指标可用于自动扩容或缩容,记录序列化操作时间。
- 了解分布式调用跟踪相关内容。
- 配置注意事项:
- 可采用INI、JSON、YAML等普通格式文件或环境变量、命令行参数等进行配置,尽量用最简单有效的方法,如单一标准格式的静态配置文件。
- 加载配置值时校验,将配置保存在VCS中要评审其变化,注意脱敏。
- 工具集:强调了版本和权限控制的重要性,以避免因操作失误引发故障。
- 依赖管理:
- 了解版本的唯一性、可比性、信息性等特点,掌握语义版本管理及主版本号、次版本号、补丁版本号的相关规则。
- 避免相依性地狱,可通过直接复制代码(适用于简短稳定代码片段)、显式声明依赖项、明确设定版本号、避免循环依赖等方式。
- 测试相关:
- 测试有多种用途,包括检查代码工作、保护代码、鼓励清爽代码等。
- 熟悉单元测试、集成测试、系统测试、性能测试(负载测试、压力测试)、验收测试等不同类型测试。
- 了解管理测试的各种工具及功能,如setup和teardown、生成测试结果报告等。
- 编写测试时要将依赖项与常规代码分开,不过度沉溺,以代码覆盖率为指南,不为自动生成代码手动编写测试,集中精力在高价值测试上。
- 保证测试的确定性,处理好非确定性因素,如避免测试绑定特定网络端口、动态生成文件名等,利用setup和teardown方法清理测试环境。
- 代码评审:
- 提交评审请求时标题和描述应包含测试附加背景、链接及未解决问题等标注。
- 评审别人代码要阅读并提问,考虑API设计等长期影响,提供多方面反馈,避免对反复出现的代码风格问题喋喋不休,指出更好的非必须建议。
四、项目流程与管理
- 分支策略:
- 频繁合并是持续集成,基于特性分支开发在收缩型软件中常见,发布分支从开发分支切分,主分支用于随时部署,热修复分支处理主分支的bug。
- 构建、发布与部署环节:
- 构建环节包括解决连接依赖项、运行linter、编译、测试、打包等步骤。
- 发布环节注意不要改变已发布包,了解变更日志和发行说明的受众。
- 部署环节建议使用脚本,保证部署的原子性。
- 展开环节:
- 有特性开关、熔断器、“摸黑启动”、“金丝雀部署”、“蓝绿部署”等多种策略,注意代码提交和展开时都不算工作完成,要根据指标和日志确认修改成功运行。
- 处理On-Call:
- 对On-Call请求要及时回应,告知能查看问题的时间,创建并分享紧急情况下可依赖的资源清单。
- 了解P1 - P4不同影响程度的定义,回应支持任务要有耐心和礼貌,定期发布状态更新。
- 事故处理:
- 事故处理包括分流、协同、应急方案、解决方案、后续行动等阶段,各阶段有不同目标和任务,要注重调查事故根本原因并防止再次出现。
五、设计与架构
- 设计思考:与利益相关者沟通明确问题,参考网上资源、与专家交流、批判性思考,通过编写代码草稿和测试实验想法,不过分迷恋实验性代码。
- 设计文档:保证文档最新,进行版本控制,可参考开源设计文档或使用推荐的结构(概要、现状与背景等内容),列出可接受解决方案的需求,解释验证变更的计划。
- 协作设计:反馈会议可灵活安排,设计讨论有助于理解问题、分享知识等,头脑风暴前制定松散议程。
- 可演进的架构:
- 理解软件的复杂性特点(高依赖性、高隐蔽性、高惯性)。
- 可演进的设计要避免构建不需要的东西、过早优化、不必要的灵活抽象模型等,遵循最小惊讶原则,熟悉领域驱动设计(DDD)但仅在复杂情况下全用。
- 可演进的API要小巧易理解,带有许多字段的API方法设合理默认值,了解向前兼容、向后兼容及不同兼容性承诺的特点。
- 可持续的数据管理要隔离数据库、定义明确schema,了解相关数据库迁移和管理工具。
六、敏捷开发与管理
- 敏捷宣言与框架:记住敏捷宣言的核心观点(个人和互动高于流程和工具等),了解Scrum、看板等流行的敏捷计划框架特点及区别。
- Scrum框架:包括创建用户故事、分配故事点、分解子任务、冲刺计划、站会、评审机制、回顾会、路线图等环节及相关要点。
- 管理者职责与沟通:管理者通过与不同层级合作管理事务,一对一面谈要有计划,可讨论大局观、反馈、职业生涯、个人事务等方面问题,明确目标和关键结果,合理设置OKR数量,向上管理要注意多方面技巧。
七、职业生涯建议
参与招聘、面试、午餐会等多种机会提升影响力,注意工作时间不宜过短或过长,资深工程师要利用经验指导决策,避免因工作僵化阻碍成长。
评论区