设计模式-读书笔记

1
2
我不知道我是否已经开始,也不知道会坚持多久。
不知道何时放弃,更不知道我又会在何时开始。

我?设计模式?

相比于研究人员需要的天赋和本领,我有些时候不得不去相信,自己在 码农 方向更有可以挖掘的潜力。

上大学已经两年半了。这段时间里,我从一行程序都不会写的垃圾,变成了现在这样的会写几行程序的垃圾。无论我能掌控怎样规模的项目,我心里明白,自己都还是那个彻头彻尾的垃圾。原因就是:我不会设计

这个 设计 指的并不是,或者不仅仅是所谓的原型图设计、架构设计 …… 更是代码的逻辑设计。

由于我在本科阶段之前从来没有接触过编程,我的母语就是 C/C++。我不是说我所在的学校在母语的选择上做得不好,而是只能说,我所在的学校太了解一个 “小镇做题家” 应该具有的个人水平,太明白大多数人都像我这样,一行程序代码都没写过。

一年的时间,无法把我提升到一个很高的层次。


我是讨厌复杂概念的,讨厌复杂设计的。因此,我一直学习简单易懂的东西。

但是直到不久之前我才明白过来,学简单的东西,可以做小玩具,却不能支持自己更宏大的想法:

  • 别人出手就是整体设计,我一考虑问题就钻进了细枝末节死胡同;
  • 别人一个 class,两个 class,写得整整齐齐,我一个 function,两个 function 排得乱乱糟糟;
  • 别人看到一个项目,先是思考,然后再动手;我却立刻着手,但是写一会儿觉得不对了,又推翻了重写,浪费了大量的时间。

两年半过去了,

我知道为什么会有 a int[]

但是却不知道为什么有 abstruct class, interface, override 等等一系列杂七杂八的东西。

当歌声响起时,我也应该起舞。

毫无疑问,这是可悲的失败。

设计?模式?

写代码的时候常常会想一些问题。

在刚开始学的时候,想的是 “这个语法是什么”,之后想 “这个功能怎么实现”。

只有功能实现了,才回去想其他的东西。不然程序都跑不出来,想那些干p。

这么考虑的话,我现在的可悲的失败,反而是我可喜可贺的成功。我的重点和视野从功能实现转到了 更好的设计 上面来,说明我 温饱之后思 she ji

其实我完全可以去朝另外一个方向点技能点 —— 简单,(很可悲的是,我现在把这两个看作了两个不同的方向,不能说是南北的差别,但至少是正北和北偏东 1° 的差别)去写更简单的代码,只去学能让我代码变得更加语义化的 feature

但我很快发现其中的差别:

  • 写简单代码,是为了和自己交流;
  • 但是在设计模式上下功夫,是为了与其他人交流。

《设计模式:可复用面向对象软件的基础》 这本书已经有了几十年的历史,其中的 23 个基本设计模式应该是已经刻入了很多人的 DNA 中。因此,学这种东西和学习一门新的编程语言,在交流方面带来的作用是类似的,只不过前者的客体是代码与人,而后者的客体大多数情况是机器,当然也存在人的情况。

而我也想有 “自己” 能看懂的设计,哪怕其他人早就使用过,但至少我是知道为什么这样设计。

扯远了,其实这个学期我在写代码的时候,隔三岔五就会想到:“怎么样才能更简单易懂?”

如果把问题换到现在这本书上的语境,则是:

存不存在一种方法,能够使得一个项目在 简约、复用、灵活、性能、演化、封装 等等一系列设计方面上尽善尽美?

(因为只要懂,那看上去就是简单易懂的((()

但我觉得不可能,如果真的有,那就不会存在什么杂七杂八的设计模式了,我也就没有了解设计模式的必要了。只学那么一个理论不就完事儿了?

谁?设计模式?

那么 究竟是什么激发了我这个想法的呢

这里不方便提及。但是可以说一下结论:什么激励我学习 “设计模式” 这件事并不重要,重要的是我把书打开了。

它可以是男的,也可以是女的,甚至可以不是人。但是只要激励了我学习 “设计模式”,那么这个物体就是上面问题的答案

我,多么地废物

学习 是两个字。

而大多数时候,我嘴上说的 “我开始学习了”,实际上仅仅是 “我开始学了”,并没有 “” 的这个概念,缺乏大量的练习。

然而我正在学的这个专业,与练习、经验有着极为密切的关系。bug 和漏洞都不是凭空出现的,这类名词是需要载体的。

但顶破天,我能用到继承。甚至还觉得:“哇,怎么会有继承这么好的想法。”

全然没有顾及继承带来的问题,更不要谈了解对这些问题的解决方法。

我想,作为这门专业的学生,如果我能把专业知识融入到日常生活当中,让我的思考建立在这个专业无数科学家数十年积累产生的理论方法之上,那么我才算是摸到了专业道路的起点。现在的话,我连起点都没找到。

从小的时间片段来看,我又开始浪费时间了。但或许反而是有意义的吧?

我也不知道。