建立investment mindset

读完这本书,收获更多的不是具体design的方法,而是mindset。 现在回去看本书的封面觉得很有意思,上方是杂乱的线,代表复杂的implementation,而下方是整齐的线,代表interface;这表示本书最重要的一个观点,module should be deep,一个deep module有简单的interface,但是有复杂的implementation,隐藏了很多module使用者不需要的信息。deep module有助于减少complexity,对于module的使用者来说,需要了解得更少,但是能获得更多的。 另一个收获就是investment mindset。我工作中也常常会以不知道如何design,觉得design太花时间,改动太大可能会破坏以往已经实现的功能为由,避免design,停留在feature-driven development的舒适区。但长时间地注重实现功能的开发(tactical programming)会导致complexity的叠加,此时需要修改一个很小的部分,也常常需要花很多的时间。而investment mindset的想法是可以花20%左右的时间去思考这些问题:为什么要实现这个功能;怎样实现这个feature才能让它好像一开始就在design中一样;如何用别的办法实现这个功能,和原方法相比有什么利弊;怎样才能让代码的读者更容易理解我的代码;有哪些代码是冗余的。可能我刚开始需要花更多的时间,但我相信长期的训练可以有益于自己对更复杂软件的实现。 investment mindset是一种视角的转变,之前我evaluate我工作的完成可能是以单一的时间维度:如果我能在很快的时间让代码工作起来,就是好的;但是现在加入了complexity的维度:我要更多得考虑design,考虑减少系统的复杂度,让之后maintain起来更方便,也要提升自己对system abstraction的理解。 investment mindset也是一种长期主义的心态,我应该做一些长期有益的事情。做项目并不是很短暂的过程,所以需要写unit test方便之后项目的重构,写comment & document方便之后修改的时候参考。同时生活中也是一样,我没必要纠结于一时的得失因为它会过去;我不能逃避面对问题因为之后同样的问题可能会再出现;我不用焦虑于当下自己做不好一些事情,因为只要我keep practice,总有一天自然而然就能做好。虽然好像是一些大道理,但是花一些时间想清楚,接下来只要去实践。 总之,这本书相比别的具体介绍design pattern之类的设计书而言,并不是非常实用,但它用一整本书讲了为什么我要design,究竟有什么好处;我没有看过其他design类的书籍,但现在也有兴趣去探索一下相关的书籍。而且全书的逻辑非常清晰,例子很多,读起来也不吃力,是一本值得推荐的好书。