读《构建之法》第四章、第十七章有感
书是我们永远的朋友
它陪伴我们走过人生的春夏秋冬
在我们的生命中生根、发芽、枝繁叶茂
书是人类发展的录像机
我们可以在其中看到前辈的足迹
书是知识的海洋
我愿是一叶轻舟,载着理想之帆
在海面上荡漾
它蕴含着祖祖辈辈的希望和向往
前言:三遍阅读,多思多想
我依然本着认真地态度,希望通过阅读能对结对项目有一定的了解和认识基础。所以连续阅读五天,有很大收获。在最初也没有什么问题,自己觉得邹欣老师写得非常好,可是阅读三遍之后也有了问题,现在提出来分享给大家,一起讨论学习。
核心:提出困惑,分享交流
第四章 两人合作
原文1:
当你觉得某事肯定如何时,就可以用断言(Assert)。
出处1:
第四章 P70页 “4.3.3 错误处理”。
提问1:
我们如何判断一个错误处理是否采用断言呢?
查阅博客1,得知:
-
断言是用来发现运行时刻错误的,发现的错误是关于程序实现方面的。
-
断言中的布尔表达式显示的是某个对象或者状态的有效性而不是正确性。
-
断言在条件编译后只存在于调试版本中,而不是发布版本里。
-
断言不能包含程序代码。
-
断言是用来揭示错误的,而不是用来纠正运行时刻错误的。断言检查的是程序的有效性而不是正确性,可通过断言把错误限制在一个有限的范围内。同时注意一点,如果你的程序是防御性的,记得使用断言。如果你使用断言,也别忘了防御性编程。这两种技术最好结合在一起使用。断言验证的是正确性,验证方式是通过简单制造栅栏的方法,让问题自己暴露出来,从而实现检验正确性。所以采用断言,就是明确了断言是什么,有什么特征,并且如书中所言,在明确肯定某事时,就采用断言。
原文2:
有没有使用断言(Assert)来保护我们认为不变的条件真的得到满足?
出处2:
第四章 P76页 “4.4.3 代码复审的审查表”。
提问2:
问题1我们已经清楚了断言是什么,那么我们又该如何正确使用断言呢?
查阅博客2,得知:断言居然是个宏,并且作用并非“报错”。
assert宏的原型定义在assert.h中,其作用是如果它的条件返回错误,则终止程序执行。示例代码如下:
#include "assert.h"
void assert( int expression );
在调试结束后,可以通过在包含#include 的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:
#include #define NDEBUG #include
使用断言的几个原则:
- 使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别。
-
使用断言对函数的参数进行确认。
-
在编写函数时,要进行反复的考查,并且自问:“我打算做哪些假定?”
-
当进行防错性编程时,如果“不可能发生”的事情的确发生了,则要使用断言进行报警。
- 把断言看作一种简单的制造栅栏的方法,这种栅栏能使错误在穿过自己时暴露。
-
检查函数的输入
-
检查函数的输出
-
检查对象的当前状态
-
坚持逻辑变量的合理性和一致性
-
检查类中的不变量
个人认为,断言可以保护我们认为不变的条件得到满足,我们却常常忘了使用断言,为什么?
因为我们对断言的认识程度不够,其实,在项目完成中断言是一个很重要的部分。我认识到它的意义,便会关注它。注意一点,Assert只有在Debug版本中才有效,如果编译为Release版本则被忽略。
使用Assert,在理论上,用制造栅栏的方式,暴露错误,检查输入输出、状态、合理性以及不变量;在操作上,首先,判断自己是否开启断言,如果开启断言,则会调用断言语句。然后,开启断言:打开Run->Run Configurations,Argument并设置-ea(打开断言:-ea,关闭断言:-da以及删除:-ea)。最后再测试一下,如果返回true就表示成功了。当然还有很多细节部分,欢迎大家讨论提出。
第十七章 人,绩效和职业道德
原文1:
人可以在n个地方做鸡,或者在n*m个地方做鹦鹉,但不可能在两个地方同时做猪,这太难了。
出处1:
第十七章 P394页 “17.4 猪、鸡和鹦鹉的故事”。
提问1:
“猪”作为全身心投入的角色,我们在一个工作中是否一直扮演这样一个角色?
参考书籍,得知:“猪”代表全身心投入的角色,“鸡”代表参与者,“鹦鹉”代表围观者。“猪”是全身心投入,而书中并没有明显提出每时每刻都全身心投入,所以我提出这个问题。
回答这个问题之前,我们应该先弄明白,这份工作能带来什么,无论是对自身,还是团体。而现阶段你又期望得到什么?
当突破先阶段后,你又会有什么诉求。我认为,我们没有必要总是全身心投入,偶尔做做旁观者和参与者也是可以的。没有任何一项工作值得一直全身心的去做,不是所有的工作都值得全身心的投入,甚至不是所有的工作都值得去做。而这一切,都取决于,你想要的是什么。但是当你下定决心做一件事情时,无论那件事情是什么,在做那件事情的时候就一定要全身心的投入做这件事情。但是这和一直全身心投入做一件事不是一个概念,因为你主观的“一直投入”和实际的“一直投入”不是相等的。在实际中没有人可以100%投入一件事。但是在思想上却可以一直投入,也是必要的,一本心理学的书中也得到这样的结论:专心致志可以忘掉自我,忘掉疲劳,增加时间的持续性,提高效率。
原文2:
为啥人要讲人、绩效和职业道德?学好专业不就行了吗,为啥要扯这么多?
出处2:
第十七章 P408页 “17.9 练习与讨论”。
提问2:
为啥要讲人、绩效和职业道德的问题?绩效和职业道德的真实意义又是什么?
查阅书籍,得知:
用专业知识教育人是不够的。通过专业教育,他可以成为一台有用的机器,但不能成为一个完整的人。要使学生对广博的价值有所理解并且产生热烈的情感,那是最基本的。他必须获得对美、对真、对善有鲜明的辨别力。否则,他——连同他的专业知识——就更像一只受过很好训练的狗,而不像一个和谐发展的人。 ——爱因斯坦
因为想深入谈谈动因问题,所以提出这个问题并解答。
阅读完第十七章我知道了领导力、绩效 管理办法、团队成长阶段和道德规范的基本要求,但是仍然对实现这些“正名词”的真实意义理解不足。所以提出为啥要讲人、绩效和职业道德的问题,希望自己深入思考收获更多。
爱因斯坦的话,激荡着我的心灵,说得很好。首先,专业知识可以让我们有生存的保障,是绩效的条件;其次,职业道德可以让我们保持良好素质修养的个人形象;但是,他们都不满足我们生活的全部;所以,我们要追求的是什么?拥有绩效和职业道德的真实意义又是什么?其实,我们追求的是一种自然,辨别自己是否需要绩效,需要职业道德。当我们选择“需要”这个动词的时候,我们就是站在真善美的立场,追求着我们心中的自然。每个人心中的自然都不同,我的心中,自然除了外界需要我担当的角色(如:高绩效,良好职业道德),更多的是体现在我自己的辨证领悟中。例如,在《一个程序员的生命周期》中,主人公的辨证领悟令我折服。他说人的一生,不知道要遇到多少坎坷和磨难。很多事情都是在无法预料中发生。而他乐观从容,选择坚强。还有,“我们曾如此渴望命运的波澜,到最后才发现,人生最曼妙的风景,竟是内心的淡定与从容。我们曾如此期盼外界的认可,到最后才知道,世界是自己的,与他人毫无关系。”——杨绛《一百岁感言》。杨绛作家的感悟好似追求自然,独韵深长。总之,我们在任何立场和时机(如:绩效,职业道德)都要保持一颗追求自然的心,还要充满辩证的领悟。
尾言:勤思总结,砥砺前行
每个人都有潜在的能量,我们都需要去挖掘。没有天生的信心,只有不断培养的信心。想法决定行动,行动决定结果。多阅读,多思考,多写笔记、总结,是一件我们切实可做且有意义的事情。所以我选择去做,也认真去做,心里接受,然后一切便水到聚成。
1 错误处理技术学习 https://www.cnblogs.com/52yixin/articles/2260223.html
2 断言(Assert)的用法https://www.cnblogs.com/moondark/archive/2012/03/12/2392315.html