访谈嘉宾: Nate Murray 内特是一名全栈开发人员,编码工作从深度学习领域的图像识别到手机游戏的开发


曾供职于 IFTTT ,处理MapReduce,分布式计算,iOS应用程序和一些Web应用程序中的T级大规模数据集挖掘工作

最近和Ari Lerner、Felipe Coury、Carlos Taborda合著了 《AngularJS 2权威教程》 一书

除了编程开发之外,生活中玩音乐、养蜜蜂

参与开发了一款专为“喵星人”设计的游戏(http://www.ipadgameforcats.com/),该游戏被《纽约时报》《洛杉矶时报》《ABC 新闻》等多家报社报道并评选入围“前100款热门iPad娱乐类应用软件”

此外,在Github上有很多的开源项目: cascading-simhash Smoker Similarity Chordjerl …… 《AngularJS 2权威教程》 堪称AngularJS 2领域的里程碑式著作,涵盖了关于AngularJS2的几乎所有内容

即使没有任何经验,本书平实、通俗的讲解,递进、严密的组织,也可以让你毫无压力地登堂入室,迅速领悟新一代Web应用开发的精髓

如果你有相关的经验,本书对AngularJS 2概念和技术细节的全面剖析,以及引人入胜、切中肯綮的讲解,将帮助你彻底掌握这个框架,在自己职业技术修炼之路上更进一步

访谈内容: 图灵目前正在翻译 《AngularJS 2权威教程》 ,我们有必要、也很荣幸请到合著作者之一Nate Murray,进行一期图灵专访

对Nate而言,AngularJS意味着什么,它又有什么优势值得作者们为AngularJS写本专著? Angular为编写和组织Web应用程序提供了美妙的框架

它基于组件开发Web,运用可伸缩、容易理解的方式编写易于维护的大型应用程序

过去我们需要借助jQuery这样的库来读取和改变DOM,但这样的代码,众所周知,相当笨拙

然而,把代码拆分成组件可以将系统分解,每个组件只负责视图的某个部分,整个应用程序也就更容易推出

《AngularJS 2权威教程》 是 《AngularJS 权威教程》 的升级版么? 不,这是一本全新的书

Angular 2和Angular 1在逻辑上有一致性,但它们的框架完全不同

《Angular2 权威教程》向读者介绍了一些新库,同时增加了作者们近些年来在Web开发方面的新认识

在编写 《AngularJS 2权威教程》 的过程中,4位(Ari Lerner, Nate Murray, Felipe Coury, Carlos Taborda )作者是如何合作的?你具体负责哪部分? 我主要负责提纲、调查、编辑和协调整个“写书项目”,差不多编写了一半的内容

Felipe Coury 同样贡献了大量的内容,他的工作非常的出色

多人合作著书的最大挑战应该是统一问题,幸好我们几人的追求一致,实际操作中并没有太大的问题

你怎么看待代码和文学的关系? 理想情况下,代码逻辑要足够清楚,不需要任何辅助文档

在被机器理解之前,代码要为人类提前理解,但实际情况告诉我们,有些人并不适合一开始就学习代码库

解决办法有很多,尤其是“文学化编程”领域(文学化编程是由高德纳提出的一种编程方法,该方法认为编程就是用自然语言如英语,解释程序逻辑的过程

穿插宏和传统源代码的片段,生成可编译的源代码

IPython/Jupyter 是文学化编程方面比较成熟的工具之一,但这些工具要求所有代码必须出现且以线性顺序呈现

这意味着用这些工具只能完成一小部分的应用程序,无法真正掌握整个结构

代码不是文档,更像是一个图表,你需要来回跳转

为了解决上面的问题,我最近开发了一款 cq(https://github.com/fullstackio/cq) ,借助CSS样式选择器提取代码片段到文档

在写《AngularJS 2权威教程》的时候,我们就借助 cq 有效减少了拼写错误和维护难度(我们总是从磁盘上可运行的代码里直接加载需要的代码块)

选择器清楚地掌握代码结构,即使代码行号发生了变化,鲁棒性也不会改变

这当然不是代码和文学关系的最终解释,但对我们的理解有很大帮助

从您的简历介绍上,我们得知,从2009年开始你一直从事大型数据挖掘工作

相信你一定能给图灵社区成员一些数据挖掘方面的建议

某些情况下,我们需要在父作用域内操作子作用域的数据,作用域间通信的最佳实践是什么?是 $broadcast/$emit/$on 吗? 你说的 $broadcast/$emit/$on 应该是指Angular 1

《AngularJS 2权威教程》主要关于Angular 2,并不包含这些,但下面的概念同样适用

在经典Angular里, $broadcast/$emit/$on 绝对是作用域间数据传递的第一选择,但随着Angular的演进,我们的思考方式和工具也都发生了变化

特定情况下,我们可以根据以下三个方式来决定应用程序的数据结构: 通过包含EventEmitter 的服务管理状态; 如果你更喜欢Observables,采用RxJS并让组件订阅这些RxJS流的变更; 完全摆脱 $scope ,使用Redux

Redux是近来新出现的一种有趣的数据结构模式,通过将数据存储在中央数据结构减少数据直接突变

这样,我们就不再需要调度action,把旧状态和action 传递给返回新状态的函数

我建议完全放弃 $emit/$broadcast 和 $scope ,借助Redux存储任何一个全新Angular项目的状态

处理大型复杂结构的数据时, ng-repeat 有时会出现卡的现象,应该如何提高它的性能呢? 有一个好的办法是只显示一定的数量,然后循环利用DOM元素(而不是显示整个列表,并为每一个创建DOM元素)

假如重复可滚动容器中的一个div列表,你可以限制DOM中div的最大数量比如为100,然后等待容器元素滚动并填充div

设置这些需要大量的工作,但会得到更好的性能
现在我们来预测下Angular的前景

Angular有没有可能走进后端开发,成为一个类似Diango的后端开发解决方案? 就我而言,成为类似Diango或者Rails这样的后端开发框架并不是Angular的目标

Angular本身是一个强大的前端开发框架,作用于浏览器的DOM,能够向任何API发出HTTP请求填充数据

也就是说,Angular 2这样的构建方式支持多个平台,尤其是移动开发平台

能够在Angular 2 框架下运用NativeScript或者Ionic创建移动客户端相当激动人心

在服务端,Patrick Stapleton和其他贡献者为 Angular Universal (https://github.com/angular/universal)也做出了很棒的努力

Angular Universal可以加速服务器运行和应用程序启动

理论上,它能为用户带来更好的性能体验

Angular技术将来会直接封装进浏览器内部么? 这很难说,但很可能不会

如果可能,也是浏览器让Angular的某些功能不再必要
Web组件就是一个很好的例子

浏览器支持的功能越来越广泛,最终使 @component 没有必要存在

浏览器还会提供变化检测,比如 Zones(https://github.com/angular/zone.js/) ,这样我们几乎可以看到浏览器实现Object.observe,Object.observe跟Angular的 $watch 非常类似

但它并没有成为ECMA标准的一部分,很好

Angular 2相对于组件有更多的功能,比如路径选择、依赖注入、测试框架,等等

虽然这些框架都很好,但任何框架都不能适合每一种情况,所以我也不知道它们会不会被封装进浏览器

Angualr技术很强大却也复杂,能不能给初学者一些学习上的建议? 学习任何一种框架的最好方式就是用这种编程框架构建些东西出来

所以我建议初学者到Angular官网上学习文档,跟着教程学习

Angular1 和Angular2 官网上都有相关的介绍教程

接下来,我建议初学者找到能够提供一步一步引导学习的示例代码源

我个人以为 《AngularJS 权威教程》 和《AngularJS 2权威教程》就是很好的资源,另外Egghead.io也提供了很棒的视频课程



欢迎投稿 职场/创业方向. 邮箱wangfzcom(AT)163.com:王夫子社区 » 访谈 | 专访《AngularJS 2权威教程》作者Nate Murray:相比文档,代码更像图表

    标签:

点评 0

评论前必须登录!

登陆 注册