漫谈前端及其自学路径

起源

这篇博文的起因是这样的:昨晚突然想感慨一下自学前端开发这将近 20 个月的一些心路历程。重点想说的其实是最后一两段话,结果前面铺陈了好千字,遂决定摘取下来成为一篇博文。今日再阅读时,发现有一些事实错误和错别字,也一并做了查证和勘误,遂得此文。

由于本人的大学毕业论文正是前端开发相关的话题,所以查询维基百科后,做了一些文献的引用,之后可能将此文作为毕业论文的一部分。

正文

最近蛮深的体会:

当二十年前,前端领域刚刚出现甚至还不叫前端之时,那会儿的网站开发人员的工作主要是用 Flash 做动画、用 Dreamweaver “可视化编写”网页、用 Firework 切图,所以很长一段时间,业内从业人员俗称或自嘲为“切图仔”。

2010 年 BackboneAngular等前端 JavaScript 框架的相继出现,让前端开发人员逐渐有了底气:

因为他们也可以借助程序设计领域由来已久的 MVC、MVVM 来构建有可靠范式支撑的 SPA(Single Page Application,单页应用) 了。

而 2009 年出现、2011 年后不温不火的 Node.js 把 JavaScript 直接从浏览器端带入到服务器端,继而 npm 社区方兴未艾,进而出现 ReactPolymer 等推动 W3C 规范或多方互相影响、借鉴、学习的“新概念”前端 JavaScript 框架,让从业人员意识到:

前端领域也可以实现组件化,反推规范的制定。

而与此同时,前端工程化也告别了刀耕火种之状态,一同步入了初级阶段。

早早地,Node-WebKit(现名为 NW.js) 和 Electron 已在桌面端攻城掠地多时,早有像 Atom 编辑器这样由 Github 社区开发维护并广受好评的成功开源项目。

而后 Facebook 的 React Native 把矛头和目标直指 Android 和 iOS 开发领域,其愿景不可谓不宏大。

React Native 引入虚拟 DOM 的概念,借助中间的抽象层,理论上可以横跨所有平台,支持使用 HTML、 CSS、 JavaScript 构建跨平台产品和应用,大大加速开发效率,减少开发周期。

期间,不乏像 MeteorMEAN 这样的全栈平台和框架大展身手...

至此,前端领域在短短的四五年间,可谓变幻莫测、生机勃勃,也不免显得稚气未脱,远未成熟...

步入 2016 年,ECMAScript 标准将继续深化,JavaScript 新版本将每年如约而至...而此时此刻,却越发猜不透前端的走向了...

然而,就此打住

AJAX 还未普及之时,“前端”作为 View 层(视图层),仅仅只承担了展示页面效果的工作,往往由后端工程师一并完成,或者说本来就没有前端工程师的职位。

所谓前端,其实就是设计师开始用 Dreamweaver 玩可视化编程了。接着通过 Ajax,前端工作突然可以与服务器进行数据交互了,有了一点独立的苗头,可绝大部分前端工作也还是由后端工程师承担。

2006 年 jQuery 的出现以及接下来几年 jQuery 社区的火爆,让前端工程师能高效完成兼容各大浏览器的页面交互效果的工作。

渐渐地,也就有一些走在前列的“闲人”开始“谋划着”要前端工程师承担更多的职责(也有可能是这帮人不喜欢什么事情都依赖后端工程师)。慢慢地,前端工程师有 Node.js 可以把玩了,从此再也不需要依靠后端工程师的协助,便可独自一人完成一整个项目和产品的开发、测试、上线、运维,从此也就必须了解业务逻辑、了解服务、了解路由、了解网络、了解服务器、了解跨平台开发、了解 App 开发...

要点来了

说了这么多,要点其实很简单,可以理解为:

  • 有人不希望总是依赖后端工程师,想要 JavaScript 跨平台,于是搞出了 Node.js
  • 开发者的智慧和力量,将 npm 社区推向前所未有的高度
  • 前端工程师借助这一趋势,只要熟悉 JavaScript 便可一展身手,构建属于自己的产品,不需要后端工程师的协助

然而这其中最大的一个断层便是:

现阶段,绝大多数前端工程师在成为前端工程师之前,都是有经验的后端工程师,这些人自然很容易接受新型“前端工程师”所需要承担的职责,因为本来前端就是从后端分离出来的工种和业务,他们大体都清楚后端领域的基础知识,以及有一定的后端实战开发经验。

然而,这可为难了很多从设计师转行的前端工程师以及零基础学员,因为他们一般都是从 View 层,也就是产品的设计与实现(俗称“切图”)开始步入前端的,让他们突然接受业务、数据、网络、服务这些层级,我想一开始多多少少也会迷茫和摸不着头脑罢。

BTW,我就是后者,所以深有感触。

结论

最后,总结一下我自学前端近 20 个月、反观之前的自学历程后,生发的感慨以及自认为合适的自学路径:

如果你的梦想是不借助后端工程师,自行研发一款产品(不可否认,这是我的梦想之一),我建议一开始就想好自己想做什么产品,直接从事后端工程师的工作,也就是学习数据交互、数据库、路由、网络等基础知识,或者是直接学习 Node.js 开发。自学这个之后,你便可以做出可用的功能。

那么接下来的事情就是:产品交互和产品颜值了。此时再自学 HTML 和 CSS,从界面设计与实现的角度切入前端开发,无论是借助 CSS 框架还是 JavaScript 框架实现 View 层的快速设计与开发,那是极极好之事。

至于交互设计,我想只能靠多把玩优秀的产品,从中领悟了,靠的是感性认知和天赋啦。再之后,如果有意抛弃后端,则可以深入学习 Node.js,将后端之所学,在 Node.js 上一一寻找对应。

永远记住:不要为了学习编程语言而学习编程语言。一切从需求和产品出发,需要什么,补足什么。

斯以为此法更为妥当。终。

引用

概念
JavaScript 类库
JavaScript 框架
跨平台框架
全栈框架和平台
JavaScript 规范

Loyalsoldier

死飞,设计,编码,音乐……美物都值得善待。