我要成为前端工程师!给JavaScript新手的建议与学习资

我要成为前端工程师!给JavaScript新手的建议与学习资

今年有越来越多企业开始跟我们接洽企业内训的事,想请我帮他们培训前端工程师,但你知道一个好的前端工程师绝对不是两三个月可以养成的,需要多年的努力与磨练才会有点成绩。

而这几年可谓 前端正夯 ,有为数不少的人开始大规模的往前端开发移动,而我被问到最多的问题就是「请问 JavaScript 要怎幺学?」或「请问 JavaScript 该怎样入门?」诸如此类的问题。大家都知道,对于一门程式技术来说,「会写」与「会教」是两个截然不同的领域,会写 JavaScript 的人到处都是,但是会教的人就相对少很多了。

我这几年教授 JavaScript 开发实战课程已经超过 15 梯次,在将近 500 位学员里面,我所看到的大部分学员都是对 JavaScript 不甚理解,普遍处于一种一知半解、模糊不清的状态。另一方面,我在公司内部也带过不少工程师,总是有人会想学习 JavaScript 但不知道如何入门的情况,这让我陷入深思,该如何帮助一个人学习 JavaScript 从入门到精通呢?本篇文章将说说我个人的一些想法与建议。

我要成为前端工程师!给JavaScript新手的建议与学习资
本文作者黄保翕
渴望学习

先别说 JavaScript 如何从入门到精通,我们就先来谈谈我所看到的实务情况,我看到许多正积极前往前端工程发展的人,无不渴望学习、无不渴望进步,但学习路径为何?没人说得準!每个人都是独立的个体,有着不同的学习速度与理解。当然,如果你愿意投资自己,跑去各家教育训练机构报名课程,让专业讲师教你逐步上手当然很棒,但并非所有人都有这个机会或意愿做这件事,毕竟学费不便宜。大部分的 JavaScript 开发人员,其实都是靠着自己的热情与兴趣自主学习而成的。

一般来说,有人问我怎样学习 JavaScript 的时候,我都会建议他们先买一本 犀牛书 回来看,但这本书有 1,096 页啊!

这本书就算你买得回来,但真的有心看完的人又有多少呢?我所看到的状况是,大家第一时间先被这本书的厚度给吓傻了,都把这本书当成「参考书」了,也就是反正先买回来摆着,等出问题再来翻翻看就好,反正程式逻辑不管甚幺语言都一样啦,我只要写得出来就好了,写不出来就先找 Google 大神啊,不然就搜寻 Stack Overflow 看看有没有类似的解答!真正 悲剧 的是, 通常你都找的到解答 !

我要成为前端工程师!给JavaScript新手的建议与学习资
查书?继续 Google?自行看程式码脑补剧情? 请作答!

我把这三个选项一一拆解,告诉你为什幺很自然的会选择这个答案!

  1. 查书 :你真的知道你的问题出现在书籍的哪一页吗?这本 犀牛书 有 1,096 页啊,你连认真翻完他都有难度了,你会因为一个小问题从第一页找到最后一页吗?别傻了!
  2. 继续 Google:这是个很合理的选项,因为你想学得更深入,好,请问你要下什幺关键字进行搜寻?你连 犀牛书 里面出现的专有名词都没看过了 ,你能打出甚幺像样的关键字?你能查到甚幺重要且完整的搜寻结果?有限!
  3. 自行看程式码脑补剧情 :是的,我们查到的程式码看起来很简单,每一行拆开我都看的懂阿,合在一起应该是这个意思吧!嗯,我觉得我理解了,就这样吧,下次遇到相同问题再说!

认真的同学,想必这三个选项都会尝试,但书上写的跟你遇到的好像有点不太一样,你遇到的可能是複合式的观念问题,例如 Closure + Hoisting 的问题;继续 Google 到的内容好多喔 ,看不完耶,先收藏好了,以后有空再看 ;自行看程式码脑补剧情,我自己理解出来的,跑出来结果也对,应该没错吧,反正就逻辑啊!

不好意思,以上剧情我假设的有点武断,并非每个人都这样想,但是大家都会会心一笑,因为每个人都干过这种事,因为 自动脑补 是 最有效率的学习方法 , 只是你学到的观念可能是错的 !

我要成为前端工程师!给JavaScript新手的建议与学习资
,就会立刻被塞入一堆工作,工作都没时间了,何时才有空学习啊!

大家都很清楚,从事软体开发要从入门到精通没有甚幺捷径,就是要花时间练习、练习、再练习,写 Code、写 Code、多写 Code,所以「做中学」是大家公认最可行的唯一解,无论被安排了什幺工作,反正不会就学,开发时间估长一点即可,如果时间内做不完,难道你咬我吗?所以说啊,在「甲方」公司上班是幸福的,我曾经看过有公司因为是幸福企业,只要你有做不出来的理由,专案永远可以无限期 Delay!

现在每间公司多多少少都需要仰赖 IT 系统的支持,很多公司都有自己的开发团队,大多用来开发公司内部所需的系统,其实这个「做中学」方案,是个 不得不 的选择,因为很多时候你并没有更好的选择,所以目前的选择就是最好的选择!

在台湾,中小企业佔了 90% 以上,许多公司都是传统产业,没有良好的技术学习环境,所以能招募到高手的机会很低,再加上优秀的软体人才极度缺乏,真正的高手大家都抢着要,所以不得已只能聘用有点经验、又不太有经验的开发人员,进到公司在落实「做中学」策略,让大家慢慢进步,反正有做事就会进步,也会越来越熟,总有一天可以独当一面。

我要成为前端工程师!给JavaScript新手的建议与学习资

如果你问我的意见,我也会说「做中学」是唯一解,因为我也是这样带人的,我知道「做中学」不是最有效率的解法,但是确实唯一可行的解法!

哪里没效率?在一知半解的情况下,学习过程会大量累积「错误的观念」。事实上,你在自我理解的过程中,并不知道哪些观念是对的,你工作的周遭不见得有人可以帮你点出正确的观念,而大多只能帮你点出解决问题的方法,你遇到一个问题,可以问到一种解法,重点在于你无法举一反三,当你无法活用你所学习到的知识,你就无法累积更多的自信,无法累积自信,你就会一直处于一种一知半解的状态。发现了吗?这是一种老鼠赛跑的迴圈,这样的学习方式会让你一直倾向使用「已经会」的技术来解决问题,那幺你的学习领域就会受限,自然无法进步太多,在未来的世界里,不可讳言的, 进步太慢 就是 退步 !

所以一直以来,我的教学风格都很强调一点,那就是「建立观念」比「写 Code」还重要,网路上几乎可以搜寻到任何你需要的程式码,所以看完别人的程式码还能够写出类似的应用才厉害,也就是能够举一反三的能力。但是,如果你不写 Code,学会再多的观念,你也会渐渐忘记,到头来等于没学!

所以你问我「做中学」重不重要?我会说: 超级重要 !但是,在 有观念打底 的情况下去「做」,保证「学」的更扎实,更有自信,也更加有趣,这是我从事软体开发 20 多年的秘密,请大家不要告诉大家!

我要成为前端工程师!给JavaScript新手的建议与学习资
,他只跟我说一句话:「你不会换底片」。我说:「你教我,我就会啦」。他说:「不可能啦,小朋友不会换底片」。但我跟他卢了很久,最后他终于借我了,而且还示範一次换底片的过程给我看,他问我:「有没有学会?」我当然说:「会阿,这很简单」。出游回来后,我拍了好多捲底片,我拿去沖洗之后发现,只有第一卷底片是好的,其他的全部都没有装成功,而第一卷是我父亲示範给我看的那捲。

你可以想像,当时的我非常受伤,有种被戳中要害的感觉,且真的觉得自己学不会、自己没有天分,我花了好多年的时间,才用自己的努力证明自己、相信自己,原来我可以学会很多我以前学不会的事,而且学习的速度会随着你会的东西越多而学得更快。很多时候你觉得别人很强,学东西很快,那是你不知道他自己学过多少东西,你只是起步比人家晚而已,没甚幺好自卑的!

要成为一个 专业的 前端工程师,过程中会遇到许多阻碍,这些阻碍可能会来自于你的家人、你的朋友、你的客户、你的同事、甚至于是你的老闆,但最大的阻碍其实还是你自己,当你拥有正确的学习心态,不再跟别人比较,为自己做出实质的努力 ,你才有可能有达阵的一天!

我要成为前端工程师!给JavaScript新手的建议与学习资
、网路游戏 、穿戴式装置 、… 几乎都朝着 Web 化的方向前进,你说花点力气投资在 JavaScript 不对吗?

偏偏我所看到的是,大部分人都会写、也能写 JavaScript,但真正理解 JavaScript 的人却很少,非常的少。当你开始採用一个完全依赖 JavaScript 的框架时 ,如果你还是用一知半解的观念去开发,你会花上大把大把的时间在除错、鬼打墙、生闷气、捶心肝、. 等诸如此类的事情上。因为没有好的观念支持,你写不出有品质的程式码。没有好的观念支持,你也无法有效率的团队合作,整个开发团队如果有观念悬殊的成员存在,影响的是全队的品质与效率,因为一个人的程式出错,很有可能会影响另一个人的开发效率,因为他所遇到的问题,可能来自于你写的程式码。

我要成为前端工程师!给JavaScript新手的建议与学习资
,他有八个困难等级,共有 1,158 关,每一关通过后还可以看到全世界其他人有哪些不同的解法,非常有趣。
  • Exploring ES6: Upgrade to the next version of JavaScript
    一本针对 ECMAScript 6 进行详细阐述的书,可免费线上观看,本书的主要对象是已经拥有 ECMAScript 5 开发经验的 JavaScript 开发人员,完整补充 ECMAScript 6 的重要观念与特性。
  • ECMAScript 6 入?
    一本开源的 JavaScript 语言教学,主要针对 ECMAScript 6 引入的语法与特性进行解说,内容也相当完整。此书为简体中文
  • JavaScript Promise 迷你?
    一本由 日文版 翻译过来的电子书,专注在 ES6 的 Promise 这个主题上,有非常完整的图文範例与解说。
  • 中文书籍推荐
  • 影音互动教学
  • 我要成为前端工程师!给JavaScript新手的建议与学习资
    ,会有助于累积成就感,开发起来也会比较有趣!
  • 多找一些跟学习主题相关的资料来看,看懂一个自己原本不懂的资料,本身也是很有成就感的一件事,不过记得要学着分享,分享才能产生快乐。
  • 光是学习 JavaScript 语言特性是很枯燥无味的,如果也能学习一些知名的开发框架,如 AngularJS 或 React/Redux 都不错,不但有助于解决工作上的难题,更能获得许多解决问题的成就感。
  • 如果有主题相关的闯关游戏也可以试试看,例如 Codewars, Code Hunt 之类的。
  • 找学习伙伴
  • 找机会参加一些实体的社群聚会,毕竟在网路上交流技术还是有点虚,如果可以跟大家见见面,彼此见面交流一些技术心得,会有比较踏实的感觉。
  • 分享学习心得
  • 手刻作品集
  • 结论

    其实无论你想学甚幺程式语言都一样,这些学习方法与经验都可以参考,但是我总认为,一个开发人员不可以只学一种程式语言,因为你的思路会受到侷限。但你其实不用刻意去学两三个语言,你总不能为了学两三种语言,结果每个都会一点、每个都不太熟,这样就本末倒置了。无论如何,请先精通某个程式语言再说,从中学习到精随,当有机会接触下一个程式语言时,相对的会比较顺利,也比较能比较不同语言之间的差异。不过我所看到的许多 JavaScript 新手,很多都是先学过其他程式语言然后才学 JavaScript 的,而这个转换的过程,他们把其他程式语言的特性与概念,原封不动的套用在 JavaScript 开发上,结果当然是惨不忍睹,开发从头到尾都是自行脑补的剧情,Bug 满天飞啊!

    最后,我个人还是认为,书要认真读、Code 要努力写,这才是学习程式设计的不二法则,祝大家都能维持热情,开心的成为专业的前端工程师!

    欢迎加入「Inside」Line 官方帐号,关注最新创业、科技、网路、工作讯息
    我要成为前端工程师!给JavaScript新手的建议与学习资