原文地址: https://junglecoder.com/blog/learning-without-burnout

参考:https://www.36kr.com/p/1184783895167495

终身学习的首要问题是,你一定要尝试找到乐趣,以及可持续的长期动力。

This article is a response to the excellent question by @Nellies.

本文是对 @Nellies 的一个很好问题的答复。

This lifelong learning thing, is there any talk on how to deal with the infinite amount of stuff there is to learn?

I do ok, but sometimes the todo list does get cumbersome.

Is that part of the whole burnout in tech? No worries, I have broad shoulders, just curious.

Initial caveats | 最初的警告

Most of my examples are going to biased towards full stack or frontend web development, since that’s where I have the most familiarity. This is also written to people trying to break into software development, or just want to understand what it’s like to manage this aspect of a software development career. I also gloss over a lot of things, especially cultural factors that make software development harder for those who can’t pass as white males.

我的大多数示例都会偏向于全栈或前端 Web 开发, 因为这是我最熟悉的地方. 这也写给那些试图进行软件开发的人, 或者只是想了解管理软件开发事业这方面的人的信. 我还忽略了很多事情, 特别是文化因素, 这些因素使软件开发对于那些无法像白人男性通过的人来说更加困难.

Types of knowledge in software development | 软件开发中的知识类型

As mentioned by Nellie, one of the aspects of software development is that software developers are expected to constantly be learning new things. Or, at least, that’s the impression that happens from the outside. There are some mitigating factors, however.

正如 Nellie 所提到的, 软件开发的方面之一是期望软件开发人员不断学习新事物. 至少, 这是从外部产生的印象. 不过,有一些缓解因素.

The first is that once you learn the fundamentals for a particular technology stack, moving between similar flavors of that stack is made much easier. Once you understand the fundamentals of HTTP, HTML, CSS and JS, picking up Rails, Django or ASP.NET becomes much easier.

首先是, 一旦你了解了特定技术栈的基础知识, 就可以轻松地在该技术栈的相似模式之间切换. 一旦你了解了 HTTP, HTML, CSS 和 JS 的基础知识, 就可以轻松使用 Rails, Django 或 ASP.NET.

The second is varying types of knowledge have different shelf-lives. The cool new shiny JS framework being promoted by its creator? That could be relevant for only 6 months, or it could be the next React. It can be hard to tell up front, especially when you’re new. Thankfully, most jobs also lag the hotness by a certain amount, not everything asks for the hottest new tech.

二是不同类型的知识具有不同的保质期。 它的创建者正在推广酷炫全新闪亮的 JS 框架? 这可能只适用了 6 个月, 也可能是下一个 React.。很难说清楚, 尤其当你是新手时。值得庆幸的是, 大多数工作也还在一定程度上滞后于热门技术, 并不是所有的工作都要求最热门的新技术.

But, if you’re learning HTTP status codes, or headers and auth works? That knowledge stays relevant a lot longer, and is part of all web apps. As a bonus, learning more fundamental knowledge gives you an edge when it comes to debugging problems, which is one thing that can help you stand out in your early years. Also, different types of knowledge have different acquisition costs. Basic JS or HTML is relatively easy compared to writing a full stack web app, which is easier than building a reasonably full scripting language, which, in turn, is easier than building a production grade data store like Postgresql or MongoDB.

但是, 如果你正在学习 HTTP 状态码, 或者 headers 和 auth? 这些知识会长期有用, 并且是所有 Web 应用程序的一部分. 另外, 学习更多基础知识可以使你在调试问题时有优势, 这是可以帮助你在早期阶段脱颖而出的一件事. 另外, 不同类型的知识具有不同的获取成本. 与编写全栈 Web 应用程序相比, 基础的 JS 或 HTML 相对容易一些, 它比构建合理完整的脚本语言要容易, 而后者又比构建诸如 Postgresql 或 MongoDB 的生产级数据存储要容易.

Another factor is that it’s possible to specialize inside a given stack. So, for instance, with Rails, if you hit an area where your co-workers don’t seem to know a lot, that’s a good place to start a deep dive into how it works. Because then you’ll be able to build a reputation as the person who can figure out tricky things. You don’t have to know the whole stack at that same level of detail. If you’re known as “The ActiveRecord Bender”or “The Database Index Guru”or “The CSS Animations Witch”, people will give you more credit when you ask for help in their area of expertise. This also synergizes with learning fundamentals, and is where fundamentals can help you out.

另一个因素是, 可以专注于特定技术栈中的内容。因此, 例如, 在 Rails 中, 如果你碰到同事似乎不太了解的区域, 那么这就是开始深入研究其工作原理的切入点。这样一来, 你便可以在发现棘手的事物方面树立声誉。你不必以相同的详细程度来了解整个技术栈. 如果你被称为”ActiveRecord Bender”或”数据库索引专家”或”CSS 动画巫婆”, 那么当你在专业领域寻求帮助时, 人们会给予你更多的荣誉. 这也与学习基础知识协同作用, 是基础知识可以帮助你的地方。

Tradeoffs of what to learn | 对要学什么进行取舍

There are some trade-offs in play here. The first is that most foundational knowledge doesn’t show up as keywords on a resume, and most companies are poor at assessing it (to my knowledge). Either they assume that you have it if you have relevant keywords, or that you can pick up (or have) foundational as you go, or they pattern match you during the interview against what they expect people to know for the job. And nobody has time to learn everything all at once, no, not even that super impressive open source developer or Indie game development.

这里有一些取舍. 首先, 大多数基础知识不会在简历中显示为关键字, 而且大多数公司 (据我所知) 都无法对其进行评估. 他们可能会假设你拥有相关的关键字, 或者你可以随身携带 (或拥有) 基础知识, 或者他们会在面试中根据他们期望人们对工作的了解与你进行匹配. 没有人有时间一次学习所有内容, 没有, 甚至那些令人印象深刻的开源开发人员或独立游戏开发人员也没有.

Learning on the Job | 在职学习

So, don’t learn everything all at once. You will have to look a lot of things up during your day to day work, even after a decade in the field. But, especially in your early years, do make time to learn things. Jobs for junior candidates will expect you spend a lot of time learning things. If they don’t they shouldn’t have hired you for that level. Any programming job involves learning the companies code base for at least the first 2-6 months you’re on a project, unless they follow a very conventional structure. So take advantage of the junior position and learn your job’s tech stack as effectively as you can.

因此,不要一次学习全部。即使在领域工作了十年,你仍必须在日常工作中查找很多东西。但是,尤其是在你的早年,确实要花时间学习东西。初中应聘者的工作将期望你花费大量时间学习事物。如果他们不这样做,那么他们不应该雇用你担任该职位。任何编程工作都需要至少在你从事项目的前2-6个月中学习公司的代码库,除非他们遵循非常常规的结构。因此,请充分利用初级职位,并尽可能有效地学习工作的技术栈。

Be sure to take deep dives into the tech involved at your first position, trying to understand one layer deeper than the one you’re working at. This doesn’t have to happen every ticket, but it should be happening at least once every paycheck or two. Often the lower layers are simpler than you might think, or make understanding the higher levels a lot easier. Understanding the lower levels also gives you a much better nose for when code is fluff vs substance. This guides your debugging, grows your fundamentals, and speeds up future work.

确保在你的第一个职位上深入研究所涉及的技术, 试图更深入地理解比你正在工作的那一层. 这不一定要在每张票上都发生, 但应该在每两张薪水单上至少发生一次. 通常, 下一层比你想像的要简单, 或者使上层的理解变得容易得多. 了解较低的级别还可以使你更好地了解代码是虚假还是实质. 这将指导你进行调试, 增强你的基础知识, 并加快将来的工作.

Initial learning time | 初始学习时间

When you are in your early years, you will need to front-load learning the basics. Unless you have some other skill set that can get you into the tech industry (there are a few, Quality Assurance/Testing comes to mind, as does being an engineer in a more continuous field, like aerospace, materials design, or the like), this is going to have to come out of your own time. Bootcamps are good for getting resume keywords under your belt, though they typically don’t spend much time on fundamentals. Colleges focus a lot more on fundamentals, but might use tech 5-20 year out of date. Either one will require you to figure out how to fill the gaps left by it.

早年时, 你需要预先学习基础知识. 除非你具有其他一些可以使你进入技术行业的技能 (有很多人会想到质量保证/测试, 就像在航空航天, 材料设计等更连续领域中担任工程师一样) , 这将需要你自己的时间完成. 尽管训练营通常不会花很多时间在基础知识上, 但训练营对于使简历关键字很有效. 大学更多地关注基础知识, 但可能会在 5 至 20 年后使用技术. 任一种都需要你弄清楚如何填补它留下的空白.

For me, I had the luck to be able to carve out school time in high school (I was home schooled) on Fridays for morning each week to work through Head First C#. At the same time, I had an aspirational project to build a Scientific Calculator GUI app, which was solidly outside what I could pull off with what I started out knowing. For the first year or two, especially before you get a job, I’d recommend setting aside a time box in a similar fashion. If life doesn’t afford that timebox, then you’ll have to be a lot more proactive about making time.

对我来说, 我很幸运能够在每个星期五的高中 (我在家上学) 分配高中的上学时间, 每周早上通过 Head First C#工作. 同时, 我有一个雄心勃勃的项目来构建科学计算器 GUI 应用程序, 这完全超出了我从一开始就可以掌握的知识范围. 在头一两年内, 尤其是在找到工作之前, 我建议以类似的方式留出一个时间盒. 如果生活负担不起这个时间, 那么你就必须更加主动地投入时间.

Also, don’t try to code in a void, sit down with a game plan of what you’re going to try to do or learn. If you get to your time, and you don’t have that, take a walk and think about it, or do a chore with the plan in the back of your head. Often problems are solved away from the screen, or in conversations with ducks or teddy bears. Tunnel vision is a dangerous trap in software development

另外, 不要试图在空白的地方编写代码, 而要坐下来制定自己打算做或学到的游戏计划. 如果你没有时间, 可以散散步考虑一下, 或者将计划放在脑后做些琐事. 通常, 问题可以在屏幕之外或与鸭子或泰迪熊交谈时解决. 目光短浅是软件开发中的危险陷阱

Maintaining a learning pace over time | 随着时间的推移保持学习进度

Once you have your first job (or two), and have established your base knowledge, then the question comes up of how to maintain the learning required to keep up with tech. And this ultimately depends on what you plan do to with your career. If software is a stepping stone that takes you on to the next thing, then you can afford to burn a lot more of your motivation and time, and focus where the market is hot, and try to get 3-5 jobs out of that, setting yourself up as much for the next step as you can.

一旦有了第一份 (或两份) 工作, 并且已经建立了基础知识, 那么接下来的问题便是如何保持与技术保持同步所需的学习. 而这最终取决于对职业生涯的计划. 如果软件是带踏上下一关的垫脚石, 那么可以负担更多的动力和时间, 专注于市场炙手可热的地方, 并尝试从中获得 3-5 个工作机会, 尽可能多地为下一步做好准备.

If you’re wanting to stay in software for the long haul, then I’d recommend a different approach from chasing the hype. Try to find the fun in software development. And, as you learn how to find the fun in building and learning things, be sure to pace yourself. I’ve had 6-week stretches of working hard at learning a new language, ecosystem, or side-project, followed by months of focusing on other things.

如果想长期使用软件, 那么我建议采用一种不同于大肆宣传的方法. 尝试在软件开发中找到乐趣. 而且, 当学习如何在构建和学习事物中找到乐趣时, 请确保自己保持步调. 我花了六个星期的时间来努力学习一种新的语言, 生态系统或附带项目, 然后花了几个月时间专注于其他事情.

You don’t have to learn at 100% every week once you feel comfortable in your ability to build projects of a small-medium size. For web development, this would probably be about the point you’re able to write your own blogging software, for whatever functionality you’re looking for. You should be learning new things on a semi-regular basis. But keep it sustainable. One thing that really helps here is to have a process for documenting what you’ve learned, in some fashion. I’ve biased towards publishing code in the past, because that’s what’s been easiest for me.

一旦对建立中小型项目的能力感到满意, 就不必每周学习 100%的内容. 对于网络开发, 这可能是可以编写自己的博客软件的关键所在, 无论要寻找什么功能. 应该定期学习新知识. 但是要保持可持续性. 在这里真正有用的一件事是制定一种流程, 以某种方式记录所学的知识. 过去, 我偏向于发布代码, 因为这对我来说最简单.

Don’t use side projects as your only tool for learning software. I used to think this was the best way to learn, because it was how I had learned a lot of things. It has disadvantages, however. For one, side projects that are actually useful are more time-consuming than something you can throw away, and the kernel of what you’re learning might be discoverable in the shorter exercise. Noah Gibbs has a lot more to say here, and I owe a lot to his writing and companionship for changing how I approach learning in the last year.

不要将辅助项目用作学习软件的唯一工具. 我曾经以为这是最好的学习方式, 因为这是我学到很多东西的方式. 但是, 它有缺点. 一方面, 实际上有用的附带项目比可以抛弃的东西耗时更多, 并且可以在更短的练习中发现正在学习的内容的核心. 诺亚·吉布斯 (Noah Gibbs) 在这里还有很多话要说, 我要归功于他的写作和陪伴, 他们改变了我去年的学习方式.

But, whether through side projects, blogging, or building a portfolio, I do think that finding a way to publish your learnings is valuable. The nice thing about publishing and shipping smaller things on the side is that you do end up building a signal to employers that you have “passion”. This also allows you to ratchet your perceived learnings more sustainably than always trying to be at 100% learning mode.

但是, 无论是通过业余项目, 博客还是建立展示编程项目的网站, 我都认为找到一种方式来发表你的学习成果是很有价值的。 发布和发布较小的东西的好处是, 你最终确实给雇主建立了一个信号,即你有 “激情”。这也让你可以更持续地发展你的学习成果,而不是总是试图处于100%的学习模式。

High Output times | 高速输出时间

The main time I think that it’s worth going a highly regular output (like, once a week or more often) on the side is if you are aiming to become a proper software development celebrity. This is not for everyone, and likely doesn’t pay as well as you’d think, unless you spend a lot of time figuring out how to get it to do so, and you’re magically successful with it. There’s also a whole host of Not Writing Code that goes into making money off of it.

我认为值得进行高度定期的输出(例如每周一次或多次),如果你打算成为一个合适的软件开发名人。这并不适合所有人,而且可能不如预期,除非你花费大量时间弄清楚如何做到这一点,并且你成功地做到了。也有一大批不写代码的人,靠它来赚钱。

Doing this for a season, akin to an art challenge, is a great way to learn a lot in a short time, if you have the time and energy. If you’re looking to make a lot of money on the side, however, freelancing is likely a better bet, once you have the skillset to pull that off. As much as selling your hours for money isn’t the path to higher wealth bands, it’s a much less risky tradeoff compared to product development or trying to build a personal brand.

如果有时间和精力, 那么像在艺术挑战赛上那样做一个季度,这是一个在短时间内学习很多东西的好方法。然而,如果你想兼职赚大钱, 自由职业者可能会是一个更好的选择,一旦你具备了实现这一目标的技能。尽管出卖时间来赚钱并不是通往更高财富阶级的途径, 但与产品开发或试图建立个人品牌相比, 这是一个风险更低的方法。

Final thoughts | 最后的看法

Try to find the fun, as well as a sustainable long-term motivation. Look for trade-offs rather than dogma. Use binary search debugging. Listen to your body, and be honest with yourself.

尝试找到乐趣, 以及可持续的长期动力。 做好权衡,而不是遵循教条。使用二分法进行 debug。倾听你的身体, 对自己诚实.