Better

Ethan的博客,欢迎访问交流

自我提高、代码质量、产品稳定迭代

最近在码农翻身公众号看到几篇关于如何成为架构师,提高代码质量和产品稳定迭代的文章,觉得很多东西都值得参考,是自己接下来可以践行和思考的方向。

架构师

客户需求转化为技术实现

  • 技术如何选型
  • 如何设计才更简洁、更容易实现和扩展
  • 如何满足非功能性需求,如性能、安全、高可用性等

刨除好奇心和热爱之外

  • 掌握技术原理
    • 基础知识:网络、操作系统、数据库、编译
    • 应用层:Web 开发框架,HTTP/HTTPS、SSO、OAuth、RESTful、序列化、安全框架、RPC、Web 安全、虚拟机、并发编程、缓存、数据库相关范式、SQL、事务、索引,锁
  • 获取项目经验和最佳实践
    • 从现有项目中去学习,一定要努力地往上看,看到整个系统,看到端到端的流程
    • 多问为什么
  • 锻炼自己的抽象能力
    • 找到系统中哪些不变的东西,把它们作为哦一个支点来架起整个系统的设计
    • 项目总结,自我总结
    • 阅读书籍,阅读源码
  • 发出自己的声音
    • 架构,设计,编码,工程实践,技术发展趋势都能提出自己的见解
    • 小组讨论,部门会议,紧急任务处理,技术演讲,博客,客户交流

应用层学习时候,要多问为什么,建议采用这样的句式:因为有 xxxx 的问题,现有的 xxx 和 xxxx 问题解决不了,所以才出现了 xxxx 这个技术。当你在追寻技术的本源的时候,对这个技术的思考就会更加深刻,就能超越很多人。

怎么算把原理给掌握了呢?标准就是你能用自己的语言给别人讲出来

提交代码

提交代码前自己的 7 个问题

  • 代码是正确的吗:完成需求且无 bug,自动测试,手动测试
  • 代码是完整的吗:边界条件
  • 代码是安全的吗:遵守安全最佳实践,是否验证了输入数据,防止了数据植入,经过了已知攻击的安全测试
  • 代码是可读、可维护的吗:注释?拆分?命名?
  • 代码是可扩展的吗:是否允许添加新功能而不破坏老的代码?是不是参数化的?是不是可配置的?恰当的设计模式来支持扩展?
  • 代码是不是高效的:高负荷?异步?内存占用?
  • 有没有一些让你可以自豪的地方

产品稳定

如何保证产品稳定迭代呢

  • 测试驱动开发(TDD):先构建测试用例,再开始写你的功能代码,比较适合底层的系统和核心稳定的系统,对于需求多变的系统,构建测试用例的人力付出太大,而且需求一变,已有的测试用例可能失效,导致投入产出比不够高
  • 灰度发布:上线一个新的客户端版本,代码逻辑已经预埋,但设计了一个开关
  • 监控和日志
  • 双写,双读验证:新旧代码,划分为两个流程(两个接口),上线到实际环境,然后在同个模块里面调用,一个请求进来后,两个流程分别执行一次,逐字节做对比新旧流程结果,新流程结果只用于对比,返回的依旧是旧流程的结果,如果对比失败,就可能存在异常,要查找并解决。


留言