建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
直达楼层
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

采纳成功

您已采纳当前回复为最佳回复
发表于2020年08月04日 15:30:44
直达本楼层的链接
31#
显示全部楼层

华为云账号:hw07606522

微信昵称:salad

微信账号:sela001


                                                 程序员修炼之道:通向务实的最高境界-编程软件的认知 day2


         今天观看董老师的读书分享,主题是 编程软件的认知,主要讲了编程之前要准备的工具:纯文本、shell、编辑器、版本控制、调试等,还有编程主要用到的方法及思想:契约设计、断言式编程、解耦、变换式编程、接口表达多态、使用外部配置化应用程序等,特别是 断言式编程 使用断言去预防不可能的事情,变换式编程,原来没有听说过这种概念,通过分享,了解了整个概念,所有程序都是在变换数据, 不要囤积状态,传递下去。第二天的分享内容很丰富,从编程准备阶段到编程开始阶段分享了很多实用的工具和方法,对后面的编程提供了很多帮助,对于实际编程来说,思想尤为重要,可以让我们的代码变得更好,解耦 代码让代码更容易,让我们扩展 修改 代码更方便容易,不要从对象中取出值,在加以变换后塞回去,让对象自己来完成这些工作,这个思想以前没有接触,通过学习,感觉编程的思想得到了扩展,打开了一扇新的大门。

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

小野猪

发帖: 4粉丝: 6

发消息 + 关注

发表于2020年08月04日 15:41:40
直达本楼层的链接
32#
显示全部楼层

华为云ID:wanggui001

微信ID: dongsheng1094375147

读书笔记Day02:编程软件的认知

一、软件编程的基础工具

1、纯文本的威力

好记性不如烂笔头,用文本记录工作学习中的所得,永远不会过时;

使用文本编辑工具,高效开发和调试程序,简化工作方式;

2、Shell游戏

图形化界面是给用户提供的,降低用户操作难度,方便用户操作,其实质还是各种不同的命令;

使用Shell命令行能够事半功倍。

3、加强编辑能力

编辑器作为程序开发的工具,必须趁手,选择一款适合自己的编辑器,然后研究透彻,就好比古代剑客找到一把社和自己的宝剑一样,面对任何问题都能游刃有余;

磨刀不误砍柴工,有了趁手的编程工具,任何时候都有底气;

4、版本控制

产品的迭代就是版本的升级,回退版本让我们能够无惧任何挑战,尝试解决问题如果实在走不通,还能回退到上个版本,不至于回到最初始的一无所有状态;

5、调试

去解决问题,而不是责备、发现问题后主要精力应该是如何去解决问题,而不是责备。bug到底来自你的失误还是别人的失误,真的不重要,它终究是你的问题,需要你来修复;

不要恐慌、任何时候心态都要稳,无论什么问题都不要恐惧,是问题总会有解决的办法;

修代码前先让代码在测试中失败、修bug前,先创建一个聚焦于该bug的测试,bug重现;

读一下哪些该死的出错信息、报错信息是最直观的线索,细心一点总能发现更有价值的线索,大多数异常都能告诉出错的原因,甚至能得到具体的参数;

“select”没出问题 在操作系统或编译器中发现bug非常罕见,甚至第三方产品或库也是如此,bug大多出现在应用程序中;

不要假设,要证明、在真实环境中证实你的假设,要依赖真实的数据集;

6、文本处理

学会借助计算机的力量帮助分担工作,降低工作强度,比如复杂的计算完全没必要自己来做,计算机来做这种事更适合;

7、工程日记

一方面产品的开发需要随时做好工程日记,记录开发完成的情况,此外个人也需要通过日记的方式记录工作中的比较复杂问题的处理方式,后期用作借鉴;

8、契约式设计

使用契约加以校验和文档化,严格约束代码的运行,避免代码运行进入意料之外的场景,造成产品的功能性问题;

9、死掉的程序不会说谎

暴露出来的问题不可怕,可怕的是隐藏的那些问题,你永远不知道它在哪里,什么时间会突然跳出来给你致命一击;

10、断言式设计

通过假设来确保程序运行不会进入意料之外的逻辑,通过添加报错信息,当程序进入意料之外时即使报错,保护程序运行;

使用断言去预防不可能的事情,断言在校验你的假设,使用断言在不确定的世界中将你的代码保护起来;

11、如何保护资源的平衡

对资源分配的函数或对象,有责任去释放该资源;

12、不要冲出前灯范围

由始至终稳扎稳打,不断检查反馈并实时进行调整改进计划,只在你能看到的范围内做计划;

13、解耦

解耦代码让改变更容易,避免后续改变牵一发动全身,将程序独立成组件,方便复用以及后期优化;

只管命令不要询问;

不要链式调用方法;

避免全局数据;

如果全局唯一非常重要,那么将它包装到AP中,但是仅限于你真的非常希望它是全局的;

14、在现实世界中抛球杂耍

此处讲师讲的不是很明白,我个人理解是不是想说现实工作中大家互相甩锅的恶习;

15、变换式编程

编程讲的是代码,而程序谈的是数据,作为开发者既要能够书写优秀的代码,还要能够处理各种各样的数据;目标就是实现设计的业务;

所有的程序都在变换数据——将输入转换为输出。开始用变换方法来设计吧;

不要囤积状态,传递下去、不要把数据保持在函数或模块的内部,拿出来传递下去,让数据像河水一样源源不绝的流入到下个环节,避免某个模块因数据而阻塞功能;

16、继承税

不要付继承税、考虑一下能更好满足需求的替代方案,比如接口、委托或mixin;

尽量用接口来表达多态、无需继承引入的耦合,接口就能明确描述多态性;

用委托提供服务:“有一个”胜过“是一个”、不要从服务中心继承,应该包含服务;

利用mixin共享功能、mixin不必承担继承税就可以给类添加功能,而与接口结合可以让多态不再令人痛苦;

感觉讲师就是在照着书读,没领会此处;

17、配置

使用外部配置参数化应用程序、如果应用程序发布后,还有可能改变的值,用外部参数来维护。


点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

倪齐齐

发帖: 8粉丝: 2

发消息 + 关注

发表于2020年08月04日 16:04:03
直达本楼层的链接
33#
显示全部楼层

程序员修炼之道day02

华为云账号:niqiqi

微信昵称:倪齐齐


 程序员修炼之道


软件编程的基础工具

16、纯文本的威力

纯文本的好处:保证不过时;杠杆作用;更易于测试。

17、Shell游戏

GUI的好处是WYSIWYG,所见即所得;缺点是WYSIAYG,所见即全部所得。任何一样工具的适用范围都局限于该工具预期要完成的任务。

18、加强编辑能力

语法突显非常有用;能够在编辑器环境中进行编译,并直接转到出错处非常方便;自动缩进是另一种有用的特性,编辑器在比如敲入左花括号时                        为你进行缩进。

19、版本控制

源码控制系统(sccs)能做的远比撤销错误要多。好的sccs让你追踪变动。

20、调试

当你遇到让人吃惊的bug时,除了知识修正它以外,你还需要确定先前为什么没有找出这个故障。

                务实的偏执

21、文本处理

学习一种文本操纵语言,比如说perl。

22、工程日记

软件不可能完美,要尽量保护用户以及代码免收影响。

23、契约式设计

不多不少,做它声明要做的事情的程序就是正确的程序。

24、死掉的程序不会说谎

尽早检测问题的好处之一是你可以更早崩溃。而有许多时候,让你的程序崩溃是你的最佳选择。

25、断言式编程

不要用断言代替真正的错误处理,因为断言检查的是绝不应该发生的事情。

26、保持资源平衡

27、不要冲出前灯范围

28、解耦

29、 在现实世界中抛球杂要。

宁弯不曲

30、变换式编程

31、继承税

32、配置



点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

power11

发帖: 75粉丝: 0

发消息 + 关注

发表于2020年08月04日 16:33:05
直达本楼层的链接
34#
显示全部楼层

微信昵称:power

华为云账号:power11

《程序员修炼之道:通向务实的最高境界》——读书笔记Day02:编程软件的认知

一、软件编程基础工具

1、纯文本型(不会过时,简化调试和测试)

①将知识用纯文本保存

2shell游戏型

①发挥shell命令的威力

3、编辑能力(更快更准确实现需求)

①游刃有余地使用编辑器

4、版本控制

①永远使用版本控制

5、调试(遇到bug不要慌,不要责备,要去证明错误,改正错误)

①去解决问题,而不是责备

②不要恐慌

③修改代码前先让代码在测试中失败

④读一下那些该死的出错信息

⑤“select”没出问题

⑥不要假设,要证明

方法:二分法、排除法、输出日志

二、务实的偏执

1、文本处理

①学习一门文本处理语言

2、工程日记

①你无法写出完美的软件

3、契约式设计

①通过契约进行设计

4、死掉的程序不会说谎(死掉的程序比缺陷程序造成额危害要小)

①今早崩溃

5、断言式设计

①使用断言去预防不可能的事情

6、保持资源平衡

①有始有终

7、小步前进(小步前进,及时检查反馈)

①小步前进,有始至终,在看到的范围内做计划

三、宁弯不曲

1、解耦

①解耦代码让改变更容易

②只管命令不要询问

③不要链式调用方法

④避免全局数据

⑤如果全局唯一非常重要,那么将他包装到AP中,但是,仅限于你真的非常希望他是全局

2、抛球杂耍

3、变换式编程

①编程讲的是代码,而程序谈的是数据

②不要囤积状态,传递下去

4、继承税

①不要付继承税

②尽量用多口来表达多态

③用委托提供服务:“有一个”胜过“是一个”

④利用mixin共享功能

5、配置

①使用外部配置参数化应用程序


点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

cl4690

发帖: 6粉丝: 0

发消息 + 关注

发表于2020年08月04日 16:54:05
直达本楼层的链接
35#
显示全部楼层

《程序员修炼之道:通向务实的最高境界》day2读书笔记

华为云账号:cl4690

微信昵称:禄仁恝


    今天的主题是《软件编程认知》, 这个内容主要分为3大块, 17个小分类. 3大类主要讲述的是

软件编程的基础工具, 务实的偏执和宁弯不曲.

    工欲善其事, 必先利其器. 所以软件编程的基础工具就显得尤为重要, 其中文本是不可忽视的, 

好记性不如烂笔头. 在编程时还需要顺手的编辑器, 这个真是会事半功倍, 深有体会. 大学学习Java

时, 老师是先从记事本教起, 熟练后再使用ide, 感觉真是爬和跑的区别. 这就是工具的优势. 还有

就是用shell处理某些任务, 我用MobaXterm来模拟使用shell命令去处理win下的某些问题, 比起

win的Gui确实方便许多. 版本控制作为一个基础工具, 提供时间轴, 能回到过去. 这个我很惭愧, 

因为自己这方面知识不足而深受其扰, 恩, 看来得加强版本控制的学习了. 

    务实的偏执中感受最深的是文本处理, 断言式编程和不要冲出前灯范围. 会几种文本处理工具

能提高自己的文本处理效率, 断言式编程和调试我感觉可以放在一块, 即断言式编程, 证明式测试.

不要冲出前灯范围主要是小步前进, 及时调整. 这个是我没有想到的, 但挺有用. 因为吃过这方面

的亏, 当时就是解决完就完了, 没有深思总结. 在这直接看到, 牢记吧.

    宁弯不曲这块我就理解解耦, 其中有点是跟昨天的etc思想是一样的.

    总结, 今天学的东西不少, 消化起来还是有些吃力, 主要是有些自己没有接触了解过, 就

没有对应的体验. 还有一种原因可能是老师挑的是重点精华来讲述的, 抛除了书中有些具体的例子支

持, 就显得有些许生涩, 也可能是我功力不够吧, 哈哈. 看来不仅需要老师的领读, 也需要自己拜读

原著, 师傅领进门, 修行在个人嘛.


点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

Breeze-20

发帖: 0粉丝: 0

发消息 + 关注

发表于2020年08月04日 17:07:40
直达本楼层的链接
36#
显示全部楼层

微信昵称:晨风

华为云ID:hw20362803

软件编程哲学

务实的哲学

1、人生是你的

你有权选择

人生是你自己的。把握住人生,让它如你所愿。

2、我的源码被猫吃了

提供选择,别找借口

提供选择而不是去找理由,不要只说做不到;解释一下都能做些什么。

3、软件的熵

不要放任破窗

只要看到不好的设计、错误的决策、糟糕的代码,就赶紧去纠正。

4、石头做的汤和煮熟的青蛙

做推动变革的催化剂

你无法强迫人们去改变,但可以展示美好未来,并帮助他们参与创造。

牢记全景

不要过度沉浸于细枝末节,以免察觉不到周围正在发生的事情。

5、够好即可的软件

将质量要求视为需求问题

让用户参与对项目真实质量需求的确定

6、知识结合

对知识组合做定期投资

养成学习的习惯。

批判性地分析你读到和听到的东西

不要受供应商、媒体炒作或教条的影响,根据自身和项目的实际情况来分析信息

7、交流!

英语就是另一门编程语言

将英语视作一门编程语言。写文档和变成一样要遵循DRY原则、ETC、自动化等。

说什么和怎么说同样重要

如果无法有效交流,任何伟大的想法都是没有意义的。

把文档嵌进去,而不要栓在表面

与代码隔离的文档,很难保持正确并及时更新。

8、优秀设计的精髓

优秀的设计比糟糕的设计更容易变更

适用使用者的事物,都已经过良好设计。对代码来说,这意味着必须适应变化。

务实的方法

9、DRY**的重复

DRY不要重复自己

系统中的每一条知识,都必须有单一且无歧义的权威陈述。

让复用变得更容易

只要复用方便,人们就会去做。创建一个支持复用的环境。

10、正交性

消除不相关事物之间的影响

设计的组件,需要自成一体、独立自主,由单一的清晰定义的意图。

11、可逆性

不设最终决定

不要把决定刻在石头上,而要将其视为写在沙滩上的东西,时刻准备应变。

放弃追逐时尚

尼尔福特说过:“昨日之最佳实践,即明日之反模式。”要基于基本原则去选择架构,而不盲从于流行。

12、曳光弹

使用曳光弹找到目标

通过不断尝试并看清着弹点,曳光弹可确保你最终集中目标。

13、原型与便签

用原型学习

制作原型旨在学习经验,其价值不在于过程中的产生代码,而在于得到的教训。

14、领域语

靠近问题域编程

用问题领域的语音来做设计和编程。

15、估算

通过估算来避免意外

开始之前做估算,能提前发现潜在问题。

根据代码不断迭代进度表

利用实施过程中获得的经验来精细化项目的时间尺度。

Day1阅读总结

站在设计的视角,从软件务实的哲学和务实的方法两方面讲述了《程序员修炼之道》中的15条原则。

image.png

image.png

image.png

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

发帖: 148粉丝: 15

发消息 + 关注

发表于2020年08月04日 17:07:43
直达本楼层的链接
37#
显示全部楼层

Day 02 程序员修炼之道

华为云账号:be_dao

微信名:bēdao

Day 02 编程软件认知

17条

1.软件编程基础工具

(1)纯文本的威力

将知识用纯文本保存

纯文本不会过时。它将够让你的工事半功倍,并能简化调试和调试工作


(2)Shell游戏

发挥Shell命的威力

当图形化界面无法胜利时,使用Shell


(3)加强编辑能力

游刃有余地使用编辑器

既然编辑器是至关重要的工具,不妨碍了解一下如何用它更快更准。


(4)本本控制

永远使用版本控制

本本控制为你工作创造了一个时间机器,可以用它重返过去。


(5)调试

去解决问题,而不是责备

Bug到底来自你的失误还是别人的失误真的不重要它终究是你的问题,需要你来修复


不要恐慌

不管是对银河系搭客车,还是对开发者来说,都是这样。


修代码前让代码在测试中失败

在你修Bug前,先创建一个聚焦于该Bug的测试。


读一下那些该死的出错信息

大多数异常都能告诉失败之物与失败之处。如果足够幸运,你甚至能得到具体的参数值。


"select"没出问题

在操作系统或编译器中出现Bug非常罕见,甚至在第三方产品或库中也是如此。Bug大多出现在应用程序中


不要假设,要证明

在真实环境中证实你的假设一要依赖真实的数据集。


2.务实的偏执

(1)文本处理

学习一门文本处理语言

既然每天都要花大量的时间与文本打交道,何不让计算机帮计算机帮你分担一二?


(2)工程日志

你无法写出完美的软件

软件不可能是完美的。对于在说难免的错误,要保存代码和用户免受其影响。


(3)契约式设计

通过契约进行设计

代码是否不多不少刚好完成它宣称要做的事情,可以使用锲约加以校验和文档化。


(4)死掉的程序不会说谎

尽早崩溃

彻底死掉的程序通常比有缺陷的程序造成的损害要小。


(5)断言式编程

使用断言去预防不可能的事情

如果一件事情不可能发生,那么就用断言来确保其的确不会发生。断言在校验你的假设,要使用断言在不确定的世界中将你的代码保存起来。


(6)如何保持资源的平衡

有始有终

主要有可能,对资源进行分配的函数或对象就有责任去释放该资源

将易变的变量维持在一个范围内,打开资源的过程要短暂且明显可见。


(7)不要冲出前灯范围

小步前进由

由始至终

永远小步前进,不断检查反馈,并且在推进前做调整。

只在你能看到的范围内做计划。


3.宁弯不曲

(1)解耦

解耦代码让改变更容易

耦合使事务紧紧绑定在一起,以至于很难值改变其中之一


只管命令不要询问

不要从兑现中取出值,在加以变换后再塞回去,让对象自己来完成这些工作。


不要链式调用方法

当访问某事物时,使用的点号不要超过一个


避免全局数据

最好给每个方法在呢个价一个额外的参数


如果全局唯一非常重要,那么将它包装到AP中,但是,仅限于你真的非常希望它是全局的


(2)在现实世界中抛球杂要

不同状态之间有状态机,不同状态之间进行转换


(3)变换式编程

编程讲的是代码,而程序谈的是数据

所有的程序都在变换数据--将输入转换为输出。开始用变换式方法来设计吧


不要囤积状态,传递下去

不要把数据保持在函数或模块的内部,拿出来传递下去。


(4)继承税

不要付继承税

考虑一下能更好满足需求的提花方案,比如接口、委托或迷信mixin


尽量用接口来表达多态

无需继承引入的耦合,接口就能明确描述多态性。


用委托提供服务:”有一个“胜过”是一个“

不要从服务中继承,应该包括服务


利用mixin共享功能

mixin不必承担税就可以给类添加功能,而与接口结合可以让多态不再令人痛苦


(5)配置

使用外部配置参数化应用程序

如果代码对一些在应用程序发布后还能可能改变的值有所依赖,那么就在应用外部维护这些值。

4.总结

本章学习契约式设计、断言编程等,使我们学习到了在编程之前的准备,让我们更加深刻的认识编程,为后面开始编程做铺垫。




点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

dengfen

发帖: 0粉丝: 0

发消息 + 关注

发表于2020年08月04日 17:44:15
直达本楼层的链接
38#
显示全部楼层

华为云账号:dengfen 微信昵称:鑫少苍腾 DAY1《程序员修炼之道:通向务实的最高境界(第2版)》听课笔记: 这节课主要的内容是务实的哲学和务实的方法。其中务实的哲学讲了8个点,务实的方法讲了7个点。之前看到这个领读活动的时候我以为这个应该是讲编程的方法和技巧的,直到刚才我听完这节董老师讲解的这堂课,我才明白这本书不仅仅讲的是编程的原则和思考,这些原则也适用于处理生活中其他事情和问题,老师讲解课程简单易懂,讲的都是满满的干活,课程时长很短,内容却很精华,感谢华为举办这么好的活动,谢谢老师的领读,谢谢工作人员的辛苦付出。这是第一天的精读课程,期待明天的课程。下面是我对这节课内容的总结归纳:务实的哲学有8条,第1条 人生是你的,你有权选择人生是自己的,把握住人生,让他如你所愿。对这一条的感悟,自己的人生,要奋力去争取去拼搏去创造。第2条 我的源码被猫吃了 提供选择,别找借口,提供选择而不是去找理由,不要只说做不到,解释一下能做些什么。编程需要一颗严谨的心,遇见问题要学会正确思考,找到问题的根源,而不是简单的寻找借口。 第3条 软件的熵 不要放任何破窗 只要看到不好的设计、错误的决策、糟糕的代码,就赶紧去纠正。想要成为一名合格的程序员,优秀的程序员,对过程中出现的错误要零容忍,只有严格要求,才能做的更好。 第4条 石头做的汤和煮熟的青蛙 做推动变革的催化剂 你无法强迫人们去改变,但可以展示美好未来,并帮助他们参与创造。牢记全景,不要过度沉浸于细枝末节,以免察觉不到周围正在发生的事情。 第5条 够好即可的软件 将质量要求视为需求问题,让用户参与对项目真实质量需求的确定。 第6条 对知识组合做定期投资,养成学习的习惯 要时刻保持学习的心态,养成终生学习的习惯,紧跟时代步伐,更新自己的知识 第7条 交流 英语就是另一门编程语言 将英语视作一门编程语言。写文档和编程一样要遵循DRY原则、 ETC、 自动化等。说什么和怎么说同样重要 如果无法有效交流,任何伟大的想法都是没有意义的。把文档嵌进去,而不要栓在表面,与代码隔离的文档,很难保持正确并及时更新。第8条 优秀设计的精髓 优秀的设计比糟糕的设计更容易变更适合使用者的事物,都已经过良好设计。对代码来说,这意味着必须适应变化。务实的方法有7点: 第9条 DRY**的重复 不要重复自己,系统中的每一条知识,都必须有单一 且无歧 义的权威陈述。让复用变得更容易,只要复用方便,人们就会去做。创建一个支持复 用的环境。第10条 正交性 消除不相关事物之间的影响 设计的组件,需要自成一体、独立自主,有单一-的清晰定义的意图。第11条 可逆性 不设最终决定 不要把决定刻在石头上,而要将其视为写在沙滩上的东西,时刻准备应变。放弃追逐时尚 尼尔福特说过:”昨日之最佳实践,即明日之反模式。”要基于基本原则去选择架构 第12条 曳光弹 使用曳光弹找到目标,通过不断尝试并看清着弹点,曳光弹可确保你最终击中目标。第13条 原型与便签 用原型学习,制作原型旨在学习经验,其价值不在于过程中产生的代码,而在于得到的教训。第14条 领域语 靠近问题域编程,用问题领域的语言来做设计和编程。 第15条 估算 通过估算来避免意外,开始之前做估算,能提前发现潜在问题。根据代码不断迭代进度表,利用实施过程中获得的经验来精细化项目的时间尺度。董老师站在设计的视角,从软件务实的哲学和务实的方法两方面讲述了《程序员修炼之道的》中的15条原则,让我受益良多,更加坚定了我考研转换专业考软件工程的信心。

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

Breeze-20

发帖: 0粉丝: 0

发消息 + 关注

发表于2020年08月04日 17:54:30
直达本楼层的链接
39#
显示全部楼层

微信昵称:晨风

华为云ID:hw20362803

编程软件的认知

软件编程基础工具

1、纯文本的威力

将知识用纯文本保存

纯文本不会过时。它能够让你的工作事半功倍,并能简化调试和测试工作。

2、Shell游戏

发挥Shell的威力

当图形化界面无法胜任时,使用Shell。

3、加强编辑能力

游刃有余地使用编辑器

既然编辑器是至关重要的工具,不妨了解一下如何用它更快更准确地实现需求。

4、版本控制

永远使用版本控制

版本控制为你的工作哦创造了一个额时间机器,可以用它重返过去。

5、调试

去解决问题,而不是责备

Bug到底来自你的失误还是别人的失误真的不重要,它终究是你的问题,需要你来修复。

不要恐慌

不管是对银河系搭车客,还是对开发者来说,都应这样。

修代码前先让代码在测试中失败

在你修Bug前,先创建一个聚焦于该Bug的测试。

读一下那些出错信息

大多数异常都能告诉失败之物与失败之处。如果足够幸运,你甚至能得到具体的参数值。

“select”没出问题

在操作系统或编译器中发现Bug非常罕见,甚至在第三方产品或库中也是如此。Bug大多出现在应用程序中。

不要假设,要证明

在真实环境中证实你的假设——要依赖真实的数据集。

务实的偏执

1、文本处理

学习一门文本处理语言

既然每天都要花大量的时间与文本打交道,何不让计算机帮你分担一二?

2、工程日记

你无法写出完美的软件

软件不可能是完美的。对于在所难免的错误,要保护代码和用户免受其影响。

3、契约式设计

通过契约进行设计

代码是否不多不少刚好完成它宣称要做的事情,可以使用契约加以校验和文档化。

4、死掉的程序不会说谎

尽早崩溃

彻底死掉的程序通常比有缺陷的程序造成的损害要小

5、断言式编程

使用断言去预防不可能的事情

如果一件事情不可能发生,那么就用断言来确保其的确不会发生。断言在校验你的假设,要使用断言在不确定的世界中将你的代码保护起来

6、如何保持资源的平衡

有始有终

只要有可能,对资源进行分配的函数或对象就有责任去释放该资源。

在局部行动

将易变的变量维持在一个范围内,打开资源的过程要短暂且明显可见。

7、不要冲出前灯范围

小步前进由始至终

永远小步前进,不断检查反馈,并且在推进前先做调整

避免占卜

只在你能看到的范围内做计划

宁弯不曲

1、解耦

解耦代码让改变更容易

耦合使事物紧紧绑定在一起,以至于很难只改变其中之一

只管命令不要询问

不要从对象中取出值,在加以变换后再塞回去,让对象自己来完成这些工作。

不要链式调用方法

当访问某事物时,使用的点号不要超过一个

避免全局数据

最好给每个方法增加一个额外的参数

如果全局唯一非常重要,那么将它包装到AP中,但是,仅限于你真的非常希望它是全局的。

2、在现实世界中抛球杂耍

3、变换式编程

编程讲的是代码,而程序谈的是数据

所有的程序都在变换数据——将输入转换为输出,开始变换式方法来设计吧!

不要囤积状态,传递下去

不要把数据保持在函数或模块的内部,拿出来传递下去

4、继承税

不要付继承税

考虑一下能更好满足要求的替代方案,比如接口、委托或mixin

尽量用接口来表达多态

无需继承引入的耦合,接口就能明确描述多态性。

用委托提供服务:“有一个”跳过“是一个”

不要从服务中继承,应该包含服务

利用mixin共享功能

mixin不必承担继承税就可以给类添加功能,而与接口结合可以让多态不再令人痛苦

5、配置

利用外部配置参数化应用程序

如果代码对一些在应用程序发布后还有可能改变的值有所依赖,那么就在应用外部维护这些值。

Day2阅读总结

今天讲述了编程之前要准备的工具、以及一些编程的方法,如契约式设计、断言式编程、资源平衡、解耦、继承的利弊等。

image.png

image.png

image.png

image.png

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

帕特里克

发帖: 0粉丝: 0

发消息 + 关注

发表于2020年08月04日 20:09:33
直达本楼层的链接
40#
显示全部楼层

程序员修炼之道 day2读书笔记

华为云账号:hw7832166210

微信昵称:帕特里克

今天的课主要谈编程软件的认知,很多东西很基本,但都很重要,是每个程序员的基本功,都能做到是非常不容易的,体现了个人的编程功力,不经过多年实践学习,是不能有深刻体会的。再次认真学习一遍:

 

        软件编程的基础工具

16.     纯文本的威力(将知识用纯文本保存)

17.     Shell 游戏(发挥 Shell命令的威力)

18.     加强编辑能力(游刃有余地使用编辑器)

19.     版本控制(永远使用版本控制)

20.     调试

a)         去解决问题,而不是责备

b)         不要恐慌

c)         修代码前先让代码在测试中失败

d)         读一下哪些该死的出错信息

e)         select”没出问题

f)          不要假设,要证明

        务实的偏执

21.     文本处理(学习一门文本处理语言)

22.     工程日记(你无法写出完美的软件)

23.     契约式设计(通过契约进行设计)

24.     死掉的程序不会说谎(尽早崩溃)

25.     断言式编程(使用断言去预防不可能的事情)

26.     如何保持资源的平衡(有始有终,在局部行动)

27.     不要冲出前灯范围(小步前进,避免占卜)

        宁弯不曲

28.     解耦

a)         解耦代码让改变更容易

b)         只管命令不要询问

c)         不要链式调用方法

d)         避免全局数据

e)         如果全局唯一非常重要,那么将它包装到AP中,但是仅限于你真的非常希望它是全局的

29.     在现实世界中抛球杂要

30.     变换式编程

a)         编程讲的是代码,而程序谈的是数据

b)         不要囤积状态,传递下去

31.     继承税

a)         不要付继承税

b)         尽量用接口来表达多态

c)         用委托提供服务:“有一个”胜过“是一个”

d)         利用mixin共享功能

32.     配置(使用外部配置参数化应用程序)


点赞 评论 引用 举报