【阅读】一周翻过《构建之法》,笔记整理

简介: 🚩 前言我的阅读方式我拿到这本书挺久了,之前已经零散地看过一部分,最近一周集中地花了一些时间,将整本书看过了一遍。看得比较粗略,正如“好读书,不求甚解”(我甚至没有去看书中提到的那些参考资料)。

🚩 前言

我的阅读方式

我拿到这本书挺久了,之前已经零散地看过一部分,最近一周集中地花了一些时间,将整本书看过了一遍。看得比较粗略,正如“好读书,不求甚解”(我甚至没有去看书中提到的那些参考资料)。

这本书比较强调要实践、”做中学“,但我是个人阅读,缺乏一个实践的环境,同时也还没具备开发软件的经验和能力,因此我阅读这本书的方式可能有些偏离它本身的理念了。

但这并不妨碍我通过简单的阅读,稍稍增加一些对于软件工程的感性认知。

相遇

和这本书的相遇是偶然的,因为它来自CSDN视频号的直播抽奖。书作者是邹欣老师,他在C站好像一直挺活跃的哈哈。

初感受

尝试着看过前面几页后,我感觉我有兴趣继续看下去,也许是它幽默风趣的语言风格吸引了我。学校也有软件工程对应的教材,但阅读起来就相对枯燥很多。


在读者反馈部分有一句话:读烂书浪费时间,读好书却节省时间。那么,《构建之法》这本书如何呢?


🥦 阅读笔记

1


对于软件开发的阶段,书中举了个飞机的例子

很多小孩叠过纸飞机,心里一定有”长大了我要在天上飞”的想法。

多年以后,很多人还有“在天上飞”的想法。有人居然就实现了。(热气球升天)

和上面提到的偶尔“疯狂”的行为比起来,另外一些人能持续疯狂好几年。(莱特兄弟的飞机)

这个例子莫名地就拨动了我的情绪,也许是那跨越时间的执着?我也不太知道。总之这个故事是《构建之法》早期吸引到我的一部分,这里写得比较草率,有兴趣可以自己看一下原书。

书中像这样一些故事或比喻挺多的,这虽然是一本关于软件工程的书,但阅读起来也不至于太过无聊。

2


软件工程师不能按时交付的原因之一,是他们有时候不满足于“解决目前直接的问题”,而是想“解决问题背后的问题”,或者“解决通用的、不直接的、但有重大意义的问题”。

看到这里,我有点像在照镜子。我感觉我经常因为陷入这样的状态而跟不上节奏,例如:

上课听着听着就想一个问题去了,然后后面就听不明白了

纠结于某些细节,以至于无法按时完成作业或任务

而这些不满足于现有问题的思考也许是弊大于利,它经常得不到什么有用的结果。

3


教育的三个区域

  • 恐慌区,高层次问题,无暇顾及
  • 学习区,中间层次的问题,花脑力解决
  • 舒适区,精通,低层次的问题,变成自动操作

我们有时会强迫自己进入恐慌区,然而没有实力且心理准备也不够。比如想学习算法,听说《算法导论》很赞,就抱着这块砖头开始啃,多少人能一直啃下来?


这可能不只是一个坚持不坚持的问题,同时也是这件事情合不合适的问题。

书中的建议是:

把那些低层次的问题都解决了,变成不用经过大脑的自动操作,然后才有时间和脑力来解决较高层次的问题。选择合适的学习区,不断构建自己的舒适区,从而拓展学习区,最后在某些领域达到技能的精通。

4


回首当年,我(的态度)的确是错了。任何事情,当你仔细探究,你就会理解它的量和质;当你对一个领域的神韵足够了解,并开始连接这个领域的表现形式和实现细节的时候,任何一个领域都是会变得引人入胜的。

这个观点值得仔细考虑。一个领域你不深入到一定的程度,就有很多乐趣都体会不到。

就像,旋转是乒乓球的一大精髓,一些尝试不久新手是不会旋球的,又如何能比较完整地体会到乒乓球的乐趣呢?

5


看到了“两人合作”那一章,两人合作、结对编程有那么多好处,以至于我有些心潮澎湃,忍不住想要大干一场,但貌似也没有什么合适的项目和伙伴,呜呜。

6


代码风格:花括号都独占一行。容易看清程序的结构和对应关系,方便调试。

我试着用了一段时间,感觉不太喜欢,因为代码的行数会变得很多。程序代码很容易变得很长,给浏览带来了一些困难。

7


goto:函数最好有单一的出口,为了达到这一目的,可以使用goto。

我赞同。曾多次被告诫不要使用 goto,因为它会破坏程序的结构。我想,这应该是对 goto 的不恰当使用导致的,goto 太灵活了。

使用 goto 构建函数的单一出口是一个不错的办法,给我程序的调试带来了一些方便(个人较少使用 debug 工具,习惯通过输出中间结果进行 debug)。

8


断言:看到了断言这个东西,也许我可以尝试这用起来

9


如何正确地给予反馈?反馈有三个层次:

最外层:行为和后果

中间层:习惯和动机

最内层:本质和固有属性

应该有意识地选择比较合适的反馈层次。个人感觉比较常见的是过于深入核心的攻击,例如:

你 就 是 自 私 ! 你就是自私!

你就是自私!

“自私”是一种固有的属性,被攻击一方已经无法回应。

具体情况具体分析,有时深入的反馈也是有必要的。

10


敏捷流程:冲刺阶段是时间驱动的,时间一到就结束。这个特点看似不起眼,但其实它有效地断了各种延期想法的后路。

也许我可以尝试着改变自己的拖延症。

关于成果:告知已经抓出来 N 个腐败分子固然解气,但关键是“还有多少还在台上”。

强调短周期迭代:一些艰难的任务往往在短周期的迭代中得不到应有的重视

需要小心

11


软件工程这个领域出现了不少热闹的宣言和冷静的反思,百花齐放当然好,但是都有各自的适用范围和时代背景

12


没拿准是不是要通知某一方面的人员:宁可过分沟通。

沟通!

充分信任和授权:看到书中多次讲到这一点,忍不住有些向往这样的氛围。

13


需求分析

用户也不一定很清楚自己的需求,需要挖掘和引导他们表达出真实的需求。

软件开发的过程,就是用户最需要的东西在层层链条中传送、转换、实现、扭曲的过程(有一个非常著名的秋千图)。

计划和估计:探险者总是高估自己的能力,低估未知的困难——不然他们就不会出门探险了!

下面这个故事莫名有些拨动了我的情绪,于是我决定把它也记下来。

14


锻炼自己:参加多种社团并组织一些活动,最好是草根的活动,而不是由上而下规定的活动

15


软件设计和实现

  • 一图胜千言
  • 有种文学化编程:写文档,时不时有些代码(而不是写程序,是不是加上一些注释)。

之前就有人看我一篇算法博客说没看懂,不知道多加上一些图会不会好一些。

16


诺尔曼借了一台彩色显示器自己用,他发现彩色显示器并没有增加可分辨的价值,但是实验结束后,他自己却很不愿意把彩色显示器还回去

设计的三个层次:本能、行为、反思

17


避免频繁地到处改动代码而引入新的bug,是谓之稳定

我们往往奖励末端治理的英雄,但是最初提建议的人未必得到奖励

18


创新的八个迷思


1.灵光一闪现,伟大的创新就紧随其后

2.大家都喜欢创新

3.好的想法会赢

4.创新者都是一马当先

5.要成为领域的专家,才能创新

6.技术是创新的关键

7.成功的团队更能创新

专家对于颠覆性技术的估计大多数都是错误的

在高校讲课也感觉到这样一些困难。要知道,这些高校都是喊着培养创新人才、创新型大学的口号和企        业合作的。“我们支持改革,但是这事情以前从来没有做过,所以不能做”

8.创新者就是冒险家

关键不是喜欢冒险,也不是躲避风险,而是从错误中恢复并继续努力

做的不一样很容易,做得更好才是非常困难的

19


创新的时机

只先一步

现在技术圈子里大家都在吹的那些技术,如SoLoMo、只能硬件、人工智能、云等,它们处于哪一个阶段?你应该贸然出手么?

20


创新和作坊


1)专注于你真正想做的事,也许比较寂寞,因为它不是网上热捧的“高科技”

2)如果你觉得解决普天大众的问题很难,能否从解决自己的问题、身边的问题开始?

3)真正做好服务,不管用户有多少。保护用户的数据和隐私,就像你希望别人保护你的隐私一样,不要找借口

4)有胸怀去找至少一个伙伴,一起成长

5)能自我管理,按照自己的节奏来分享体会和成果

6)享受你的工作和生活,当别人询问你的工作职位时,能够情绪稳定地说:我自己干

21

领导力


请你看看你身边的那些“管人的领导”,他们擅长的是把人当作东西来管理,还是领导大家达成团队的目标

一个有雄心壮志、有紧迫感、有纪律的“我”,领导一个三心二意、有拖延症、得过且过的“我”

但是随着时光流逝,领导力在慢慢丧失,直到下一次觉醒

知识是有用的,但解决实际问题我们需要技能

员工内部驱动因素:自主性,精通某个领域,使命

22

书中给任课老师和助教的建议


知识体系是构建出来的,而不是接收到的。与其灌输知识,不如让学生自己构建

人的认知模型改变得非常缓慢,搞那些速成的、疯狂的、喊口号的培训未必改变了人的认知模型

提问能帮助构建知识体系。所以我们要鼓励学生思考、辩论

身心投入是学习的关键。没有一定的工作量,怎么能达到“身心投入”呢?

🌾 结语

关于这篇笔记


这是一篇零散的阅读笔记,纪录的东西之间是孤立的,只是大体沿着《构建之法》的章节顺序,因此不是一篇对读者友好的笔记。我写下它,主要是个人进行一次回顾,回顾中也感受到一些前面读过的内容已经忘记了,当时的感受也变得模糊了,再翻一遍的时候会有种找回丢失的物品的惊喜感。


笔记中许多对于书本内容的引用做了一些删除,有些断章取义,建议还是可以自己阅读原书。


在笔记的前面部分,我相对较多地写了一些自己的感受或想法,而笔记后面部分则慢慢地变成了简单的摘抄。难道书籍后阶段的阅读就没有产生什么感受或想法吗?

当然不是。可能是有些累了就想着要偷懒了,后面对这篇笔记的态度更像是一个待完成的任务,而不是一次我渴望进行的总结和分享了。心里就想着:“快点叭,把这些东西搬运上去,活就干完了!”

这不是个好状态。


最后


这本书令人较多地感受到方法论层面的东西,我感觉自己读这本书不像是在学软件工程,至少不是我想象中的软件工程。但不管怎样,好像都没有关系,这里附上爱因斯坦的一段话:


用专业知识教育人是不够的。通过专业教育,他可以成为一种有用的机器,但是不能成为一个和谐发展的人。要使学生对价值有所理解并且产生热烈的感情,那是最基本的。

他必须获得对没和道德上的善恶鲜明的辨别力。否则,他——连同他的专业知识——就更像一只受过很好训练的狗,而不像是一个和谐发展的人。

为了获得对别人和对集体的适当关系,他必须学习去了解人们的动机、他们的幻想和他们的疾苦。

我之前读过《计算机概论》([美]J.Glenn Brookshear Dennis Brylow 著),笔者感觉这是本不错的书,它有个特点是每章后面都会鼓励读者去思考相关的社会问题。

相关文章
|
Linux Android开发 虚拟化
我花了半个月,整理出了这篇Linux内核开发学习指南(学习路线+知识点梳理)
我花了半个月,整理出了这篇Linux内核开发学习指南(学习路线+知识点梳理)
|
传感器 JSON C语言
最近收集的开源项目专栏(持续更新,收好车轮,方便造车)
最近收集的开源项目专栏(持续更新,收好车轮,方便造车)
183 0
最近收集的开源项目专栏(持续更新,收好车轮,方便造车)
太牛了!腾讯T9耗时69天整理出最全架构师进阶核心知识点笔记
每一个程序员应该都想着如何快速提升自己(反正我是这样想的),从程序员进阶到架构师再到技术专家再到CTO 。当然这其中需要大量的知识储备,是一个不断学习的过程,话不多说下面我直接上图。
|
设计模式 算法 NoSQL
冲刺金九银十!GitHub中文社区秋招趋势最热的面试题被我整理好了
面对已经过去的金三银四很多小伙伴都受到了很大的挫折! 最近收到一个小伙伴金三银四在阿里的面试流程完全被吊打,和我一起看看阿里都问了什么吧!
|
SQL 编解码 算法
陈伟视频知识点整理
陈伟视频知识点整理
89 0
|
前端开发 测试技术
测试领域专业术语整理-持续更新
测试领域专业术语整理-持续更新
320 0
|
算法 架构师 Java
肝了三天三夜整理出这份36万字全网最牛的开源高并发编程PDF!!
在 冰河技术 微信公众号中的【高并发】专题,更新了不少文章,有些读者反馈说,在公众号中刷历史文章不太方便,有时会忘记自己看到哪一篇了,当打开一篇文章时,似乎之前已经看过了,但就是不知道具体该看哪一篇了。相信很多小伙伴都会有这样的问题。那怎么办呢?最好的解决方案就是我把这些文章整理成PDF电子书,免费分享给大家,这样,小伙伴们看起来就方便多了。今天,我就将 冰河技术 微信公众号【高并发】专题中的文章,整理成《深入理解高并发编程(第1版)》 分享给大家,希望这本电子书能够给大家带来实质性的帮助。后续,我也会持续在 冰河技术 微信公众号中更新【高并发】专题,如果这本电子书能够给你带来帮助,请关注 冰
655 0
肝了三天三夜整理出这份36万字全网最牛的开源高并发编程PDF!!
|
Web App开发 设计模式 移动开发
近期面试题整理汇总(持续更新)(上)
1.HTML和CSS Html5新增标签和属性
162 0
近期面试题整理汇总(持续更新)(上)
|
Web App开发 缓存 移动开发
近期面试题整理汇总(持续更新)(中)
我们经常在 url 中看到 #,这个 # 有两种情况,一个是我们所谓的锚点,比如典型的回到顶部按钮原理、Github 上各个标题之间的跳转等,路由里的 # 不叫锚点,我们称之为 hash,大型框架的路由系统大多都是哈希实现的。
206 0
近期面试题整理汇总(持续更新)(中)
|
存储 Web App开发 自然语言处理
近期面试题整理汇总(持续更新)(下)
• 变量提升与函数提升 • 变量提升: 在变量定义语句之前, 就可以访问到这个变量(undefined) • 函数提升: 在函数定义语句之前, 就执行该函数 • 先有变量提升, 再有函数提升
152 0
近期面试题整理汇总(持续更新)(下)
下一篇
DataWorks