代码的艺术

代码的艺术

目的解读

  • 了解公司与学校写代码的不同
  • 消除对于程序员这个职业的误解
  • 建立对软件编程的正确认识
  • 明确作为软件工程师的修炼方向

代码艺术

  • 多角度解读、研究与创作
  • 在写代码的过程中,需要综合的全方位的能力,包括把握问题的能力、建立模型的能力、沟通协助的能力、编码执行的能力
  • 在写好代码之前,首先需要建立品味,品味是指我们首先要知道什么是好的代码,什么是不好的代码,这样我们才能不断地去调整自己的行为,然后去学习,去提高我们的代码能力,写出具有艺术感的代码

软件工程师

  • 技术能力:编码、数据结构、算法、系统结构、操作系统、计算机网络、分布式系统
  • 产品:产品交互设计、数据统计、业务运营
  • 其他:项目管理、协作、研究与创新

代码实践

  • 好代码标准:代码的正确和性能、代码的可读性和可维护性、代码的可运维和可运营、代码的可共享和可重用;高效(Fast)、鲁棒(Solid and Robust)、简洁(Maintainable and Simple)、简短(Small)、可共享(Re-usable)、可测试(Testable)、可移植(Portable)、可监控(Monitorable)、可运维(Operational)、可扩展(Scalable & Extensible)
  • 编码前的需求分析和系统设计
  • 编码中的编写代码和单元测试
  • 编码后的集中测试、上线、持续运营和迭代改进

需求分析

  • 定义系统/软件的黑盒行为,external,what
  • 简介描述系统功能:系统类型描述、系统规模描述、系统定位和系统差异描述、系统对外接口功能描述
  • 精确的数据

系统设计

  • 设计系统/软件的白盒机制,internal,how & why
  • 系统架构:system architecture,系统功能、组成、功能在组成间如何划分
  • 系统设计的约束:资源约束
  • 需求是系统设计决策的来源
  • 系统设计的风格与哲学:功能单一是复用和扩展的基础,全局变量增加耦合从而增加了复杂性
  • 接口的重要性:模块对外的函数接口、平台对外的API(RPC或者Web API)、系统间的通信协议、系统间存在依赖的数据

如何写好代码

  • 代码也是一种表达方式

  • 代码书写过程中的细节问题:模块(数据类、过程类模块,明确的功能,紧内聚,松耦合);类和函数;面向对象(编程方法和范式,谨慎使用多态和继承);模块内部的组成;函数(单入口、单出口);代码注释(先写注释,再写代码);代码块(代码逻辑,分层);命名;系统的运营(代码的可检测性,状态记录,对外界接口)

  • 学习-思考-实践

  • 知识-方法-精神

  • 基础知识是根本

Mini-spider框架

多线程编程

  • 将耗费时间多的逻辑放入临界区内,会导致无法发挥多线程对硬件资源最大化利用的优势
  • I/O操作的处理:异常捕捉

细节处理

  • 种子信息的读取
  • 程序优雅退出:task_done、join

主逻辑

代码检查规则

代码检查的意义

  • 代码可读性
  • 发现代码缺陷
  • 提前发现问题
  • 规范制定与准入检查
  • 提升编码规范的可运营性

代码检查的场景及工具

  • 代码检查场景:本地研发环境Local、代码准入环节iCode、持续集成环节Agile
  • 代码检查工具与服务:客户端、SVM、CI
  • 代码检查覆盖范围:编程规范、代码缺陷、开源框架引用安全检查、可维护性MI
  • 代码检查速度

代码检查规则

  • 代码检查规则分级:error、warning、advice
  • 机检任务合一
  • 评审页行间提示
  • 针对豁免、误报、咨询的说明

Python代码检查规则

代码风格规范

  • 程序规模规范
  • 语句规范
  • 括号使用规范
  • 缩进规范
  • 空行规范
  • 空格规范
  • 注释规范

引用规范

  • 标准库、第三方库、应用程序自有库

定义规范

  • 变量定义:变量全小写、常量全大写
  • 函数定义
  • 类定义:首字母大写的驼峰式,没有基类时,应继承自object类

异常处理规范

  • 禁止使用双参数形式或字符串形式的语法抛出异常
  • 如需自定义异常,应在模块类定义Error的异常基类,且该基类必须继承自Exception
  • 除非重新抛出异常,禁止使用except:语句捕获所有异常,应该使用except…:语句捕获具体的异常
  • 捕捉异常时,应当使用as语法,禁止使用逗号语法

Python代码惯例

  • 让模块既可被导入又可执行:python属于脚本语言,无统一的程序入口
  • in运算符的使用
  • 不使用临时变量交换两个值
  • 用序列构建字符串
    原文作者:nightluo
    原文地址: https://blog.csdn.net/weixin_45807767/article/details/121517468
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞