良好的职业习惯

  • 不要为了炫技而去写一些晦涩难懂的代码。
  • 可读性非常重要。对于内部系统来说,性能要求没有那么高,可读性可能会比性能更重要。
  • 没有维护好的代码最好不要上传到 Gitlab,因为其他人也会看。
  • 文档很重要,正常程序员可能要留出 30% 以上时间去写文档,高级架构师花的时间则更多。
  • 保持好奇心,了解原理,才能搞定底层问题。
  • 即使只做一个系统的某个模块,但最好也去理解清楚整个系统是如何运行的,对别人的模块也大致了解原理。
  • 保持思考,主动改进。经常主动思考“我负责的模块有没有什么问题?”、“我负责的模块代码能不能更规范?”、“下次再有类似的工作能不能不改代码就搞定?”、“我负责的工作能不能自动化完成?”等等。主动思考,主动进步。
  • 主动求助。积极与其他人沟通。如果自己不主动,没有人有义务主动帮助我。
  • 一件事一定要完全做完再去开始下一件,不要想着这件事还差一点留着以后再优化,不会有这个时间的。
  • Todo List 是永远做不完的,下班的标准不是把什么什么做完,而是,累了。要趁着现在没有其他生活上的琐事,每天拿出点时间多学习,即使会耽误一些工作,不要想着做完某个工作再去学习,因为工作是做不完的。
  • 领域 > 语言。不要将目光局限在某个语言上。
  • 技术上要绝对严谨。技术结论要以“API 说明”、“官方文档”等为准,不能靠猜。不要挑战概率,不要无视低概率的问题,因为这种问题到了用户那儿就可能变成高概率问题。不能就是不能,不要为了面子/取悦他人给出错误的结论。
  • 学习模块化思维,多尝试思考代码复用。
  • 尝试分享,学会表达自己。要会说,如果只会做不会说会很吃亏。
  • 多学习一些“产品思维”。产品经理不止是一种职业,也是一种思维。产品思维的核心是挖掘用户的本质需求。
  • 多对接到的需求提出质疑,要完全了解清楚需求再去做,否则可能做了半天,结果方向歪了。
  • 学习一些测试思维。有了测试思维,写代码时就会习惯性的将异常情况处理好,且更容易想到各种异常情况,有时候脑袋乱的时候可以自己写测试用例用测试思维来找到异常情况。大部分软件只有不到一半的代码对应正常情况下的执行逻辑,剩余代码用于处理各种异常情况。
  • 通过诚信、能力,树立良好的口碑。

通用编码原则

  1. 遵守编码规范。
    • 一个软件的生命周期中,80% 以上的时间在维护。
    • 几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护。
    • 规模稍大的公司都有一套自己的编码规范。
    • 一个软件开始开发后,基本没有机会再重构,而是不断在其上继续开发,所以最初的代码很重要。
  2. 想清楚再开始编码。写代码之前最好想清楚以下几个问题再动手:
    • 代码结构是否合理。
    • 代码会不会有性能问题。
    • 代码在各种异常情况下会不会逻辑错误。
    • 如果产品经理改了需求,能不能不改代码或者少改代码就能满足。
    • 如果以后其他人来维护我的模块,我的代码会不会被别人鄙视。
  3. 注意变量和方法命名。
  4. 注释。
    • 对外接口的注释要尽可能详细。
    • 好的注释包括:法律信息(开源代码用的较多)、作者的意图、警示其他程序员某种后果、TODO
    • 只有自己能看懂的注释、会误导别人的注释还不如不写出来!
  5. 保持类的规模尽量短小,职责单一(单一职能原则)。这样不但好维护,还好理解。
  6. 编写合理的调试日志。
    • 调试日志应以“定位错误”为中心目标。
    • ToB 软件的调试日志,读者除了程序员外,还包括实施人员、售后支持人员、负责维护的其他工程师等。
    • 对于执行链条较长的功能,在模块边界出输出 TRACE 级别的日志。
    • 生产环境关闭调试模式。(危害:占用CPU、占用磁盘空间、泄露程序内部的一些信息)
    • 错误码(有必要的话)
  7. 密钥、密码等敏感信息不要写死在程序中。私钥的存储非常敏感,业界有成熟的方式。
  8. 谨慎敏感数据的输出。
    • 敏感信息不要在网络中传输,如果实在无法避免,用不可逆加密算法加密。
    • 只输出必要的最小数据集,避免多余字段暴露引起敏感信息泄露。
    • 不要再日志输出密码(密文密码也不行)、密钥和其他敏感信息。
    • 对于必须输出的敏感信息,必须进行合理脱敏展示。
  9. 谨慎敏感信息的存储。敏感数据应使用不可逆算法进行加密存储,最好加盐(现在真正安全的摘要算法只有 SHA2、SHA256 了,MD5 和 SHA1 已经被证明是不太安全的,因为不同的文件可能会有同样的 MD5 和 SHA1,所以可以进行碰撞)。保存在内存、临时文件中的敏感信息也要及时清除。
  10. 检查复制粘贴的重复代码。
  11. 谨慎进行命令执行。
    • 执行其他模块输入、用户输入的命令时,必须严格检查。可使用白名单限制可执行命令,比如不允许传入 bash、cmd、sh 等命令。小心命令注入。
    • 启动进程时,文件路径应加上双引号。
  12. 使用 TLS 通讯时,记得启用证书验证。
  13. 注意文件访问权限。
  14. 注意对文件上传大小、类型进行限制。