编程的本质

为什么我如此热爱编程?我的意思是,我从 让程序运转良好和确保它编写清晰、组织有序中 收获了多得不思议的满足。我总是被编程所吸引,我学得越多,我就越想学更多、越想提高更多。

我开心地坐在电脑前面,花费数个小时尽量描述最好的算法,只是为了解决一些乏味问题而用一个很少像人类语言的、难懂的语法,它只是像自然语言,因为它使用了一些简单的英语词汇。为什么是那样?是什么让编程如此快乐,我敢说是有趣?下面是我认为的最好的一些理由,它们组成了我认为是编程本质的东东。

创造性地解决问题

每一个编程问题都是堆满你大脑而需要解决的新挑战。即使你以前做过,仍然有一部分在你解决时会产生新的问题。你能在一个新的上下文实现,或者为了高吞吐量、数百万的用户或难以想象的低电力。那些问题需要创新才能克服。

你做的任何编程本身都是新的,至少对你是这样,因为如果不这样你将要使用你已经用过的软件。在大多数情况下,你试图解决的问题相对于多数人来说,是非常新的,你也在学习。你在学习问题域(Problem domain)【注1】,你在学习需求和约束,你在学习如何最好地解决眼前问题。

整个过程充满了如此多的创新。设计准则和代码规范是好的,但是它们从来不足以应付每种情况,或为任何更有趣的问题提供解决方案。编程首先是、且重要的是一个创新过程,你拥有的知识越多,你就越能在这些难题之间想到新颖的解决方案。

想法的表达

如果该解决方案是费解的,那么它有创新也不是足够的。我花了好长时间才理解,但是好的编程就像创新地解决问题一样,需要很好的写作能力。我过去常常认为,如果代码写得好,且做了它该做的事,就足够了,但是编程比这要深入许多。

除了只是告诉计算机如何做一些事情,好的代码有一个优雅的说法。如果这就是全部,我们应该仍然使用机器语言。不,编写良好的代码可以清晰地表达解决方案的想法和意图,因此它可以马上被其他程序员理解,包括将来的你。当这做到了,还存在一个比一系列执行之类更好的层级。

在代码里良好地表达想法是极其困难的。这和通过写作清晰地表达想法一样困难,两者需要终其一生来掌握。如果你继续致力于此,用你的整个生命提高编程的这个方面是可能的。

对他人的同理心

...

请不要改变世界

根据HackerNews上的一份调查显示,建立一个web应用程序的第三个受欢迎的原因是改变世界。

我发现上面的声明太让人不安、误导和不公平。几乎是侮辱人的。每次我读到关于扎克伯克、盖茨和其他想去改变世界的亿万富翁时,我就觉得痒痒。当我看到一家新的创业公司想去改变世界时,我就感到厌烦。

一个男人、女人或一群人能够通过一个想法去改变世界。一个想法通常发源于一项运动。这项运动使改变发生。很多人往往死于两者之间。就是这样。

twitter是在阿拉伯之春的运动中才被大规模使用的,用于彼此以及与外界沟通。但它只是一个工具。如果twitter那时不存在,其它工具将被使用。Jack Dorsey也没有一夜之间变成切-格瓦拉,因为twitter在阿拉伯之春的运动中被当做一个沟通媒体来使用。

协议、程序和web应用程序只是工具。工具可以被引进或禁止想法的繁殖。取决于当时情况。但非常肯定的是,工具不是因为一个想法而创造或战斗。

当我想那些改变了世界的人,我会想到圣雄甘地纳尔逊·曼德拉马丁路德金女权主义者和其他很多人。这些人实际上让世界变得更好了。想法是免费的,种族隔离制度结束了,非洲裔美国人在美国拥有他们的权利,至少在西方世界,女性被允许投票和拥有自己的财产。或许并不总是这样,我敢肯定一个web应用程序是不能够取得这些成就中的任何一项的。

因此请不要去做。不要四处游说你想通过写软件来改变世界。改变世界是一项自命不凡的任务。在我看来,对于那些实际上改变世界的、受尽苦难让我们的生活更加美好的那些人而言,这种论调夹杂着极大的不尊重。

原文地址:http://www.convalesco.org/blog/2014/04/22/please-dont-change-the-world/

游戏机制探索

游戏机制探索网站

各种游戏机制、算法和效果的具体例子的汇总。这些例子都是借助JavaScript语言的Phaser游戏框架实现的,但是概念和方法是普适的,能够被任何引擎采用。把它想象成伪代码,每节包含一些不同的例子,按照从非常基本的到比较高级的实现的顺序进行。每个例子都是交互式的,对键盘或鼠标输入(或触摸)做出响应。

我叫John Watson。通常我靠做互联网方面的工作养活自己。但是在过去的几年里,我已经自学了游戏开发,在我很小的时候我就想做。我制作这些例子的目标是为其他游戏开发者提供一个有帮助的资源,特别是那些刚刚起步的游戏开发者,包括我自己。

每个例子关注一个概念,包括源代码的具体实现。它们并不意味着完全正确或要代表一个完整的游戏。它们没有被高度优化。它们甚至不是 实现被说明的游戏机制的 最佳方法!(它们当然不是唯一的方式。)它们是为了清晰而编写的,有助于容易地理解潜在概念,并把它们应用到你自己引擎的工作中。我期望随着我收获经验的同时,某些例子会演化。不过我希望你发现它们的用处,并在你自己的游戏里把它们作为起点。

这是一项进行中的工作。如果你有问题、纠错、或建议,请联系我。感谢你的访问!

原文地址:http://gamemechanicexplorer.com/