我的学习思考
by Peter Higgins
彼得·希金斯(Peter Higgins)
关于我最初的1,000个小时学习编码的思考 (Reflections on my first 1,000 hours learning to code)
According to the author Michael Simmons,
根据作者迈克尔·西蒙斯 ( Michael Simmons)的说法,
Learning is the single best investment of our time that we can make.
学习是我们可以做出的唯一最好的投资。
Or as Benjamin Franklin said,
或如本杰明·富兰克林所说,
An investment in knowledge pays the best interest.
对知识的投资将带来最大的利益。
It’s Wednesday, 4 October 2017, and I’m about to embark on a journey of learning and personal discovery that unbeknownst to me, will last precisely 513 days. During this time I’ll spend approximately 700 hours self-teaching, as well as around 500 hours in a coding bootcamp, with the common goal of transitioning to a career as a software developer.
今天是2017年10月4日,星期三,我将踏上一段学习和个人发现的旅程,这对我来说并不为人所知,它将持续513天。 在这段时间里,我将花费大约700个小时进行自我教学,并在编码训练营中花费大约500个小时,其共同目标是过渡到成为软件开发人员的职业。
Fast forward to the present and I’m fortunate enough to be considering various job offers, whilst curiously anticipating the start of my next journey.
前进到现在,我很幸运能够考虑各种工作机会,同时很好奇地期待着下一个旅程的开始。
This story is a reflection on the past seventeen months, partly as it feels both cathartic and timely to do so, but mainly in the hope that I can provide some useful insights for anyone at the beginning of their own journey into the world of programming.
这个故事是对过去十七个月的反思,部分是因为这样做既适时又适时,但主要是希望我能为任何人在进入编程世界之初提供一些有用的见解。
Mindful of this context, let’s get back to that cold, wet, and upon retrospection, inspired Wednesday afternoon where I’m sat in a coffee shop starting Codecademy’s “Build Websites from Scratch” program. The next thirteen months will see me to complete nearly forty online courses, as well as read four books and countless Medium articles, all with a singular purpose in mind.
考虑到这种情况,让我们回到寒冷,潮湿的地方,回顾一下,灵感来自周三下午,我坐在一家咖啡店里,开始了Codecademy的“从头开始构建网站”计划。 在接下来的13个月中,我将完成近四十个在线课程 ,并阅读四本书和无数的中型文章,所有这些都具有单一的目的。
You could say that I became a tutorial addict, jumping cravingly from one resource to the next in search of advanced learning, whilst meticulously documenting my progress. Many of you may be able to relate to this behavior and it brings me to the first and perhaps most fundamental learning I’ve had throughout this process.
您可以说我成为了上瘾的教程者,从一处资源跳到另一处以寻求高级学习,同时精心记录了我的进步。 你们中的许多人都可能与这种行为有关,这使我进入了整个过程中所经历的第一个,也许是最基本的学习。
学习1 —提防炼狱 (Learning 1 — Beware of tutorial purgatory)
One of the main reasons I’ve been able to achieve my objective relates to the wide range of quality educational content that’s available today via the Internet; often for free or relatively low cost. From platforms such as Udemy, Pluralsight and Frontend Masters, to individual contributors such as Tyler McGinnis, Andrei Neagoie, Scott Tolinsky and Wes Bos, there’s really never been a better time to be an aspiring software developer.
我之所以能够实现自己的目标,主要原因之一是与当今通过Internet提供的各种高质量的教育内容有关。 通常是免费的或相对较低的费用。 从Udemy , Pluralsight和Frontend Masters等平台 ,到Tyler McGinnis , Andrei Neagoie , Scott Tolinsky和Wes Bos等个人贡献者,成为有抱负的软件开发人员的最佳时机确实比以往任何时候都好。
However, there’s an inherent problem with this vast abundance of easy learning. Firstly, it can encourage passive consumption and in turn, deliver the illusion of learning without a lot of the benefits. Secondly, it shelters you from the real lessons that come with hard learning. What’s hard learning you may ask. Well, according to Will Sentence from CodeSmith,
但是,大量的易学性存在一个固有的问题。 首先,它可以鼓励被动消费,反过来,在没有很多好处的情况下提供学习的幻觉。 其次,它使您免于艰苦学习带来的实际教训。 您可能会问什么是很难学习的 。 好吧,根据CodeSmith的 Will Sentence 所说 ,
Learning anything new is hard and mentally strenuous — but your best growth happens when you encounter hard blocks in your understanding that you have to navigate through. Overcoming these blocks gives you the problem-solving skills and understanding to tackle new fresh problems. However it’s at those blocks that you’re most likely to give up.
学习任何新事物都是艰苦而又费力的,但是,当您在理解自己必须通过的困难中遇到困难时,您的最佳成长就会实现。 克服这些障碍将为您提供解决问题的能力和理解力,以解决新的新鲜问题。 但是,您最有可能放弃这些障碍。
It took me a little over a year before I fully appreciated exactly what Will is referring to here, but when I did, it proved highly influential in my decision to apply for the Northcoders Developer Pathway. More about this coding bootcamp later, but the key takeaway here is that tutorials are often a great starting point for a new language/framework/library. However, don’t allow yourself to become dependent on being solely guided by them. The sooner you step outside your comfort zone and get your hands dirty building actual products, the sooner you’ll find your capabilities and confidence as a developer growing.
我花了一年多的时间才完全明白Will在这里所指的含义,但是当我这样做时,它对我决定申请Northcoders Developer Path的决定产生了很大的影响。 稍后将详细介绍此编码训练营,但这里的主要要点是,教程通常是新语言/框架/库的一个很好的起点。 但是,不要让自己依赖于自己的指导。 您越早走出舒适区并动手制作实际产品,您就越早发现自己的能力和作为开发人员成长的信心。
学习2 —高度选择性 (Learning 2 — Be highly selective)
The second learning relates to what I’ve come to think of as my coding footprint. This is more concerned with the what, and less with the how.
第二项学习与我想到的编码足迹有关 。 这与什么有关 ,而与如何无关 。
For me, I wanted to build web and mobile applications, so I focused on learning the cornerstones of the MERN stack; MongoDB, Express, React and Node.js, on top of a solid foundation of HTML, CSS and JavaScript. Your aspirations may be different, but the need to strike a healthy balance between the breadth of skills and depth of knowledge will be equally as important.
对我来说,我想构建Web和移动应用程序,因此我专注于学习MERN堆栈的基础。 在HTML,CSS和JavaScript的坚实基础之上的MongoDB,Express,React和Node.js。 您的愿望可能有所不同,但在技能的广度和知识深度之间寻求健康平衡的需求同样重要。
One of the most challenging aspects of learning to program is that it’s a time-consuming process. It’s going to take hundreds of hours of deliberate practice before you reach a reasonable level of competency.
学习编程的最具挑战性的方面之一是这是一个耗时的过程。 在达到合理水平之前,需要花费数百小时的精心练习 。
If I had my time again, I’d make my peace with the fact that it’s a marathon and not a sprint. For example, I’d have tried to gain a deeper understanding of JavaScript before exploring popular libraries and runtimes, such as React and Node.js. It’s all too easy to jump around from one hot topic to the next, whilst only really skimming the surface.
如果我再有时间,那我会选择马拉松而不是短跑来使我安心。 例如,在探索流行的库和运行时(例如React和Node.js)之前,我曾尝试对JavaScript进行更深入的了解。 从一个热门话题跳到另一个热门话题太容易了,而实际上只是在表面上略过。
Instead, be ruthlessly disciplined in terms of how and where you invest your time and be patient enough to look past the immediate payback. Trust that there will come a point when your knowledge is more than the sum of its parts; not only providing a clearer understanding of the broader technological landscape but also enhancing your ability to get to grips with new libraries and frameworks in the future. For me, this was around 800 hours, but mileage will obviously differ.
相反,要严格地约束自己如何投入时间以及在何处投入时间,要有足够的耐心,以克服立即的回报。 相信当您的知识超出其部分总和时,将会有所作为; 不仅可以使您对更广泛的技术领域有更清晰的了解,还可以增强您在将来掌握新库和框架的能力。 对我来说,这大约是800个小时,但里程数显然会有所不同。
学习3-重复是所有学习的源泉 (Learning 3 — Repetition is the mother of all learning)
Often times throughout my journey I was faced with an internal dilemma of which course to undertake next (I know, see Learning #1 ?). For example, say I was interested in learning React, do I go through the official tutorial/documentation, or do I part with a little cash and do a course by Andrew Mead, Stephen Grider, Tyler McGuiness, Scott Tolinksy or Wes Bos, to name but a few.
在整个旅程中,很多时候我经常面临着内部下一步要做的课程的困境(我知道,请参阅学习方法1)。 例如,说我对学习React感兴趣,我是否参加了正式的教程/ 文档,或者我花了很少的钱花钱并参加了A ndrew Mead, S tephen Grider, Tyler McGuiness, S cott的课程Tolinksy或Wes Bos,仅举几例。
What I came to realise is there is no silver bullet, no magic course or even pedagogy that was going to fast track my learning. So, I did all of them.
我意识到,没有银弹,没有魔术课程,甚至没有教学法可以快速追踪我的学习情况。 所以,我都做了。
To many, this will seem repetitive, but it’s precisely through this repetition that my depth of knowledge grew. It’s important to remember that learning is a journey and not a destination. You never really arrive, so learn to enjoy the process, as well as appreciate the value in retracing your steps every once in a while.
对许多人来说,这似乎是重复的,但是正是通过这种重复,我的知识才得以发展。 重要的是要记住,学习是一段旅程而不是终点。 您从未真正到达过,所以要学会享受过程,并欣赏每隔一段时间重新步伐的价值。
学习4 –避免在真空中工作 (Learning 4 — Avoid working in a vacuum)
One of the main motivations behind me doing the coding bootcamp at Northcoders was that for thirteen months I’d barely held a technical conversation with anyone, nor had I been exposed to other fundamental aspects of working as a software developer, such as agile principles, version control, pair programming and Test-Driven Development. As my capabilities grew the once-strong endorphin effect I got from tutorials started to weaken.
我在Northcoders进行编码训练营的主要动机之一是,在过去的13个月里,我几乎没有与任何人进行技术对话,也没有接触过从事软件开发人员工作的其他基本方面,例如敏捷原则 , 版本控制 , 配对编程和测试驱动开发 。 随着能力的增强,从教程中获得的曾经强烈的内啡肽效应开始减弱。
This was also aptly contrasted with a growing desire to put my newly acquired skills to the test with other people on real projects. Not only is this a highly rewarding activity, it also has a significant impact on your learning, as it gives you the confidence to work through more challenging problems as a collective (see Learning #1).
与此形成鲜明对比的是,人们越来越渴望与其他人一起在实际项目中测试我新获得的技能。 这不仅是一项非常有意义的活动,而且还对您的学习产生重大影响,因为它使您有信心以集体的方式应对更具挑战性的问题(请参阅学习#1)。
Whilst the Northcoders experience was a hugely positive one for me, I appreciate that not everyone has access to a coding bootcamp, be it due to time, financial, or even geographical constraints. In light of this, I feel it’s worth mentioning freeCodeCamp.
尽管Northcoders的经历对我来说是非常积极的经历,但我感谢并非所有人都可以进入编码训练营,这是由于时间,财务甚至地理位置的限制。 有鉴于此,我觉得值得一提的是freeCodeCamp 。
I became aware of freeCodeCamp around six months into my coding journey and because of this delayed introduction, I was unsure of where to start in the rich curriculum. I must also confess that I found their student-centred learning pretty daunting and ultimately I gravitated back to the easier variety I’d become accustomed to.
在大约六个月的编码旅程中,我意识到了freeCodeCamp的存在,由于这种延迟的介绍,我不确定丰富课程的起点。 我还必须承认,我发现他们以学生为中心的学习相当艰巨,最终我回到了我已经习惯的更简单的选择上。
In hindsight, I see that this was a mistake, as it’s precisely in this unclear, unstructured and uncomfortable environment where the best learning is done.
事后看来,我认为这是一个错误,因为正是在这种不清楚,无组织,不舒适的环境中,才能最好地学习。
One of the other intrinsic benefits of freeCodeCamp is that you’ll have access to a vibrant community of like-minded people who you can share the struggle and enjoyment with. I can’t speak from personal experience, but if I was starting over, I’d probably begin my journey here.
freeCodeCamp的另一个内在好处之一是,您将可以访问一个由志同道合的人组成的充满活力的社区,您可以与他们分享奋斗和享受。 我不能凭个人经验说话,但是如果我要从头开始,我可能会在这里开始我的旅程。
学习5 —记录您的进度 (Learning 5 — Document your progress)
Last but not least, I strongly encourage you to keep a record of the time you invest in this endeavour. I took this strategy to a whole new level, which for those of you who are interested can have a look through here. Now, I don’t believe that you need to be as meticulous as I was, but what can I say, I’m a firm believer that if you want to improve something, start by measuring it.
最后但并非最不重要的一点是,我强烈建议您记录下您为此付出的时间。 我将此策略提高到了一个全新的水平,对于那些有兴趣的人可以在这里浏览一下 。 现在,我不认为您需要像我一样细致,但是我可以说,我坚信如果您想改善某些东西,请先进行衡量 。
Whilst on the subject of tracking, I highly recommend familiarising yourself with the workings of Git/GitHub as early as possible. If you’re working through a tutorial, treat it as a mini project and commit your changes little and often. Not only will you develop muscle memory that will serve you well in a professional environment, but prospective employers often look at your GitHub history, so leaving a meaningful trail of what you’ve been working on can only be a good thing from an employability perspective.
在进行跟踪的同时,我强烈建议您尽早熟悉Git / GitHub的工作原理。 如果您正在学习教程,请将其视为一个小型项目,并很少经常提交更改。 您不仅会开发在专业环境中将为您提供良好服务的肌肉记忆,而且潜在的雇主还会经常查看您的GitHub历史,因此,从工作能力的角度出发,留下有意义的线索对您而言一直是一件好事。 。
Finally, as I’ve already alluded to, arguably the biggest challenge with learning to code comes down to time. It’s not just about finding it, but more specifically investing enough of it in what sports experts would describe as focused and effortful training.
最后,正如我已经提到的,可以说学习编码的最大挑战归结于时间。 这不仅是要找到它,更具体地说是将其投入足够的资金,以供体育专家形容为集中精力的训练 。
With this in mind, maintaining your motivation throughout this lengthy process is absolutely key to your success. Joe DiMaggio, one of the greatest hitters in baseball history, used a piece of chalk to keep track of every practice swing on his basement wall. Kobe Bryant, one of the most successful basketball players of all–time, counted every jump shot during training to make sure he made 800. For me, I kept an honest and detailed record of every quality hour I put in, as by watching this number grow over time, I was more easily able to realign my focus when morale was low.
考虑到这一点,在整个漫长的过程中保持动力绝对是成功的关键。 乔·迪马乔(Joe DiMaggio)是棒球史上最伟大的击球手之一,他用一支粉笔记录了地下室墙上每一次练习的挥杆动作 。 科比(Kobe Bryant)是有史以来最成功的篮球运动员之一, 他对训练中的每一跳都进行了计数,以确保他取得了800分 。 对我来说,我对自己投入的每个质量小时都保持了诚实而详尽的记录,因为随着时间的推移,这个数字随着时间的增长而增长,当士气低落时,我可以更轻松地重新调整自己的注意力。
Consider this parting thought: since Sir Edmund Hilary and Sherpa Tenzing Norgay first conquered Everest in 1953 over 4,000 people have successfully scaled the summit. Whilst their respective skills, resources and approaches will undoubtedly differ, one unifying trait is that they all did it one step at a time. No matter how tall the challenge is, your chances of success will go up significantly if you can successfully break it down into smaller challenges and solve each of these in turn.
考虑一下这种分开的想法:自1953年埃德蒙·希拉里(Edmund Hilary)爵士和夏尔巴·滕青·诺盖(Sherpa Tenzing Norgay)首次征服珠穆朗玛峰以来,已有4,000多人成功举办了此次峰会。 尽管他们各自的技能,资源和方法无疑会有所不同,但一个统一的特征是他们一次都做到了这一点 。 无论挑战多么艰巨,如果您能够成功地将其分解为较小的挑战并依次解决每个挑战,那么成功的机会就会大大增加。
After all, at its most abstract level, this is fundamentally what software development is all about.
毕竟,从根本上讲,这基本上就是软件开发的全部内容。
And breathe… this article has already become far longer than I’d originally intended, so for those of you who have made it this far, I thank you for your time and hope that you leave with some useful takeaways. For those of you who have an impatient tendency to read the last page of a book first, I offer you this…
喘口气……这篇文章已经比我原本打算的要长得多,因此对于那些迄今做到的人,我感谢您的时间,并希望您能从中获得一些有益的收获。 对于那些急于要先阅读本书最后一页的人,我向您提供…
TL; DR (TL;DR)
- Online tutorials are a great way to efficiently learn the fundamentals of a new language/framework/library, but break free of them as soon as you can. 在线教程是有效学习新语言/框架/库的基础的好方法,但是请尽快摆脱这些基础。
- Don’t be afraid of struggling or even failing to achieve something technical, as it’s within this struggle that the best learning is done. 不要害怕挣扎,甚至不能获得技术性的东西,因为在这种挣扎中,最好的学习才得以完成。
- Understand the value in decomposing a complex problem into smaller, simpler ones and then recomposing your solutions to these. 了解将复杂的问题分解为更小,更简单的问题,然后针对这些问题重新组合解决方案的价值。
- Surround yourself with like-minded people, either by attending meet-ups, enrolling in a bootcamp or simply chatting online. 通过参加聚会,参加训练营或只是在线聊天,与志同道合的人相处。
Understand the difference between regular practice and deliberate practice. Strive for the latter.
了解常规练习和故意练习之间的区别。 争取后者。
- A coding bootcamp is a great way to expedite the process of securing a job as a software developer. A quality program will not only give you the technical foundations you need but also help validate these capabilities in the eyes of potential employers. 编码训练营是加快作为软件开发人员的工作保障过程的好方法。 质量计划不仅会为您提供所需的技术基础,而且还将在潜在雇主的眼中帮助验证这些功能。
- If you do opt for a coding bootcamp, try and invest at least 150 hours of quality self-teaching beforehand. This will not only provide an assurance that coding is right for you but also stand you in good stead over what will be an intensive process. 如果您确实选择编码训练营,请尝试并至少投入150个小时的质量自学。 这不仅可以确保编码适合您,而且可以使您在繁琐的过程中站稳脚跟。
- Document your progress. As a software developer, every day is an opportunity to learn and the process is never complete. Learn to enjoy the journey and worry less about arriving at a particular destination. 记录您的进度。 作为软件开发人员,每一天都是学习的机会,而且过程永远不会完成。 学会享受旅程,而不必担心到达特定的目的地。
And finally…
最后...
Writing quality code inevitably involves standing on the shoulders of giants. This takes many forms, be it a colleague’s work, a popular framework/library or the very language itself. It’s a wonderful and inherent aspect of programming, but be mindful that it also pays to offer down a helping hand. Be a contributor, as well as a consumer.
编写高质量的代码不可避免地要站在巨人的肩膀上 。 它采取多种形式,无论是同事的作品,流行的框架/库还是语言本身。 这是编程的一个奇妙而固有的方面,但请记住,它也有助于伸出援手。 成为贡献者和消费者。
有用的资源 (Useful Resources)
For HTML and CSS, I recommend Jonas Schmedtmann’s course on Udemy.
对于HTML和CSS,我推荐Jonas Schmedtmann的Udemy课程 。
For JavaScript, I highly recommend Will Sentence’s three courses on Frontend Masters. These are intermediate level, so I’d undertake them after completing an introduction to JavaScript course, such as this one.
对于JavaScript,我强烈推荐Will Sentence的有关前端大师的三门课程 。 这些是中级的,因此我将在完成JavaScript课程的介绍(如本课程)之后进行介绍。
For React, I recommend Tyler McGinnis’ courses. Tyler is very in tune with the dangers of passive learning and offers highly engaging material that incorporates reading, watching and hands-on development. A holy trinity as far as I’m concerned.
对于React,我推荐Tyler McGinnis的课程 。 泰勒(Tyler)非常适应被动学习的危险,并提供结合阅读,观看和动手开发的极具吸引力的材料。 就我而言,圣三位一体。
For Node.js, I recommend Andrew Mead’s course on Udemy. This one by Mosh Hamedani is also very good; particularly if you’re interested in building a RESTful API. I’d do both ? (see Learning #3 above).
对于Node.js,我推荐Andrew Mead的 Udemy 课程 。 这一次由MOSH HAMEDANI也很不错; 特别是如果您有兴趣构建RESTful API。 我会两者都做吗? (请参阅上面的学习#3)。
For MongoDB, I recommend Stephen Griders’s course on Udemy. He has a lot of good courses, but because of the sheer number, they can fall a little out-of-date. It’s worth checking to see when he last refreshed the content. In fact, the same can be said for any course.
对于MongoDB,我推荐Stephen Griders的Udemy课程 。 他有很多不错的课程,但是由于数量众多,它们可能会过时。 值得检查一下他上次刷新内容的时间。 实际上,对于任何课程都可以这样说。
For Everything Else, there’s MasterCard. Only kidding, give freeCodeCamp a try ?
对于其他所有内容,都有万事达卡 。 只是在开玩笑,尝试一下freeCodeCamp吗?
Best of luck with the journey ahead, wherever it may take you! Please feel free to ask any questions in the comments section below.
无论走到哪里,都祝您旅途顺利! 请随时在下面的评论部分中提出任何问题。
Happy coding!
编码愉快!
如果您喜欢这个故事,请保持联系。 您可以在Medium / LinkedIn / Twitter上关注我,以后我将在这里分享更多学习编码的技巧。 (If you enjoyed this story, then please keep in touch. You can follow me on Medium / LinkedIn / Twitter, where I’ll be sharing more tips on learning to code in the future.)
翻译自: https://www.freecodecamp.org/news/reflections-on-my-first-1-000-hours-learning-to-code-17cd32e72f11/
我的学习思考