读书笔记(python)-设计模式

《python设计模式》读书笔记

第一章 前述(本文)



前言

本文为第一章 前述 的读书笔记,需要学习python设计模式的小伙伴,可以先看原著。


一、为什么选择设计模式?

笔者的话:

没有设计模式,我们就不能工作了吗?显然不是这样,没有设计模式,抛弃了那些条条框框,我们的开发速度反而可能更快。

那么设计模式是否放之四海而皆准,显然也不是,在一个现有的项目上开发时,需要遵循当前项目的开发习惯,盲目使用设计模式,只会令效率低下,同事反感,上司不满。

至少,就笔者的经验来说,设计模式就像波波派一样屁用没有,只会投降。

既然如此,为何还要选择设计模式?

首先,选择正确的设计模式,可以让开发变的更简单,特别是,降低后续的维护成本。

其次,明显的结构,便于后续开发者反复利用以前的代码。

最后,通过选择正确的设计模式,有可能提升代码运行的效率。

但这一切对于笔者来说都不重要,因为我只是一个半瓶水,它在工作中几乎用不到,但用到的时候必须得会,所以就像数据结构与算法一样,它是一个面试时必然会问的东西,这条理由,就足够了。

而如果你有志于成为一名优秀的程序员,那么研究设计模式,与研究如何部署一个项目,没有本质上的区别,都是在利用前人的成果,让我们的工作更加轻松。


二、成为更优秀的程序员

这个标题非常有营销号的味道,但这的确是原文的标题,笔者不是一个优秀的程序员,但笔者觉得这个很有营销号味道的章节,说的很有道理,也具备可操作性。所以,即便本书的作者是到处撒毒鸡汤的“穿山甲”,笔者也决定干了这碗鸡汤,并把操作方法记录下来,便于复习。

《成为更优秀的程序员》总纲:

  1. 处理已有代码时,处理完成后应当比处理前更好。
  2. 每天完成一个快速解决问题的挑战。
  3. 寻求与编程技术比自己好的程序员共事的机会(开源项目是最好的机会)。
  4. 专注于刻意训练。
  5. 练习系统化的思考。
  6. 收集和分析思维模型。
  7. 熟练掌握工具,并理解何处适用,何处不适用。

1. 刻意训练

笔者也不知道,为什么小节和总纲的顺序不一致,原书(译本)就是这么排序的。

  • 每一次训练环节都具备单一关注点
  • 尝试和反馈之间的时间要尽可能短
  • 着手处理自身不能应对的事情
  • 遵循前人的脚本

2. 单一关注点

把所有注意力都集中在需要提升的元素上。

在设计模式的学习中,就是

  1. 每次只针对单个设计模式学习,
  2. 确实的理解,这个设计模式是怎么发挥作用的,
  3. 为什么适合于这个问题,
  4. 能否适用于其它问题,为什么?
    走到这里,就完成了知其然,知其所以然的地步。
  5. 然后,尝试使用研究的模式,来处理一些实际问题。
  6. 最终,形成一种"思维工具箱",遇到问题时,随时取出合适的工具。

个人理解:就和训练神经网络模型一样,来训练自己的神经。

3. 快速反馈

反馈越快,连接性越强,学习到经验就越容易。

训练方法:

  1. 预测代码输出
  2. 如果结果不正确,分析原因
  3. 用另一段代码来验证原因
  4. 对这另一段代码进行测试
  5. 进行总结:实现难度,是否合适,代码复审,着手处理项目,与他人探讨解决方案。

个人理解:1~4就是写bug和改bug的过程,5则是对改bug过程的一个深思,总结经验教训,便于下次使用或防止下次出错。

4. 自我拓展

简而言之:学习那些令自己不适的内容。

这些东西,或许是学习过程中忽视的内容,或许是始终难以学会的东西,或许是令人烦躁的配环境,只有反复的练习,不停的自我否定,才能深入理解这些令自己烦躁的内容。

5. 跟随大师

听一听大师在说什么,理解他们处理问题的方式,记录他们的解决方案,并和自己的对比,看看有什么不同,评判其中的优劣。

学会对处理问题的过程充满激情,而不是沉迷于结果。

6. 模仿

模仿是入手的正确方式。

在熟练之后,再去思考为什么优秀,能否更好,才是有可能的。

个人理解:先背诵诗歌,再说理解诗歌的优美,最后评判优劣,才是正常人的学习方法。对于语言类的天才,可以是“方仲永”,而对于学习程序来说,天才也得低头模仿前人,才有可能高屋建瓴。

7. 保持路线正确的能力

学会何时掉头或者转向,从来都是一件困难的事情,回头,是需要莫大勇气的。

如果意识到自己的解决方案出现了错误,还要继续往前,那就很可能南辕北辙。


三、系统化思考

所有的设计模式,都是在应对这三个基础问题:

  1. 要素是什么,它们是如何创建的?
  2. 要素之间的连接是什么,或者说其结构看起来是什么样子的?
  3. 这些要素如何交互,或者说其行为看起来是什么样子的?

四、思维模型

问题的定义或者描述越好,也就是越完整,则越能得到与可行的解决方案有关的更多线索,因此,针对一个问题,需要提出一些看似无关紧要的问题,直到得出一个比较清晰且简单的问题描述。

设计模式有助于我们从问题描述,直接跳到解决方案,而无需中间过程,因而可以避免许多错误开端。

个人理解:通过思维模型,往往能看出程序员的工作年限,刚入职的程序员,往往是什么都不敢问,或者乱问一气,不论业务问题还是技术问题,都想找人解决,或者都想自己解决;而入职较长时间的程序员,会针对业务细节死缠烂打,技术问题却从来不问,除非现有技术无法解决该问题,或者整个业务团队都不具备该技术。
程序员针对业务“死缠烂打”的原因无非一点,程序不能抢了产品经理的工作,如果程序员自行决定业务细节,那么实际产品出来后,几乎一定会返工。


五、适用工具

学习感兴趣的包,学习其基础,然后开始使用已经涉及的框架来尝试应用它。


六、设计模式的概念

1. 是什么造就了设计模式

设计模式的要素:

  • 模式名称
  • 意图/目的
  • 别名
  • 动机/背景
  • 问题
  • 解决方案
  • 结构
  • 参与方
  • 协作
  • 影响/约束
  • 实现
  • 示例代码
  • 已知用途
  • 相关模式

2. 分类

设计模式主要分为三类:

  1. 创建性:指导如何创建类和对象
  2. 结构化:指导类和对象的构成方式
  3. 行为性:指导对象之间的交互

七、选择python3

选择VirtualEnv(一个虚拟的python解释器),以便于把不同项目需要的环境,分割开来,有利于项目的开发。


总结

个人理解:

“如何成为优秀的程序员”,这并不是《如何成为亿万富翁》,不需要太多的运气,也不鸡汤,反而令人泄气,成为一个优秀程序员的方式,总的来说,和成为一个优秀“卖油翁”并没有太大的区别,“唯手熟尔”。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值