本文发表在 rolia.net 枫下论坛俺上篇文章说,读完了 Java Tutorial 算3个月的经验,其实俺是说低了,因为俺好害怕被那些码工卫道士们骂做以次冲好的劣币。其实外面大部分码工都不读书,很多人对基本的东西都是一知半解,跟他们相比,你读一两本好书,真不能用几个月的经验来相比。
俺这篇文章要教给你的,值6个月的经验。其实俺也是说少了,因为俺好害怕挨骂。俺觉得,这篇文章里的道理,如果你真懂了,真能吹,外面有几年甚至十几年经验的码工都不如你。
俺有一个观点,就是操作不重要,道理最重要。做一个码工,最大的道理是什么?这个问题俺也想了十好几年。俺觉得,码工最大的道理,就是懂得什么是 complexity,懂得如何 manage complexity。
有一次俺在坛子里鼓吹 complexity,某网友说,编程有什么复杂的?再复杂的东东,到他手里也是小菜一碟。听了这个网友的话,俺恍然大悟,原来俺说的 complexity,确实不是通常意义上的 complexity。俺举两个通俗易懂的小例子,解释一下俺的 complexity。
大家都知道,Windows Start button 有一个菜单,叫 Shutdown。不止一次,俺按了 Shutdown 就走了,以为电脑就真的 shutdown 了。很久以后回来一看,电脑没有关,屏幕上是一个窗口,里面还有几个选择:
1. Shutdown
2. Logoff
3. Switch User
4. Restart
5. Cancel
其实微软的这个设计就是 complexity。Shutdown 是一个很明确的动词,把它跟不同的动词绑在一起,而且还分两步,就复杂了。首先你要解释,documentation 变复杂了。其次即使解释了,用户也可能不知道 logoff 或者 restart 原来在 shutdown 底下。再者码工在实现这个功能的时候十有八九也是把这几件事掺和在一起,程序变复杂了,所以容易出错。
俺们家买 grocery,俺负责买水果juice和面包。不止一次老婆自作主张也买了面包,俺们家一个礼拜都吃不完一袋面包,结果现在有了两袋。想想全世界吃不饱穿不暖的阶级兄弟们,俺真是羞愧啊。两个人干一件事,就有了 complexity。这种 complexity 在软件里是比比皆是。
做软件,效率低,bug 多,软件做出来不容易读懂,不容易改,往往都是因为诸如此类的 complexity。这个道理,大部分码工不懂。你懂了,你就胜他们一筹,这种知识绝对不是几个月的经验可比。当年俺面试码工,一百个人里也就几个人知道有一个概念叫 coupling。其实 coupling 是软件设计里最重要的一个概念,complexity 的一个罪魁祸首就是 coupling。
如何 manage complexity,换一种说法,就是如何写好的代码。好的代码之所以好,是因为它 reduce complexity。
想写好的代码,捷径也是读书。有一本书,极端通俗易懂,叫 Refactoring: Improving the Design of Existing Code。读完了,可以抵6个月的经验。还有一本书,叫 Code Complete,对我的影响也很大。这种知识的经典书,应该是四人帮写的那本《Design Patterns》了,可惜那本书不容易读。
外面诸如此类的书数不胜数,网上的文章博客也是层出不穷。只要你有心,你能找到很多好书好文章。更多精彩文章及讨论,请光临枫下论坛 rolia.net
俺这篇文章要教给你的,值6个月的经验。其实俺也是说少了,因为俺好害怕挨骂。俺觉得,这篇文章里的道理,如果你真懂了,真能吹,外面有几年甚至十几年经验的码工都不如你。
俺有一个观点,就是操作不重要,道理最重要。做一个码工,最大的道理是什么?这个问题俺也想了十好几年。俺觉得,码工最大的道理,就是懂得什么是 complexity,懂得如何 manage complexity。
有一次俺在坛子里鼓吹 complexity,某网友说,编程有什么复杂的?再复杂的东东,到他手里也是小菜一碟。听了这个网友的话,俺恍然大悟,原来俺说的 complexity,确实不是通常意义上的 complexity。俺举两个通俗易懂的小例子,解释一下俺的 complexity。
大家都知道,Windows Start button 有一个菜单,叫 Shutdown。不止一次,俺按了 Shutdown 就走了,以为电脑就真的 shutdown 了。很久以后回来一看,电脑没有关,屏幕上是一个窗口,里面还有几个选择:
1. Shutdown
2. Logoff
3. Switch User
4. Restart
5. Cancel
其实微软的这个设计就是 complexity。Shutdown 是一个很明确的动词,把它跟不同的动词绑在一起,而且还分两步,就复杂了。首先你要解释,documentation 变复杂了。其次即使解释了,用户也可能不知道 logoff 或者 restart 原来在 shutdown 底下。再者码工在实现这个功能的时候十有八九也是把这几件事掺和在一起,程序变复杂了,所以容易出错。
俺们家买 grocery,俺负责买水果juice和面包。不止一次老婆自作主张也买了面包,俺们家一个礼拜都吃不完一袋面包,结果现在有了两袋。想想全世界吃不饱穿不暖的阶级兄弟们,俺真是羞愧啊。两个人干一件事,就有了 complexity。这种 complexity 在软件里是比比皆是。
做软件,效率低,bug 多,软件做出来不容易读懂,不容易改,往往都是因为诸如此类的 complexity。这个道理,大部分码工不懂。你懂了,你就胜他们一筹,这种知识绝对不是几个月的经验可比。当年俺面试码工,一百个人里也就几个人知道有一个概念叫 coupling。其实 coupling 是软件设计里最重要的一个概念,complexity 的一个罪魁祸首就是 coupling。
如何 manage complexity,换一种说法,就是如何写好的代码。好的代码之所以好,是因为它 reduce complexity。
想写好的代码,捷径也是读书。有一本书,极端通俗易懂,叫 Refactoring: Improving the Design of Existing Code。读完了,可以抵6个月的经验。还有一本书,叫 Code Complete,对我的影响也很大。这种知识的经典书,应该是四人帮写的那本《Design Patterns》了,可惜那本书不容易读。
外面诸如此类的书数不胜数,网上的文章博客也是层出不穷。只要你有心,你能找到很多好书好文章。更多精彩文章及讨论,请光临枫下论坛 rolia.net