0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

《代码的艺术》观后感

芯片验证日记 来源:芯片验证日记 作者:芯片验证日记 2023-01-28 21:51 次阅读

前段时间听了百度技术培训中心章淼博士讲的《代码的艺术》直播课,章老师是业界大牛,课讲得娓娓道来,内容很丰富,很多点都戳到了我以前或现在的痛点,也激发了自己很多反思,总之收获很多,现在简单总结一下,主要分以下几点吧。

1.文档:

关于文档,很多工程师最讨厌两点:没有文档和自己写文档。我以前对文档也有很深的误解,比如经常觉得写文档有点儿浪费时间,总觉得码代码和Debug才更能显示出一名工程师的能力和价值。这其实是一个严重的错误。文档的重要性被严重低估了。

1.1 项目文档的重要性

(1) 文档的目的:提高沟通效率;提升对“思考过程”的管理。(2) 项目中超过50%的时间用于沟通,沟通的方式:口头,文档,代码。(3) 没有文档的设计不是设计。(4) 不会写文档 = 不会做设计。(5) 文档本身也是产出:coding的时间少于30%。(6) 写文档是整理思路的过程。(7) 没有文档,后期会浪费更多的时间,维护成本远高于写文档的时间。

(8) 修改文档,比修改代码的成本小的多。

(9) 没写文档,就开始写code,是极其错误的。

(10)简单的项目和问题,也需要写文档:项目的延续时间和复杂性往往超出预期;早期的“偷懒”,往往在后期付出更大的代价。

1.2 常见的问题:

(1) 没有接口文档:多人协作出现问题。(2) 需求文档没写好:多次反复讨论同样的问题。(3) 没有系统总体架构文档:每一个人都需要重新看代码,还不一定能看清。(4) 缺少文档:新人无从入手;人员变动时,不好交接;团队内沟通效率很低;自己过两个月后,痛苦的回忆之前的思路。

1.3 什么时候需要写文档?

(1) 必须的文档:需求设计文档:需求,重点,取舍过程;接口文档:函数,参数,返回值;关键性的算法文档:思路,关键点;系统总体框架:全局的思路。(2) 凡是不那么“显而易见”的地方。(3) 不仅留下设计结果(what),也留下思考过程(why):留下决策的依据,便于后面的工作。(4) 文档不是写完代码后补出来的:文档是设计过程中使用的工具、和设计过程的结果。

1.4 文档书写规范

关于书写规范,每家公司的要求都不太一样,大家遵守就好。国内芯片行业在文档这方面做的最好的应该就是海思了,我个人觉得海思芯片的成功,跟他的文档和管理密不可分。

2. 项目管理

项目管理是另一个被忽视的重要的问题。引用《软件开发的201个原则》中的一句话,所有伟大的技术(CASE工具、技术、计算机、文字处理器等)都弥补不了拙劣的管理。好的管理,即使是在资源匮乏的情况下,也能产生巨大的效果。事实上,懂项目管理的工程师特别少。每一位工程师其实都是管理者(做好自己的管理),所有的工程师都应该懂项目管理。

2.1 原则:质量第一

质量必须放在首位,没有权衡的余地。无论如何定义质量,客户都不会容忍低质量的产品。质量必须量化,并建立可实施落地的机制,以促进和激励质量目标的达成。即使质量差、也按时交付产品,这似乎是政治正确的行为,但这是短视的。从中长期来看,这样做是自杀。

2.2 项目三要素的权衡

锁定1-2个要素,改变其他要素。人和月不能简单互换。

pYYBAGPVJ1eAcIbGAADD5R7Embs069.png

2.3 项目规划

(1) 明确项目约束(质量、范围、时间、成本),做出取舍。(2) 制定项目里程碑计划,和相关方达成一致。(3) 分配任务并制定进度表:梳理关键任务;搞清关键任务间的依赖关系;识别项目的关键路径。

2.4 项目周报和个人周报

(1) 做好下周计划,抓住重点。(2) 每周对照计划,即使有变化,也应努力按计划执行。(3) 反映工作量,周报首先是给自己看的。(4) 周报需要目标和计划,也需要回顾和总结。

3. 代码的艺术

代码反映了一个人/团队的精神面貌。一个优秀的工程师应该具有很高的综合素质。编码能力只是表象,不仅要懂验证,还要懂脚本,懂运维,懂设计、懂架构,懂产品。真正优秀的工程师任何时候都是稀缺的。

3.1 Coding is NOT so easy

(1) Coding的过程是:从无序变为有序;将现实世界中的问题转化为数字世界的模型;一个认识的过程(从未知变为已知)。(2) Coding的过程中,需要把握问题的能力;建立模型的能力;沟通协作的能力;编码执行的能力。(3) 写好代码首先需要建立品味

3.2 一流代码的特性

poYBAGPVJ4yAPHb8AAK7c__v_Ag275.png

3.3 代码也是一种表达方式

代码主要是写给人看的,不是写给机器看的,代码的维护成本远高于开发成本。理想的场景:看别人的代码感觉和看自己的代码一样;看代码时能够专注于逻辑,而不是格式方面;Don’t make me think。

3.4 模块切分的原则

紧内聚,松耦合,有利于代码的复用:单一目的;明确对外接口;以数据为中心。

3.5 切分模块的方法

(1) 数据类模块(实现对数据的封装)。(2) 过程类模块(不包含数据)。

3.6 数据类模块

(1) 主要完成数据封装:模块内部变量;类的内部变量。(2) 对外提供明确的数据访问接口:数据结构和算法属于模块内部工作。(3) 写程序要以数据为中心考虑:首先考虑有哪些数据类的模块。

3.7过程类模块

(1) 本身不含数据。(2) 调用“数据类模块”或“过程类模块”。

4. 代码的评审(Code Review)

定义:通过阅读代码来检查源代码与编码标准的符合性以及代码质量的活动。在编写代码之外,代码评审和单元测试是两个最重要的工作。

4.1 代码评审的重要意义

(1) 提升代码质量:code review是提升代码质量最重要的方法。(2) 有助于知识传递:code review是辅导他人编码最好的方法。

4.2 代码质量差造成的问题

(1) 重复编写类似的逻辑,缺少可复用的代码。(2) 定位bug和修复bug。(3) 代码的可读性差,阅读代码困难,费时。(4) 踩坑/填坑,挖坑容易,从坑里爬出来难。(5) 重构也需要时间。(6) 无休止的加班的源泉。(7) 职业危机,生存困境。

4.3 代码评审中的常见问题

(1) 拼写错误。(2) 未优化的代码实现。(3) 不必要的复杂代码。(4) 重复实现已经存在的逻辑。

(5) 缺少必要的注释。

(6) 缺少必要的单元测试。

(7) 。。。。。

4.4 在代码评审中应有的态度

(1) 对所审代码完全看懂:yes:掌握情况就像自己写的一样;no: 对代码逻辑和背后的原因任很模糊。(2) 不仅可以运行:优秀代码的标准:正确,可维护,可重用,可运维。google的标准:差一个空格也不行。(3) 评审和编码一样重要:评审也有产出:更高质量的代码;评审比编码更辛苦:理解&找出问题。(4) 以提升代码质量为最终目标:评审双方共同努力。

4.5 代码评审的步骤

(1) 推荐方式:自顶向下,对代码进行全面扫描。(2) step1:系统全貌:模块划分的逻辑,模块间的关系。(3) step2:模块级别:看清模块内的逻辑;关键数据,关键的类/函数(重点:功能,接口定义)。(4) step3:类/函数的内部逻辑:逻辑正确性,实现合理性,段落划分合理性。

4.6 关于坏代码的简单判断

(1) 如果5分钟内不能看懂的代码,大概率有问题。(2) 需要思考才能看懂的代码:好的代码:Don’t make me think。(3) 需要来回翻屏才能看懂得代码:好的代码:在一屏内就是完整的逻辑。(4) 没有空行/注释的代码:不会用段落,不会写注释,肯定不是好的程序员

4.7 代码评审的注意事项

(1) 建立ower制度:所有提交的代码,必须由ower做最终确认;很多问题来源于“责任不明确”。(2) 综合多种沟通机制:yes:面对面的沟通;提供设计文档;提交代码评审评论;no: 直接大规模评审会;仅口头沟通。(3) 不放过任何一行代码:问题:只看大问题,不管小问题;推荐:对评审中发现的问题,一追到底。

5 技术的心法

5.1 如何发现问题

(1) 问题的发现常常需要经验,尤其是方向的指出。(2) 写综述(survey),是一个很好的锻炼方法。(3) 从自己的亲身体会去发现问题。

(4) 要有挑战权威的精神,别人说的不一定是对的。

(5) 一定不要有“想当然”的思想,书本上的不一定是正确的。

(6) 没有任何事情是完美的,实际工程中经常做“trade off”。

5.2 如何分析问题

(1) 概念(砖块):问题首先要有准确定义(正名);概念是大家的共识,是进行科学交流的基础;在搞清概念的过程中,也能发现机会。(2) 逻辑(水泥):分析问题应言之有理,让人信服。(3) 分而治之:大问题(无从下手)=>小问题(能够处理);细分和专业化是人类社会发展的趋势。(4) 分类和比较:在过程中加深认识。(5) 注意联系:问题之间的联系也包含信息;揭示事物之间的联系也很有意义。

5.3 如何解决问题

(1) 先解决重要问题:精力有限:不可能彻底解决所有问题;列出问题,然后再排序。(2) 保持聚焦:在一定的阶段,要keep focus。(3) 先易后难:解决简单问题=>解决复杂问题;模型方法:对问题进行简化

(4) 一般的过程:发现问题,分析问题,解决问题。

一流高手提问题,二流高手解问题,三流高手炒问题(炒冷饭)最后的最后,好好学习,天天向上,行胜于言,与君共勉。

感谢关注微信公众号“芯片验证日记”,我们一起学习。

审核编辑黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6876

    浏览量

    88805
  • 代码
    +关注

    关注

    30

    文章

    4742

    浏览量

    68330
收藏 人收藏

    评论

    相关推荐

    温元件有哪些 温传感器的工作原理是什么

    温元件和温传感器在温度测量和控制中起着至关重要的作用。下面将介绍几种常见的温元件以及温传感器的工作原理。 一、温元件
    的头像 发表于 10-06 16:26 527次阅读

    有点科技

    金属外壳+压力传感器,好有科技,一定要体验体验!
    发表于 09-13 22:26

    如何解决电感的漏问题

    电子发烧友网站提供《如何解决电感的漏问题.docx》资料免费下载
    发表于 09-02 14:48 0次下载

    和金晨一起感受三星电视的“六”魅力,开启神愈之旅!

    近日,三星“六之神”电视战略发布会成功举行。三星电视凭借在音画质、设计、安全性、智能与可持续等领域的全方位技术优势赋能视觉显示产品,为用户带来了多元沉浸式视听娱乐享受,并通过与艺术家合作打造六大
    的头像 发表于 08-23 14:30 508次阅读

    以全方位优势塑造未来家居生活愿景:三星“六之神”电视战略发布会盛启

    科技和艺术的融合,为用户带来了多元沉浸式视听娱乐享受,并通过六大功能展示区带来超凡的治愈。以先进产品和创新解决方案引领行业发展潮流的同时,让家居艺术渲染力为公共城市空间注入能量,呈现出具有科技力、创新力与生命力的未来家居生活形
    的头像 发表于 08-20 15:27 556次阅读

    TDC1011面向液位测、浓度测应用的单通道超声波测模拟前端(AFE)数据表

    电子发烧友网站提供《TDC1011面向液位测、浓度测应用的单通道超声波测模拟前端(AFE)数据表.pdf》资料免费下载
    发表于 08-15 09:48 0次下载
    TDC1011面向液位<b class='flag-5'>感</b>测、浓度<b class='flag-5'>感</b>测应用的单通道超声波<b class='flag-5'>感</b>测模拟前端(AFE)数据表

    TDC1011-Q1面向液位测、浓度测应用的单通道超声波测模拟前端(AFE)数据表

    电子发烧友网站提供《TDC1011-Q1面向液位测、浓度测应用的单通道超声波测模拟前端(AFE)数据表.pdf》资料免费下载
    发表于 08-15 09:47 0次下载
    TDC1011-Q1面向液位<b class='flag-5'>感</b>测、浓度<b class='flag-5'>感</b>测应用的单通道超声波<b class='flag-5'>感</b>测模拟前端(AFE)数据表

    京东方顶尖显示技术产品闪耀法国装饰艺术博物馆

    ,BOE(京东方)作为该展项的显示技术合作伙伴,通过画屏、万境屏、大尺寸8K超高清显示屏等一系列顶尖显示技术产品为中外观众带来一场极具沉浸、互动性的传统文化影像艺术级视觉盛宴,在2024夏季顶级体育盛会举办前期,向全世界呈现中国千年的灿烂文化和最前卫的当代
    的头像 发表于 07-19 09:31 520次阅读

    TCL推出第三代艺术电视A300系列

    7月17日,TCL隆重推出了其第三代艺术电视A300系列,该系列以融合前沿科技与艺术创作为核心亮点,特别引入了Ai绘画大模型技术,用户仅需简单设定三个关键词,系统便能在短短3秒内自动生成一幅个性化的艺术画作,展现了科技与
    的头像 发表于 07-18 16:36 546次阅读

    燧原科技助力天津美术学院共探人工智能艺术设计未来

            近日,天津美术学院设计艺术学院(简称:天美设计艺术学院)隆重举行了“AIGC人工智能设计产教融合研究中心”的揭牌仪式。该中心的成立标志着以上海燧原科技股份有限公司(简称:燧
    的头像 发表于 06-24 16:58 861次阅读

    AIGC是什么?对艺术设计学、视觉传达设计、数字媒体艺术等专业的影响

    的方方面面。AIGC通过利用先进的算法和模型,能够自动生成各种形式的内容,如图像、文本、音频和视频等,极大地丰富了内容的创作和呈现方式。对于艺术设计学、视觉传达设计、数字媒体艺术等专业而言,AIGC的崛起无疑带来了深远的影响。 AIGC是什么 AIGC是人工智能技术与内容
    的头像 发表于 06-24 13:40 744次阅读

    考勤是什么意思

    考勤的含义及应用1.无考勤的基本概念无考勤是一种新兴的考勤方式,它通过自动化和人工智能技术,实现对员工出勤情况的自动记录和统计,省去了传统考勤的繁琐步骤,提高了工作效率。具体来说,无
    的头像 发表于 05-17 10:59 673次阅读
    无<b class='flag-5'>感</b>考勤是什么意思

    【换道赛车:新能源汽车的中国道路 | 阅读体验】 A 序

    怎样的影响? 国内外汽车企业的发展历程和经验教训带给我们怎样的思考? 我国新能源汽车为什么能够实现突破从而领先世界? 我国新能源汽车产业未来提升的最大瓶颈和障碍是什么? 希望这样的探讨对读者有所启发。 接下来将用2篇观后感来分别解答这几个问题,以及最后一篇整体观感。
    发表于 03-12 23:05

    数字电桥如何测量漏

    数字电桥如何测量漏? 数字电桥是一种测量电阻、电容和电感的仪器。在测量电感时,我们可以通过数字电桥来测量漏值。 一、原理 漏是指电感元件中的磁通线朝向与所期望的方向不一致,导致漏磁流量的存在
    的头像 发表于 12-21 14:29 1395次阅读

    如何利用LiDAR实现深度

    如何利用LiDAR实现深度
    的头像 发表于 12-06 16:19 558次阅读
    如何利用LiDAR实现深度<b class='flag-5'>感</b>测