编写可维护的代码:
软件 bug 的修改是需要成本的,并且这项成本总是在不断地增加,特别是对于已经广泛发布的产品代码而言,更是如此。最好的情况是当我们一发现 bug,立刻就可以修改它,这种情况只发生在刚写完这些代码后不久。否则,一旦转移到心到任务上,忘记了这部分代码,就需要重新阅读这些代码:
- 花时间重新学习和理解相应的问题。
- 花时间理解当时用于解决相应问题的代码。
对于大型项目或公司而言,还存在另一个问题,就是最终修改代码的人,往往并不是当初写代码的人,也不是发现 bug 的人。因此,减少理解自己以前写的代码的时间,或者减少理解团队中其他人写的代码的时间,就变得非常关键。同时,这也影响到开发完成时间(商业收入)和开发者的情绪,毕竟开发新产品更能让人兴奋,而不说花费那么多时间在老项目维护上。
另外一个事实在于,软件开发人员通常读代码比写代码更耗时间。通常的情形是,当我们专注于某个问题时,会坐下来花一下午的时间编写出大量的代码。这些代码可能当天就可运行,但要想成为一项成熟的应用项目,需要我们对代码进行重新检查、重新校正、重新调整。譬如:
- 发现 bug
- 项目加入新的特性
- 项目需要在新的环境中运行(如市场上新出现的浏览器)
- 代码变换意图
- 代码在新的框架或体系下需要完全重写,甚至是应用一种新的语言
因为这些改变,可能最初只是几小时工时写出来的代码,最终需要花费几周的工时来阅读。这就说为什么创建易维护的代码是一个项目成功与否的关键。
易维护的代码意味着代码具有如下特性:
- 阅读性好
- 具有一致性
- 预见性好
- 看起来如同一个人编写
- 有文档

原文:Mastering the Module Pattern
翻译:dreamana.com
我是 JavaScript 模块模式的狂热份子。我想分享一些这个模式的用例和不同写法,以及说明为什么这些很重要。模块模式 (Module Pattern) 就是所谓的一种“设计模式”,由于各种原因它非常的有用。我之所以喜欢模块模式(它的变体, 揭示模块模式 Revealing Module Pattern)是因为它让域界定 (scoping) 轻而易举,不会使 JavaScript 设计变得过于复杂。
这也让代码保持简单,易于阅读和使用,使用 Object 是一种非常好的方式,不会让你的代码被啰嗦的 this 和 prototype 声明弄得臃肿。我觉得我应该去分享一些领悟,关于模块非常棒的一面,以及如何去掌握它和它的变体及特性。
创建一个模块 (Creating a Module)
要理解一个模块可以带来什么,你需要理解以下函数的概念是什么:
(function () {
// code
})();
这声明了一个函数,然后立即自己调用。这也称为 立即调用的函数表达式 (Immediately-Invoked-Function-Expressions’s),其中这函数创建了新域并创建了“私有空间 (privacy)”,JavaScript 没有私有空间,但可以用创建新域,在里面包装我们所有函数逻辑来模拟这个。这个做法的结果是,只返回我们需要的部分,其他代码从全局域 (global scope) 分离出来。
创建新域之后,我们需要给我们的代码加命名空间 (namespace),使得可以访问我们返回的任何方法。现在给我们的匿名模块一个命名空间吧。
var Module = (function () {
// code
})();
之后我们有 Module 声明在全局域内,这意味着能够随处调用,甚至传到另一个模块里面。
原著:Game Programming Patterns
翻译:dreamana.com
引言
在五年级时,我和我朋友被允许进入一个闲置的放着几台非常破烂的 TRS-80s 的课室。为了启发我们,一位老师找来了份印着一些简单 BASIC 程序的资料给我们捣鼓。
那些计算机上的磁带驱动器是坏的,因此每次我们想运行一些代码,我们不得不仔细地从零开始打。这使我们更偏向于只有几行代码的程序:
10 PRINT "BOBBY IS RADICAL!!!"
20 GOTO 10
也许如果计算机打印足够多次,它就可能魔法般地变为现实了。
即便如此,这个过程是充满了危险的。我们不知道怎样编程,因此就算是一个小小的语法错误我们也是不懂的。如果程序不运作,经常这样的,我们都要从头开始过。
在纸堆的背后是一个真正的怪物:一个占了好几页的密密麻麻的程序。我们仅仅想尝试它都花了很长时间才鼓起勇气,但它是无法抗拒的 ——清单上面的标题是“Tunnels and Trolls(地道与巨怪 ?)”。我们真不知道它用来做什么的,但听起来想是个游戏,还有什么能比你自己编写一个电脑游戏更酷吗?
我们最终都没有让它跑起来,一年之后,我们离开了那课室。(很久以后,当我真正懂了一点 BASIC,我发现它只是一个桌游 (table-top game) 的字符生成器而不是游戏本身。)但木已成舟 ——从那以后,我就想成为一名游戏程序员。
什么是游戏开发中的实体框架 ?
原文:What is an entity framework for game development?
作者:Richard Lord
翻译:dreamana.com
上星期我发布了 Ash,一个用于 ActionScript 游戏开发的实体框架 (Entity Framework),接着很多人问我“什么是实体框架?”。说来话长。
实体系统 (Entity Systems) 变得越来越流行,众所周知的比如 Unity,还有鲜有所闻的框架比如 Ember2, Xember 和我的 Ash 框架。有一个很好的理由:它们简化了游戏架构,促进在代码中职责分离得清楚,可以用得很乐。
在这篇文章里我将会引导你怎样从传统游戏循环 (Game Loop) 中发展到基于实体的架构。可能要花点时间。这里例子用 ActionScript 实现,因为我正在用这个语言,但是这架构可以应用在所有的编程语言上。
原文:Basic Model View Controller (MVC) Example AS3
作者:Florian Spier
翻译:dreamana.com
Hello folks,
I was searching the web for an example you could call MVC for dummies… What I found were mostly complex examples decorating the basic MVC relevant code with a lot of other stuff, which makes it difficult to focus on and understand the pure MVC thing.
大家好,我本来想在网上搜些类似叫做 MVC 傻瓜教程的例子 … 可是结果我找到的大部分复杂的例子,在基本 MVC 上装饰了很多很多其他东西,使得很难着重理解最纯粹的 MVC。