zoukankan      html  css  js  c++  java
  • program is a girl

    程序像女孩,一些漂亮,一些丑陋。它们之间最重大的区别是什么呢?我认为是简单性(身材)。试想一下,一个体重200公斤的女人很难称之为美女。
    简单性分为几个方面:
    1. 代码量少。一个美女必须身材苗条,一趟代码看下来,就象高手下的棋,没有一步废棋,每一步都有它的用意,这是一种美。
    2. 结构简单。眼睛和鼻子清晰分明,错落有致,不能是平齐的一只眼睛一个鼻孔,又一只眼睛又一个鼻孔。一个好的设计是功能代码与交互代码分离,即使相关的代码模块之间也不应有耦合,但一定会有交互,这时就要想办法把眼睛和鼻子分开。
    3. 维护简单。美女不应无脑,不能粘着你不放,让你脱不开身做其它事情,应能抵御各种诱惑不跟别人走,只跟着我走。其实当代码量与结构简单之后,维护简单就是顺理成章的事。因为它很健壮,不容易出问题,出了问题也容易修改。
    实际上:
    1. 大多数情况下,简单性并不简单,它的使用过程可能很简单,但它的实现过程可能很复杂,这种实现简单性的复杂过程正是编程的乐趣所在,也是编程的实质,是程序员应该做的事情。我在编程过程中,经常会造出美女来,但随着需求的变化,功能的增多,我会发现她越来越丑了,觉得当初写的代码是狗屁,这就是代码的退化性,最初的设计越来越不符合新的需求,然后就对她做整容手术,开肠破肚甚至开颅手术也再所不惜,我始终在追求简单性,这个过程很快乐。
    2. 程序的复杂性一般来源于2个方面,一是程序员的经验问题,二是需求变化导致某段代码反复的修改(其实我认为这2个方面其实是一个问题,那就是程序员有没有追求简单性的渴望)。复杂性是应该竭力避免的问题,因为它不但影响开发进度,也会隐含某些Bug,这时就涉及到一个重构的问题。绝大多数人都缺乏重构的勇气,主要是怕重构需要很长时间,不能按照完成任务。实际上这是一种错觉,重构是为了简单性,那么重构的过程大部分操作必然是删减的过程,而不是重新实现功能,原有的功能代码不需要改动,它们本来就是有效的棋,改动主要集中在模块的划分及它们的交互上。敏捷开发中,重构充斥着整个开发过程的始终,这种重构不是全部实现功能之后的重构,而是发现有可改进之处时,立即着手改动,它建立在代码集体所有的基础之上,每个人不管发现自己的还是他人的代码有问题,都应立即沟通并修改,这是一种及时的即时的修改,按照软件工程中缺陷发现的越早,修改的越早,付出的代价就越小的原理,这种重构不费吹灰之力,而且花时间在重构上,似慢实快,从局部上看好像慢了,但它推动了全局的进展,其它类似的功能可以用更简单的方法去实现,所以它实际上是快了。
    虽然当我看到美女时会忘了代码,但看到丑陋的代码时却会联想到丑女,当必须要跟丑女过过招时,我就别提有多郁闷了。我最喜欢的工作是造美女,最不喜欢的工作是照着丑女画丑女像。
  • 相关阅读:
    Spring 整合过滤器
    Spring Boot 整合 AOP
    Linux IO模式及 select、poll、epoll详解
    java 集合之ArrayList、Vector、LinkedList、CopyOnWriteArrayList
    java 集合之HashMap、Hashtable、LinkedHashMap、TreeMap
    java modCount和fail-fast
    java ArrayList迭代过程中删除
    JVM metaspace元空间
    反转链表
    合并两个排序的链表
  • 原文地址:https://www.cnblogs.com/bighuiwolf/p/1771316.html
Copyright © 2011-2022 走看看