首页 » JavaScript » JavaScript

JavaScript

原文 http://blog.csdn.net/qq_33150267/article/details/79214845

2018-02-01 02:00:05阅读(460)

JavaScript是世界上最被误解的语言

JavaScript ( es6,es7,es8......) 是一种轻量级解释或JIT编译型的编程语言,拥有一流的功能。虽然它是作为开发web页面的脚本语言而出名的,但是在很多非浏览器环境中也使用JavaScript,例如 node.js、 Apache CouchDB 和 Adobe Acrobat。JS是一种基于原型、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。

为js创建规范是非常有必要的,可以参考以下建议: 
保持代码整洁。JS Hint是这写工具中一个很好的例子,这里有几条可以通过JS Hint检查的规则:

强制使用===和!==代替==和!=限制代码块嵌套深度限制函数的参数数量如果函数重复定义,发出警告如果变量创建后未被使用,发出警告

创建可复用的函数。比如我们常用的addClass操作,如果需要多次创建新的.green-alert类名,只需要修改定义好的add_background方法:

   $.fn.add_background = function(color){
       this.css('background-color', color);
       return this;
   }
JavaScript一度被认为是一种玩具编程语言,它有很多缺陷,所以不被大多数后端开发人员所重视。很多人认为,写JavaScript代码很简单,并且JavaScript只是为了在网页上添加一点交互和动画效果。

1. JavaScript 是图灵完备的;

(1)借鉴C语言的基本语法;
  (2)借鉴Java语言的数据类型和内存管理;
  (3)借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;
  (4)借鉴Self语言,使用基于原型(prototype)的继承机制。


2. 图灵完备的语言理论上可以解决目前所有的计算机编程问题;


3. JavaScript 简单灵活,应该会是解决大部分问题的优选方案。


所以,理论上,JavaScript 可以成为人工智能的开发语言

数据可视化(d3.js,echart.js,AntV - G2) 移动端应用(React Native,weex)后端(Node.js)人工智能(train神经网络 https://cs.stanford.edu/people/karpathy/convnetjs/index.html)
但这是完全错误的理解。JavaScript确实很容易上手,但其精髓却不为大多数开发人员所熟知。编写高质量的JavaScript代码更是难上加难。(可看《高性能javascript》)

JavaScript

ES6本来就是在往越来越Python化的方向在发展,这两种语言是在慢慢趋同的,现在Javascript基本也不需要分号了,let的作用域特性也跟Python差不多了,解构语法也支持了,装饰器、生成器也快了,class也有了,基本上这就是个小Python,这样对于熟悉Python的程序员来说要上手javascript就容易得多了,这不是个好事么?同样,熟悉ES6+的程序员也可以很容易转向Python。Javascript现在基本上没有什么不能做的事情,实际上大部分语言都没有什么不能做的事情,包括perl、ruby、Java甚至C++,通常它们的区别只是有些事情在某些语言当中是可以做然而还没有做,或者做了但不成熟,而在某些语言当中已经做了并且经受了实用的考验。而人们选择用哪种语言,通常只取决于自己会哪种,所以比较语言本身对于Javascript和Python来说意义不太大,会哪种就用哪种就行了。

以下我说的都是个人观点,比较宏观粗浅,主要针对的是前端工程师本身,没有深入技术和业务细节,请谨慎参考。 


职能概览






前端工程师首先是个程序员,其次也是个软件工程师,他们工作在离用户最近的地方,负责人机交互和用户体验,虽然叫“前端”,但其实他们的工作边界其实已经很宽了。


展望未来,我想前端的工作会继续分化,也会继续融合,分工是工业革命以来社会高效协作的主要推动力,以后很长一段时间应该也会维持这种形态,融合的原始推动力也是提高效率。分化和融合是不断的演化和互吸收转化的,不过核心的东西我想还是不会有太大变化。


观点


1.继续分化(领域、行业、技术栈)
2.继续融合(端技术、Web全栈技术、人工智能与端技术)
3.核心不变(计算机科学本质、软件工程思想与实践、程序员职业素养)






1. 继续分化


领域


前端领域会继续分化,例如阿里内部的前端就已经有中后台、图形、端技术、泛Node、开发者服务5个大方向了,每个大方向也会细分,举一些例子:


中后台:有云控制台、信息&资产管理平台、内部研发&项目管理平台、人工智能&机器学习平台、数据研发分析平台,企业内部信息平台等。具体产品如阿里云控制台、ERP、PAI、DeepInsight、阿里内外、Basecamp等。
图形:有基础图形库、3D图形、数据可视化、流程图等。具体产品如G2、DataV、阿里云城市大脑、滴滴智能交通调度图、双十一大屏等。
端技术:有移动端(iOS、Android、MobileWeb、PWA、小程序)、PC端(客户端、Web端)、触屏电脑、各种监控大屏、智能手表手环,智能汽车&家居屏幕等。具体产品如淘宝支付宝的App、PC主站、移动H5站,阿里郎、VS Code、双十一大屏、UC浏览器UWP版本、各种智能手表、手环、汽车、家居屏幕等。
泛Node:有工具链、Web框架、IoT、客户端(Electron、NW)等。具体产品如DEF/Atool/F2E-Test(阿里前端开发者工具)、Egg.js、阿里云的IoT应用、VS Code等。
开发者服务:有应用开发运维平台、组件市场等。具体产品如阿里云的应用搭建平台Boat、Fusion-Design组件市场,支付宝小程序开发者工具等。


行业


2B
信息管理、财务、建筑、航天、水利、金融、制造等传统行业软件以及阿里提出的五新:新零售,新制造,新金融,新技术和新能源,新技术赋能传统行业
SAAS软件及服务:如Teambition、Trello、钉钉企业版、Basecamp、Growing.io
2C
移动App:如微信、微博
PC工具应用:如Google Doc
产品展示类网站:如阿里云、支付宝官网


技术栈


React(Native)
Angular(NativeScript)
Vue(Weex)

JavaScript
2. 继续融合


端技术


前端、客户端技术思想的融合
组件化(组件化搭建页面)
组件生命周期钩子函数(如iOS ViewController)
MV*(如MVVM设计就来源于微软客户端开发框架)


大前端的统一
虚拟DOM技术:React/ReactNative/ReactCanvas
各种移动设备内核和引擎的统一:WebKit/V8
Web技术文档的统一:Mozilla Web Docs


Web全栈技术


前端、后端技术思想的融合
MV*(如前端的第一个MVC框架Backbone.js就来自于Ruby on Rails开发者)
AOP、依赖注入(Angular)
GraphQL(SQL)
IndexedDB(Database)


人工智能与端技术


人工智能、前端技术的融合
端是最终触达用户的节点
端数据采集->后端机器学习、数据分析->智能推荐呈现
物联网、前端技术的融合
智能家居/汽车/工业设备可能是有屏幕的,同时可以基于如JerryScript这样的JS执行引擎使用Node.js开发联网应用


3. 核心不变


计算机科学本质/软件工程思想与实践/程序员职业素养。


计算机科学基础:如基本的操作系统概念和计算机组成原理,算法和数据结构基础等等。
软件工程思想与实践:如软件开发模式,设计模式,架构思维,自动化思维,单元测试集成测试,UML等等。
程序员职业素养:如对代码整洁和可读性的追求,对软件开发的热情,对编程技艺的自我提升等等。


历史回顾


回顾过前端的演化,主要参见最底下的相关资源,下图简要回顾一下95年以来软件开发和前端历史:






前端的未来


那些生存空间越来越小的产业


小规模移动App:移动App市场被一些巨头把持,小规模App生存空间越来越小
PC信息导航类网站(网址、购物、论坛、生活):现在移动优先,而且有智能推荐,并且是强社交


无界面交互


Web前端能做一些事,主要是大前端的范畴
会话式界面(视频语音会话、语音搜索:WebRTC,开源语音库:Common Voice)
感官式界面(视觉:WebAR/WebVR)
无界面,未来会有大量IoT设备(IoT有自己的通信协议和规范,前端的工作是在用户看不见的后台)


富界面交互


大量工作需要前端来做:


日常办公软件(复杂应用,并且慢慢从桌面程序演化为Web):Office、Email、文档管理、产品设计、项目管理、代码编辑器
大数据/AI配套软件(复杂应用,并且慢慢从桌面程序演化为Web):需要大量的后台系统来做数据分析/机器学习
播放器/游戏:H5代替Flash,如Web Audio、Web Video、Canvas
容器/DSL/内核/小程序:支付宝/微信/钉钉容器,内核(也就是UC、QQ浏览器内核),及其自定义DSL(如果将来手机的底层能力都可以上浮到小程序,很有想象空间)
产品信息展示类网站(炫酷应用):各种智能设备官网、大企业官网


未来在哪里?






回顾观点


继续分化(领域细分、行业细分、技术栈细分)
继续融合(端技术融合、Web全栈、人工智能与端技术的融合)
核心不变(计算机科学本质、软件工程思想与实践、程序员职业素养)


一些建议


关心人工智能的发展,思考TA在前端领域可能产生的应用场景
视觉稿自动生成代码
根据用户使用习惯自动排出最符合该用户习惯的界面
收集用户数据在前端实时做学习和分析,如deeplearn.js
相信前端的未来,Web的力量
WebKit
V8
Flexbox:Yoga
结合公司业务特点有重点的关注前端的某些方面,毕竟技术服务于业务


最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹