作者:Peter Higgins
翻译:童角大王
2017年10月4日,周三,我开始了一段学习和发现之旅,到目前为止,我已投入了700小时自学,500个小时参加编程训练营。一个目标始终激励着我--成为一名软件开发者。
一年多的奋斗换来了多份offer,这篇文章凝聚着我对于过去十七个月的反思,希望可以为即将开始编程事业的人们提供一些帮助。
警惕教程陷阱,远离舒适区
在网上可以找到许多高质量的内容,更棒的是,这些学习材料往往是免费或是非常便宜的。若你有志成为一名软件工程师,这是一个最美好的时代,你可以在Udemy,Pluralsight和Frontend Masters这些教育平台上收获颇丰,还有不少的个人贡献者,比如Tyler McGinnis, Andrei Neagoie, Scott Tolinsky和Wes Bos,也可以成为你的良师益友。
在这些学习资料之中畅游也会遭遇波澜。首先,它鼓励你被动消费,制造一种“在下已经收获颇丰”的错觉。继而,它会阻碍你去迎接一些真正的挑战。
CodeSmith上的Will Sentence认为:学习任何新知识,都是费心费力的过程。当你力图解决难题,努力开拓心智蓝图的边界时,这是理解力增长最快的时候。战胜这些难题,不仅可以打磨解决问题的技巧,也可以增进对于知识的理解。遗憾的是,品尝苦口良药的时候,也是你最想放弃的时候。
我花了一年多的时间才真正理解Will到底说了啥。上面提到的教程往往是入门一门新语言,新框架或是新库的良好开端。但别让自己让它们牵着鼻子走!你越早离开舒适圈,越早动手做一些项目,你的能力与自信也会越快成长。
学习编程是一场马拉松,需要保持耐心
我的兴趣点是网站与手机应用开发,打牢HTML,CSS和JS的基础之后,我便着手学习MERN(MongoDB,Express, React,Node.js)。我们的方向也许不同,但是你依然需要在技术的广度和研究的深度上做出一个权衡。
学习编程的一大挑战就在于这是一个漫长的过程。你可能需要花费数百个小时的刻意练习才可以达到平均水准之上的水平。
如果能穿越回过去,我一定要在比赛开始之前告诫自己,这是马拉松而不是百米赛跑。因此,在学习React和Node.js之前,我会更深入研究Javascript。从一个热点蹦到另一个热点是很容易的,但如果只是蜻蜓点水,那么就是在浪费时间。
你应该严格按照计划利用时间,保持耐心,不要指望罗马一日而成。在知识积累到一定程度的之后,这一天自然会到来:不仅了解更广阔的技术领域,还能迅速掌握新的库和框架。对我来说,达到这一点这花费了800个小时。
不要闭门造车
我参加编程训练营的一个主要动机就在于,我几乎没有和人进行过技术性交流,也不了解软件开发的工作全貌,也不理解敏捷开发,版本控制,结对编程和测试驱动开发。随着自身能力的增强,过去从教程中得到的兴奋感也渐渐势微。
我想要在实际项目中检验自己的编程能力。这对学习大有助益,因为你可以加入集体,从中收获共同解决难题的强大信心。
虽然编程训练营的经历让我收获颇多,但不是所有人都有机会参与训练营,也许因为钱,也许因为时间,也许因为地域。
开始编码生涯六个月之后,我才知道freeCodeCamp。因为比较迟接触到它,面对众多课程,我有点难以抉择。也得承认,习惯了之前学习方式的我有点不适应他们的课程设计。
事后回想,才发觉自己犯了一个错误,因为在那种不确定,结构复杂且令人感到困难的环境之下,可以完成最有效果的学习。
freeCodeCamp的另一个优势在于它活跃的社区,你可以在其中分享你的瓶颈与成就。如果可以再次穿越的话,我会选择freeCodeCamp作为这段旅程的起点。
做好记录
最后,强烈建议你们记录投入的时间。你不需要像我这样细致地记录,重要的是,如果你想提高某项技能,就开始记录你的投入。
也建议越早学会使用Git和Github越好。如果你正跟着教程学习,最好把它当作一个项目,及时提交所做的更改。不仅可以培养肌肉记忆,有助于你尽快适应职场环境,老板们也有可能查看你的Github帐号,留下一个学习的记录,对于你在职场上脱颖而出还是大有彼益的。
就像我之前提到的,学习编程最大的挑战在于时间。不仅发现学习的下一个目标需要时间,掌握它们更需要时间,这与专业运动员们所做的精进练习有异曲同工之妙。
把这记在心中,怀揣着梦想与热情,在这场马拉松中咬牙坚持才是获胜的关键。Joe DiMaggio作为历史上最伟大的棒球击球手之一,用粉笔在墙上记录每一次挥杆练习。Kobe Bryant作为历史上最成功的篮球运动员之一,记下在训练中的每次跳投,以保证完成每日八百次练习的目标。
诚实地记录下投入的每个小时,盯着慢慢增加的数字,可以在情绪低落时激励我重新振作。
Edmund Hilary爵士和Sherpa Tenzing于1953年首次登上珠峰之后,有4000人完成了这一壮举。虽然他们采用了各自的技术,资源和方法,但有一点是相同的,每个人都是一次一步地越过这些艰难险阻。不论挑战多么艰巨,一旦你学会将大任务分解成小任务,再将它们各个击破,那么成功的机会便会大大增加。
毕竟,在最抽象的层次,这就是软件工程的方法论。
放松一下...这篇文章比我预计的要长得多,谢谢坚持读完的朋友们,希望你们可以从中有所收获。对于一些没有耐心读完这篇长文的朋友们,我也给你们准备了一份概要。
总结
在线课程是学习新语言,新框架或是新类库的基础知识的好方法,一旦你掌握了基本技能就放下教程,去做一些自己的东西。
不要害怕挑战,学会迎接挑战,因为你可以从中学到更多。
理解分解问题的价值所在,学会将复杂的问题分解为更简单的问题,然后各个击破。
多与乐于助人的技术达人们交流,可以是参加线下聚会,注册训练营或是在线交流。
理解普通练习和精进练习的区别。
编程训练营有助于你找到工作。高质量的项目不仅可以帮你夯实技术地基,也可以成为你在招聘官面前的能力佐证。
如果你有兴趣参加编程训练营,试着先花150个小时自学。这不仅可以确保编程确实是你的兴趣所在,也可以让你为之后紧凑的学习过程中打好一定的基础。
记录你的进展。作为一位软件开发者,每天都是学习的机会,这个过程永无止境。学会享受这个过程,并且保持耐心。
最后,写出高质量的代码不可避免地需要站在巨人的肩膀上。这有很多种形式,可能是使用同事的代码,可能是使用一个流行的框架/库或是语言本身,这是编程的美妙之处,但要记住,在索取的同时,也要乐于助人。
原文地址:
https://www.freecodecamp.org/news/reflections-on-my-first-1-000-hours-learning-to-code-17cd32e72f11/
码农翻身公众号开放投稿,可能是全网最高片酬:
用故事讲技术 ,稿费1000
技术/职场/感悟/面试等,稿费700
翻译类文章,每千字200
联系方式:onlyliuxin97(微信)
详情猛戳: 可能是全网最高片酬,速来!
往期精彩回顾
编程语言的巅峰