2016年JavaScript开发者需要了解的技能永利网址

Web 开发 17 年的所见所得

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

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

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

保持冷静,勿信炒作

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

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

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

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

永利网址 1

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

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

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

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

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

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

那么问题来了:

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

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

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

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

永利网址 2

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

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

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

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

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

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

永利网址 3

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

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

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

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

永利网址 4

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

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

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

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

永利网址 5

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

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

JavaScript走势的结论

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

关于 NodeConfBP

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

组织并提供赞助。

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

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

然后夜幕降临,迎来 2002 年

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

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

永利网址 6

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

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

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

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

永利网址 7

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

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

永利网址 8

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

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

在这里他写到:

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

听着有些熟悉,是吧?

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

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

他们没有这种桌式足球?

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

永利网址 9

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

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

英文原文:Skills JavaScript Developers Should Learn in
2016

译者:xxholly32
译文地址:http://t.cn/R5HIDVI

趁热打铁,抓紧机会!

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

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

拒绝平庸,对吧?!

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

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

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

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

永利网址 10

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

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

桌面应用的对决: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框架开发桌面应用,应该是开发者现在最好的选择。

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)

最后一条原则:尽量简单

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

永利网址 11

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

谢谢!

1 赞 1 收藏
评论

永利网址 12

其他感兴趣的框架

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

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年能够占到的份额都会比较少。对于构建大型负载的应用,大部分专业开发者对这个技术,还是持保留意见的。

认识下 Daniel Khan

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

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

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

永利网址 13

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

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

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

永利网址 14

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

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

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

永利网址 15

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

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

是的,Microsoft Access!

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

我真的不知道。

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

其实,我完全不知道。

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

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极有可能是未来的趋势。