🚩 前言
我的阅读方式
我拿到这本书挺久了,之前已经零散地看过一部分,最近一周集中地花了一些时间,将整本书看过了一遍。看得比较粗略,正如“好读书,不求甚解”(我甚至没有去看书中提到的那些参考资料)。
这本书比较强调要实践、”做中学“,但我是个人阅读,缺乏一个实践的环境,同时也还没具备开发软件的经验和能力,因此我阅读这本书的方式可能有些偏离它本身的理念了。
但这并不妨碍我通过简单的阅读,稍稍增加一些对于软件工程的感性认知。
相遇
和这本书的相遇是偶然的,因为它来自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 著),笔者感觉这是本不错的书,它有个特点是每章后面都会鼓励读者去思考相关的社会问题。