《代码的艺术》笔记

代码的艺术(百度BFE团队_章淼) 代码的艺术(百度BFE团队_章淼).2017年3月9日发布的,很不错的资料. 立即下载

title: 《代码的艺术》笔记
date: 2020-02-22 22:20:35
categories:

  • 代码
    tags:
  • 整理

这周,看了下章淼老师的视频,写个笔记,做一些整理。微信公众号:章老师说,也可以关注了解下。个人感觉蛮好。

结合自身,我是软件工程专业毕业,理解软件工程师不等于码农,也不等同于程序员。举个例子,建房子,可以是平房也可以大厦,做个普通的平房一般的泥瓦匠可以完成,而摩天大楼则不光需要泥瓦工,还需要建筑设计师。这些设计师的图纸,既要满足功能性需求,也要有美感的要求。类比而言,软件工程师,需要思考得更加全面,而非仅仅是某个单一功能是如何完成的。虽然个人不喜欢夸夸其谈什么系统架构,但是视频中章老师谈及到系统架构,所以这里将其中有意思的部分分享出来。

系统架构是什么?

wiki定义

A system architecture is the conceptual model that defines the structure, behavior,and more views of a system.

系统架构描述的几个要素
  • 静

    系统是如何组成,功能在这些组成部分之间是如何划分的。(这里如果想划分合理更像是领域驱动设计)

  • 动

    各个系统如何联动,如何完成任务/流程。(系统子模块如何协作与交互)。

  • 细

    不同的角度,更详细的刻画系统的全貌。(我理解是子模块内部是如何运作的,细化到方法)。

系统架构在不同层次的体现
  • 总体设计
  • 模块设计
系统设计的方法(要求)
  1. 每个组件/模块的功能都应该足够专注和单一。(软件设计的单一职责原则)
  2. 子系统/模块 关系简单清晰。(高内聚、低耦合)
  3. 需求是系统设计决策的来源。(这里,我觉得软件工程师,不光得逻辑好,而且语文(哲学)也得好)
    • 在设计中,经常要做trade-off
    • 需求是决策的重要依据。
  4. 模型/抽象的思维能力。
    • 思考的重点:概念、模型、数据结构、算法。
    • 需要脱离开代码的细节:函数、语言。(看到这里,想起来我实习的时候,带我的老阿里,他和我说,设计的时候不要想细节如何完成,因为详细设计里会有而且肯定可以实现。我想起,读书阶段看到的一个例子,比如说系统设计的时候,某个同学出门,不需要思考到他是如何出门的,是拉开门还是推开门还是别人帮忙用钥匙开门。)
延伸阅读(很赞!)
  • 来自Google的3大系统的经典论文
    • GFS
    • BigTable
    • MapReduce
  • 关注点
    • 如何描述问题和出发点
    • 如何描述模型
    • 如何描述系统设计
  • 这里我只能记录个Action。因为上面的文章我也没有阅读过,后续读完也会写出来。

谈谈代码

代码是写给人看的,好的代码可以清晰的反应业务流程、设计思路。近期看了一些代码,憋出内伤,业务service里写大量的set变量,冲淡了真正的业务逻辑。Don’t make me think!

写程序是以数据为中心考虑,封装数据是一种必要的能力。我看到有的方法数据很难扩展,一个方法入参高达6、7个。

三个误区
  1. 所有代码放在一个模块,是因为规模太小。

    反驳:切分模块的原则和代码规模没有关系。

  2. 所有附加功能放到util包里。

    反驳:util的存在和模块划分的原则是矛盾的,至少要细化到fileUtil的粒度。

  3. 从“过程”的角度出发考虑模块的划分

    反驳:首先从数据的角度考虑。

写好程序的秘诀

  1. Bug往往出现在非常长的函数(方法)里。《代码整洁之道》中说,方法长度越短,生命周期越长。
  2. 出现危险的根源,往往是过于自信

怎样修炼成为优秀的软件工程师?

一名优秀的软件工程师,是我的短期目标。章老师的分享里是这么写的。

一个好的软件工程师和以下因素没有必然联系。

  • 写过多少年的程序
  • 写了多少行代码
  • 曾经在哪里上学、在哪里工作。

以下三个方面(当然,个人觉得有点大,需要落实的Action,不然很容易流于形式)

  • 学习-思考-实践
  • 知识-方法-精神
  • 基础乃治学之根本(看来我还要再翻翻《Java编程思想》)

附录:延伸阅读中的文章

链接:https://pan.baidu.com/s/17Dc2VjWVkyL0iA51D4aUMA 密码:x1o8

最后,感谢章老师的分享。

编写可读代码的艺术-完整版(带书签)_可读代码_ 编写可读代码的艺术-完整版(带书签),PDF文档,字数字数字数字数字数 立即下载

相关推荐

自动驾驶仿真:基于Carsim开发的加速度请求模型

1、自动驾驶行业中,算法端对于纵向控制的功能预留接口基本都是加速度,我们需要给控制器仿真加速度的信号,控制器才会实现对纵向功能的控制。2、Carsim或者其他动力学软件,主要提供者节气门开度和主缸压力进行控制。我们在进行联合仿真时,往往都要通过PID的方式将请求加速度转换成对应的节气门开度与主缸压力传给动力学软件进行闭环控制。

zataji的博客 6914

代码的艺术

代码的艺术 百度技术学院-代码的艺术_章淼 课程导入 希望能够让大家对Software Engineer(软件工程师) 有更新的认识; 建立正确的意识; 明确修炼的方向。 写代码,学校和公司有很大的不同 学校:作业?实验室的项目? 公司:工业级的产品 所以,需要提供更高质量的代码 消除误解 程序员!=码农 建立正确的意识 知和行,哪个更重要? ...

山华水清的博客 2913

Axure RP 9在Windows 11环境下的高效安装与配置指南

本文提供Axure RP 9在Windows 11系统下的详细安装步骤与配置指南。针对Win11安全特性,从获取官方安装资源、调整系统权限,到定制化安装路径、精准汉化及性能优化,系统性地解决了安装闪退、汉化失败、运行卡顿等常见问题,确保用户获得稳定流畅的原型设计体验。

mango的博客 480

编程,不止有代码,还有艺术

在代码的世界中,是存在很多艺术般的写法,这可能也是部分程序员追求编程这项事业的内在动力。

华为云官方博客 1828

CGNS快速入门到实战(二):VS配置调用CGNS静态链接库

CGNS快速入门到实战这一系列分成三篇文章展开叙述,具体有:(一)CGNS静态链接库编译;(二)VS配置调用CGNS静态链接库;(三)CGNS文件及案例展示。本篇文章重点讲述VS配置调用CGNS静态链接库。

ahang_99的博客 2616

信号输入到底要不要接GND?单端与差分输入的接地选择与抗干扰分析

在电子工程与工业现场中,接地是信号完整性的基石。电压本身是相对值,任何测量都需要一个公共参考点,这就是地(GND)在信号输入中的核心作用。单端输入依赖信号源与接收端共地,以GND为基准还原信号;差分输入则直接测量两根信号线之间的差值,天然不依赖本地地电位,因此能有效抑制共模干扰和地环路噪声。实际选型时,需要根据传感器类型、传输距离、地电位差大小权衡:短距离共地良好的场景可用单端,长距离或高干扰环境应优先考虑差分或隔离方案。本文从接地原理出发,结合实际接线与故障排查经验,帮助工程师在PLC、采集卡和传感器链路

weixin_28703507的博客 311

《编写可读代码的艺术》笔记

概述: 编写程序,如何让程序持续可维护是一项难题。通过对代码的可读性优化,可以让程序变得相对容易维护一些。因此,我们有必要研究研究代码的可读性。《编写可读代码的艺术》这本书读起来感觉不错。花了大半天的时间通读了一遍,随手做了些笔记,当做学习的一部分。有兴趣读的朋友可以在文末免费获取该书的电子档。 以下为通读笔记: 总的来说,目标只有一个—让代码变得易于理解(可读性基本定理)基于此扩展出其他详...

csdn_hhg的博客 362

嵌入式工程师成长之路(0)----认识元件

在电子设计与维修中,认识元件是成功的关键!面对琳琅满目的电阻、电容、电感与二极管,样子形式千奇百怪,你是否也曾陷入困难? 本文基于行业权威分类标准,结合十年工程师实战经验,深度解析4大类、30+子类电子元件的核心特性、应用场景与避坑指南,助你从“小白”秒变“电子高手”!

云轩阁 11万+

《编写可读代码的艺术》读书笔记

编写可读代码的艺术的读书笔记,整理了一个脑图~很全很完整

azalea713的博客 107

基于自适应小波阈值算法的图像去噪

自适应小波阈值算法是一种基于小波变换的方法,它相对于传统的小波阈值去噪方法具有更好的性能和鲁棒性。该算法首先对图像进行小波变换,然后根据小波系数的大小确定一个自适应的阈值,将小波系数与阈值进行比较,大于阈值的系数被保留,小于阈值的系数被置零。在上述代码中,首先选取了小波函数sym4进行小波分解,然后根据标准差计算出阈值,使用wthresh函数进行阈值处理,最后进行反变换得到处理后的图像。该GUI界面与前面的自适应小波阈值算法代码结合,实现了图像的去噪,并提供了可视化的效果。

与其临渊羡鱼,不如退而结网 558

CesiumForUnreal实现鹰眼地图(MiniMap)效果

CesiumForUnreal实现鹰眼地图(MiniMap)效果

专注GIS开发 3951

编写可读代码的艺术(阅读笔记)

编写可读代码的艺术(阅读笔记) 表面层次的改进 把信息装到名字 选择专业的名字。避免泛泛的名字(好的名字应该描述变量的目的)。具体代替抽象。使用前缀或者后缀。丢掉没用的词。 名字长度?小作用域使用短的名字。如果是大作用域,名字就需要包含足够多的信息。 名字不要引起误解 bool变量可以用is, has,can,should。 名字要符合使用者的期待。轻量级就要对应轻量级的期待。 审美 使...

upc_giser的博客 358

vue3 - 最新详细实现高德地图绘制动态热力图详细教程,在某区域或城市地图上做“热力图层“展示人流量、旅游人口密度、热量图、全国地区地理热力图,利用颜色的深浅表示密度或强度等场景(详细示例代码教程)

vue3,nuxt3,高德地图,热力图,绘制热力图层,人流量,vue3使用高德地图实现某个区域热力图,vue3高德地图api加载热力图及关闭,接收热力图数据并渲染热力图,关掉热力图,Vue使用高德API制作热力图,热力图加载不出来,电子围栏围住热力图,vue3中使用高德地图渲染热力图组件,高德地图使用热力图详细教程,报错,卡顿,出不来怎么办,无法关闭,怎么解决这个问题,出错,城市名称,城市某个街道,城区,省份,市区,县城,乡镇,村,各省份的热力图,交通流量,人口流量,密度,旅游出行,人口数量,颜色介绍,深浅

✅ 精选推荐文章 5204

【笔记】编写可读代码的艺术

本文为阅读《编写可读代码的艺术》的笔记,阅读原书请移步我的资源下载区 如何给变量/函数命名? 1.选专业的词,如使用DownloadPage/FetchPage替换GetPage 2.避免tmp等泛泛的词 3.循环迭代器变量的命名 metrics[mi].user[uj].name[nk] 4.避免抽象的名称 ServerCanStart()换成CanListenOnPort() 5....

路漫漫其修远兮 316

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

读书笔记 - 修改代码的艺术

在某些语言中,我们可以在一个地方声明一种类型,然后在另一个地方定义它。这种特性最明显的语言就是C和C++。在这两种语言中,我们可以在一个地方声明一个函数或方法,而在其他地方对其进行定义,通常那会是在实现文件中。当语言有这种能力的时候,我们就可以使用它来打破依赖。确定一个类,其中有你想要替换的定义。确认方法定义位于源代码文件中,而不是头文件中,如果方法定义在头文件中,就将它移至源代码文件中。在你要测试的类的测试源文件中包含头文件。确认类的源文件并不是构建的一部分。构建,找到遗漏的方法。

qiushily2030的博客 1080

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

阅读《编写可读代码的艺术》笔记

阅读《编写可读代码的艺术》笔记 第一部分 第一章 可读性基本定理:代码的写法应当使别人理解它做需要的时间最小化; 即使代码需要高度优化,还是有办法可以让代码可读性更高。可读性好,会让你的架构变好且便于测试。 把可读性放在其他目标前面。 表面层次的改进:选择好的名字,写好的注释以及把代码整洁地写成更好的格式。 第二章 把信息装到...

weixin_30501857的博客 79

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

《修改代码的艺术》 读书笔记

《修改代码的艺术》 读书笔记第16章 对代码理解不够 所以无法修改 接触不熟悉的代码,特别是遗留代码,会让我们如履薄冰。随着时间推移,一些人会对这种恐惧相对免疫。如果你理解为了修改代码而需要知道的一切,情况会好许多。那我们如何才能理解呢? 一 做笔记,画草图 写下你看到的重要内容的名称,然后记录下重要内容的名称。如果看到二者之间的联系,那么就画条线。 二 列表标记 1.

开发分享交流 940

《代码的艺术》学习笔记

需求分析和系统设计 需求分析: 定义系统/软件黑盒的行为(external what) 需求需要用精确的数字来进行刻画 系统设计: 设计系统/软件白盒的机制(internal how& why) trade-off ...

marywang56的专栏 540

编写可读代码的艺术 读书笔记

编写可读代码的艺术 书名:编写可读代码的艺术 作者:Dustin Boswell & Trevor Foucher 译者:尹哲,郑秀雯 主要内容: 简化命名、注释和格式的方法,使每行代码都言简意赅。 梳理程序中的循环、逻辑和变量来减少复杂度并理清思路。 在函数级别解决问题,例如重新组织代码块,使其一次只做一件事。 编写有效的测试代码,使其全面而简洁,同时可读性更高。 前言 可读性基本定理:代码的写法应当使别人理解它所需的时间最小化。 第一部分 表面层级的改进 把信息装在名字里 关键思想 无论

努力推石头的西西弗斯 531

《编写可读代码的艺术》的读书笔记 (脑图)

《编写可读代码的艺术》的读书笔记 (脑图) 转载于:https://www.cnblogs.com/gyc567/p/7265461.html

weixin_30463341的博客 126

编写可读代码的艺术——阅读笔记

编写可读代码的艺术 代码应该易于理解 代码的写法应当使别人理解它所需的时间最小化 表面层次的改进 把信息封装到名字里 选择专业的词,避免使用“空洞”的词 找更有表现力的词,清晰和精确 避免像tmp和retval这样泛泛的名字 循环迭代器 用具体的名字代替抽象的名字,一个变量名就像是一个小小的注释 带单位的值 附带其他重要属性 名字应该有多长 在小的作用域里可以用短的名字 一个标识符有较大的...

Clare Tung 475
上一篇: 来上海三周找工作小总结(Java)
下一篇: Flume快速上手&原理讲解
chengshuo678
博客等级 码龄14年 5粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值