开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
今日推荐开源项目:《自由钢琴 AutoPiano》
今日推荐英文原文:《Learn Less, Achieve More: How To Optimize Your Learning》

今日推荐开源项目:《自由钢琴 AutoPiano》传送门:项目链接
推荐理由:这个项目在网页上实现了钢琴,不仅可以现场弹奏,还提供了自动弹奏乐谱的功能。除了项目本身之外,一些实现时可能要重点考虑的地方作者也在 Readme 中进行了讲解,包括自动弹奏在内等功能也还有可以进一步优化的地方,如果对音乐与程序结合有灵感的话可以参与协助开发。
今日推荐英文原文:《Learn Less, Achieve More: How To Optimize Your Learning》作者:Szymon Adamiak
原文链接:https://medium.com/better-programming/learn-less-achieve-more-how-to-optimize-your-learning-1a214ce697c8
推荐理由:把握真正值得学习的内容

Learn Less, Achieve More: How To Optimize Your Learning

Be ruthless. Cut out the noise and focus on the essentials

What do you do when you hear about a new hot thing in programming?

If you’re like me, you probably read a bit and quickly decide it sounds cool. You bookmark a few websites and maybe add them to the learning to-do list.

Sometimes you may even learn — watch a few tutorials, skim the documentation, play with it.

Usually, before you can master it, the new shiny thing appears, and your attention shifts.

The conclusion is simple — there are just too many things to learn; how could you master it all?

You can’t.

You don’t have unlimited time. You don’t have unlimited attention. You can’t learn everything. In fact, you should learn fewer things than you think.

Why Do You Learn

Do you want to learn a new programming language this year?

Maybe you’d rather master a new framework? Library?

Why?

Maybe you feel the urge to grow. Maybe you believe you have to learn new things to stay relevant. Maybe it’s the next big thing, and you want to stay on top.

These are the reasons. But are they good reasons? Not necessarily.

You may like to learn new things even if they’re not useful. I like it. But if you don’t have lots of spare time (and who has lots of spare time?) and want to further your career, learning for fun won’t do.

There is only one valid reason to learn a new skill — to use it.

Why would you spend hundreds of hours learning a new programming language not to use it? In a year or two, you’ll forget everything and get back to square one.

Time is your most precious asset; don’t throw it away easily. Learning the wrong things is as unproductive as watching Netflix. It’s also less entertaining. So beware of wasting your time and fooling yourself into thinking you’re making progress.

The only solution to learn efficiently is to focus on what’s important to you and cut out the rest. To achieve it, you have to be disciplined and ruthless. Social media hype gets to our heads easily; we tend to believe every shiny new thing is worth our time. It’s not. Most new things will be forgotten in years, maybe even months.

What Is Worth Your Time?

You need to learn how to identify what skills are worth your time. Different skills are important to different people, so your situation is unique. Fortunately, I’ve got some guidelines to follow when picking essential skills.

Skills you use

We’ll start with the obvious one. Whatever your field is, you’ve got some current tech stack. Maybe you’re using the Laravel framework for the backend or React for the frontend. When you’re looking for new things to learn, you should start here — become a master of the tools you use.

Major languages and frameworks are constantly updated, and you need to catch up. Many new features make your job easier or faster, so you don’t want to miss it.

Mastering the tools you already use provides two major benefits — you use new knowledge instantly, and you get paid (or are likely to get paid) for your skills. That’s a no brainer.

Skills adjacent to your current skills

When you’re a master in one field, it’s time to expand. And the best place to expand is the area adjacent to your specialty.

Let’s say you’re a frontend developer focused on creating great user interfaces in React. What are the adjacent areas you may want to explore? Maybe it’s serverless — you’ll be able to build full-fledged applications on your own, without the need to cooperate with a backend developer. Or design — it would be good if you could design applications on your own without the designer's help.

For an expert backend developer using the Django framework, adjacent skills may be DevOps or the frontend basics. By expanding to those areas, you’ll start becoming an all-around full-stack developer who can independently build and deploy whole applications.

Skills you will use

Sometimes you don’t want to go deeper into your current skills, and nothing is exciting in the adjacent areas. What to do now? I bet you’ve got some idea for an application.

Learn the skills needed to build this application.

Be careful as we’re entering dangerous territory. Many programmers have some vague application ideas and are hype-driven when choosing the stack. They get hyped about a new database or language just to discover two months later that they got nowhere. To avoid this, make sure to build on your current skills and only learn new things when it’s necessary.

Your application shouldn't be an excuse to learn a whole new programming stack but to expand your knowledge step by step.

Fundamentals

You may feel lost and don’t know where to focus. In this case, follow one simple rule:

When in doubt, focus on the fundamentals.

Mastering algorithms, data structures, design patterns, etc., is always a good bet. Even if you don’t think about it, you’re using fundamental knowledge constantly. If you can do it intentionally, your programming skills will skyrocket.

What’s more, fundamentals are programming meta-skills — you’ll use them whatever you do, so they’re transferrable between languages and frameworks.

What Is Not Worth Your Time

As there are guidelines to pick skills you need to learn, there are some red flags to watch out for before you devote your time to learning.

New hot language (framework/library)

Don’t learn every new thing. It doesn’t matter if makers claim it’s the best thing since sliced bread. It doesn’t matter that the people you admire are excited about it. It doesn’t matter that your co-worker raves about it.

Most new things will fade away fast. The programming tools market is merciless; even the giants fail often. And no one will give you back the time you spent learning obsolete tools.

Does it mean you should give up on everything new? No.

It makes sense to learn new things if they have a serious chance to succeed and fit into your current skillset. When the new language or library is an extension of your current skills or is adjacent, consider betting on it. If you’re lucky, you may benefit from being an early adopter.

Specializing in the new is a high-risk-high reward strategy as you can become an expert fast, but it can also waste your time.

Things you’ll likely use only once

Sometimes you don’t plan to use a skill many times; nevertheless, you need to get things done. That’s a sign that you shouldn’t devote time to learning but find a path of least resistance.

Let’s say you’re a frontend developer and need to build a few complex charts. You may be tempted to learn D3.js — a fantastic data visualization library. The thing is, it’s not worth it. D3 is a huge and complex solution, and your problem is rather limited. You just need charts, not the whole library.

What are the alternatives? How can you get your charts without the hassle of learning an intricate library?

You can use simpler abstractions over D3; some of them may have a solution to all of your problems and get the job done.

An even easier alternative is to use the no-code tools that allow creating charts. Check — maybe there is a good fit, and it takes just hours to fathom most no-code tools.

Ultimately, you can pay someone to build charts for you. With limited problems, it’s often cheaper to hire an external developer than to use your time learning a skill you likely won’t use in the future.

Skills unrelated to your skillset

Learning skills far away from your area of expertise is often tempting. I fell into this trap many times.

I'm a frontend developer focused on React with some expertise in the backend who tried to learn things as diverse as machine learning and creative coding. I also spent some time learning Vue, Svelte, and Angular.

As you can imagine, I remember almost nothing of the things mentioned above. They were too far away from my specialization, or I didn’t get a chance to use them regularly. So my skills faded over time, up to the point that I’d need to start from scratch to catch up.

Don’t repeat my mistake; learn the things complementing your skillset, not just random things that sound cool.

If you’re convinced that you want to learn a new unrelated skill, I’ve got only one piece of advice for you — make sure you use it as fast and as often as possible.

Declining language (framework/library)

Declining languages and frameworks are a waste of time. Every technology has its expiry date. It may be hard to notice the technology is dying, but it’s a good choice to distance yourself as fast as possible if you see it.

When I started, the jQuery library was still a thing, but its popularity was diminishing. I had to learn it to get my first job, but I felt no regrets when I ditched it after a year. It was more prudent to focus on one of the emerging frontend frameworks — React.

You may be forced to learn declining technology. Then it’s fine to do it. But try to focus on modern tech as much as you can. Otherwise, many things you’re learning now will become obsolete fast.
下载开源日报APP:https://openingsource.org/2579/
加入我们:https://openingsource.org/about/join/
关注我们:https://openingsource.org/about/love/