📚 文稿库

【双语视界】懒人高效学编程:20%努力80%成果

视频介绍了如何利用80/20法则高效学习编程,强调逻辑思维与问题拆解的重要性,并分享了Notion笔记模板。

UP主: 双语视界-与时俱进 · 时长: 11:15 · 🔗 B站原视频

标签: 编程学习 · 逻辑思维 · 80/20法则 · Notion · 学习方法

什么是编程?

Hi, so you wanna talk to computers? Yeah, that'd be pretty cool. You wanna make video games? Yeah, that'd be pretty cool. You wanna get rich? Yeah, that'd be pretty cool. Learn how to program. No. Why? It's hard. Why? You just Google stuff. Kinda.

Oh, what is programming? I've said this before. What is it? Not code. What? It's all about problem solving and logical thinking. You have to understand the concepts and how to apply them.

Okay, what about the programming language? That's just a tool. Is it important? Kinda. A majority of people focus mainly on the language itself, and less on problem solving and logical thinking. Is that bad? Yes. Why? Because you'll end up in tutorial hell. Is that bad? Yes. Why? Because you'll never learn how to program.

How do you study programming then? Don't try to memorize the language. Instead of trying to memorize the language, try to learn patterns, problem solving approaches, and how different pieces fit together. So how do you get better at programming? You program. What? You do it. What? Program. Really? Yes. That's it? Yes. Really? No. What? Programming is a skill.

优化学习时间:80/20法则

Okay, but we can optimize this. I'm lazy. I don't like hard work. Me too. I don't like to study for 8 hours a day. Me too. So let me show you how I like to take notes. I like to use Notion. Notion? Yes. Don't other apps exist? Why Notion? Because I've been using it for years and I'm pretty comfortable with it. It handles everything I need, allows me to have everything in one place, it's easy to use and most importantly, it's free. Oh that's pretty cool. This video is also sponsored by Notion.

Oh, you might notice my notes aren't exactly winning any beauty contests. Yeah they're pretty ugly and simple. Here's the thing, I actually want to learn stuff, not make my notes look good. A lot of people like iPads and that's cool, but it doesn't really work for programming unless you get a keyboard and a mouse. Oh wait, that's now a computer, you complete idiot. Most people are using a computer. I don't want to get an iPad. And my handwriting is disgusting.

Whenever I study, I want to maximize my time. Ideally, I want to learn as much in 2 hours as someone else does in 8 hours. If you're really a programmer, you should already know where I'm going with this. I want to optimize my time. Let me introduce you to the Pareto Principle, which is also called the 80-20 rule. What's that? It's the idea that approximately 80% of outcomes or results come from about 20% of your inputs or effort. A small portion of your work leads to a majority of your results. 20% of work equals 80% of results. Oh cool. It sounds crazy right? Yeah. So how do we apply this to studying programming? Well we have to concentrate on areas where we get big wins with little effort.

笔记策略:抓住核心问题

Let me show you how we do that. Whenever I study I like to focus on core concepts. This is important. Instead of trying to memorize every method in a language, I focus on understanding the fundamental principles. Once you get those, the rest often fall into place. Why? Because of the 80-20 rule, these core concepts will give you 80% of the results.

Whenever I learn a new subject, I ask what I call the "big questions": What is it? Why is it important? When will I need this? How does it work? Now if you don't like these questions, you can create your own. It's simple, all you need is a what, a why, a when, and how.

Now why do I use these questions? They're not just random questions. They help me connect what I'm learning to other areas. It helps me understand where the subject fits into the bigger picture, and it also lets me sub-categorize the topics. So let's say I'm learning something about Object-Oriented Programming. The big questions would be: What is Object-Oriented Programming? Why is Object-Oriented Programming important? Why should I learn Object-Oriented Programming? When will I need... I should have picked a better example, but you get the point. I'm not just copy and pasting or memorizing definitions. I'm trying to understand why this concept exists.

主动思考与概念简化

But I don't stop there. If I'm given information about the topic, I take it a step further by turning the information into questions. This method allows my brain to actively engage with the material, which is way more effective than passive reading.

So let's keep going with the Object-Oriented Programming example. Let's say I learn what a class is, what an object is, and how to create both. I'd rephrase the information which would give me: What is a class? What is an object? How do you create a class? How do you create an object? And then I'd also give myself my own questions, so maybe something like: What's the difference between a class and an object? If I'm actively asking myself questions, then I know I'm actually paying attention and not just brain rotting. It's like creating my own pop quiz. And if someone actually asks me that question, I would know how to respond.

I like to rewrite definitions. I start with the original definition, then create my own version. When I write my own definition, I try to meet two key requirements:

  1. Would this make sense to someone else?
  2. Would this make sense to a five-year-old?

I like the idea that you truly know something if you can simplify it. Now, not every concept has to be simplified to a five-year-old level, but try your best to simplify it as much as possible. I do this all the time. If you were paying attention, you would have noticed I did it to you when I explained the Pareto Principle: 20% of work equals 80% of results. And really the whole intro of the video was very simplified. What is programming? I've said this before. What is it? Not code. What? It's all about problem solving and logical thinking. It helps me a lot and it's really a test to see if I actually understand what I'm learning.

结合图表与代码实践

I like to combine text and visuals in my notes. I know you all heard the line, "A picture is worth a thousand words." Well in programming, that's really true. Diagrams can often explain concepts better than paragraphs of text. I promise you.

Now all this note taking and organizing is pointless if you don't actually write code. So I try to program, obviously. Whenever I'm learning a programming concept, I like to do this: I like to copy the code from whatever resource I'm using (YouTube, a book, a class lecture), and then I create my own example doing the same thing. I try to notice if there's a pattern to it.

Let's do an example. Let's say I'm learning how to fetch data from an API. So I copy code from whatever resource I'm using, and then I create my own example doing the same thing. And now I'm going to look for a pattern. Luckily for fetching data, there is. There's some steps to it: get your API URL, create a try-catch for error handling.

I spend more time building actual projects than doing endless tutorials. This way I learn by doing and reinforce my understanding of key concepts. And you all keep asking me, what's the best way to learn programming? Well this is it right here: just make projects. Literally, just code. It's that simple, just code. I don't really take notes when I build projects, it's really just trial and error. But I do like to design and diagram things like my database schema, maybe classes, or I just visualize how the architecture would look. Visualizing really helps me understand how the project works, and it's a great experience cause you're gonna be doing this a lot.

高效学习技巧:主动回忆与间隔重复

Alright let's speedrun some other learning techniques.

Number one, Active Recall. Your brain is like a muscle. Now most of you probably don't work out and that's okay, but you need to work out your brain by testing it. Instead of just rereading notes, quiz yourself on whatever material you need to know. This is pretty obvious, but quizzing yourself will make you remember the information better. It's not a surprise.

Number two, Spaced Repetition. This technique is basically just taking gaps between study sessions and increasing the gap each time. This technique is based off the theory of the forgetting curve, which is just a fancy big brain way of saying: the longer you don't study, the more you forget. Wow. So when you first start, you study the material, you take like one hour off and then study it again. And then this time take maybe two hours off, study it again. Now take a day break, study it again, take a week break, study it again, blah, blah, blah. You get the point. You just keep increasing the gap. Spaced repetition helps flatten the curve, which means you don't forget as much, which means you don't have to study it as much because you remember more, which means less studying, which is what I want. Why? Because I'm lazy.

利用 AI 辅助学习

We're living in the age of AI, and I'd be a fake programmer if I didn't show you how I'm using AI to study. If you have Notion AI, this makes it 100 times easier since it's built in.

First up is an AI tutor. It's like having a personal programming mentor 24/7. I like to use AI to explain concepts, debug some code, and even challenge my understanding by asking it to explain things back to me.

Next thing is AI-generated practice quizzes and exams. Honestly, this is a game-changer for active recall. I can quickly create questions about any programming topic I'm studying. It's like having an infinite supply of practice problems.

One of my favorite techniques is comparing AI responses with my own notes. This helps me identify gaps in my understanding and sometimes introduces new perspectives that I never considered. I like to use AI to simplify and refine my writing. Remember how I said I like to simplify my concepts so that a 5-year-old understands? AI helps me do this, which also helps my own understanding. If you just look up the answer, lucky you, but ideally you should try to understand how the solution works and the patterns used for it.

LeetCode 与面试准备

So here's how I like to structure my LeetCode practice in Notion. I like to use a Kanban board because it lets me move the problems into specific categories. I have four simple categories: Haven't Solved, Needs Review, Solved, and Today. The categories are pretty straightforward, and whenever I create a new problem, it has this information: the question name, the difficulty, the type of problem, and the time it took to solve it.

And once you click on a problem, it's going to have this information: the problem statement. So I just copy this from LeetCode to have the information in one place. And then I like to have a solution section. I always try to come up with at least two approaches: a brute force solution and an optimized one. Sometimes I like to add another solution just to keep things open-minded. And for each solution, I like to have this information: the code obviously, and I make sure to have comments in the code explaining each step of the process. And then I also add the time complexity and the space complexity, because sometimes they'll ask you this in the interview. So it's good practice to know it.

All right, so that's everything regarding how I set up notes. Now, when it comes to deciding which problems I wanna do for the day, I like to have this structure. I try to do at least three problems a day if I'm starting to interview, and then I step it up to five problems, but I make sure that I have these requirements: one question that I haven't solved, one question that I need to review, and one question that I've solved before. And if I feel like solving more questions, then I can decide either another question I need to review or another question that I need to solve.

The reason I like to have a question that I've solved before is, remember spaced repetition. I'm taking a gap between the time I solve the problem. So the more problems I solve, the larger the gap is. So if I can't solve a problem, it goes into review, and if I can solve it, then it'll go to the solved. And I make sure I put it at the bottom, not the top. By structuring my interview preparation like this in Notion, I can easily review problems, I can track my progress, and I can focus on areas I need to improve.

结语:建立高效系统的回报

I know what some of you might be thinking: this all sounds great, but it seems like a lot of work to set up. And you're not wrong, but here's the thing. The time you invest in setting up an efficient study system pays off tenfold in the long run. Remember what I said, I like to get done in 2 hours what another person does in 8 hours. That's the plan, that's the goal.

And if that doesn't motivate you, here's some software engineering salaries to motivate you. If you want to get started with Notion and try out some of the techniques I've shown you today, I have a special link in the description below, and if you're a student you'll also get a discount for Notion AI.

So moral of the story: you'll never be a good programmer.

On this page