2018年转眼来到了最后一个月,算下来我进入前端之门也有一年了,虽然下半年由于忙于筹备毕业论文的相关事项,前端这一块有所放下,但是想想还是给自己这一年的学习做一个总结。

现代化软件开发确实是一个复杂的体系工程,这是我今年学习前端开发最大的一个感受。伟大的程序员们在尝试用手里的编程语言工具,结合自己聪明大脑所总结的各种抽象,不断体系化地解决日常业务中所遇到的各种各样的问题。而我们的日常工作也需要每天、每周、每月地不断对自己做过的事情进行总结和抽象,不断用手里的工具去提高自己效率。

闲下来的时候,我喜欢浏览知乎,我感觉很多人对前端开发存在着很大的误解,认为前端的内容繁杂且琐碎,知识不成体系。其实我觉得后端也是如此。

在正规的软件开发流程中,真正的业务逻辑可能只占系统的一到两成,流程控制和异常处理占了系统的绝大部分。好的流程控制和异常处理被总结成了各种各样的编程范式和框架,从而形成了各种各样更高层次的抽象概念。只能说后端由于发展时间更久,更多的场景被更高级的抽象总结成了一套较好的最佳实践,而前端由于年限尚短,并没有足够的时间去行程足够好的抽象,给人一种琐碎的感觉而已。正因如此,更要求前端时常对自己的技术能力和业务场景进行梳理,找到效率低下、重复工作多的部分,从中提炼抽象以及最佳实践,从而推动行业发展。

规范

很开心能在2018年这个时间点进入前端开发,随着各大浏览器厂商逐渐认识到规范与标准化对于技术推进的重大好处后,前端开发终于能逐渐地从严酷的兼容性问题中部分地解脱出来,更多地思考更高层次的抽象。

我觉得作为前端开发,以下规范是需要了解的:

  1. w3cw3c 中国 这两个网站是国际万维网组织和国际万维网组织中国站。在前者中,有详细地说明现行的万维网组织认为的当代 Web 开发应该遵循的标准规范,其中包括很多方面:HTML / CSS / JavaScrpit / Browser / Accessibility 等等,这是作为一个面向未来的前端开发应该时常关注的内容。而后者有很多标准委员会的最新提案、进展、动向,通过这些能更好地了解 Web 开发可能的发展方向。
  2. ecma262 tc39 有着 JavaScript 最新的进展和动向,在这里你可以跟踪 JavaScript 的各个新提案特性,了解每一个新特性的所处阶段,了解很多业内大牛对于新特性的见解与他们的讨论。

编程语言及其范式

根据我的观察,在面对编程语言方面的问题时,程序员们大体分成了不太相同的两派。一部分认为编程语言只是一个工具,一部分认为编程语言之间有本质不同。在我个人看来,两个观点所站的角度其实不同,所以这种争辩其实本无意义。一方面我们要承认不同语言有着不同的设计哲学,在设计之初就有一些特定的考虑,反应了某一类业务解决方案的最佳实践。另一方面我们也要看到,由于当代软件开发中 Web 还是主流,各种各样的编程语言之间也越来越相互借鉴,朝着更好地适应 Web 开发的需要一骑绝尘。但是总而言之,保持对新生的语言的持续关注还是重要的。

以下是一些我个人感兴趣的语言:

  1. JavaScript,无需多说,当下以及可以预见的未来三五年,前端开发还几乎不可能离开这个语言。而且随着现在 Ecma-262 标准一年一更的速度来看,及时跟踪每年的新特性并积极在开发中尝试引入是十分重要的。
  2. TypeScript, JavaScript的超集,越来越多的复杂项目关注使用了这个语言。类型系统这个东西真的是个十分玄妙的东西,随着我开发的系统的逐渐复杂,我也发现了类型系统 大专栏  前端开发个人小结 · Retrospection的博客某种程度上的优越性。引入类型系统确实能很切实地提升编码过程中的很多体验,比如智能提示,比如安全地基于IDE的重构。而且类型本身就能带来巨大的信息,大大减少开发时查阅文档的时间,提高开发效率。
  3. ClojureScript、Reason、Haskell等一水函数式编程语言,越来越多的语言逐渐引入了各种各样的函数式编程语言的特性。虽然纯函数式编程的有效性还没有能够完全得到业界的普遍认同,但是在实际项目中部分地采用函数式特性确实能带来更好的代码可读性。
  4. Golang,服务端目前风生水起的语言,听说能让水平普通的程序员也能较轻松地写出应对大规模I/O的应用程序。
  5. Rust,心中的白月光,积极支持 WASM,然鹅我觉得语法有点丑,概念有点难以理解。

编程范式上,Reactive响应式编程是一个需要学习的部分。Rx.js的运算符需要一定的学习。

样式

我觉得样式需要单开一个小节来说,因为这是前端与艺术的交叉点。这里的这部分需要不断地积累,效果也好、图形也好、排版也罢,如果想跳脱出常规设计,则必须更好地学习 CSS,积累各种各样样式的写法。

  1. 布局,Flex就不用多说,Grid也需要关注。曾经的 float 的做法会随着浏览器的标准化逐渐式微。
  2. 特殊图形,这个需要积累,如果平时不是很闲的时候也来玩玩 CSS 的话,一般很难拍脑袋想出一些图形的写法。可以的话,多尝试 CSS 作画。
  3. 动效,包括但不限于CSS Animation。
  4. 设计。

随着 Web Page 向 Web App 的进化的发展,越来越多的人关注到了 JavaScript,然而却对疏忽了 CSS。感觉这部分的工程化会是未来的一个重要课题。如何将样式这部分尽可能地更好地交给设计师是一个十分重要的问题。

工程化

用“工程化”来指代构建测试集成部署版本管理等等相关工具链,这个我确实是不太赞同的。这一定是一个具有阶段性特征的词,进入2018年后,工具链上各式工具都呈现基本稳定的情况下,再谈“工程化”就总是有点出戏。因为现在少有一个前端项目会延续过去的刀耕火种,而是直接上成熟的工具链条。

然而工程化又应当是我们每一个前端作为工程师的追求,其实就是通过制造各种各样的工具,让日常的开发效率进一步提高,是技术发光的地方。现在前端领域只能说有了工具,然而这些工具的好用性与易用性却并没有达到完美的程度。打开一个开源项目,除了src目录外,根目录下面齐刷刷地十几个配置文件让人眼花缭乱。大型项目的构建时间以分钟计,开箱即用的工具还是很少,设计师与工程师之间的隔阂还是很大。这些问题还是需要被解决,前端开发应当可以更好。

多端

在业务上,前端面对的一个很大的挑战是多端问题,这是一个综合问题。综合了设计、工程化、编码方式等等问题。除了过去的PC端与移动端网页,现在Hybrid App、ReactNative、Weex的兴起,小程序的兴起,使得一次编写多处运行成了一个关键的刚需。而各个平台却又有各个平台的设计语言,现在很多的App只能保持自己提取一套所有平台都能接受的视觉规范的子集,使得产品内风格基本一致。如何能让App在适配多端的条件下又能不违背每一端的设计语言是一个严峻的挑战。

说来说去,上述都还是技术层面上的梳理。业务上由于自己还没有深入接触过什么业务需求,所以也无从谈起。在技术积累上,我觉得自己需要按照如下几点安排自己未来的学习路线:

  1. 给每个季度定下一个学习主题,一年太长、一月太短,季度是一个比较合适的时间单位。
  2. 在如何选择学习主题的问题上,我现在还有些纠结。当然如果业务上的需求和个人爱好能结合是最好了,可是我似乎更喜欢在平时做一些和业务无关的研究。这里让我再纠结纠结
  3. 选定了主题后不能更改,必须沿着此方案制定学习路线。
  4. 用blog记录学习的过程

前端开发个人小结 · Retrospection的博客的更多相关文章

  1. 分享Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站

    这是个什么的项目? 使用 Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站. 博客线上地址:www.boblog.com Github地址:https: ...

  2. iOS/mac开发的一些知名个人博客

    王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒. http://onevca ...

  3. 前端相关UED团队和个人博客整理

    平时收集的UED的团队和个人博客一些有关/*********************************这次真的是搬运工,原文转载自蓝色理想********************/ 前端团队推荐 ...

  4. 前端react+redux+koa写的博客推荐

    React-Node搭建的博客 曾经用的php+mysql+js写的博客,现在看来已经很low了,所以用目前最火的react+koa框架重构一下.先上地址吧:目前线上版本http://www.liuw ...

  5. Spark大型电商项目实战-及其改良之番外(1)-将spark前端页面效果高效拷贝至博客

    Spark大型电商项目实战-及其改良这个系列的时间轴展示图一直在变....1-3篇是用图直接表示时间轴,用一段简陋的html代码表示时间表.第4篇开始才是用比较完整的前端效果,能移动.缩放时间轴,鼠标 ...

  6. 一个人开发的.Net版轻量级博客,欢迎吐槽,互相学习!

    项目架构采用:Asp.Net MVC4.0 + EntityFramework6.0 code first + AutoMapper + Unity(IOC) + SqlServer2012 项目地址 ...

  7. Django开发的基于markdown的博客开源

    PiperMarkdown Blog for Django1.11,Python 3.6,based on Markdown,网址,希望大家能给个star,谢谢! 什么是PiperMarkdown 这 ...

  8. Django项目开发实例之我的博客

    1.开发环境 2.创建virtualenv 3.安装相关包 Django Pillow 4.创建项目 添加应用: 5.设置静态文件和模板 6.运行测试 参考(http://www.cnblogs.co ...

  9. 极客Web前端开发资源大荟萃

    前端开发已经成为当前炙手可热的技术之中的一个.本周我们除了给大家带技术相关资讯,另一些技术人员经常使用的站点.希望大家不要错过我们本周的内容.原文来自:极客标签 为神马说敲代码是非常艰难的 程序猿 做 ...

随机推荐

  1. jQuery篇

    jQuery 1.为什么使用jQuery? js中window onload事件只能出现一次,如果出现多次,后面的事件会覆盖掉前面的事件 js代码容错差 简单的动画效果实现很繁琐,例如简单的动画渐变效 ...

  2. java select单线程 服务器

    package com.Select; /** *select单线程 服务器 **/ import java.io.IOException; import java.net.InetSocketAdd ...

  3. ios alamofire4.x网络框架url 中文问题

    一种方式是把参数放到Parameters里面 request 增加 encoding:URLEncoding.default 就可以 还有中文在path上 比如    http://www.chao. ...

  4. 编译原理_P1003

    1. 语法分析 1.1 上下文无关文法的定义 ----  正规式能定义一下简单的语言,能表示给定结构的固定次数的重复或者没有指定次数的重复 例如:a(ba)5,a(ba)* ---- 正规式不能用于描 ...

  5. 吴裕雄--天生自然 JAVA开发学习:序列化

    public final void writeObject(Object x) throws IOException public final Object readObject() throws I ...

  6. 一个http的Post请求问题,unable to resolve host <我的域名>:no address associated with hostnam

    原因:你应用中写入的测试服务器地址baseURL解析不了,服务器端设置的原因: 解决:找服务端修改设置,或者Android应用中把测试地址改为上线服务器地址.

  7. gene cluster|DPG|拉马克主义变异|达尔文主义变异

    生命组学 A gene cluster is part of a gene family. A gene cluster is a group of two or more genes found w ...

  8. KUKA机器人常见十大问题及解决方法

    1 开机坐标系无效 世界坐标系是以枪头为基点,在这种坐标系中,机器人所有的动作都是按照以枪头为顶点来完成移动,XYZ方向切割枪方向不改变,如果机器人在世界坐标系中移动,枪头也随着改变方向,那就是我们在 ...

  9. Golang Middleware Part 1 · To Be A Better Man

    如何在Golang中实现中间件-Part 1 当使用net/http包实现服务的时候,一般使用的是如下的两中处理方式: http.HandleFunc http.Handle http.HandleF ...

  10. java基础之异常 · fossi

    在开发中,异常处理是一个不可绕开的话题,我们对于异常的处理已经非常熟练了,对于异常本身的概念.用法等不再赘述了,直接结合面试问题来加深对异常的理解吧. Throwable 可以用来表示任何可以作为异常 ...