前端开发个人小结 · Retrospection的博客

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记录学习的过程
原文地址:https://www.cnblogs.com/lijianming180/p/12251477.html