2016年JavaScript开发者需要了解的技能,年的所见所得

Web 开发 17 年的所见所得

2017/07/10 · 基础技术 ·
WEB,
开发建议

原文出处: Daniel
Khan   译文出处:众成翻译/myvin   

英文原文:Skills JavaScript Developers Should Learn in
2016
译者:xxholly32
译文地址:http://t.cn/R5HIDVI

By @jonathanzwhite

关于 NodeConfBP

NodeConfBP 会议于 2017 年 1
月在布达佩斯召开,本次会议为期一天,只有一个演讲室,由 RisingStack –
the Node.js Consulting & Development Company
组织并提供赞助。

下面你将会从第一人称视角感受到一个近乎完美的风格化的会议记录:

JavaScript –
由于它是web开发中最基本的语言,无论你怎么看待它,我们都要去考虑它的”未来”。毕竟,浏览器可能是PC和移动设备都在使用的最广泛的软件应用程序了。

版权申明:
此文章首发于公众号程序员在深圳,搜索 studycode 即可关注
本文无需授权即可转载,转载时请务必注明作者

认识下 Daniel Khan

DynaTrace 做过的任何和 Node
沾点儿边儿的项目基本上我都过了个遍。另外,我还在给 Lynda
做辅导课程。我在当地大学教书,有三个女儿和一个儿子。

这次讲话基本上都是我的故事,涉及到了我 17 年学到的关于 Node 的一些东西。

在我看来,世间万物都是循环的,它们会反复出现,因此我们能够以史为镜,避免重蹈覆辙。

图片 1

这张照片拍摄于 1997
年,是我第一张使用网络摄像头拍摄的照片,照片上右边的那个家伙就是我。

我们购买这台 silicon graphics O2
差不多花了一辆小轿车的价钱,然后这个家伙跑过来说“现在我们正在使用网络摄像头一起拍照”。然后
哇哦 照片就出现在互联网上了,在那个时候这真的是一件特别炫酷的事情。

1998 年我就已经开始玩 HTML 了。

图片 2

当时的网站看起来和图片上展示的差不多,而且那个时候这本书还没写呢。

那个时候还木有 Google,木有 Facebook,木有 GitHub,木有
Wikipedia,也木有 StackOverflow。

那个时候我们只有新闻组,我们可以在上面提问,其他人也可以回答问题。有点儿像
email,但和 email 还是有区别的。

图片 3

时间走到了 1999 年,也就是 17 年前,我在 Square 新闻组里写下了我的问题:

  • “我正在写 web 数据库,但是我们已经有桌面数据库了呀。”

是的,Microsoft Access!

  • “我的主机支持 MySQL,但是我并不知道这是什么意思…”

我真的不知道。

  • “我知道 query 语句是如何运行了。”

其实,我完全不知道。

那个时候,我真正学到的一点是:网络永远不会遗忘。那时我真的是毫无头绪。

开发人员都知道,JavaScript世界看上去动荡不安甚至有些混乱(e.g. the
left-pad
incident),但这也是说明了这门语言正在不断的完善。它试着去完善一些老的问题(通常是相关扩展或者复杂的问题)以跟上现在的发展趋势。

这篇文章是”前端开发,从草根到英雄系列”的第二部分,在第一部分,你学到了如何使用HTML和CSS创建布局的最佳实践。在第二部分,我们会把JavaScript作为独立的语言来学习,我们将学习如何添加交互式的界面,JavaScript设计以及设计模式,最后我们会学习如何创建web应用。

进入 2000 年

在 2000 年我成为了一名 web 开发者,当时我在给 Austrian Job Service 教
Perl,因为在那个时候,找不到工作的人基本上都能成为一名 web
开发者,在当时这是种趋势。

那个时候 Perl 语言非常难,但是既然我已经准备教 Perl 了,那就是说明…

我非常非常聪明,是吧?

但是,真相永远是残酷的:其实我一点儿都不聪明。

当我尝试在数据库中更新数据集时,因为我不知道如何实现才算合理,所以一开始我的做法是先删除然后再插入。

图片 4

那么问题来了:就我这种水平,我又怎么会认为我自己还能教学呢?答案就是:达克效应。

简单来说,达克效应就是:因为你无知,所以你不知道你自己有多无知。

图片 5

那条绿线是你认为你知道的东西,那条黑线才是你真正知道的。那个时候,我认为自己无所不知,直到我完成了大学学业–应该是在
2011 年–我才知道 “好吧,其实我知道的也就那点儿东西”。

然后,你就开始变得稍微谦虚一些了,因为你开始学习那些你不知道的东西,接着你就开始有点儿绝望了。现在,我认为我在那个绿点的位置。

随着需求的变化,特别是在这技术日新月异的时代。你也许不知道以下这些技术,但想要提高或者完善你的技能,无论是了解Javascript的发展走向,还是让你更好的进入这个领域,它们都是你需要关注的(尤其是那些初学者)。

和HTML、CSS一致,网上有大量的JavaScript指南,对于新手来说,很难分辨这些指南分别的用途,也不知道以怎样的顺序去学习这些指南。这篇文章的目的是给你提供一个线路图,作为你成为一个前端工程师的导航。

我们去了银行…

但是不管怎么着,我设法找到了一家公司,然后买了一台服务器。这台服务器还是我们去银行贷了
15,000 欧元买的。

和之前相比,现如今变化真的很大:我们有 serverless
架构,你可以一台服务器都不用就把整个公司创建起来。

那个时候,我们不得不把服务器放在维也纳的一个数据中心的机架上。

每当服务器宕机的时候,我就得开着车到维也纳去重启服务器。

图片 6

那次我学到的东西就是:你要努力理解什么是全栈。我说的就是上面的这个全栈。

全栈,意味着你至少应该知道一点儿 web 协议、知道路由的工作原理、知道 HTTP
基本的工作机理、知道 SMTP 的工作机制。

当出现问题的时候,知道这些包是如何打包进浏览器的,知道这些东西是如何协调的是很有必要的。

那么,到底2016年javascript开发方向是什么(或者2017年又会有什么新的动向)?

如果你还没有阅读第一篇,在读这篇之前,可以点击下面的链接阅读

然后夜幕降临,迎来 2002 年

现在我们是在 2002
年,我创建了一家公司。那个时候,除了澳大利亚,互联网在全球爆炸式疯长。

我们静静地等待着互联网的繁荣有朝一日能够降临到我们身上,然后一切都结束了。

图片 7

我认为这一切都是从 boo.com 开始的,这是一家运营时尚服饰的初创公司。

在那时,每个人都花大把大把的时间去投资和新经济、新媒体相关的项目,所以整个行业开始繁荣增长。

在两个月内,公司从 10 个人涨到了 100 个人。然后,boo.com 破产了。

我认为那年的互联网危机和他们有关。所有的投资者差不多都退出了,因为他们意识到新经济公司终将会失败。

图片 8

这是纳斯达克的数据。我们当时在这个繁荣阶段,紧接着一切都奔溃了。这里是
9/11,一切都随风而逝…

我在 Google 上搜索了一下,这是那个时候硅谷人的想法,你们感受下。

图片 9

我找到了一个哥们儿这样写到:

“噢,我的天呐,这简直是致命的打击。作为一个年轻的初创公司,我知道的每个人都受到了影响。我知道的大多数人都失去了工作。不久之后,我知道的大部分人都搬走了。”

在这里他写到:

“泡沫时代的对比是史诗级的。开放式的酒吧活动和神话般的发布会都已经一去不复返了。工作和公司也都没有了。不久之后,绝大多数企业家没有了安全保障–很多人回到家里重新组团。”

听着有些熟悉,是吧?

如果今天你去硅谷,看到的也是这个样子。一切都是新兴的。工作在那里的人都是这样的:

“什么?他们公司没有自助早餐?

他们没有这种桌式足球?

噢,我不想在那儿工作了–我想买架飞机。”

图片 10

这种事情随时都会重现。不过那个时候,我们看到的更多一些。

尽管如果现在我说就算这种事情发生了也不会有什么问题,但是真的当这种事情发生了的时候,就真有问题了。

javascript 趋势

趁热打铁,抓紧机会!

我从中学到的一件事是:一定要趁热打铁,抓紧机会!我现在并没有高谈阔论地去谈钱。

我正在谈论的是通过投资于你的技能和知识来随时应对不好的时代。

拒绝平庸,对吧?!

编程语言太多了,我认为编程并不是说一定要成为一名 JavaScript 开发者或者
Node 开发者。编程是一种概念、一种思想。就比如,当你在用 JavaScript
写实例的时候,可以尝试一下 Scala 函数式编程的一些东西。

最开始我在 Lynda 和 Coursera 工作,这让我真正的理解了
JavaScript,理解了我使用 underscorejs
的原因,理解了怎样才能让需要的东西更好的融合起来。

所以我想鼓励你们的是:不要把你自己当成一个 JavaScript 开发者或者 Node
开发者,要把你自己当成一个工程师。

要学习思想、学习如何使用不同的语言去解决问题。你的视野决定你的世界,掌握知识面越广我们对问题的思考就会越灵活。

图片 11

这是我这次学习的课程。这真的很难,但是这是发明 Scala 的 Martin Odersky
做的,所以他知道他在做什么,这真的很有趣。

所有的这些资源在互联网上都是免费的,所以如果你有时间的话,可以投入一些时间和精力培养一下你的技能。

node.js已经众所周知了,后面的内容我们也不会提它,因为它太有名气了…..

JavaScript基础

JavaScript是一个跨平台的程序语言,它几乎可以做所有事情。在你了解了开发者如何使用JavaScript的基础之后,我们再详细的探讨这门语言。

为未来的你写代码

然后,在 2002 年到 2012 年之间我做了许多项目,大部分都是 web
项目,许多是基于 PHP
的,不管你相不相信,其中的一些项目到现在仍然在线上运行着,比如下面这个:

图片 12

它们今天还在困扰着我。因为这些应用是我在 2002 年或 2004
年或其他的什么年份完成的,我从来没有想过,在
2015年、2016年、2017年,我还能再次看到他们。

但是之后一通电话打过来了:”这个网站挂了,你能不能帮我们搞搞?”–尽管我早已经不是这个公司的员工了。

然后一万只草泥马在奔腾:

“哎呦,我去,这代码是哪个傻逼写的,写得太烂了。”

…恩,我知道这个傻逼就是我。

在我看来,写出未来的你能够理解并引以为豪的代码是很重要的!当你做一件事情的时候,要么不做,要做就把它做好。

React & Redux

2015年是React获得肯定的一年,越来越多的开发者在2014年尾声开始抱怨Angularjs的一些问题,也有新闻说道,Angular2
将会和 Angular1 不兼容。

如今的现状是,Angular1
仍然在Github上备受关注。同时它的增长也开始放缓,而React正快速的填补这个缺口。

github star 增长图

图中的数据基于互联网。

也许更能说明问题的指标是:reactangularangular2
三者的包在NPM的下载量:

angularjs vs react

出自 NPM
走势

但是,这些数据并不能真实的代表这些框架的使用情况。有一点要考虑的是自从Angular1被Angular2替代之后,它并没有任何升级。更不必说,React不是一个框架,不能够和AngularJS一起用。所以说,这两者其实是没法放在一起对比的。

尽管如此,大概在去年一年里,JavaScript社区对React的支持比Angularjs要多一些。

看图表,你可能会问:在8月后发生了什么?React在npm的下载数量突然以指数倍的方式暴涨,Github的关注数量快要接近AngularJS的数量。

同时,Redux出现,由它的创作人Dan
Abramov发布在
ReactEurope2015
7月的会议上。Redux是一个类似flux的实现,让很多开发者确信这更适合并能够推动React的发展。

在Redux出现前,React已走过了一段坎坷,大家试图找出如何最好地实现”Flux”的架构。许多更好的实现方式涌现出来,但对于Javascript开发者来说还是缺少一个全面完整的解决方案。因此,尽管React在DOM表现层处理有多优秀,开发者还是对采用这个技术到项目中保留自己的意见。

如今,随着越来越多的开发者开始关注和使用Redux,并且认识到测试和debug
JavaScript是如此方便。Redux开始替代Flux成为了新的赢家。

由于2016年Javascript在前端领域的地位,同样的,React 和
Redux也变的炙手可热了。知名公司如:Netflix,Dropbox,
雅虎都已经开始使用React,并给与其很大的信心。

尽管这样,Facebook的Relay框架将在2017年成为Redux的最大挑战者。

你也许会阅读这篇文章:Getting Started With React & Redux: An
Intro

语言

在学习JavaScript是如何应用于web之前,首先了解这门语言本身。我们来读一下Mozilla开发者网络的Language
basics crash
course,这个指南会描述基本的语言结构,包括变量,条件和函数。

在此之后,再读一读MDN的JavaScript指南的以下几个部分:

  • 语法和类型
  • 控制流和错误处理
  • 循环和遍历
  • 函数

不要过于担心记不住特定的语法,你随时可以回过头来查阅。相反,你要专注于像变量实例化、循环和函数等概念上。如果一时消化不了是正常的,可以适当的略过,学完后面内容再时不时回顾一下前面的内容。因为当你练习这些概念时,你才会对这些更加深刻。

为了打破单调的纯文字内容的学习,可以看一下Codecademy提供的JavaScript课程,它很容易上手,并且非常有趣。同样的,如果你有时间,对于每一个我上面列出的概念,读一下Eloquent
JavaScript相应的章节,相信可以加深你的理解。Eloquent
JavaScript是一个非常棒的在线书籍,几乎所有的有追求的JavaScript前端工程师都会阅读它。

代码的破窗效应

我最喜欢的一个理论是破窗效应–这个理论也可以应用到代码上。

想象一下,你身处一座城市,站在一座高楼面前,周围的一切都很美好。然后突然一个哥们儿跑过来打破了一扇窗户。

如果你等上几个星期再回去看,你会发现整座高楼开始腐烂,摇摇欲坠,到处都是乱七八糟的涂鸦,人们也不再
care 它了。

同样这也适用于代码,那些临时的解决方案就是高楼上的破窗,是吧?

“恩,是的,我们改天再改吧。”

然后那些临时的代码片段还保留在那里,然后等到下一个开发人员(有可能还是你噢)过来看了看这代码,然后说:

“好吧,这个已经很糟糕了,我们快速修复下,然后代码又变得糟糕了。”

所有这些丑陋的代码片段都充斥在你的代码里。就算十年过去了,你还是得处理这些代码,所以你为什么不提前和你的小伙伴商量一下?你应该这样想:

“这是一个旧项目了,让我们把这个项目重写一遍吧。”–因为这就是我们喜欢的做事的方式,对吧?

图片 13

我经常听到开发者这样说
“看,这个项目是我们两年前写的,整个技术栈都已经落伍了,我们把所有的东西都重写一遍吧,很简单的,两周就能搞定!我们已经开搞了是吧?”

图片 14

我们知道软件都有一个饱和曲线。有时候给代码添加新的特性确实很困难,所以这时候重写代码更换技术栈是完全没有问题的,但是你得注意这里的这个缺口。

当你切到一个新的技术栈时,项目就变得复杂了,从一开始就不会有相同的功能特性。

因为在整个系统中整合了很多固有的东西,所以你不能轻易重做。所以你必须意识到,如果你从头开始做某事,那么至少会有一个特性差距。

其他感兴趣的框架

那么还有什么别的框架?还有一些相对关注低一些的,但被炒作的一些框架。

Angular2

谷歌和微软合作开发的框架Angular2,或者说是用微软的
TypeScript
开发的更易管理的Angularjs2。这是什么意思呢?大型公司(一些非技术性的公司)可能会关注Angularjs2,特别是使用了微软的.NET框架的。从去年开始,微软也开始推动.NET的开源工作,使开发者能够更好的使用。

随着Angular2的重写,整个过程旨在能够修改Angular1
app开发存留的一系列问题,目前为止效果明显。Angular2
也会支持 web
组件开发,使其有能力支持更好的展现。而谷歌也认为它是Web开发的未来。

然而,不管Angular团队如何努力的带领开发者从Angular 1 引导向Angular2,
Angular社区对Angular的取舍还是分成两大阵营。重写导致Angular的停滞不前和React逐渐火热,而这个势头正在加剧。

Angular2 能否和 Angular1
当初一样成功,并不能完全肯定,在Javascript社区也众说纷纭。Angular2
还是在Javascript和web开发的”未来”中有成功的可能性,但2016显然不是Angular2,特别是它还是在beta版本。对于那先不喜欢复杂
react app 需要配置很多东东的开发者来说,Angular2 还是可以选择的。

Meteor

Meteor在Github的关注和下载始终是稳固上升中,和React,Angular
的发展相似。这是一款轻量级、全栈式,并有鲜明特征的Javascript框架。很多开发者用它从框架中发现很多新颖有趣的地方。meteor被认为是一款原型式框架,而且对初级开发者非常友善,并且上手较快。

然而,当使用Meteor时又是另一种情况。那些学过 Angular1
或者是一些Rails的开发者都掌握了大量隐藏的魔法技巧,而这也会是阻碍Meteor成为主流的一个原因。

Meteor 不像 React 和 AngularJS, 企业中可能会有一些专业的开发人员,而
Meteor 没有,这也是不被考虑的因素之一。虽然 AngularJS
有很多问题,但有谷歌的技术团队撑腰。而使用 Meteor 不一样,
无论是前后端开发,都会存在很多的技术风险。Meteor要更广泛的被广大开发者使用,还需要解决很多问题。

更别提那些数据库问题,由于 Mongodb 是 Meteor
的默认数据库,而一些开发者对MongoDB的开发模式不是很感兴趣(阅后即焚的小型数据库)。

Meteor运行必须要依赖 SQL,而这点也没有得到很好的支持。

不用说,Meteor
在2016甚至2017年能够占到的份额都会比较少。对于构建大型负载的应用,大部分专业开发者对这个技术,还是持保留意见的。

交互

One use for JavaScript is for animating your layouts

JavaScript作为一门语言,你已经对它有所了解,下一步要了解它如何应用于web,要了解JavaScript是如何与网站交互,你需要知道文档对象模型(Document
Object
Model)

DOM是HTML文档中具体的结构,它是对应于HTML节点的、由JavaScript对象构成的树型结构,更进一步,你可以读一下CSSTricks发表的什么是DOM这篇文章。它对DOM提供了简单直接的描述

Inspecting the dom

JavaScript可以修改DOM元素,这里有一个选择HTML元素并修改它的内容的例子:

var container = document.getElementById(“container”); 
container.innerHTML = 'New Content!';

不要担心,这仅仅是一个简单的例子,你可以通过JavaScript
“DOM操作”做更多的事情。想学习更多关于JavaScript如何与DOM交互的内容,你要通过以下MDN部分的指导,The
Document Object
Model

  • 事件
  • 使用DOM开发web和XML的例子
  • 如何创建一个DOM树
  • DOM简介
  • 使用选择器定位DOM

再次强调,把注意力集中到概念而不是语法上。试着回答以下问题:

  • 什么是DOM?
  • 如何查询元素?
  • 如何添加事件监听者?
  • 如何合适的改变DOM节点属性?

要获得一个通用的JavaScript
DOM操作列表,可以看一下PlainJS提供的JavaScript函数和帮助,这个网站提诸如如何设置HTML元素样式和连接键盘事件监听者等例子,如果你觉得还不够想更深入,你都可以阅读Eloquent
JavaScript中的DOM部分。

网站真的需要 React、需要同构 JavaScript 吗?

好吧,那我们就重构代码,但是网站真的需要 React、需要同构 JavaScript
吗?我知道,这些技术都很酷,我们也想用。但是,我们真的愿意每六个星期就重写整个前后端代码吗?

新技术日新月异,尤其是 JavaScript
方面的。新技术每月都会出现,而且也有公司在推动着这些新技术。

如果某项技术是 Google 出品或 Facebook 出品,那么它一定很酷是吧?因为
Google、Facebook 的这帮家伙们知道他们自己在做什么。

图片 15

所以当时就去了解了下 React,还看了看他们介绍 React 和 Flux
的那次演讲,会上他们基本上就说了这些:

“我们在 Facebook
上遇到了消息通知方面的问题,当消息被阅读了以后,状态并没有更新。”

“我们的这个 MVC 项目很糟糕,因为 MVC
本身就很糟糕,所以这个项目并没有很好地运行,所以我们发明了 Flux。”

当时,我的反应是这样的:“我勒个去,这都可以!?”

图片 16

从什么时候箭头可以从 View 层画到 Model 层了?我认为这是错误的。

之后有一个问答环节,但是并没有人提问。在座的每个人可能都是这样想的,“恩恩,MVC
太逊了,我们确实需要 Flux。”

也许她是要表述一个观点,但是这个观点她并没有表述清楚。

然后我往下滚动页面,评论区有大量这样的评论,“这不对啊,这有问题啊,这根本就不是
MVC 啊!”

图片 17

真搞不明白发布会上他们都在说什么。演讲完了,每个人都感觉 “恩,MVC
是挺逊的,我们确实需要 Flux,因为 Flux 解决了我们所有的问题…”

不过,说实话,我也没有资格谴责他们。我在会上的问答环节也没有站起来说“这个不对”,因为我向来就比较谦虚,我总是认为别人说的都是对的。~^.^~

ES6 终于要普及了

2016年,如果你是个Javascript开发人员,而你的应用还没有采用ES2015开发规范,你要好好问问自己,你到底在干什么?

但为什么用 Babel 和 TypeScript 处理 ES6 app
项目呢?Babel大部分是转换ES6的ES5,TypeScript
是可选的静态类型和简单类型的Javascript的超集。

Facebook创造了Babel,Babel只支持静态类型检查的Javascript,
并做转换,所以这两者都是以不同目的的方式被创造出来,没有可比性。因此两者一般不会同时使用。

Babel是的第一个连接ES5和ES6项目的语言,而TypeScript在ES6的支持也快要赶超ES6了。在github上Babel关注度更高,更不用说还有React开发者会使用Babel

  • Webpack的组合。

你也许会阅读这篇文章:Setting Up a React Environment Using Npm, Babel,
and
Webpack

然而,在最近,如果你看一些Javascript的解决方案,那些代码库都是用TypeScript做的,TypeScript也变得越来越火,挑选它的人也越来越多。Javascript曾给人的印象是比较难懂,难调试的。不仅因为它是一门动态语言,而且缺少类型检查的机制。TypeScript却很好的支持了一点,而且TypeScript还有一个比Flow更大的社区支持。

除此之外,我们看下在谷歌趋势上对TypeScript的关注走势图:

也许TypeScript在受关注程度上低于Angular2,但随着Javascript的应用越来越大,它很有可能因此而被关注。同时,Redux使得Javascript应用测试变得更加简单,
在TypeScript的帮助下,其代码已更具可维护性(它也能和React的JSX兼容)。除此之外,微软、谷歌、Facebook共同致力在Javascript上添加静态类型,最终生成ECMAScript协议。谷歌放弃了AtScript而用TypeScript在AngularJS上,而Facebook的Flow的社区规模并没有TypeScript那么大。

因此,很可靠地说,不仅静态类型的Javascript是一种趋势,而且那些不喜欢Javascript的开发者也因为TypeScript开始接触JavaScript了。TypeScript极有可能是未来的趋势。

检查

要调试JavaScript,我们使用内嵌在浏览器中的开发工具,几乎所有的浏览器中都会有检查面板,通过它你可以查看页面的源码,你可以查看JavaScript的执行,在终端上打印调试状态,还可以查看网络请求和回复。

这里是Chrome开发工具指南,如果你使用的是Firefox,你可以查看这个指南

Chrome开发者工具

保持冷静,勿信炒作

提出质疑,勿信炒作–我们早就该这样做了。

毕竟,不管是 Facebook 还是 Google,它们也只是公司。如果 Facebook 将
React 交给社区,他们就会有这样的议程。Angular 和 React
正在交付给新的开发者,或许并不是因为他们想给社区一些东西。

我们应该时刻保持清醒,在大多数的时代都不会平白无故地天上掉馅饼,所有的东西都是期望能够赚钱的。

所以如果有这种炒作的话,你确实应该提出质疑。

图片 18

毕竟,所有的这些东西都仅仅是框架,是别人的代码!

在 JavaScript
的世界里,我们喜欢谈论不必要的依赖,因为那些由互联网上的某个陌生人撸出来的代码总是完美的,对吧?

使用第三方组件真的有点儿 low,使用整个框架同样也很 low。

问题是这样的,你依赖别人的代码,当你想修改一些东西的时候,你就必须去修改他们的源码。

所以此时此刻,你并没有学习使用编程语言本身来处理问题–你学习的是别人的代码,你调试的也是别人的代码。

过去有太多这样的案例,比如 PHP 的 Symphony
框架。你有一个生成器,然后直接运行就可以了,框架已经为你生成了你所需要的一切。但是,如果在某个时刻框架底层报错了,那你就真的不知道到底是哪里出问题了。

那么问题来了:

相比于快速完成项目,不依赖其他框架自己来做不是更好吗?

在这种情况下,当出现了问题时,你就得查看代码,学习如何让它们相互配合。

举个栗子,在 JavaScript 编程语言中有模块化这一概念–这个概念在 React
中体现的尤为突出–代码被分成一个一个的模块,然后以某种方式将它们组合起来。

我尝试着搞了一个 React 项目,但是我之后就执行 npm uninstall
卸载了所有的依赖,因为仅仅为了构建一个同构 React
应用竟然被安装了这么多的依赖。

图片 19

上图中显示有 13 个依赖!13
个依赖打包出来的代码都上兆了。这种情况一定要谨慎处理啊。

函数式编程要变成主流

确切的说,大量函数式编程已经以他们的方式缓慢的占据主流的编程领域。但在现在复杂的web
apps中,”函数式编程”又再次被关注了。

类似Scala的后端开发者,正慢慢的拥抱函数式编程。Fackbook的React前端开发者也提出了UI的函数式看法。随着越来越多的赞扬,函数式开发将会成为主流。

如今,前端开发主要是响应式编程和函数式编程。React+Redux的开发模式,通常对于新手开发者来说,面向对象的编程是使用最多的解决方案。另一个角度来说,React需要开发者用一个函数来处理UI,而Redux用一个函数处理数据。所以基本还是OOP的模式。

不管怎样,那些用函数式编程的开发者,你仍然要坚持使用Javascript,并且学一些RxJS的技巧。RxJS是Javascript的响应式扩展,用于替代Flux框架,可能在小型项目中会有一些负作用,但在一些大型web项目中却能够发挥很大作用。Netflix采用RxJS,因为Angular2支持并很好的使用RxJS。由于RxJS是微软研发的,它也很好的集成了TypeScript,并且在不断的完善中。

但是,RxJS学起来比较难,不少开发者放弃了做FRP,而在项目中用函数式开发。

值得注意的是另外的一些预测,比如ClojureScript和Elm,
但和React+Redux的函数式编程比起来还是有些逊色。(然而,Redux是受了Elm启发的,所以有些开发者还是想去关注一下Elm的)

考虑到Javascript庞大的生态,很难说会大规模迁移到Elm的可能(当初有很多人坚信Scala会替代Java,然而最后并没有)。RxJS,
另一方面,仍然是学习门槛较高的框架,暂时无法变成主流。

随着函数式编程很好的适应了如今web开发的热潮,有一点需要强调,函数式编程已经成为当下Javascript开发人员必不可少的技能之一了。

基本练习

目前为止,我们还有很多JavaScript知识要学习,上一章我们已然学了不少新知识,现在我们休息一下,然后做几个小实验,他们会帮助巩固你刚学的一些概念。

不要轻信别人的代码!

对于 npm 同样有这样的问题。

图片 20

从上图中可以看到,编程世界里有 40 万个难题,是吧?所以就对应着出现了 40
万个解决方案。

上周我需要转换一些 UTF-8 HTML 字符实体–来给大家看一下我搜索出来的结果:

图片 21

针对于同一个问题,有许多模块给出了解决方案,所以选择正确的解决方案真的有点困难。

你必须查看并做决定:

  • 这个包还有人在维护么?
  • 这个包有多少个 bug?

在你用 npm 或者 yarn 来安装包的时候应该三思而后行。

同样,在你从 StackOverflow 上复制粘贴的时候也要三思而后行。

图片 22

这里是一个转换 HTML 字符实体的包。

在文档中有一处明显的错误:首先定义了 var Entities ,然后执行了
entities = new Entities(),他们在无意中生成了一个漏洞。

在 StackOverflow
上有一个问题,回答该问题的一个同学直接从文档里面复制粘贴到了
StackOverflow。

我确信下一个同学会直接将这段代码复制粘贴到他的代码里。仅仅是因为:StackOverflow
出品,必属精品。

没有人站出来说这段代码有问题。所以不管你是从 Stackoverflow
还是其他的什么地方复制粘贴代码都要三思而后行。

毕竟是别人的代码,所以你应该理解整个代码,并逐行确认代码确实如你所想的那样运行。

桌面应用的对决:Nw.js vs Electron

如今,大量的软件需要同步数据到不同的平台(即,手机和桌面)。大部分都是起源于web
app,之后再创建桌面应用, 而为了更好的用户体验,web
app升级会更快,并且更容易。更何况,用户在什么都不装的情况下,都可能会卸载你的产品。由于体验不好,所以这是个比较大的考验。

在过去,人们为了那些web技术开发前端UI的桌面app产品,收到了CEF技术的验证。这并不容易,而且这些应用还没有真正的跨平台兼容。自从2014年,Node.js的出现,桌面应用框架可以很好的使用web技术开发,并处理跨平台的问题。但之后便没有出现新的东东。

如今,在该领域任有两个主要的技术:Nw.js(node-webkit原身)和Electron。虽然两者都是不错的选择,有自己的优势,这篇文章是关于发展趋势。

因此,让我们来看看两个项目在Github上的关注情况:

nwjs vs electron

出自 Star
History

虽然Nw.js出道较早,而且较为成熟,但Electron却以指数形式增长,而nw.js的增长看上去是平稳的线性的。

等等!由于Electron是在GitHub诞生的,考虑到GitHub上关注的公正性,我们去看下Google趋势,但好像或多或少反映了同样的情况:

nw.js vs electron

Electron比较新,但已经用在了一些知名公司比如Slack、微软、WordPress和Sencha.(Codementor
也用了Electron做了它的桌面应用)。Electron的简单易用,使得它的生态系统和社区平台也逐渐壮大。它的火热程度可能会延续到2017,使用Electron框架开发桌面应用,应该是开发者现在最好的选择。

实验1

进入实验1,我们打开AirBnb,同时打开浏览器页面检查,点击终端标签,在终端里你可以执行JavaScript语句。我们将要做的事是从操作一些页面中的元素而获得一些乐趣。试试看,你是否可以进行下面将要描述的所有DOM的操作。

Airbnb.com

我选择AirBnb的页面是因为它们的CSS类名非常直接,不会被一些编译器处理的模糊不清,所以你可以选择性的在任何页面做这些操作:

  • 选择一个具有唯一类名的header标签,改变其中的文字
  • 选择任何页面上的元素,然后删除它
  • 选择任何一个元素,改变它的某一个CSS属性
  • 选择一个指定的段落标签,将它下移250个像素
  • 选择任何组件,例如一个面板,调整它的可视性
  • 定义一个函数名doSomething: 可以弹出”Hello
    world”警告,然后想办法执行它
  • 选择一个特定的段落标签,让它监听一个click事件,一旦该事件触发,则运行doSomething

如果你卡住了,可以在JavaScript Functions and
Helpers中查找相关知识,这些任务基本上都是基于这个指南的,下面是第一个问题的的例子:

var header = document.querySelector(‘.text-branding’)
header.innerText = ‘Boop'

这个实验的主要目的是练习你所学的JavaScript和DOM之间的操作,并观察他们的行为。

Daniel Khan 的终极 web 开发建议

恩,最后我再说几句。对于我来说,有几条原则至关重要。

第一条关键原则(注:Don’t repeat yourself):DRY!

这条原则表示-在 Node
中代码复用很容易-
不要因为某些逻辑相同就随处复制粘贴代码。

你应该将 config 文件 require 到应用中,而不是在用到 config
的地方都复制粘贴。require 以后,修改 config
文件,所有用到的地方就都同步修改了。

尝试一次加载,减轻代码,然后在需要的地方将它传递过去。因为回调函数的存在,所以在
Node 里事情就显得有些复杂。

然后,我们说说回调函数。创建能够处理函数返回值的函数是个好的选择,回调函数就是这样的存在。

是不是有点说不通?你创建了一个函数来读取数据库中的某些数据,然后调用回调函数,处理返回的数据库结果,这里最好创建一个能够处理不同返回值的回调,而不要一次一次的创建。

Yagni 原则(注:You ain’t gonna need it):“你不会需要它”

所以当你做事情的时候,问自己几个问题:

  • 这个项目有 Facebook 那么大吗?
  • 我真的需要像那样设置吗?
  • 我真的需要像那样创建吗,还是说我仅仅是预见它以后会出现?

请一定要务实!

KISS 原则(注:Keep it simple stupid)

最后一条原则:尽量简单

考虑到未来的自己,你的代码应该写的尽量简单、易理解。如果你喜欢我讲的这些编程思想,可以读读这本书:

图片 23

如果你要读书的话,请一定要读读这本–《程序员修炼之道》。书中讲到的许多规则在我讲的这些编程思想中都有所提及。

谢谢!

1 赞 1 收藏
评论

图片 24

手机端框架对比:React Native vs Ionic

自从 React Native 横空出世以来,人们预测2016年将是React
Native之年,考虑到跨平台的开发模式,未来将是手机开发和web技术的时代。如果你谷歌一下React
Native app性能 ,你会发现很多赞扬。特别是在对比了HTML5 hybrid
app,因为它跑起来更平滑。是否2016属于React
Native之年?在宣传和关注上,看来它是达到了预期的:

react native vs ionic

但实际是否是这样呢?当写这篇文章时,React
Native仍然没有到达1.0版本(现在是0.26)。所以,如果你现在想用React
Native需要勇气和耐心去处理一些app问题,可能需要重构代码,还会有一些未知的问题(Codementor也仅仅使用在手机端)。因此,我们再看一下React
Nativc 和 Ionic 在npm的下载对比:

react native vs ionic

出自 npm
trends

从这个图可以看出,似乎React
Naitve正在以它的方式,超越ionic成为最佳的跨平台移动开发框架。

在如今的就业市场中,掌握React Native技术的人才也变得比ionic更加抢手。

react native vs ionic

出自
indeed.com

在AngelList的招聘列表中我们做了简单的统计,这个结果体现了同样的问题:在5月30号左右,有75个关于ionic的招聘,有65个关于react
native的招聘数据。

因此,如果在你的简历中有熟悉React
Native技术。在2016年,雇主们绝对会给你的提供更高的薪资。

实验2

JavaScript允许开发者创建交互式面板

使用CodePen写几个包含逻辑的JavaScript函数,以及操作DOM元素。这个实验的核心内容是将你从草根到英雄第一部分学到的知识和JavaScript结合,下面的几个例子可能会给你带来灵感:

  • 周期表格
  • 心情颜色产生器
  • 计算器
  • JavaScript智力问答
  • 小行星画布游戏

webAPI的未来 : GraphQL vs REST

2016年,在Facebook宣布开源GraphQL之后,这使得大量的JavaScript开发人员开始从事它的研究。特别是在开源项目上,Facebook在苹果的JavaScript领域做了很多贡献:

GraphQL目标是替代REST
API,但REST
API已经应用的更加广泛了,这是不太可能的情况:

rest vs graphql

GraphQL很难取代REST API。充其量,它可以补充REST
API所提供不到的东西。而且,GraphQL仍然比较新,还很依赖Facebook,所以它没有足够的学习资源来让开发者来提高。因此,2016年对于GraphQL来说,还是不足以使引起开发者的足够兴趣。2017年也许会改变,但是2016年5月30号在AngelList中可以看到,仅仅只有6个招聘是对GraphQL有需求。所以你可以不必急于学习它。

更多JavaScript

目前你已经了解了一些JavaScript知识,并且为此做了一些练习,让我们继续学习一些高级的概念吧。下面的概念不一定互相有联系,我将它们列在这里是因为它们可以帮助你理解如何构建更复杂的前端系统。你将在后续的实验和框架章节理解如何使用这些概念。

JavaScript走势的结论

JavaScript社区总体发展是比较快的。为了保持主流定位,必须有更多的资源和支持等一些相关信息。基于本文的JavaScript的趋势总结,如今的开发人员需要学习React
+
Redux,需要熟悉函数式编程,学习TypeScript。此外,还需要关注其他领域,React
Native等,同时有一些Electron的经验可能会更好。(当然,TDD测试驱动开发,无论何时都是你要掌握的技能)。

语言

一旦你用JavaScript工作,你将遇到很多高级概念,我将这些概念列出来,当你有时间时可以进行阅读。同样的,Eloquent
JavaScript覆盖了大部分概念,也可以用来补充你的知识。

  • 强化原型
  • 作用域
  • 闭包
  • 事件循环
  • 事件通知
  • 请求、调用和绑定
  • 回调和承诺
  • 变量及函数挂起
  • Currying

Imperative vs. Declarative

JavaScript和DOM如何交互,有两种方法:imperative和declarative,一方面,declarative程序专注于what,另一方面,imperative程序专注于how

var hero = document.querySelector('.hero')
hero.addEventListener(‘click’, function() {
  var newChild = document.createElement(‘p’)
  newChild.appendChild(document.createTextNode(‘Hello world!’))
    newChild.setAttribute(‘class’, ‘text’)
    newChild.setAttribute(‘data-info’, ‘header’)
    hero.appendChild(newChild)
 })
}

上面是一个imperative程序的列子,我们手动查询出一个元素,并且将UI状态存储在里面,换句话说,该程序核心在于如何(how)完成某件事情。这段程序的最大问题是它不够稳定:如果某个人修改了这段代码中的类名,例如将hero修改为villain,该监听事件将不会被触发,因为DOM中不在有hero类了。

Declarative程序解决了这个问题,你可以把选择元素的操作留给框架或库去完成。这种做法让你专注于做什么(what)而不是如何这样做(how)。想要了解更多,读一下JavaScript的状态——从Imperative到Declarative和3D
Web 开发 #1: Declarative vs.
Imperative

这篇指南首先告诉你imperative方法,然后才是Angular和React库的declarative方法,我建议按照这样的顺序学习,可以让你更清楚的了解到declarative解决了什么问题。

Ajax

通过以上的文章和指南,你应该注意到了Ajax,Ajax是一项可以使用JavaScript和服务器交互的技术。

Ajax is what makes content dynamic

例如,当你在网页上提交一个表单,这个动作会将你的输入作为一个HTTP请求发送给服务器。当你在Twitter上发送一条微博,你的Twitter客户端发送了一条HTTP请求给Twitter的API服务器,并且使用服务器返回的数据更新页面。

你可以看下什么是Ajax获得更多Ajax的知识。如果你仍然不能完全理解AJAX的概念,看一下Explain
it like i’m 5, what is
Ajax,如果觉得还不够多,你可以读一读Eloquent
JavaScript的HTTP章节。

今天为止,新的浏览器请求标准是Fetch,想要了解更多的Fetch的内容,可以读一下Dan
Walsh的这篇文章,里面介绍了Fetch是如何工作的,以及如何使用它。你还可以在这篇文章中补充Fetch
polyfill知识。

jQuery

目前为止,你已经使用JavaScript对DOM做了很多操作了。事实是,已经有很多DOM操作的库,他们提供API来简化你的代码。

最流行的DOM操作库是jQuery,记住,jQuery是一个imperative库,它是在前端系统还没有今天这么复杂的时候开发的。今天,为了管理复杂的UI,我们会使用declarative框架和库,例如Angular和React。然而,我仍然建议你学习jQuery,因为作为一名前端工程师,你一定会在工作中遇到它的。

jQuery是JavaScript操作DOM的抽象

学习jQuery基础,可以看下jQuery学习中心,它会一步步的告诉你animations和事件处理这些重要的概念。如果你还想学习更多入门知识,你可以看下Codecademy的jQuery课程

记住,jQuery不是唯一的imperative
DOM操作解决方案,PlainJS和You
Might Not Need
jQuery是两个很好的资源,他们会告诉你和jQuery一样的频繁使用的JavaScript函数。

ES5 vs. ES6

另一个重要的概念是ECMAScript以及它和Javascript的关系。目前你将会碰到两个主要的标准:ES5和ES6。ES5和ES6是JavaScript使用的ECMAScript标准,你可以把他们作为JavaScript的版本来理解,最终的ES5草案拟于2009年,也是我们目前一直在使用的。

ES6,也叫ES2015,它是最新的标准,带来了一些新的诸如常量,类,和模板这样的语言特性。ES6带来了新的语言功能,但仍然在ES5的基础上定义语义。例如,ES6中的类仅仅是JavaScript原型继承的语法修饰。

有必要知道你今天看到的应用,要么使用ES5,要么使用ES6。ES5,ES6,ES2016,ES.Next:
JavaScript版本到底怎么了和Dan
Wahlins的ES6入门——下一代JavaScript是很好的ES6介绍。接着你可以在ES6功能列表查看ES5到ES6的变化。如果你还想了解更多,去Github代码库获得更多ES6功能信息。

更多练习

恭喜你能够到达这里,目前你已经学了很多关于JavaScript的知识,下面我们做一些练习。

实验3

Flipboard.com

实验3集中于练习如何应用DOM操作和jQuery技能。在这个试验中,我们将学会一些结构化的方法,实验3会要求你克隆Flipboard的主页,Codecademy上有这个教程,你只需要一步步照做即可:用JavaScript与Flipboard的主页进行交互指南

在学这篇指南的时候,请把注意力集中在理解如何与网站交互上,当实现了交互之后,就知道如何应用jQuery了。

实验4

Dieter Rams Clock

实验4用介绍性的JavaScript课程将你所学的HTML和CSS结合起来。在这个试验中,你将创建一个你自己设计的时钟,并使用JavaScript让它具有交互性。开始之前,我建议你读一下HTML,CSS和JavaScript解耦这篇文章,你将从中学到当JavaScript引进时,CSS的基本类命名规范。下面,我依然从CodePen中挑选了一个列表,作为这个实验的参考。例如,你可以在CodePen中搜索一个时钟

  • 扁平时钟
  • jQuery墙钟
  • 漂亮的时钟
  • 复古的时钟
  • JavaScript简单时钟

你可以使用两种方法来做这个实验,第一个是先创建和设计HTML、CSS布局,然后再增加JavaScript交互。第二个方法是先写JavaScript逻辑,然后把布局加进去。毫无疑问你可以使用jQuery,也可以自由使用原生的JavaScript。

JavaScript框架

当你掌握了JavaScript基础之后,后续你需要了解一下JavaScript框架,框架是可以帮助你结构化和组织代码的JavaScript库,JavaScript框架是可复用的,并能提供解决复杂前端问题的方案,就像状态机,路由机制以及性能优化。他们被普遍用来创建web应用

我没有挨个的描述每个JavaScript框架,然而,这里有一些框架的链接:Angular,React
+
Flux,Ember,Aurelia,Vue,和Meteor。你不需要学习所有的框架,选一个学习即可,不要追赶框架的潮流,取而代之的是,你需要理解框架程序底下的原则和哲学。

架构模型

在学习框架之前,了解一些框架经常用到的架构模型非常重要:model-view-controller,model-view-viewmodel,和model-view-presenter。这些模型被设计用来在应用程序的不同层次创建清晰而分离的特性.

分离的特性是一种建议将应用程序划分为不同的层次的设计原则。例如,与其让HTML保留应用状态,还不如用一个JavaScript对象——通常被称为Model——来存储状态。

要了解更多模型,首先阅读Chrome
Developers中的MVC,然后,读一下理解MVC和MVP(献给JavaScript和主干开发者),在这篇文章中,不用学习’主干’,仅仅了解MVC和MVP即可

对于MVVM,Addy
Osman也写了篇文章:理解MVVM——给JavaScript开发者的指南,
Martin Fowler的散文GUI
架构你也应该读读,它既讲了原生的MVC,又描述了MVVM是怎么来的。最终,读下这篇JavaScript
MV*
模型,还有一本完美的免费在线书籍Learning
JavaScript Design
Patterns你也可以看下。

设计模式

JavaScript
框架没有重复发明轮子,很多框架都依赖于设计模式,在软件开发过程中,你可以把设计模式想象成解决通用问题的模板。

然而学习设计模式不是理解JavaScript的必要条件,我建议你了解以下几个设计模式

  • 装饰者模式
  • 工厂模式
  • 单件模式
  • Revealing
    module
  • 外观模式
  • 观察者模式

理解并实现一些设计模式不仅仅让你成为一个更好的工程师,还帮助你理解一些框架的具体实现。

AngularJS

AngularJS是一个JavaScript
MVC框架,有时也是一个MVVM框架,它由google维护,并在2010年初次发布时给JavaScript社区带来了一场风暴

AngularJs – what HTML would have been

Angular是一个declarative框架,对我帮助最大、帮我理解JavaScript编程是如何从imperative转换到declarativ思想的文章是来自StackOverflow的这篇文章:AngularJS和jQuery有哪些不同

想更多的了解Angular,可以查看Angular文档,里面还有一个Angular
Cat项目,可以帮你马上进入编码状态。更完整的学习AngularJs指南可以在Tim
Jacobi的Github仓库中查找。最后,你还可以看一下John
Papa写的这篇权威的best practice
styleguide

React + Flux

Angular很好解决了程序员在构建复杂系统时所面对的问题,另一个流行的工具是React,它是一个创建用户界面的库,你可以把它想象成MVC中的V。由于React只是一个库,所以它会经常伴随着一个框架Flux

一个创建界面的JS库

Facebook设计React和Flux的目的是为了解决MVC本身的不足和其扩展问题。先看一下他们总所周知的介绍:Hacker
Way: Rethinking Web App Development at
Facebook,它重温了Flux的历史。

搭梯子才能看的视频

React和Flux的学习,先从React开始,React文档是一个很好的入门教材。然后,这篇React.js
Introduction For People Who Know Just Enough jQuery To Get
By会帮助你扭转jQuery思维模式。

一旦你拥有了React基础,便可可以开始学习Flux,同样的,官方文档是一个很好的开端,继而,你可以看下极好的React,这篇文章可以带领你进入更深入的学习。

练习使用框架

你现在拥有JavaScript框架和架构的基础知识,于是又到了练习的时候了。在后续两个实验中,专注于应用你学过的框架的概念。特别需要注意的是,你要让你的代码保持DRY原则,头脑中能清晰的理解不同的概念,并能够让你的模块仅完成单一的功能

实验5

实验5的课题是将一个用JavaScript实现的TodoMVC的app掰开,然后再用将其重写。换句话说,这是一个没有任何框架的实验,但用到了MVC的原理,目的就是让你更深入的理解MVC是如何工作的。

首先你看一下TodoMVC长什么样子,然后你要做的是先创建一个新的本地工程,建立MVC的三个组件。你还需要拉取Github仓库上的代码,因为这是一个比较复杂的实验,如果你仍然无法完成克隆这个项目,抑或没有时间,没有关系,直接使用你下载的Github代码,不断调试MVC的不同组件,直到你理解了组件之间是如何运作的。

实验6

实验6是一个应用MVC的很好练习,理解MVC是进入JavaScript框架的必经之路,实验6会让你跟着Scotch.io制作的指南,使用Angular建立一个Etsy页面的克隆版。

Build an Etsy Clone with Angular and
Stamplay教你使用Angular创建一个web应用、API接口,以及如何组织大型的项目。完成了这个指南,试着回答以下几个问题:

  • 什么是web应用?
  • Angulars是如何应用MVC/MVVM模型的?
  • 什么是API?它是用来做什么的?
  • 你如何组织大型的代码的?
  • 把UI打散到不同的组件的好处是什么?

如果你想亲手创建更多的Angular web应用,试一下Build a Real-Time Status
Update App with AngularJS &
Firebase。

实验7

React和Flux是强大的组合

现在你已经适应了MVC,轮到Flux上场了,实验7正是让你使用React和Flux框架创建一个todo列表。全过程在这里:Facebook的Flux文档,它会一步步教你如何使用React创建界面,以及Flux如何建立web应用。

一旦你全部完成,你可以进入更复杂的教程:如何使用React,Redux和Immutable.js创建一个Todo应用,并使用Flux和React建立一个微博应用

保持更新

和其他前端开发一样,JavaScript的技术发展的很快,时刻保持更新这件事变得非常重要。

给出以下列表的网站,博客以及论坛,它们既有意思,又很有价值:

  • Smashing
    Magazine
  • JavaScript
    Weekly
  • Ng
    Weekly
  • Reddit
    JavaScript
  • JavaScript
    Jabber

从例子中学习

最佳的学习方式是从例子中学习

风格指南

JavaScript风格指南是一组代码规范,它会帮助你设计具有可读性和可维护性高的代码。

  • AirBnB的编码规范
  • 常用的JavaScript原则
  • Node编码规范
  • MDN编码规范

编码基础

我已经无法形容读好代码给我带来的帮助到底有多大,一旦当你想读新的好代码时,可以上Github上找

  • Lodash
  • Underscore
  • Babel
  • Ghost
  • NodeBB
  • KeystoneJS

圆满

文章的结束,你应该稳固的掌握了JavaScript的基础,并且知道如何应用于Web开发。记住,这篇文章只是你的一个线路图,如果你想成为一个前端英雄,你还需要在项目中花更多的时间来适应这些概念,项目做得越多,你对他们也会越热情,你学到的也越多。

这篇文章是两部系列的第二部分,唯一遗漏的地方是Node,他是一个可以允许JavaScript运行在服务器上的框架,将来,也许我会在写一篇文章介绍Node相关的服务端开发,以及NoSql数据库

欢迎来Tweet上找我

作者:@Jonathan Z.
White
译者:jieniu
原文:From Zero to Front-end Hero (Part
2)

欢迎您扫一扫上面的微信公众号,订阅我的博客!

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注