计算机科学简述

计算机科学大致分类

计算机科学.png

计算机科学在前端开发中的体现:

数据结构与算法

  • 页面中不同类别的排序:价格最高、最低等等。
  • DOM对象
  • 闭包

程序设计语言理论

  • 语法,语义
  • 表达式,赋值语句

信息论与编码理论

  • new ArrayBuffer
  • new Blob

计算理论

  • 正则表达式
  • 计算的时间和空间

计算机体系结构

  • 传值和传址
  • 本地存储
  • IndexDB
  • 输入输出

并发、并行

  • Javascript的事件轮询机制
  • 浏览器切换计算/IO任务
  • requestAnimationFrame
  • tab切换

计算机网络

  • 网站性能优化
  • 网络协议

计算机安全

  • CORS攻击
  • SQL注入

数据库

  • IndexDB

计算机图形与可视化

  • 各类图表
  • Canvas
  • 2D/3D动画
  • VR/AR

人机交互

  • 所有的交互界面

人工智能

  • 公众号的对话机器人

我们需要什么能力?

扎实的计算机基础和工程能力。

计算机基础

扎实的基础知识不仅仅是我们会用某一门语言去编写程序出来,更多的在于我们对这个语言的理解有多少。理解程度的深浅与我们的计算机基础知识直接相关。举些例子,如何理解Javascript是单线程的?HTML和JSON有什么区别和相同点?浏览器的重绘和重排是如何进行的?

若要回答以上问题需要对计算机基础有非常扎实的基础,在这个情况下我们的视野不会只局限于前端,因为前端开发是整个计算机科学领域中的一个应用场景。

再以上面第一个问题为例,要理解这个问题需要我们理解下面的内容:

  • 什么是线程?什么是进程?
  • 单线程和多线程差别是什么?
  • 单线程如何处理多个事件?
  • 单线程和多线程如何实现?

工程能力

工程能力.png

工程能力让我们能够对一个项目拥有更加完善的理解能力。一个项目最基础的阶段是"做完了",在此基础上更要去追问以下几个问题:

  • 质量怎么样?
  • 我自己一个月以后是否还能理解自己写的代码?
  • 如果有别人需要开发,别人是否能看懂?
  • 是否有多处复制粘贴的部分?
  • 是否完成预期功能?完成度如何?还有哪些改进空间?
  • 如果下个月产生功能变更,是否易于修改?

我们该做些什么?

补充多面的计算机基础知识

去年我们花了很多时间在Javascript基础上的原因就是因为这个,深入理解一门语言只是一个开始,今年更多的我们可以去思考如何巩固和学习更全面的计算机知识。比如:

  • 深入研究一个框架,去学习和理解它为什么这么设计
  • 继续巩固加强编程语言能力,用编程语言去完成各种各样的功能
  • 完整地了解浏览器工作原理

多造轮子

我们自己动手去实现各种各样的功能。从小到大,实现各种各样的东西,下面是一些示例:

  • Array.reduce
  • 某个组件
  • 某个网页/网站
  • 某一个框架的简单版

然后去跟别人的做法进行对比,观察优劣。

多拆轮子

开源的软件非常多,我们在做任何项目的时候都可能有可以参考的东西,完全可以去分析和拆解已有的代码。

  • element-ui代码怎么组织的?怎么实现的?
  • Vue核心代码有哪些,我们改写其中一部分是否还能运行?
  • wepy为什么能够用vue的语法写小程序?

优化自己的项目

自己写的项目自己是最熟悉的,通过优化自己的项目,包括代码重构、文档书写、添加注释等等方式,让自己的项目更加清晰,减少冗余代码,增强可扩展性。

参考资料: