坤 的个人资料killuakun's sand 搏客肖坤的镜像照片日志列表更多 工具 帮助

日志


7月20日

我的编程观与《修改代码的艺术》

 
  昨天买了本书,是《修改代码的艺术》,我是被它的前言吸引的,内容草草的看了下就买下了,属于冲动消费。这篇前言道出了我作为程序员的心声。
 
=====================下面摘录其中的几段:=====================
 
  我进了大学,一位室友买了台电脑,而我买了一套C编译器,这样就能够自学编程了。于是,一切就从那一刻开始了。我在不断的尝试,在尝试中度过了一个又一个不眠之夜,我一遍一遍地啃编译器附带的emacs编辑器的源代码。我上瘾了,这项工作充满了挑战性,我喜爱它。
 
  我希望你也有过类似的体验——那种因为程序终于在计算机上运行起来而产生的巨大成功带来的喜悦。几乎所有我问过的程序员都说曾有过类似的感觉。这种感觉正是让我们西安这个行业的原因之一。然而,在日复一日的编程中,这种感觉为何消失得无影无踪了呢?
 
  什么是遗留代码?定义:遗留代码就是指从其他人那儿得来的代码。导致这一点的原因很多,例如,可能是我们的公司从其他公司那儿获取了代码;可能是原来的团队转而去做另一个项目了(从而遗留下了一堆代码)。总而言之,遗留代码就是指其他人编写的代码。不过,在程序员的口中,该术语所蕴涵的意义却远远不只这些。遗留代码这一说法随着时间的推移已经拥有了某些独特的含义。
 
  那么,当你初次听到“遗留代码”这一名词的时候,心里是怎么想的呢?如果你也和我一样,那么大抵会联想到错综复杂的、难以理清的结构,需要改变然而实际上又根本不能理解的代码;你会联想到那些不眠之夜,试图添加一个本该很容易就添加上去的特性;你会联想到自己是如何的垂头丧气,以及你的团队中的每个人对一个似乎没人管的代码基是如何打心底里感到厌烦的,这种代码正是你希望彻底扔进垃圾堆的那种。你内心深处甚至对于想一想怎样才能改善这种代码都感到痛苦。这种事情似乎太不值得我们付出努力了。此外,遗留代码的定义中没有任何地方提到代码编写者。实际上,代码退化的方式是多种多样的,其中许多与是否来自另一个开发团队根本没有任何关系。
 
  没有编写测试的代码是糟糕的代码。不管我们有多细心地去编写它们,不管它们有多漂亮、面向对象或封装良好,只要没有编写测试,我们实际上就不知道修改后的代码是变得更好了还是更糟了。反之,有了测试,我们就能够迅速、可验证地修改代码的行为。
 
  我希望你能认为本书中的技术对你有所帮助,并助你重拾编程的乐趣。编程可以是一项回报丰厚并让人感觉是一种享受的工作。如果你在日复一日的编程生涯中并没有感受到这一点,希望书中提供的技术能够帮你找到这种感觉,并把它带给你的整个团队。
 
=====================我有话说:=====================
 
  编程其实是很有意思的事情,并没有外界所说的那么高深莫测或者乏味。
 
  在我看来,编程就如同游戏,都是操控数据的干活,都是做那些旁人一眼看不透的事。作为一个80后,一定尝试过玩一个吸引人的游戏连续几个小时不能自拔,也许父母会说该吃饭睡觉一类,但你已经投入其中几乎忘却周围的一切。游戏中的某样东西,值得你为此投入时间和精力。我曾经被一个网络游戏吸引多年,为它日以继夜的奋斗,直到有一天,我醒悟过来,我离开了网游没有回头,我明白了:那里面的东西不是我的,那上面的人也全部带着面纱伪装自我,就像我自己一样。你在游戏中的所有付出,都是脆弱与不稳定的,它的价值会随时间的变化而变化,最重要的是,你并没创造出什么,你只是改变了一些数据而已。你的付出最终都会因为游戏的结束而灰飞烟灭。
 
  编程和游戏不同,它本身是空白的,需要做些事情让它改变,让它增长,从无到有,从小到大。在代码的世界中程序员甚至像是某个天神,人的创造力可以被转化为真实的东西。可以凭空制造,也可以组合现成的。重要的是,编程产生的软件,可以改变其他人的生活方式甚至文化,而软件业是改变生活方式和文化效率最高的,你在十年前可能一个月才上一次网,而如今可能随时都在上网。
 
  然而,编程最大的挑战不是创造出一样东西,而是让这样东西可以持续发展。在代码的世界里,创造是很容易的,变大是很困难的。就如上文,代码是会腐化的,随着时间的推移和使用方式的变化,越复杂的东西越难以维护,直到代码的消亡。
 
  有时候编写代码就像培养一个小孩:构思或设计的时候像是在怀孕;开始编写第一行时就像分娩;之后随着功能的升级,像对这个小孩进行教育和培养。刚开始时,孩子还小,怎么看都非常的可爱美丽(就像简单的扫雷纸牌,没有缺陷大家都喜欢玩);随着时间的推移,孩子长大了,很乖巧很聪明会让家长感到欣慰,学到了不好的则会变得让人讨厌(产生漏洞);经过高等教育,逐渐培养成人,基本也定了型,后面的就由社会来决定了(软件经过重构和产品化推向市场,市场反应会决定它将来的路)。
 
  一个人是否成功,一方面是家庭教育,一方面是高等教育;软件是否成功,一方面是编码水平,更多的是设计理念。我现在正在学习软件设计,我希望我的孩子们都能成功。

近半月

 
  半个月前进行了次成人再教育,学了一下软件架构设计,受益良多。学到了如何划分问题域、如何分析问题、如何设计规划、如何利用现有资源、如何协作,学到的不仅是软件的设计,还有新的思维方式方法。
 
  近一周来,由于在做某个系统的需求整理工作,没怎么写代码,一直觉得怪怪的,因为平时写习惯了,突然连续几天不碰会手痒。我这才发现我是很喜欢写代码的,可能是喜欢“因程序终于在计算机上运行起来而产生的巨大成功带来的喜悦”感,这种感觉正是让我喜爱这个行业的原因之一。有点像情人一但时间不联系,会有种不安一样。
 
  最近看了好多书,主要是架构分析设计、项目管理这一类的,比较偏理论和方向的。我目前看技术类的书已经无法获得重大突破了,在我看来技术层面已经没什么挡的住我的“大山”了。