你最值得学习的编程语言

原文: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] 问题看起来并没有那么简单,我们一起来拿起长棍捅向这个马蜂窝。

属于我们的节奏

最近在读一本书,是日本的吉泽秀雄先生写的一本关于游戏设计方面的书。贯穿全书的是“节奏”二字,也算是一个独特的角度去考虑游戏设计的重心。

我读书时都有读序言的习惯,偶然发现这本书的译者也写一了篇不错的序。介绍书籍之前,译者简要地带过了一段 80 后与电子游戏的历史,以及对国内游戏行业的一些见解。非常直白,一针见血。在此推荐各位也读一读。

除了游戏之外,国内的动漫行业情况其实也很相似。同样作为文化产业,广受年轻一代的喜爱,也是起步晚,也是受大环境制约,也是一定程度地被扭曲……

现实如此,而且大环境不可能那么简单地改变。妄图想短时间内迎头赶上什么的是不可能的。

不需要那么浮躁,毕竟文化是需要沉淀的。

希望,我们能找到我们自己的节奏。

感谢 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 只是一个平台

To be continue

好久没碰博客了,我也不知道从何开始写。

“为什么要写,要写什么,写给谁看” 每次正想开始敲下第一个字的时候,都会莫名地自己反问自己。

也许是因为年龄大了,开始怀疑人生了。以前写每一篇的时候都未曾有过这样的顾虑,不问为什么,喜欢写什么就写什么,哪怕只写给自己看,哪怕只是一些无意义的意识流。

网络越来越复杂,设备越来越多,信息越来越廉价而冗余。生活在一个信息垃圾堆里面,心情变得烦躁。每每想到这点,自己就不想加入制造垃圾信息的行列。于是想限制自己的输出,换成发一条微博,写一条评论。然而字数的减少并不一定提高信息的质量,于是,自己再怎么故作清高也是不可避免成为制造垃圾信息大军的一份子。

那,干脆什么都不写好了……要成了自闭症了吗?

对于这个博客,原先的定位是技术学习笔记、翻译文章之类。经历了若干次程序更换和界面改版,也累积了一些幼稚的文字,不管对现在还有没有用,我都将大部分留下来了。

是时候继续写点东西了

Javascript Patterns 摘录

编写可维护的代码:

软件 bug 的修改是需要成本的,并且这项成本总是在不断地增加,特别是对于已经广泛发布的产品代码而言,更是如此。最好的情况是当我们一发现 bug,立刻就可以修改它,这种情况只发生在刚写完这些代码后不久。否则,一旦转移到心到任务上,忘记了这部分代码,就需要重新阅读这些代码:

  • 花时间重新学习和理解相应的问题。
  • 花时间理解当时用于解决相应问题的代码。

对于大型项目或公司而言,还存在另一个问题,就是最终修改代码的人,往往并不是当初写代码的人,也不是发现 bug 的人。因此,减少理解自己以前写的代码的时间,或者减少理解团队中其他人写的代码的时间,就变得非常关键。同时,这也影响到开发完成时间(商业收入)和开发者的情绪,毕竟开发新产品更能让人兴奋,而不说花费那么多时间在老项目维护上。

另外一个事实在于,软件开发人员通常读代码比写代码更耗时间。通常的情形是,当我们专注于某个问题时,会坐下来花一下午的时间编写出大量的代码。这些代码可能当天就可运行,但要想成为一项成熟的应用项目,需要我们对代码进行重新检查、重新校正、重新调整。譬如:

  • 发现 bug
  • 项目加入新的特性
  • 项目需要在新的环境中运行(如市场上新出现的浏览器)
  • 代码变换意图
  • 代码在新的框架或体系下需要完全重写,甚至是应用一种新的语言

因为这些改变,可能最初只是几小时工时写出来的代码,最终需要花费几周的工时来阅读。这就说为什么创建易维护的代码是一个项目成功与否的关键。

易维护的代码意味着代码具有如下特性:

  • 阅读性好
  • 具有一致性
  • 预见性好
  • 看起来如同一个人编写
  • 有文档

Hello Arduino

09 年有机会接触这 Arduino 的时候,结果却跟它擦肩而过。当时没感觉到这个小东西的潜力,机缘巧合重新认识这个东西,感觉很奇妙。

该从哪里开始写呢?

掌握模块模式

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

iOS 开发学习笔记

Stay hungry. Stay foolish.

Tags