不要轻信别人的代码!

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

威尼斯人线上娱乐 1

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

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

威尼斯人线上娱乐 2

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

你必须查看并做决定:

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

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

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

威尼斯人线上娱乐 3

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

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

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

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

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

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

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

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)

最后一条原则:尽量简单

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

威尼斯人线上娱乐 4

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

谢谢!

1 赞 1 收藏
评论

威尼斯人线上娱乐 5

其他感兴趣的框架

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

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 的一些东西。

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

威尼斯人线上娱乐 6

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

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

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

威尼斯人线上娱乐 7

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

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

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

威尼斯人线上娱乐 8

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

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

是的,Microsoft Access!

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

我真的不知道。

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

其实,我完全不知道。

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

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

代码的破窗效应

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

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

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

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

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

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

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

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

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

威尼斯人线上娱乐 9

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

威尼斯人线上娱乐 10

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

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

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

JavaScript走势的结论

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

我们去了银行…

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

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

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

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

威尼斯人线上娱乐 11

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

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

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

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

Web 开发 17 年的所见所得

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

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

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

关于 NodeConfBP

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

组织并提供赞助。

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

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

趁热打铁,抓紧机会!

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

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

拒绝平庸,对吧?!

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

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

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

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

威尼斯人线上娱乐 12

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

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

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

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

网站地图xml地图