现代前端开发路线图:从零开始,一步步成为前端工程师 -凯发k8国际

编者按:很多人都想学编程。但是苦于没有具体的步骤和指导。比如想找份前端开发的工作,却不知道应该先学习什么再学习什么,也不知道该选择什么样的工具。因为经常被人问到类似的问题,全栈开发者kamran ahmed索性在github上制订了一份现代,并且用一篇对前端开发的整个学习过程进行了详细解释。感兴趣的初学者不容错过。

进入正题之前先交代一下我和这张路线图的背景。过去5年我一直在进行全栈开发,目前是tajawal的首席工程师(我得有很多头衔)。关注趋势并且让其他开发者训练得当不仅是我的爱好也是我的工作职责。在如何跟上形势方面我发现有很多新手(也包括一些有经验的)都感到很困惑。2017年的时候我有很多朋友都发邮件给我寻求指导,他们想知道做这一行的话应该学些什么。所以为了避免自己老是要碰到这样的麻烦同时也是为了帮助别人,我决定一劳永逸准备这些图表,这样只要有人问我时就把这些图表的链接发给他们。所以这些图表就是这么诞生的。

一开始他们只是想要一些工具的推荐,但是昨天我决定给他们一份更加结构化一点的东西,增加了细节并且设计成步骤的形式以便你可以更好地理解该选择什么,按照什么样的次序。

同时我还在制作,但是前端已经做好了,你可以看看下面。

在详细介绍这份路线图的不同部分之前,我先花点时间讲讲我的免责声明:

这份路线图的目的是让你了解一下整体情况并且提供指导,如果你对接下来该学什么感到困惑的话。但并不鼓励你用赶时髦的心态去学东西。你应该对为什么一项工具在一些情况下更适合有基本了解,并且要记住时髦的东西从来都不意味着就是最适合你要处理的工作的。

好了,下面开始吧——下面就是这份路线图,但是本文的目的是依次解释路线图的每一个步骤。

你首先想要去做的第一件事是学习一些基础,包括学习html、css的一点基础知识,以及熟悉一下javascript的语法。

学习html基础

html给你的网页赋予了结构。它就像是人的骨架那样让你保持站立。首先你需要去学习语法以及它必须提供的一切。你的学习应该聚焦在下面这些东西上:

  • 学习html基础,了解如何编写语义html

  • 理解如何把网页分成section(段落),以及如何正确组织dom(文档对象模型)

任务——一旦你学习了html基础,至少要制作5个html网页。我建议你随便找一个网站,比如看看github的档案页或者twitter的登录页。然后把焦点放在恰当地组织内容上。出来的东西可能会很难看,但是暂时别担心,把你的关注点放在恰当的结构上。

学点css

现在我们已经学会了如何给网页准备好骨架,接下来就是在此基础上添加一些皮肤让它好看一点了。css——级联样式表就是用来美化你的html页面的。

  • 首先要做的是学习语法,熟悉常见的css属性。

  • 了解盒模型(box model),掌握如何利用grid和flexbox准备布局

  • 一旦学习完上面的,再学习以下通过媒体查询把网站做成响应式的。

任务——一旦你掌握了基础,接下来就应该设计上一步制作的html网页。比方说如果你给github档案编写了html页面的话,现在是时候应用css来让它的样子看起来像实际的github资料页面一样了。前面的那5个页面都要拿来试一下。

学习javascript基础

javascript能让你的html页面互动性更强。比方说你在网站上看过的所有那些幻灯片、弹出窗口以及广播通知,以及在没有重载页面的情况下重载页面的特定部分,这些都是用javascript做的。在这一步中,你将会学习javascript的基础来为后面的旅程做好准备——

  • 学习这门语言的语法和基本机构。

  • 学习如何用javascript来操纵dom,比方说如何从页面移除一些元素,如何增加一些元素,增加和移除类,通过javascript应用css样式等。

  • 完成之后再学习和理解诸如范围、闭包、变量提升以及事件冒泡这样的主题。

  • 学习如何用xhr或者ajax生成http调用。ajax可以让你在不需要重载网页的情况下执行特定动作。

  • 学完之后接下来就要了解es6 的所有新特性。es6只是javascript的一个版本,里面给这门语言引入了大量有趣的更新,比如类、定义变量的多种方式,给数组增加了新的方法,字符串连接等。你们在网上找到的大部分文章都会用babel来解析es6,这其实是个转译器,可以将这门新的javascript转换为旧的javascript,因为有一些旧版的浏览器不支持新版的js。不过现在先不用担心babel,只需要了解相关概念,然后用到任何一种支持es6的最新版浏览器上来练习一下就行。我们后面还会再继续讲es6的。

现在你应该已经感觉到东西像是那么一回事了。如果你按照上面的步骤做下来的话应该鼓励一下。这些是你刚刚学到的一些最重要的东西。

我应该学jquery吗?

曾经有一段时间每个人都对jquery疯狂,也有充分的理由;这是一个强大的库,在javascript基础上提供了一个封装,让你可以用兼容浏览器的方式执行任何东西。不过那些日子已经一去不复返,现在新项目用它已经不是很多了,但是仍然还有人在用。你不是一定要学它,但是这玩意儿的确很容易,如果你想看看的话还是有好处的。

练习时间

我已经说过很多次但是还是要再说一次,不练习的话你学不到任何东西。你可能随时都会感觉自己已经理解了但是如果不练习的话很快就会忘掉。在按照这份路线图去学习的时候,要确保尽可能多地去上手实践。

继续做些响应式网站,用javascript增加交互性。你可以添加任何感兴趣的现有的网页上去,但记住要利用上目前学到的一切

一旦你制作出了一些网站,接下来就是开始做真正的东西了。你可以到github上面找一些项目打开某些开源项目的pull请求。以下就是一些可以去尝试的pull请求:

  • 增强ui,把任何演示页做成响应式或者改进设计

  • 看看有什么开放的issue是你能够解决的

  • 重构任何你认为自己可以改进的代码

就像这个一样,告诉他们你正在学习让他们就你的pr以及可以如何加以改进提供反馈。

尽管我愿意推荐这个github库,但是这需要了解一点git的知识,所以这是可选的。你不必做这个但如果你做了的话,你会发现真的很有用——只要你开口你会惊讶地发现居然有那么多人愿意帮助你。那你也可以找到很多有关git的免费资源,比如试试。

鼓励自己一下

现在你已经学习了必要的基础了。如果一切都学得不错的话,你就可以去找份自由职业工作或者也许可以去试试能不能找份全职了。然而,如果你想有一份更好的职业的话,现在还不能停止脚步,因为还有很长一段路要走。

包管理器

在此之前,如果你要用到一些外部库比如插件或者任何外部的桌面小部件的话,你得手工下载javascript和css文件并且将它们放到项目里面,然后那些库或者插件发布新版本的时候,你又得下载更新的文件再放到你的项目里面,这是极其麻烦的事情。包管理器可以干掉这种麻烦。它们帮助你把外部库和插件放到你的项目里面,这样你就不用关心手工复制库或者费事地在它们发布新版时更新文件的事情了。现在有yarn和npm了。这两个几乎是一样的,都只是实现,你可以任选一个,一旦学会了使用其中一个,另一个自然也不成问题。

现在学以致用吧

在对包管理器有了基本了解之后,你就可以去安装一些外部库到你前面制作的一些网页上了,比如安装一些提示插件,当用户点击某个按钮时显示提示信息,或者创建一个登录表单用一些表单验证库进行表单验证,或者试试不同的选项看看如何安装不同的版本。

记得要看看

css预处理器

预处理器以css默认不支持的功能丰富了后者。可选项有很多,包括sass、less、stylus等等。要我选的话,我会选择sass。然而,postcss最近的发展势头也不错,这属于一个锦上添花的东西,有点类似于css的“babel”。你可以拿来独立使用或者在sass的基础上叠加。目前我建议你先学sass,等后面有时间了再看看postcss。

css框架

你已经不再需要学习css框架了,然而如果你想学一个的话。我会推荐在bootstrap、materialize和bulma里面选。但如果你要考虑它们的市场需求的话,我会选择bootstrap。

css组织

随着你的应用不断膨胀,css也开始变得混乱难以维系。有多种手段可以对你的css进行组织,让它更好地应对伸缩性,比如oocss、smacss、suitcss、atomic以及bem。你应该了解它们之间的不同,但是我更偏好bem。

构建工具

工具可以帮助你进行javascript应用的构建/打包以及开发。这一类包括了linter(代码检查)、task runner(自动构建)以及bundler(打包工具)。

对于自动构建,这个本来是是很多选项的,包括npm脚本、gulp、grun等等。不过这一次,既然webpack能够处理gulp能做的大部分东西,所以只有自动构建中的npm脚本可以用来对webpack能做的任务进行自动化。你不需要学习gulp,然而到后面如果你有点时间的话,可以去看看它能否对你的应用有所帮助。

至于linter,再次地也有很多选项,其中包括eslint、jslint、jshint以及jscs等。但是目前主要是eslint用得多。

对于模块打包工具,不同的选项包括parcel、webpack、rollup、browserify等。如果你必须选一个,目前你可以闭着眼睛选webpack就是。rollup也很常用但是主要建议用到库上面,至于app,还是以webpack为主。所以现在你就先学习一下webpack吧,后面如果想的话再了解一下rollup。

练习时间——做点什么

恭喜你!你现在可以称自己为75%的现代javascript开发者了。现在继续用你学到的东西做点什么出来。也许可以做个库将来用到sass和javascript上。然后用webpack将sass转换成css,用babel转换成es6代码。一旦你做完了再把它发布到github和npm上。

选一个框架

在旧的路线图中,这个部分往往是紧挨着基础部分的,但是这次我改到放在sass、构建工具和包管理器后面了,因为在框架中你全都会用上那些东西,如果不具备相应知识的话会吓到你的。

框架也有好些选项。不过目前比较常用的是react、vue和angular。最近对react.js的需求越来越旺盛。然而,前面列的这几个你随便选一个都不会错。我个人会选react或者angular。不过特别说明一下,作为初学者你也许会发现相对而言angular会容易点,也许是因为它支持几乎一切立即可用的东西,比如支持延迟加载的强大路由器,支持拦截器的http客户端,依赖注入,组件css封装等而不需要关心选择外部库的问题。不过react在社区方面无疑更有优势,而且facebook一直都在努力改进它。你需要确保的是不要因为什么东西火就选择什么,要去google一下,对比一下,看看哪一个最适合你。

这两个的比较以及我的个人体会我要留到下一篇文章再谈了,不过既然这篇文章是谈学习的,我就来讲讲如何找到angular和react的学习曲线。

下图中的学习曲线考虑了你已经具备typescript的知识,而且也懂了一些rx.js的基础。至于这种假设的原因我会在将来的文章中解释,不过主要是因为angular提供的其中的一些即时可用的标准和关键功能。但这并不意味着react就是坏的,它们各自都有自己的地位,我以后会进一步细谈。

你可以看看各自的学习曲线,看看哪个更适合你。

一旦你选择了自己的框架,当然还有其他一些东西需要你学的。比方说如果你决定学react的话,你可能还得学redux或者mobx去了解状态管理,具体选学什么要取决于你要做的应用的规模。mobx适合中小规模应用,redux更适合大规模应用。甚至你可能都不需要学,靠react的原生状态管理就行了,如果你的app允许的话。

如果你选择angular,你就得用typescript(没有它你也能开发出angular应用,但是我们还是推荐你使用)和rx.js,这些除了angular应用以外在其他地方也能用得上。这都是非常强大的库,也适合于函数编程开发。

如果你选了vue.js的话,也许还得学习vuex,这东西有点类似于redux但是是给vue用的。

需要注意的是,redux、mobx以及rx.js都不是跟这些框架绑死到一起的,你也可以用到各种javascript应用里面。此外,如果你选择了angular的话,确保你用的是angular 2 而不是angular 1 。

练习时间

现在你已经知道了开发现代javascript应用所需的一切。现在就用你选择的框架做点东西出来吧。你会在库中的idea目录找到一些点子;任选一个然后开始吧!

做完之后,再去看看如何衡量和改进性能。比方说可以看看interactivity time、page speed index以及lighthouse score等。

渐进式web应用

一旦完成了上述所有步骤,再来学习一下service worker以及如何制作渐进式web应用。

测试你的应用

应用测试有很多工具,各自的用途也不一样。我本人经常是组合使用jest、mocha、 karma及enzyme。然而,在开始选择工具之前,最好是首先理解有哪些不同的测试类型,看看所有的选项情况,然后从中再选择最适合您需求的一个。

这里有一份很好的,你可以去看看。

静态类型检查器

静态类型检查器帮助给javascript增加类型检查。你不需要学习这些,不过这些东西可以赋予你超能力,而且学习起来也很快,几个钟头就行了。这方面主要有typescript 和 flow。我喜欢typescript ,不过你可以两个都看看,再选你喜欢的。

服务器渲染

目前为止,你所学到的技能应该足够你找到一个“前端工程”的位置了。但且慢,你还可以更上一层楼。

你还可以在选定的任何框架内再学学服务器端渲染的知识。有不同的选项可选,这要取决于你用什么样的框架。比方说如果你决定用react,最值得关注的选项是next.js 和 after.js。如果是angular,你可以选universal。对于vue.js,我们有 nuxt.js。

这份路线图可能还会有遗漏的地方,但是足以应付任何“前端工程”角色之所需。还要记住的是,关键是尽可能多地练习。一开始你可能会觉得很吓人,总感觉自己没有掌握,但这是正常的,慢慢你就会觉得自己变得越来越好。还有,陷入困境时别忘了寻求帮助,你会惊喜地发现有多少人愿意帮助你的,或者至少我愿意。

  • 大小: 487.3 kb
  • 大小: 834.4 kb
  • 大小: 43 kb
来自:
6
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 因为经常被人问到类似的问题,全栈开发者kamran ahmed索性在github上制订了一份现代前端开发的路线图,并且用一篇文章对前端开发的整个学习过程进行了详细解释。感兴趣的初学者不容错过。进入正题之前先交代一下我和...

  • 转自:现代前端开发路线图:从零开始,一步步成为前端工程师 1.学习html基础 html给你的网页赋予了结构。它就像是人的骨架那样让你保持站立。首先你需要去学习语法以及它必须提供的一切。你的学习应该聚焦在下面这些...

  • 前端学习资料,包含了vue、react、electron、服务端渲染、微前端、前端性能优化、前端工程化、前端面试等方面的知识

  • it行业作为一种新型产业在短短十几年俨然成为了我国重要的经济增长点,国家更是大力扶持,在众多it学科中,首当其冲的就是前端,学习web前端的也是越来越来,不管是应届生还是转行从事的,web前端无疑是最快入门,...

  • 在不知不觉中,前端工程师火了。...通过本视频的学习,你可以从零开始,一步步的掌握前端开发的各项相关技能,最终达到企业对初级前端开发工程师、中级前端开发工程师、高级开发工程师、全栈开发工程师等职

  • py依赖包

  • 射箭游戏项目

  • py依赖包

  • py依赖包

  • 【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括stm32、esp8266、php、qt、linux、ios、c 、java、python、web、c#、eda、proteus、rtos等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。

  • 全自动焊接机器人.双丝杆控制上下高度,直线导轨和步进电机控制左右位置,气动推杆控制焊接头位置,灵活多变,用在多种不同场合,应用领域广泛,文件包含通用格式igs/step,欢迎下载!...

  • py依赖包

  • swift开发实例语言基础理论与项目实战进行完美结合

  • py依赖包

  • py依赖包

  • py依赖包

  • 本代码为遗传算法求解模型未知参数的程序,在建立模型的过程中,模型的待定系数通常是未知的,而通过数据拟合出来的模型无法求解,​遗传算法通过以下步骤: (1)初始化:设置进化代数计数器t=0,设置最大进化代数t,随机生成m个个体作为初始群体。 (2)个体评价:计算群体p(t)中各个个体的适应度。 (3)选择运算:将选择算子作用于群体。选择的目的是把优化的个体直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的。 (4)交叉运算:将交叉算子作用于群体。遗传算法中起核心作用的就是交叉算子。 (5)变异运算:将变异算子作用于群体。即是对群体中的个体串的某些基因座上的基因值作变动。群体p(t)经过选择、交叉、变异运算之后得到下一代群体p(t 1)。 (6)终止条件判断:若t=t,则以进化过程中所得到的具有最大适应度个体作为最优解输出,终止计算。 对未知参数进行求解,​当最优个体的适应度达到给定的阈值,或者最优个体的适应度和群体适应度不再上升时,或者迭代次数达到预设的代数时,算法终止。预设的代数一般设置为100-500代。 ​

  • 约瑟夫环视频及游戏-视频及游戏平台-视频及游戏平台源码-视频及游戏平台java代码-视频及游戏平台设计与实现-基于springboot的视频及游戏平台-基于web的视频及游戏平台设计与实现-视频及游戏网站-视频及游戏网站源码-视频及游戏网站java代码-视频及游戏项目-视频及游戏项目代码-视频及游戏系统-视频及游戏系统源码-视频及游戏管理系统-视频及游戏管理系统java代码-视频及游戏代码 1、技术栈:java,springboot,vue,ajax,maven,mysql,mybatisplus等 开发语言:java 框架:springboot jdk版本:jdk1.8 数据库:mysql 5.7 数据库工具:sqlyog/navicat 开发软件:eclipse/myeclipse/idea maven包:maven 浏览器:谷歌浏览器 2、系统的实现 用户信息 图片素材 视频素材 摘 要 i 目 录 iii 第1章 绪论 1 1.1选题动因 1 1.2背景与意义 1 第2章 相关技术介绍 3 2.1 mysql数据库 3 2.2 vue前端技术 3 2.3 b/s架构模式

  • 胶袋热封打包机是用以解决现有技术中塑料袋打包工序由人工来完成而存在着劳动强度大,用工多,工作效率低的问题。可用于食品袋、医药、实验室、土特产、小五金的封袋。欢迎各位下载使用。...

global site tag (gtag.js) - google analytics
网站地图