原文地址:http://radar.oreilly.com/2011/06/time-to-learn-javascript.html
作者简介:Mike Loukides

很长时间以来,JavaScript在我眼里都是编程语言中的二等公民。早先,它经常是很多安全问题的发源地,就像是胶水一样,它能把HTML应用与样式粘到一块,可没有人拿它来正正规规地写程序;这样的情形太普遍了。而Java、Ruby、Python,这些才是真正能用来写程序的语言。

过去几年间,我对JavaScript的态度有了彻底的改变。JavaScript已经“长大成人”了。我敢保证很多JavaScript开发人员都不会认同我前面的说法,他们会说JavaScript一直都是一个十分强大、成熟、深得人心的语言。或许他们说得没错,事实上只要是一门完整的编程语言,就能拿来写程序,也包括BASIC这种滥东西。而一门语言真正有用,必须一方面自身具备很强的表达能力,另一方面还要有众多的库和开发工具。显然,JavaScript的表达能力早就没有问题了,即便是创建对象的方式有点不好让人接受,其实问题也不大。直到最近,一些极其重要的扭转局面的技术出现了:jQuery、JSON、Node.js和HTML5。或许JavaScript以前就是一门完善的语言了,但却是这些重要的相关技术(以及其他一些没有在这里提及的),让JavaScript成为了每一个开发人员都知道的语言。如果明年你要学一门新语言的话,那一定就是JavaScript。

潜力无限的Node.js

Node.js潜力无限的意思,就是它有可能引发Web开发的革命。Node.js是一个框架,用于构建高性能Web应用——即使是巨量的请求也能应对如流。虽然Node本身作为一个底层框架,能够用于构建任何应用,但它还是最适合构建Web服务器。它的异步事件驱动模式与传统的请求-响应模式相比,无疑更适合Web应用。 查看全文 »

出处:http://heim.ifi.uio.no/~trygver/1979/mvc-2/1979-12-MVC.pdf

我创立的Model-View-Controller(MVC)模式作为一个直观的解决方案,针对的是一个一般性的问题,即让用户能够支配自己从多个角度看到的信息。MVC引起了的关注之多,让人有点始料不及。有些教材对MVC的改造甚至到了离经叛道的程度,企图达到让计算机来控制用户的悖谬目的。

而MVC的根本目的是在人类头脑中的心智模型和计算机中的数字模型之间架起一座桥梁。理想情况下,MVC的实现方案与用户直接查看和操作领域信息的直觉吻合。假如用户想在不同的上下文中以及/或者以不同的视角看到相同的模型要素,那MVC就有了它的用武之地。

模型

模型,表示知识。它既可能是一个对象(当然,如果仅一个对象就没多大意思了),也可能是由许多对象组成的结构。

模型及其组成部分是一方,而模型创建者意识中要表现的世界则是另一方,这两方应该一一对应。自然地,模型的每个节点都应该明确对应于问题的一个部分。

模型的所有节点都应该把问题解决到相同的程度,把面向问题的节点(例如,在日程中添加约会活动)与实现细节(例如,用段落展示)混在一起不容易理解,是应该避免的做法。

视图

视图是模型的(可见的)表现。视图通常会突出模型的某些属性,同时隐藏其他属性。从这个意义上讲,视图就像是一个展示过滤器。

视图依赖于模型(或模型的一部分),通过询问问题的方式从模型中获得用于展示的必要数据。视图通过发送适当的消息,也可以更新模型。这些问题和消息都要按照模型的术语来传达,由此视图必须得知道自己所要表现的模型,它的属性都有什么语义。(比如说,视图可能会询问模型的标识符,期待返回一个Text的实例,但它可能并不认为模型就是Text类。)

控制器

控制器是用户与系统之间的纽带。它为用户提供输入,即它会将相关的视图显示在屏幕适当的位置上(供用户浏览查看)。它为用户提供输出的手段,即它会向用户展示菜单以及其他能接受命令和数据的控件。控制器接收到上述的用户输出,将其转换为适当的消息,然后再将这些消息传递给一或多个视图。

控制器不应该当作视图来用,例如,不能用控制器来画箭头以连接视图的节点。

从另一方面讲,视图也不应该关心用户输入,比如鼠标操作或按键操作之类的。在任何情况下,都应该能够在控制器里编写一个方法,该方法将消息发送到视图,以便原原本本地再现用户的命令。

编辑器

控制器负责连接其所有的视图,这些视图是该控制器的组成部分。有的视图会提供一个特殊的控制器,叫编辑器(editor),以便用户通过它来修改由视图表现的信息。这种编辑器可以被挂接到控制器与其视图之间的路径上,类似于控制器的扩展。编辑完成之后,则从路径上将编辑器移除并丢弃。

注意,编辑器要通过相关视图的具体表现来与用户沟通,因此编辑器与视图是紧密相关的。控制器通过询问视图来获悉编辑器的存在,除此之外没有其他适当的信息来源。

原文地址:Lax Language Tutorials
Andrew Binstock

每年在评审Jolt Awards图书的时候,我都会被一些语言教程类图书弄得心力交瘁。从这些年的评审经验来看,这些语言类教程的写得都不错,但除此之外,少有亮点。换句话来说,这些书都很严谨、很精密,如果读者有足够的定力,通过它们掌握一门语言的编程技术还是不成问题的。可是,即便对那些卖得最好的书,除此之外我都想不出来还能多说几句什么样的赞美的话了。

这些书普遍存在的一个缺点就是把简单的任务复杂化。最大的或者说最常见的一个问题,是作者们混淆了教程与一本面面俱到地介绍一门语言的专著的区别。由于种种原因,出版行业似乎特别热衷于后一种体裁,结果就导致了一些令人瞠目的大部头。我曾经看到过一本“介绍”Java语言的书,厚达1480页。如果说入门读物都得这么厚,显然是不合理的。不消说,这本书深入地讨论了一下AWT和Swing,然后笔锋一转,又给读者罗列出各种各样的第三方库,关于虚拟机的研究当然少不了,而最终则收尾于并行程序设计。谢天谢地,到这里终于全书完。鉴于这本书已经出到了眼前的第4版,有理由认为它体现了作者对它最终的心理预期。那就是,这实际上是教程兼参考书。而且,既然书的重量都达到了4.5磅(约2.04千克),我想多半也只能把它当作参考书来用了。Mark Lutz的《Learning Python》是Python语言图书中与此类似的一本。其他语言类图书中,像把Ruby介绍给西方读者的“鹤嘴锄书”(《Programming Ruby: The Pragmatic Programmers’ Guide》),作为此类图书也是当之无愧。书的前一半是教程,后一半明说就是参考。这种方法就好多了。不用管其中的Ruby教程占了多少篇幅(418页),仅就其质量而言,就充分说明它大受欢迎是有理由的。

第二个常见的问题,就是作者忘了读者在打算学一门新语言的时候,最想做的是什么;当然,无非就是要写几个小程序,借以熟悉语法。然而,很多教程通篇都是只有一两行的微型代码示例,只够演示某个功能,但没有一个独立有用的程序。如果语言还有一个内置的shell(或解释器),比如像Ruby、Groovy、Scala,那这个倾向就越发地明显了。

比如说,Odersky、Spoon和Venners合著的Scala教程(《Programming in Scala》)就能清楚地反映出这个问题。在这本书的前200页里面,超过20行代码的示例只有一个;大部分都不会超过10行。[而在K&R(Brian W. Kernighan和Dennis M. Ritchie)那本书(稍后会说到)里,第一个20行代码的示例出现在第26页。]结果呢,按照我自己的经验,就是看了半天书,也敲了不少代码,由此了解了不少功能,但却始终没有写出一个有点什么用的程序来。实话实说,这种现象简直太普遍了。现在,我眼前就摆着两本书,一本Clojure,一本Groovy,也都是这个套路。
查看全文 »

原文链接:JavaScript: The Definitive Guide Sixth Edition pdf download ebook

每次,只要我的新书一出来,我准会因为盗版生一肚子气。为这事,我都在Twitter上发过消息了,但在Google搜索框里只有写长一点你才会发现微妙的差异。这篇文章题目是什么意思?就是Google对搜索我的书的人给出的建议。

要是有足够多的人把链接指向我这篇文章,没准搜索建议会把那些找盗版书的人都引到我这个页面,而不是盗版电子书网站 :-) 。[更新:太好了,到今天晚上为止,选择上面截图中的任何一条搜索建议,我的这篇文章都会排在那些电子书下载站点前面!庆祝一下这个象征性的胜利!]

好,下面我就想到哪说到哪,不过可不止140个字符啊,谈谈我对盗版图书的看法。 查看全文 »

原文地址:Got Any Quotes from Coders At Work

编程人生

最近,我看完了Peter Seibel的《编程人生》。哈,这是一本世界顶尖程序员和计算机科学家的访谈。看看都有谁,这些牛人在Wiki上都有自己的条目:Jamie Zawinski、Brad Fitzpatrick、Douglas Crockford、Brendan Eich、Josh Bloch、Joe Armstrong、Simon Peyton-Jones、Peter Norvig、Guy Steele、Dan Ingalls、Peter Deutsch、Ken Thompson、Fran Allen、Bernie Cosell和Don Knuth。

这本书固然非常棒,我非常喜欢,不过囿于访谈这种体裁,比较被采访人关于相同话题的观点也确实有点麻烦。但不管怎么说,作者Peter Seibel还是忠实地记录了他们的言论,所以我就想自己从这些智慧箴言中再提炼出一些真正有用的观点来。

经过一番努力,我按照自己的兴趣(静态类型和不变量)分别挑选出了一些重要的话。我这种分法未必合理,供大家参考吧。

查看全文 »

原文地址:My startup story: from big idea to thriving business in 8 short years

2003年夏天,我还在打理自己第一个小公司的时候,突然想到一个“好主意”:社交新闻阅读器。有点类似后来的Google阅读器加智能收件箱(Priority Inbox)和社会化推荐。我没日没夜地想着这件事,觉也睡不着了。每天人虽然躺在床上,脑子里一直在苦思冥想怎么把这个东西做出来。我可能是得了“痴心妄想症”了。“这个阅读器一定会大受欢迎!”,我想。这个想法太好了,要是你的话,恐怕你早就拿着它去招徕风险投资了。可我在温莎(Windsor),加拿大呀,硅谷对我来说太远了,再说我那时候还没听说过VC啊投资啊什么的。我只能靠自己,什么事都从头来。

2003年还没有Google阅读器,Fackbook还在娘胎里,RSS新闻源也少得可怜。找不着RSS源?不要紧,我自己来,我可以自己写一个程序,一个网站一个网站地分析,自动采集新闻或者新内容。没有Faccbook提供社交用户资料?这还真是个问题。没有这些用户,还做什么社交新闻阅读器呢。对,没有用户不行,不仅如此,用户太少也不行。看来我这个“好主意”一时半会是不太可能有结果了,为了吸引用户,我决定先做个简单的东西,免费供人们下载。我对计算机通话还有些经验,开发个小桌面应用,显示来电者的ID对我来说不过举手之劳。两个月后,PhoneTray Free呱呱坠地。

2003年我可真是熬过来的。我的第一家创业公司本来还小有成就,但很快就下滑到了破产的边缘。由于我签证上的身份,我也不能给别人做任何咨询。照直说吧,这一年我没挣多少钱,我差一点就把自己的公司扔掉,然后去找一份全职工作。幸好我妻子还有工作,我们也还有点存款,合计了一下,我们决心一块挺过去,我还接着做自己想做的事。 查看全文 »

原文地址:How to advance your career? Read the Passionate Programmer!

我刚看完Chad Fowler的Passionate Programmer(中文版《我编程,我快乐:程序员职业规划之道》),这本书讲的是如何在软件开发行业中取得非凡的成就。我编程,我快乐:程序员职业规划之道

以下是根据这本书总结的,作为程序员,要取得非凡成就需要记住的15件事。

1、走一条不一样的路
在有利于自己的市场中竞争,如果你满足于“泯然众人矣”,那恐怕就得跟那些低工资国家的程序员们同场竞技了。

2、了解自己的公司
以我在医院、咨询公司、物流企业以及大技术公司工作的经验来看,这一点所言不虚。

不同公司的运营模式差异极大。如果你理解企业的运营模式,那你就不一样了!在这家公司中(或者对客户而言),你是参与业务运营的资产,你的工作能直接产生效益!

3、与最优秀的人为伍
很早以前,我喜欢打篮球,被分配到一个水平比较高的队里。一开始适应的确很困难,但环境的压力越大(重大比赛),我的长进也就越明显。

每个领域其实都一样:你周围人的水平(以及对你的期望)越高,你就会变得越优秀。

4、制造差异
每年学习一门新编程语言。为什么不呢?不断尝试新事物,你关注的技术种类越多,脚下的路就越宽广,你的职业生涯就会日新月异。不知道几年后Java的趋势如何?那就学习Clojure。学Ruby还是Python?这两种语言都可以试试啊。然后你才能知道哪种语言更适合某个特定的项目。看,掌握的语言多了,才能在需要的时候信手拈来吧。

5、畏惧,是最大的敌人
还是直接从书中摘一句吧:“在畏惧中做出的职业规划,很可能会让自己后半辈子就一直被‘圈禁’在小隔断里,永远不会有创造明天辉煌的时刻。没错,那样是安全,但有意思吗?”

6、要成为多面手
如果你掌握了所在领域的知识,那你只能是一名专业人士。用PHP编程?花点时间设置一台Apache服务器,让PHP和MySQL都跑起来。一直在用jQuery?试试Prototype。你懂了吧。

7、一个字:做
别指望别人过来教你该怎么做,出去,自己学着去做!
查看全文 »

Tags: , ,

Interview: Jaroslav Tulach, Author of “Practical API Design”
2008-8-11

Jaroslav Tulach(见图),NetBeans之父、NetBeans API首席架构师,《软件框架设计的艺术》一书的作者。

此次访谈,Jaroslav Tulach会介绍他的这本书,并与大家分享关于设计API的一些独到见解。

你好,Jaroslav,你是不是先作个自我介绍啊?

好,我懂。让我提到自己的是 NetBeans 之父,就是想吸引读者都来看一看这本书,对吧? :) 。但是,如果一个人的名字让说英语的人完全看不懂,要想达到这个目的可不是那么简单的。我遇到这个问题可不止一次了,在设计这本书封面的时候就碰到了。想了解我的读者,下面就是我的一些背景资料。关于这本书,我想说:我在这本书里真的讲了很多有用的东西,而且我也尽了全力把枯燥的内容讲得更好玩一些。

亲爱的读者朋友,

也许你现在正在书店里,手里拿着这本书,问自己:“到底该不该买呢?”让我来告诉你:如果你写过很多代码,而且其他人要在你写的代码基础上编译他们的代码,那结论显而易见:“你早该想一想怎么设计API这个问题了,而本书就是你的得力助手。”

请注意,这可不是一本“5天掌握API设计”之类的书。而且你不可能“只用3天就能看完!”。假如你想找一本简单的参考手册,本书不属于那种类型。不过,要是你对深入了解API设计非常感兴趣,不仅仅满足于怎么设计,还想进一步搞清楚为什么那样设计,那在你把这本书放回书架之前,先听一听我的自我介绍,好吗?

我叫Jaroslav Tulach,我是 NetBeans 的创建人和首任架构师,NetBeans不仅是一个广为人知的IDE,也是第一个用Java写的模块化的桌面应用程序框架。这本书是在我过去10年工作笔记的基础上写成的。10年来,我的工作就是设计和维护 NetBeans API,并把相关的知识传递给其他的开发人员。这本书是来自 NetBeans 核心开发一线的工作实录,其中描述了我们曾经面临的问题,对这些问题逐步深入的理解,以及我们的对策和实施结果。虽然我们的经验来自于 NetBeans 的开发,但这些经验对大多数软件项目都是非常有价值的。

掌握正确设计API的知识,是在21世纪成功实现软件项目的根本所在。希望本书能在你设计世界级API的过程中助你一臂之力!

Jaroslav Tulach
http://wiki.apidesign.org/wiki/InvitationForReaders

介绍一下,为什么要写《软件框架设计的艺术》?

原因很多。在动笔之前,我也时不时地会产生写本书的冲动。但真正促使我下决心写书,还是在一次家庭聚会上。我当时跟表弟谈到想写一本书,他问我:“既然你知道一些别人不知道的东西,也有那么多写书的素材,连出版社都是现成的……,那你还犹豫什么呢?这样不对啊,赶紧写吧!”于是,我决定联系一家合适的出版社,写作和出版这本书。

说说这本书吧。什么是API,准确地说?

“准确地说?”好吧,API就是沟通。你可能会感到意外,我说的沟通不是指开发人员与计算机之间的沟通,而是人与人之间的对话。正因为如此,“什么是API”这个问题才会有各种各样的答案。一切有助于开发人员之间沟通的东西,都可以或者说都应该称为API,比如数据库的结构、硬盘里保存文件的路径、文件的内容、应用程序监听的端口,以及服务器的URL,等等。
查看全文 »

http://radar.oreilly.com/2011/02/2010-book-market-5.html
Mike Hendrickson
2011-2-23

在最后这一部分中,我们将对前四部分作一番总结,深入了解一些畅销书作者,同时展示一些电子图书销售的数据,分析一下为什么部分电子图书的市场表现已经超过纸版图书。

首先来对本报告的前四部分作个简单的总结。

总体来看,2010年美国图书市场的总销量比2009年下降了4.54%。技术图书市场下降了6.46%,技术书出版商比其他同行承受了更多的压力。然而,与2009年技术图书市场下降13.05%相比,这已经是一个进步了。市场趋势的季节性特征仍然十分明显,2010年初的市场快速启动,到了6月份开始骤降,到了秋季又恢复正常。在Bookscan Top 3000中,2010年计算机类图书比2009年增加了268种(包括不同版权年份出版的图书),而2009年比2008年增加了260种,相当于年增长率为3.5%。单品平均销量从2009年的39.64册下降到2010年的37.92册。根据数据统计,2010年少出版图书104种,但单品平均销量增加了6册。注意,这些图书的出版年份都是2010年。

移动开发类图书成为市场主力军。Android编程和Android设备(面向用户)类图书都有极大的增长,而iOS和Objective-C的市场份额进一步扩大。Windows 7的表现也相当不俗,重现了原来Windows XP曾经达到过的市场份额(Vista从未达到过)。平板电脑异军突起,成为2010年底的一大亮点。在多款Android平板电脑即将上市的背景下,有理由相信平板电脑图书市场一定会继续高歌猛进。另一方面,网页制作、Web设计工具以及Web编程类图书都明显下滑。由于Snow Leopard的突破没有前几个版本的OS那么大,Mac OS图书市场多年来首次出现下滑。Flash和Silverlight的市场也有较大幅度的下滑,原因是HTML5能够提供类似的功能,导致了它们的市场关注度下降。

从出版商的角度看,O’Reilly在2010年底爬升至第二位,位居Wiley之后,以微弱优势领先于Pearson。O’Reilly和Dummies这两家出版公司涉足的出版门类最为多样,而它们在6大技术门类中的表现也非常令人瞩目。至于最受欢迎的图书,从码洋来看是PMP Exam Prep, Sixth Edition: Rita’s Course in a Book for Passing the PMP Exam,从销量来看是Windows 7 For Dummies。2009和2010年的最热门语言都是Java,JavaScript和VBA在2010年也增长了不少。简单的回顾到此为止。
查看全文 »

http://radar.oreilly.com/2011/02/2010-book-market-4.html
Mike Hendrickson
2011-2-21

这是《2010年计算机图书市场报告》的第四部分,我们来看一看编程语言市场,对各种编程语言作一备盘点。

与2009年相比,2010年编程语言市场总体下滑,幅度为-6.27%。从销售总量看,2009年图书共售出6,303,125册,而2010年共售出5,931,452册,减少了371,673册。其中,Java语言类图书销量增长最多,2010年比2009年多售出28,633册,而PHP语言类图书销量降低最多,比上一年减少了38,614册。

在盘点各种语言之前,有必要先明确一下“语言维度”这个概念。语言维度是我们对语言类图书进行分类的一个标准,这个标准就是看图书中的代码示例是使用什么语言编写的。比如,Flash Programming with Java这本书,它的基本分类是Flash,但按语言维度分,则属于Java类。同样,Head First Design Patterns中的示例是用Java写的,因此按语言维度分,这本书也属于Java类。

综合来看,2009和2010年编程语言类图书的市场表现是最糟糕的。下面这张图中不包括谈方法论的、项目管理的、消费者操作系统的,以及其他不涉及具体语言的图书。因此,我们现在对编程语言类图书的分析,与本报告第一部分的总体评价出发点是不一样的。这张图显示的是以周为单位的所有语言类图书的市场表现情况,其中2009年和2010年与其他年份比,依旧是最差的。

2008年,我们在报告中分析C#超过Java成为了最热门的语言。但时隔不久,Java图书就在2009年发力反弹,终于在2010年王者归来,重新登上编程语言图书第一位的宝座。通过下面这张2010年最畅销语言的柱状图可以看出,Java在这些语言里遥遥领先,而Objective-C则迅速攀升至第三位,仅次于C#。
查看全文 »