作者: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(微信)

详情猛戳: 可能是全网最高片酬,速来!

往期精彩回顾

我是一个线程

我是一个Java Class

面向对象圣经

函数式编程圣经

TCP/IP之大明邮差

CPU阿甘

我是一个网卡

我是一个路由器

一个故事讲完HTTPs

编程语言的巅峰

Java:一个帝国的诞生

JavaScript:一个屌丝的逆袭

负载均衡的原理

阅读源码的三种境界

1000小时编程恋爱初体验相关推荐

  1. 编程学习初体验(4. 编程的核心)

    初学编程的朋友,总觉得写程序是件单纯的事情:知道如何使用一种语言,熟悉一个开发环境,了解系统的编程接口(API)就已经能够成为一个合格的程序员 了.在我刚刚接触编程学习的时候,我也是这么认为的.这种认 ...

  2. 编程学习初体验(5. 如何自学编程)(3)

    3 少量项目实践--自学和上学的区别 有句老话叫做学以致用,说的是如果不是为了用而学,是没有意义的: 同样,在用中学才能真正的掌握学到内容.编程跟着书本走,入书之后终究需要脱离书本,做到"出 ...

  3. Android开发学习之路--网络编程之初体验

    一般手机都是需要上网的,一般我们的浏览器就是个webview.这里简单实现下下功能,先编写Android的layout布局: <?xml version="1.0" enco ...

  4. dockerfile编写之恋爱初体验~~~

    大家来看看普通的centos镜像 为了节省资源是没有一些基础命令的,下面自己编写一个dockerfile 来执行一下 进去测试一下 这里看见,刚进去的默认目录发生了改变,还有ifconfig跟vim命 ...

  5. 大疆TT无人机编程初体验,教你对拥抱开源的无人机为所欲为!

    先放个项目演示视频镇帖: 可能是大疆TT无人机的第一款DIY遥控器!大疆TT无人机编程试飞初体验! 认识我的朋友,大概都知道,我是一个"运气爆棚"的人,经常能"捡&quo ...

  6. bash编程初体验之if

    bash编程初体验之if read if case 概述 在本篇文章中,我们将介绍bash编程中有关if语句的简单用法,.如此,如果条件为真,if会执行一种指令,如果条件为假,if会选择执行另一种指令 ...

  7. ChatGPT初体验step by step:ChatGPT解决人类提出的数理逻辑问题,Python编程实践

    ChatGPT初体验step by step:ChatGPT解决人类提出的数理逻辑问题,Python编程实践 如果已有有效的open ai的api key,则跳过本文(1)(2)(3)(4),直接从( ...

  8. 《点睛:ActionScript3.0游戏互动编程》——第2章 融会贯通—大话图层样式与滤镜2.1 Photoshop图层样式初体验...

    本节书摘来自异步社区<点睛:ActionScript3.0游戏互动编程>一书中的第2章,第2.1节,作者:游志德 , 彭文波 更多章节内容可以访问云栖社区"异步社区"公 ...

  9. 风变编程有c语言吗,风变编程Python小课初体验:用有趣好玩的方式学编程

    原标题:风变编程Python小课初体验:用有趣好玩的方式学编程 经过约一个月时间的学习,今天,我终于学完风变编程Python小课的Python基础语法课程啦!从零基础的"小白"到现 ...

最新文章

  1. 《Redis官方文档》用Redis构建分布式锁(悲观锁)
  2. SQL 高级查询 50题
  3. 在CodeBlocks下配置GoogleTest单元测试框架
  4. pytorch基础一:张量
  5. CSS 命名规范参考及书写注意事项
  6. SQL索引管理器——用于SQL Server和Azure上的索引维护的免费G​​UI工具
  7. 如何在一个元素上有多个CSS过渡?
  8. 移动开发者大会.html5。Android。ios。wp联盟
  9. C# C++ 共享内存 结构体读写 结构体中嵌套结构体 结构体中带string Char*的处理方式
  10. asp.net千奇百怪的日历
  11. java排查full gc_一次full gc的排查经历
  12. 电子数据取证基础知识5
  13. 量子力学对计算机影响,人们对量子力学的理解有误?
  14. 422串口协议解析逻辑设计讨论
  15. 开源分销系统java_Java版Spring Boot Spring Cloud B2B2C电子商务-分销系统
  16. 针孔相机畸变成像详解
  17. java 计算器 junit测试_Java Junit测试
  18. 汇编语言0x2c,ARM汇编语言(4) 指令、伪操作、伪指令学习
  19. 依存分析:基于序列标注的中文依存句法分析模型实现
  20. python爬虫出现ProxyError: HTTPSConnectionPool错误

热门文章

  1. 曾几何时生活不止眼前的苟且_Java语言中的曾几何时:类和继承
  2. 吉他和旋图 和大神讲解
  3. Windows上配置host
  4. 玄幻小说--仙界修仙
  5. 创业俱乐部:为创业者指点迷津
  6. vr中的计算机知识,VR技术基本常识
  7. 成功解决Not Implemented Error: statsmodels.tsa.arima_model. ARMA and statsmodels.tsa.arima_model. ARIMA
  8. pyqtGraph绘图
  9. poj 3233 矩阵乘法(分块矩阵)
  10. Matlab求解规划问题之 fmincon函数