Node.js开发者学习之路
正如所有新兴并被快速采用的技术框架一样,一开始的挑战就是给你的技术团队增加高效的人才资源。在快速得出关于把 Javascript 开发变成 Node.js 工厂的结论之前,让我们先来看看关于 Node 及产品开发环境的核心问题。 简而言之,核心问题就是:
Node.js 具备基于事件的编程风格
Web 趋向于更小的以响应器/消息为基础的架构
最后,大多数我们试图解决的问题仍然需要通过可扩展的后端架构而不是UI来提供支持。
让我们逐个分析这些问题并揭示它们所带来的挑战。那就引出了我们需要招聘什么的人。
基于事件的程序设计
相对于传统的线程模型,Node.js开发与传统模型之间的主要区别是围绕着事件模型。相对于传统的线程模型,框架在基于事件的程序设计中管理的是控制流。在传统模型里,开发者必须在控制流中仔细处理模型中的流程,主动编写控制流向及返回的代码,要完全了解任务执行完后应该如何继续下面的流程。而对循环进行完全控制的事件模型则会返回到它会去的地方,而你却只能交叉手指祈祷好运。于是挑战就在于你如何组织逻辑,在于如何从过程模型到应用系统的输入与响应模型理解上的转变。这就是关键。
一个好候选人,能就传统的问题通过事件的方式进行讨论。他们是否能够清楚哪种类型的应用程序更适合于Node的方式? 例如,一个I / O与CPU密集绑定的应用程序。著名的聊天服务器就是个很好的例子。问他什么样的复杂变化需要使用这种模式放在一起的代码。 一个好的候选人应该能够解释并发模型,事件循环与多线程的差异,以及它们如何影响可扩展性。
开发来自测试,二者手拉手。JavaScript是一门弱类型的动态语言,来自于Java/C#的世界,你突然失去了你的安全保障(你的“编译器”)。此外,你写代码处理事件都处在模型之中,以测试驱动开发(TDD)的经验 确实变得好用。以我的观点来看,TDD更适合基于事件的编程。实际上最好的开发人员已经这么做了,在测试之前甚至只有一行代码。更关键的是,你要确保你所想要雇佣的开发者有使用测试驱动代码设计的思想,而不仅仅只是考虑去用。下面将会做一下介绍。
这样,我们就有了两个关键的技能点用来寻找候选者,即:编码能力和测试驱动设计!这与我之前说的没有太大区别,除了一些细微上的不同!
范型转换
你可能已注意到了网页的范型转换: 我们正快速地从传统的网页加载刷新走向较小的传感器般的信息,快速地访问小片的实时信息。你将也注意到通过开放式API我们走向传感器连接,器件连接,移动访问。Node.js这种情况,这里也是开源,由小模块API提供访问丰富信息组成。加上有不断成长的模块生长生态的外在,我观察到它惊人的成长---大约30%,从我加入Strongloop大概18个月以来。所以,你雇佣的任何Node.js开发人应该擅长在这样的开发模型下工作: 访问实时信息的小部分。
通常,我相信这意味着这样的开发者:擅长互动开发,快速编码试水,写小的重用的代码片段,遵循基于API开发。
基于类似Express, Connet, Async的关键模块的经验肯定都是加分的。github经验,开源贡献都得加高分。事实上,候选人用GitHub合作对等编码,关注Node.js在Google群和StackOverflow的活跃社区,和他写代码的能力同等重要。用模块生态系统的许多模块,找到已有模块,修好别人的模块或者给别人的模块打补丁,终归都是关键的技能。我要检查候选人GitHub的贡献的趋势和质量数量。他们是好的社区成员吗?他们修好代码吗?他们实行干净健康的特征分支,PR,提交吗?
如果你确实发现有人他积极贡献某节点核心,好,移交到附近的办公室。
安全性,后端架构,培训
伴随着代码开源,Node.js又是基于Javascript,这可能会导致你的应用存在安全隐患。开发者应当对服务器端注入比较熟悉,而且知道如何通过编码去避免这些风险。Node.js是单线程的,所以很容易会受到拒绝服务攻击。一名能够考虑到这些恶意情况并且编写出经得起良好测试的代码,在你的Node.js组中将会非常有价值。
Node.js相比其他编程语言还是比较新的,所以找到一名理想的员工可能会是一个挑战。在一些当地的小聚会中,你可能会找到一些黑客,也有可能找到一些经验丰富并希望向Node.js发展的Java工程师。或者为什么不考虑将你手下的一些在大型后端架构、处理大规模问题和容错方面有丰富经验的Java工程师送去参加一个好的培训呢?准备好开始了吗?StrongLoop提供培训和对个人或者组织的认证。
相关课程推荐:
基于node.js+Express.js+Jade+MongoDB开发Web即时聊天系统
http://www.ibeifeng.com/goods-462.html
原文:http://www.ibeifeng.com/tech-69524.html
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。