对于前端的学习和提高,我的基本思路是这样的。首先,前端的三个最基本的东西HTML 5、CSS 3和JavaScript(ES6)是必须要学好的。这其中有很多很多的技术,比如,CSS 3引申出来的Canvas(位图)、SVG(矢量图) 和 WebGL(3D图),以及CSS的各种图形变换可以让你做出非常丰富的渲染效果和动画效果。 ES6简直就是把JavaScript带到了一个新的台阶,JavaScript语言的强大,大大释放了前端开发人员的生产力,让前端得以开发更为复杂的代码和程序,于是像React和Vue这样的框架开始成为前端编程的不二之选。 我一直认为学习任何知识都要从基础出发,所以这篇文章我会着重介绍基础知识和基本原理,尤其是如下的这些知识,都是前端程序员需要花力气啃下来的硬骨头。
  • **JavaScript的核心原理**。这里我会给出好些网上很不错的讲JavaScript的原理的文章或图书,你一定要学好语言的特性,并且详细了解其中的各种坑。
  • **浏览器的工作原理**。这也是一块硬骨头,我觉得这是前端程序员需要了解和明白的关键知识点,不然,你将无法深入下去。
  • **网络协议HTTP**。也是要着重了解的,尤其是HTTP/2,还有HTTP的几种请求方式:短连接、长连接、Stream连接、WebSocket连接。
  • **前端性能调优**。有了以上的这些基础后,你就可以进入前端性能调优的主题了,我相信你可以很容易上手各种性能调优技术的。
  • **框架学习**。我只给了React和Vue两个框架。就这两个框架来说,Virtual DOM技术是其底层技术,组件化是其思想,管理组件的状态是其重点。而对于React来说,函数式编程又是其编程思想,所以,这些基础技术都是你需要好好研究和学习的。
  • **UI设计**。设计也是前端需要做的一个事,比如像Google的Material UI,或是比较流行的Atomic Design等应该是前端工程师需要学习的。
  • 而对于工具类的东西,这里我基本没怎么涉及,因为本文主要还是从原理和基础入手。那些工具我觉得都很简单,就像学习Java我没有让你去学习Maven一样,因为只要你去动手了,这种知识你自然就会获得,我们还是把精力重点放在更重要的地方。 下面我们从前端基础和底层原理开始讲起。先来讲讲HTML5相关的内容。 # HTML 5 HTML 5主要有以下几本书推荐。
  • [HTML 5权威指南](https://book.douban.com/subject/25786074/) ,本书面向初学者和中等水平Web开发人员,是牢固掌握HTML 5、CSS 3和JavaScript的必读之作。书看起来比较厚,是因为里面的代码很多。
  • [HTML 5 Canvas核心技术](https://book.douban.com/subject/24533314/) ,如果你要做HTML 5游戏的话,这本书必读。
  • 对于SVG、Canvas和WebGL这三个对应于矢量图、位图和3D图的渲染来说,给前端开发带来了重武器,很多HTML5小游戏也因此蓬勃发展。所以,你可以学习一下。 学习这三个技术,我个人觉得最好的地方是MDN。 - [SVG: Scalable Vector Graphics](https://developer.mozilla.org/en-US/docs/Web/SVG) - [Canvas API](https://developer.mozilla.org/kab/docs/Web/API/Canvas_API) - [The WebGL API: 2D and 3D graphics for the web](https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API) 最后是几个资源列表。 - [Awesome HTML5](https://github.com/diegocard/awesome-html5) 。GitHub上的Awesome HTML5,其中有大量的资源和技术文章。 - [Awesome SVG](https://github.com/willianjusten/awesome-svg) - [Awesome Canvas](https://github.com/raphamorim/awesome-canvas) - [Awesome WebGL](https://github.com/sjfricke/awesome-webgl) # CSS 在《程序员练级攻略》系列文章最开始,我们就推荐过CSS的在线学习文档,这里再推荐一下 [MDN Web Doc - CSS](https://developer.mozilla.org/zh-CN/docs/Web/CSS) 。我个人觉得只要你仔细读一下文档,CSS并不难学。绝大多数觉得难的,一方面是文档没读透,另一方面是浏览器支持的标准不一致。所以,学好CSS最关键的还是要仔细地读文档。 之后,在写CSS的时候,你会发现,你的CSS中有很多看起来相似的东西。你的DRY - Don’t Repeat Yourself洁癖告诉你,这是不对的。所以,你需要学会使用 [LESS](http://lesscss.org/) 和 [SaSS](http://sass-lang.com) 这两个CSS预处理工具,其可以帮你提高很多效率。 然后,你需要学习一下CSS的书写规范,前面的《程序员修养》一文中提到过一些,这里再补充几个。 - [Principles of writing consistent, idiomatic CSS](https://github.com/necolas/idiomatic-css) - [Opinionated CSS styleguide for scalable applications](https://github.com/grvcoelho/css-styleguide) - [Google HTML/CSS Style Guide](https://google.github.io/styleguide/htmlcssguide.html) 如果你需要更有效率,那么你还需要使用一些CSS Framework,其中最著名的就是Twitter公司的 [Bootstrap](http://getbootstrap.com/),其有很多不错的 UI 组件,页面布局方案,可以让你非常方便也非常快速地开发页面。除此之外,还有,主打清新UI的 [Semantic UI](https://semantic-ui.com/) 、主打响应式界面的 [Foundation](http://foundation.zurb.com/) 和基于Flexbox的 [Bulma](http://bulma.io/)。 当然,在使用CSS之前,你需要把你浏览器中的一些HTML标签给标准化掉。所以,推荐几个Reset或标准化的CSS库:[Normalize](https://github.com/necolas/normalize.css)、[MiniRest.css](https://github.com/jgthms/minireset.css)、[sanitize.css](https://github.com/jonathantneal/sanitize.css/) 和 [unstyle.css](https://github.com/Martin-Pitt/css-unstyle)。 关于更多的CSS框架,你可以参看[Awesome CSS Frameworks](https://github.com/troxler/awesome-css-frameworks) 上的列表。 接下来,是几个公司的CSS相关实践,供你参考。 - [CodePen’s CSS](https://codepen.io/chriscoyier/post/codepens-css) - [Github 的 CSS](http://markdotto.com/2014/07/23/githubs-css/) - [Medium’s CSS is actually pretty f***ing good](https://medium.com/@fat/mediums-css-is-actually-pretty-fucking-good-b8e2a6c78b06) - [CSS at BBC Sport](https://medium.com/bbc-design-engineering/css-at-bbc-sport-part-1-bab546184e66) - [Refining The Way We Structure Our CSS At Trello](https://blog.trello.com/refining-the-way-we-structure-our-css-at-trello) 最后是一个可以写出可扩展的CSS的阅读列表 [A Scalable CSS Reading List](https://github.com/davidtheclark/scalable-css-reading-list) 。 # JavaScript 下面是学习JavaScript的一些图书和文章。
  • [JavaScript: The Good Parts](https://book.douban.com/subject/11874748/) ,中文翻译版为《JavaScript语言精粹》。这是一本介绍JavaScript语言本质的权威图书,值得任何正在或准备从事JavaScript开发的人阅读,并且需要反复阅读。学习、理解、实践大师的思想,我们才可能站在巨人的肩上,才有机会超越大师,这本书就是开始。
  • [Secrets of the JavaScript Ninja](https://book.douban.com/subject/26638316/) ,中文翻译版为《JavaScript忍者秘籍》,本书是jQuery库创始人编写的一本深入剖析JavaScript语言的书。适合具备一定JavaScript基础知识的读者阅读,也适合从事程序设计工作并想要深入探索JavaScript语言的读者阅读。这本书有很多晦涩难懂的地方,需要仔细阅读,反复琢磨。
  • [Effective JavaScript](https://book.douban.com/subject/25786138/) ,Ecma的JavaScript标准化委员会著名专家撰写,作者凭借多年标准化委员会工作和实践经验,深刻辨析JavaScript的内部运作机制、特性、陷阱和编程最佳实践,将它们高度浓缩为极具实践指导意义的68条精华建议。
  • 接下来是ES6的学习,这里给三个学习手册源。