你最值得学习的编程语言

原文:The best coding language for you to learn.
作者:Roger Huang
翻译:dreamana.com

有些人问我,应该学哪个编程语言才最有用或者最好。

先抛开 HTML/CSS —— 我认为答案取决于您想用代码来实现什么。

Javascript 及其框架对于仅使用一种语言来构建某些东西确实非常有用。

你就希望你的编程语言变得流行吗

原文:So You Want Your Programming Language to Be Popular
翻译:dreamana.com

关于作者

Antonio Cangiano 是 IBM 的软件开发及技术推广人员。 他撰写了《Ruby on Rails for Microsoft Developers》–由 Wrox 出版(2009)和《Technical Blogging》–由 The Pragmatic Bookshelf 出版(2012)。 他还是 Cognitive Class 的营销主管,Cognitive Class 是一项 IBM 教育计划,在他帮助下学员数从 0 增长到 100 万名。 你可以 在 Twitter 上关注他


有一些编程语言越来越流行,而有一些不会,为什么?流行的语言都比不起眼的语言更好吗?[1] 问题看起来并没有那么简单,我们一起来拿起长棍捅向这个马蜂窝。

感谢 Adobe (Macromedia) 的 Flash

原文:Thank you Adobe (Macromedia) for Flash
翻译:dreamana.com

Google trends, Apple, Google Chrome 以及 众多开发者 都对 Flash 赶尽杀绝。在我看来,若没有 Flash,如今的网页技术栈看起来可能是另一个样。

关于本文作者 (Credentials)

我写第一行 ActionScript 2.0 代码时是在 13 年前,那时候通过网页的形式流传。Flash 动画大爆炸,文字特效到处飞,还有 Flash 菜单。另外,我觉得我是世界上在配色方面最糟糕的人。虽然我喜欢 PC,我也不知道那个时候所做的就算是编程了。

若干年后,我写了越来越多的程序,有些用 Pascal 有些用 C ,它们都没有能吸引我很长时间(在大学之前)取而代之我用 Flash 做实验,我非常喜欢那种简单化:让 MovieClip 动起来,时间轴管理,或是做鼠标交互。大学期间,我转向关注 C++98,Verilog 及 SystemC。机缘巧合,我进入了游戏行业,在 GameFactory 工作。在那里我协作开发了 7 个 Flash 项目和 2 个 Unity 4 项目,之后我在 King 做 AS3/C++ 引擎开发者。所有这些都没有让我成为专家,既不是语言,也不是最佳实践。我能达到的那个水平是,觉得 Flash 提供那些 API 和技术很舒适,我可以很好地利用它们。

Flash 的亮点 (Bright sides of Flash)

API

我以前没注意到这方面,但当我作为一个引擎开发者工作之后,我才明白到,想要提供简洁而又有前瞻性的 API 是多么困难的事情。作为一名菜鸟,我只能臆测哪些 API 可以调用。在 Flash Player 上工作 8 年以来,我不记得有任何突变带来的问题。API 足够灵活去添加新功能,到处都非常聪明的设计了传递一个额外配置对象,比如 LoaderContext。例如,当他们要添加一个异步图像解码,不是通过添加额外参数给函数调用,而是 Context 的一个额外属性。这就是 KISS 原则 的实践。

Choosing the web's future

出处:TechDays 2016 The Netherlands - Choosing the web’s future (by Peter-Paul Koch)
录影:https://channel9.msdn.com/Events/TechDays/Techdays-2016-The-Netherlands/Choosing-the-webs-future
幻灯片:http://quirksmode.org/presentations/Spring2017/goingwrong_vanlanschot.pdf
翻译及整理:dreamana.com

四个问题

  1. Web 开发者想模拟原生应用,我个人认为是这不可能的
  2. 这导致浏览器制造商添加越来越多的功能
  3. 而且,我们获得越来越多的工具没有完全解决一个问题反而成了一个问题
  4. 刚接触 Web 的人们常常会认为 Web 只是一个平台

掌握模块模式

原文: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 声明在全局域内,这意味着能够随处调用,甚至传到另一个模块里面。

复习 JavaScript

原文:A JavaScript refresh
翻译:dreamana.com

开始之前我们将会涵盖一些 JavaScript 的关键概念。如果你过去几年没有关注 JavaScript 又或者是 JavaScript 新手,我希望这些内容能帮到你。

我们会提及到语言到基础比如变量、函数、作用域以及不同类型,但不会花太多时间在更基础但比如运算符,又或者什么是函数,什么是变量,作为开发者的你应该都知道这些了。我们将通过简单的例子,突出重点,以一个交互开发者的角度,有其他技术比如 Flash(ActionScript3),Java,C#或原生 (C++) 的开发背景,去探讨 JavaScript。

像其他受控语言 (managed language) 一样,JavaScript 运行在一个 JavaScript VM 当中,一个关键的不同点是它不是执行字节码,JavaScript VMs 是基于源代码的,直接翻译源代码为原生代码,通过一个叫 JIT(Just in Time 编译器) 的东西。JIT 在运行时(实时)对代码进行优化工作,取决于不同的架构对平台进行特定对优化。当然,当今大部分浏览器都能运行 JavaScript,下面列出都这些是当前行业界最流行的 JavaScript VMs:

相比起低层语言 (low-level language),JavaScript 提供来一些严谨的便利,比如自动内存分配和垃圾回收机制。虽然这些东西会有速度的开销,但受控语言 提供更多的价值在生产力和平台覆盖方面上。使得现在的开发者们喜欢这些语言多于低层语言,尽管性能有所损失,因为当遇上要发布到多平台上的时候,使用那些低层语言 需花费更高成本。

在我们开始之前,区分出那些浏览器上怎么运作是非常重要的。一方面,我们有核心语言 JavaScript,另一方面,我们有浏览器的 API。历史原因,大多数教程都通常将 JavaScript 和 DOM 合在一块来讲,但他们已经进化成两个强大的独立体。因此我们先谈 JavaScript,之后再深入 DOM 和浏览器 API。这第一篇文章所有提到的只是核心部分,不需要和浏览器 API 打交道,即是纯核心的 JavaScript。 下面列举的是代表着 JavaScript 中通用的核心对象:

  • Array
  • Boolean
  • Date
  • Function
  • Number
  • Object
  • RegExp
  • String
  • Error

要完整的全局对象列表,请查看 Mozilla 的 Global Objects 页。其他对象你可能再 JavaScript 中见过,比如 Window, CanvasRenderingContext2D, XMLHttpRequest 对象,又或者是其他不是 JavaScript 本身去处理的,只是针对特定浏览器的对象,比如网络访问,音频,渲染等等。我们在以后的文章中谈论这些 API。

Swift for AS3 developers 系列

Swift 类型推断

原文:Swift type inference
翻译:dreamana.com

Flash 开发者们经常认为能够声明变量的类型是最喜欢的 ActionScript 特性之一,这使得切换到其他动态语言(比如 JavaSctipt)变得步履艰难。使用了类型,编译器可以很容易地捕获错误,可以优化字节码使得我们的游戏和 Apps 运行得更快;编辑器带代码提示功能的,可以在我们每次敲键盘的时候提供大量关于代码库的信息,而重构时能让我们跳过繁琐又易错的跨多个文件编辑。就像 ActionScript, Apple 的新语言采用几乎一样的语法提供一样的便利:

// ActionScript
var toggle:Boolean = false;
var integer:int = 2;
var ratio:Number = 0.5;
var text:String = "Hello, ActionScript!";
var custom:MyClass = new MyClass();

// Swift
var toggle:Bool = false
var integer:Int = 2
var ratio:Double = 0.5
var text:String = "Hello, Swift!"
var custom:MyClass = MyClass()

不过,Swift 更进了一步。如果我们可以不用每次都声明变量类型,就可以获得严格编译器、额外优化和所有强大编辑器所带来的好处会怎样呢?我正是在说类型推断 (type inference) 特性,Swift 有!其实我们可以简化以上的代码,因为编译器懂得自动检测每一个变量的类型,不需要额外的注释:

// Swift
var toggle = false
var integer = 2
var ratio = 0.5
var text = "Hello, Swift!"
var custom = MyClass()

编译器很聪明,它能明白你声明了一个 Bool 型,一个 Int 型,一个 Double 型,一个 String 型和一个 MyClass 实例,因为那就是等号的另一边的东西。如果你阅读代码,这很明显,Swift 编译器也这么认为。然而,如果代码变得有点复杂时,可能你不能一眼就看出变量的类型是什么。那么就去声明类型吧,提高可读性,用上面第一个例子的语法。也两者中是最好的。

正如你看到的这些例子,Swift 不使用 new 关键字去实例化一个新对象,一行末尾的分号实际不是必需的。加上类型推断,有三个方式使你花更少时间去打字,更快地完成产品。每天都节省了时间,与此同时,你不会失去来自编译器和编辑器的强大的语言智能特性。

July 16, 2014

游戏编程模式

原著:Game Programming Patterns
翻译:dreamana.com

引言

在五年级时,我和我朋友被允许进入一个闲置的放着几台非常破烂的 TRS-80s 的课室。为了启发我们,一位老师找来了份印着一些简单 BASIC 程序的资料给我们捣鼓。

那些计算机上的磁带驱动器是坏的,因此每次我们想运行一些代码,我们不得不仔细地从零开始打。这使我们更偏向于只有几行代码的程序:

10 PRINT "BOBBY IS RADICAL!!!"
20 GOTO 10

也许如果计算机打印足够多次,它就可能魔法般地变为现实了。

即便如此,这个过程是充满了危险的。我们不知道怎样编程,因此就算是一个小小的语法错误我们也是不懂的。如果程序不运作,经常这样的,我们都要从头开始过。

在纸堆的背后是一个真正的怪物:一个占了好几页的密密麻麻的程序。我们仅仅想尝试它都花了很长时间才鼓起勇气,但它是无法抗拒的 ——清单上面的标题是“Tunnels and Trolls(地道与巨怪 ?)”。我们真不知道它用来做什么的,但听起来想是个游戏,还有什么能比你自己编写一个电脑游戏更酷吗?

我们最终都没有让它跑起来,一年之后,我们离开了那课室。(很久以后,当我真正懂了一点 BASIC,我发现它只是一个桌游 (table-top game) 的字符生成器而不是游戏本身。)但木已成舟 ——从那以后,我就想成为一名游戏程序员。

优化 AS3 代码提高性能

原文:Learn to Optimise your AS3 Code for Speed and Performance
作者:Michael James Williams
翻译:dreamana.com

※译者注:这是一篇关于程序优化的通俗易懂的文章,简明扼要。

“优化”是指使你的代码更有效率。通常你会优化它的速度 ——不是使游戏玩得更快,但要使游戏运行得流畅不卡。

(如果你的 SWF 比你想象中的几 MB 大,你可能想优化它的大小,但是这是另一个话题需要另外再讨论。)

各种各样的技巧去实现优化归结成一条原则就是:

Don’t make Flash do more work than it needs to 不要让 Flash 做超过它需要做的工作。

视频游戏 UI 设计:叙事理论

原文:Video game user interface design: Diegesis theory
作者:Dave Russell
摘录:dreamana.com

Tags