Learning Techniques

Never stop learning

If you’ve never tried different techniques of improving your learning, then I can guarantee your potential’s not fulfilled.

Efficiency. Order. Well being. Joy. Progress.

This is what I wish for you to experience.

I know some of you have many other responsibilities and activities you need to do. That’s why we need to find a way how to use every single second of your time the best way we can. Let’s be time efficient. Let’s be organized.

Moreover, I absolutely don’t want to see you hating what you’re trying to learn. Let’s love what we do.

Breaks

As you’re supposed to schedule when you learn, similarly you should set a quit time for a day. Good habits building again. I don’t recommend turning off your laptop and just go to bed. Quit learning about an hour before you go to bed and until that try to do something relaxing.

It’s also important to know how to take breaks. You should take regular short breaks even if you feel you don’t need them. You need to rest properly. Go away from your phone. Consuming information from the internet is still demanding activity for your brain. But there’s also another kind of break.

Distraction break. It’s different from those short breaks. Schedule your distraction during the day when you do whatever you want. This is your award for doing a good work. That way you won’t be tempted to procrastinate so much because you know the time for scrolling through social media and watching Youtube will come. But you must set a time limit beforehand and stick to it. For example I have a daily one hour distraction break for games or Youtube.

You can keep track of your regular breaks with Pomodoro Technique. It organizes your work by switching from 25 minute work period with 5 minute break, and then repeating the cycle again and again. You can find many Pomodoro apps.

The last thing about breaks is you should sometimes make an unplanned one. But only if there’s a right reason for it. Like when you’re stuck on something. You’ll find out more about it later.

Practice

This is the thing you need to remember. This is one of the game changers. The way most people practice their skills is wrong.

Well unless their only goal is to have just fun. This way of practicing is called naïve practice. Doing only what we like, but giving up when it’s becoming uncomfortable. Having no clear goals and avoiding challenge. Do this and you’ll be dreaming about programming career forever. Or you’ll give up.

The other way that really works is called deliberate practice (From book - Peak: Secrets from the New Science of Expertise). It’s often uncomfortable, because it gets you out of your comfort zone. But this is exactly the point.

We grow when things get uncomfortable. Challenge is good, because challenge develops us. I certainly learned the most after I finished some demanding courses. Or when I made some apps I had no idea how to make when I started.

You can’t do deliberate practice if your thoughts are somewhere else. You need to dedicate your complete attention. No multitasking. No texting. And not just doing your hours without really trying.

When the challenge comes you’ll often have no idea what to do next. You’ll be stuck. As I said you should ask for advice, but first you have to try to solve it by yourself. Even if you fail at trying it has some value for you. Getting used to this feeling “I’m failing right now” and being comfortable with it is very valuable.

You need to have access to feedback in some way. Of course, ideal would be having programmer friend willing to check your code and giving you constructive criticism. But you can do it even without him.

You need to check other people’s code and compare it with yours. Think about the differences. Is their code better? Why did they use this and that?

Order of Blocks

Blocks

When you’ll see the list of the languages, concepts and tools you should know then it becomes quite obvious there’s a lot of stuff you need to learn. Well I guess many people don’t even try because of that. But by their nature these things aren’t very complicated. At least most parts of web development aren’t.

The amount of information you have to learn makes it look so complicated. So when you’ll be adding more and more new facts and ideas to your knowledge, you’ll appreciate a good organized way how to process new information. But it actually starts with the right decision how to order things you’re going to study.

You can look at web development as a bunch of blocks. HTML, CSS, JavaScript, backend languages, servers, databases. They are all blocks with some specific purpose. And every block is connected to some other block.

These interconnected blocks are what make websites and internet work. As there are some rules to they relations, so there are some recommendations for the order of learning these blocks. Knowing one block will help you to understand another. The same rules apply in details.

Regarding programming languages first you need to have solid grasps of basics of syntax before you can move to more advanced stuff. Maybe it seems obvious, but people tend to get overconfident and they neglect paramount basics. Recommended order with specifics for web development will be explained later.

Now we can talk about how you can process new information properly.

Processing Information & Notes Taking

Our brains are optimized for fast decision-making, not for keeping tons of ideas and information.

When I learn something new I’d like to keep in my brain, by default I assume I won’t remember what that is later. First I try to compress most important things into smaller chunks. And then I find a way how to reasonably attach new information to what I already know. By taking notes.

That doesn’t mean I take notes about everything. Even most of my notes serve as a quick reminder. When I search something in my notes I already know it’s there. It’s written in the way that helps me to understand the information again very quickly.

Even though everything you may need you can find on Google, it takes some time to find the right answer for your question. And sometimes even more time with a clear explanation. If I did it before I don’t want to do it again.

Some, maybe most programmers don’t write their notes at all. If that works for them then no problem. But until you can call yourself a real programmer I suggest writing your own notes.

Remember I said writing. Not downloading from some website. You need to have some kind of experience with the concept before you can write a short summary of it and understand what it really is.

Also don’t just copy & paste what you read. In some cases it’s ok, but in many other it won’t help you. Try to write it in the way that makes you understand it. Examples help.

Use analogies if you can. Before you’ll know enough about various software concepts and terminology, they can be pretty simple too. HTML is kind of like writing in text document. It has headings, paragraphs. You can make words bold or underlined. CSS is like taking the document to an artist. He can make the background green, use some hipster font and play with composition.

Maybe the way how you’ll make an analogy isn’t absolutely right. Maybe you missed something. If anything changes about what you know about something, update your notes. That’s why I don’t recommend writing notes on paper, because you’ll have to rewrite and update your notes often.

And finally the last, maybe the most important point about notes – use them.

How To Get Unstuck & Solve Problems

Man working on computer

It’s likely you will get stuck pretty often when learning programming. It's not a bad thing. It's normal. Even seasoned programmers get stuck. The important thing here is to learn how to handle these situations and to learn how to solve problems. Programmer is a problem solver.

Always start by understanding the problem. The formulation of a problem is often more important than its solution. A good test for this is whether you can or can’t explain the problem to someone else.

When you’re failing to solve something for long, then it’s time to try differently, not necessarily harder. One way of how to try differently may be not to solve the problem at all. Wait what?

What I mean is not to be solving the problem at least for some time. It may sound weird but actually it’s the one of the best methods how to understand more and how to find solutions. Let me explain.

To keep studying even if you’re stuck on the same problem for hours isn’t actually the best thing to do. You should keep a distance from it for a while.

Our brain knows two kinds of modes of thinking. Focused and diffused mode (From book - A mind for numbers)

Focused mode is in action when you concentrate on something using your conscious and analytical thinking. For example when you’re trying to learn what is a purpose of block statement in JavaScript.

The other kind is diffused mode, which is unconscious, like when you go for a run and you don’t even try to think about anything. Although you don’t realize it, you’re unconsciously making progress in understanding what you read about JavaScript blocks.

Proper timing of switching between the modes is super beneficial. Unfortunately it’s usually neglected or even unused.

When we switch from focused to diffused mode, even though we aren’t actively thinking about something, that doesn’t mean our brain is doing nothing with the information. It’s processing all new things you recently read and it’s finding connections for them to your existing knowledge.

If the connection is made and you return to focusing on the problem again, you have those “aha” moments. Or sometimes you don’t even have to be actively focused on a problem again, but suddenly you realize the solution. We need to use this natural process of learning more.

So how can we use this in practice?

  1. When you get stuck on something, firstly really try to do your best. Diffused mode isn’t supposed to be the first reaction to the challenge. But after you really can’t find a way how to find solution for some time, then it’s time to give up for now. Frustration’s a good signal too. Let’s go to diffused mode.
  2. At this stage it’s important to relax your mind. Take a walk. Go to gym. Have a nap. Watch a TV show. But don’t try to focus on the problem right now. Only after you feel relaxed and rested, let’s focus on the problem again.
  3. Of course you can’t expect you’ll understand everything after you return to the problem. But you can be sure you just unconsciously made another step to understand it better.

You may feel like this could be a good excuse to cheat the schedule. You shouldn’t be doing leisure activity when you have scheduled studying, right? So how do you know when you’re cheating and when you’re making switch? Well it’s quite easy to know if you’re being honest with yourself.

I think you know when you’re really trying and when you just want to avoid uncomfortable task, don’t you? Being an effective learner isn’t only about using the best techniques. It comes to values as well. You have to be accountable to yourself.

Break The Problem Into Pieces

When you’re actually focused on the problem you can’t solve quickly, it’s best to break it down. Break it into smaller subproblems. Then focus on solving a subproblem you think you can successfully solve.

Here’s a general example how you can proceed:

  1. Make sure you really understand the problem completely
  2. Make sure you understand what input and output should be, e.g. "I get an input of big numbers and I need to make an output by selecting only those that are XYZ"
  3. Try to break the problem into smaller parts and smaller problems
  4. Within this process is good to realize what you know you don’t know. That’s your gap of knowledge. E.g. "I don’t know how to make calculation for XYZ"
  5. If you know how to solve some part you can write the code for it and test it with sample data
  6. For the part you don’t know how to solve you can write pseudocode for now. You can use comments like "I need to make count of numbers here"
  7. Now find or Google solution for each particular part of the problem. Don’t search for solution for the whole problem though. Learn from it and takes notes. Replace the pseudocode with real code
  8. Follow this solving of partial problems part by part
  9. After that, try to improve your code. Make it shorter, more readable and understandable even for others, and make sure it follows recommended patterns

Even a small success or solving problem only partly could have much bigger positive consequences. One benefit is it brings you closer to solving remaining subproblems. The other is psychological.

It gives you positive reaffirmation that gets you more excited to solve the whole problem. This makes you more likely to solve the problem and eventually will make you even more motivated. It’s called competence-confidence loop.

Speaking of psychology, I think it’s actually one of the most neglected areas of work of this industry. But hopefully it’ll change soon. Let’s help to change it together.

What To Do When You Feel Discouraged

Anxiety

I wanted to write about this topic, because talking to some people or seeing forum posts I see quite a number of people to be discouraged. It’s hard for them to continue learning. They’re full of doubts if they can do this.

I think the biggest reason why there aren’t so many programmers despite still growing job market demand is that people keep giving up. Or not even trying. Because they’re afraid they can’t do it. I can relate because once I was like them. I was afraid too.

I felt it’s too hard for me. I started doubting if I’m clever enough. But now when I look back I can only laugh at the fact I even had doubts. Of course I could do it. Of course you can do it too.

That’s why I’m pretty aware some of you can be in the similar situation right now. Thanks to reading a lot of books about psychology in recent years I now know much more about how our mind works.

People don’t give up because they aren’t smart enough. They give up because they THINK they aren’t smart enough. If you’re thinking about quitting, first let me explain what’s going on in your head.

Although going from zero to a professional programmer isn’t the hardest thing ever, it’s not an easy thing to accomplish either. When we do hard things we are challenged. When we’re challenged sometimes come moments when we’re feeling down. We’re afraid we can’t do it anymore. We think we’re failing.

How serious this is really depends on what kind of person you are. How confident you’re and what’s your past experience with hard times and challenging work. But the truth is everybody sometimes feels discouraged.

During learning this could actually occur pretty often. Everything is new. You don’t get that many chances to say “yeah no problem, I know how to do it” because you did it hundreds of times before.

And when you learn one thing, you have to move on soon because there are so many other things you need to learn. And then it’s a matter of time when you come to a halt.

For some time it may seem like nothing is going on because growth isn’t often clearly visible. This is what people don’t realize so they give up early.

But why just people can’t keep going even though they don’t see any progress momentarily? Why can’t they just do the hard work and wait for progress to reveal itself? Well because they start being doubtful.

There are two main doubts or fears we need to talk about. Fear of unknown and fear of failure. Both are very natural to people, because both helped us survive in the past.

It’s very useful to have a fear of unknown and unseen predators when you walk through African savanna. It’s good to be afraid to fail if you fight hostile tribes because your life is at stake. But these fears aren’t that useful anymore, not in the modern world.

There’s no predator in the streets waiting to ambush you. In most of the ordinary situations these fears are pretty useless. Let’s see how we can find success despite of their presence.

Fear of unknown occurs when you want something but you start having doubts when you actually begin pursuing it. You start doubting if you really want that thing and you find excuses. You start to rationalize your irrational fear. The only fix for this is to realize your fear and admit you’re afraid. Only then you can face it. You can’t fight something you don’t see and don’t admit its existence.

Fear of failure can be seen as a next step from the fear of unknown. You do realize what you’re afraid of. And yet just knowing it doesn’t solve it for you. So what’s an example of this when you’re pursuing career as a programmer?

Maybe it’s a fear of investing so much effort and time but in the end you won’t make it. The result won’t be worth it. Fear of learning for 6 months, but you won’t be even close to becoming a programmer. Sounds familiar? I had some doubts too.

But fear of failure is sometimes about something more than that. Every human being has a need for social validation. We fear what others will think about us. We won’t look smart. They’ll think we can’t achieve anything.

And maybe we fear we’ll find out the truth about ourselves that’s not so great. Many people don’t even set goals because they’re afraid of being disappointed.

So what to do when you’re fearful?

The cure for fear is action. On the other hand, fear grows on indecision and delaying.

  1. First determine what are you afraid of. Don’t try to ignore it. Name it. Write it down. Releasing negative emotion and labeling it with words (I’m afraid of X) can free your mind from unwanted thoughts. When some disturbing thought comes, accept it, identify it and then let it go. Remind yourself that being afraid doesn’t help you at all.
  2. Secondly, take action. There’s always some action you can take. Afraid of programming languages are too difficult for you to understand? Read a super simple article about programming for absolute beginners. Then move to something little more advanced. Step by step.

During this whole long process you may find yourself feeling uncomfortable quite often. That’s alright. It’s okay to feel uncomfortable. Sometimes I feel uncomfortable too. That very feeling is genetically given to us. It won’t go away. But you don’t have to give up.

Don’t compromise your actions and your mindset because of that useless feeling. Be good at not knowing. Be comfortable with uncertainty.

I think people should learn about psychology much more. If you feel discouraged often then your job to do is also something else. Don’t be just learning programming. Work on you self development too. Start knowing yourself better. You have to become mentally strong.

With growing understanding of psychology and motivation you can start maneuver your mind as you need to achieve your goals. Most people don’t do it. Most people probably don’t even think it’s possible.

But don’t be thinking only knowing how to deal with this and nothing more will make you a programmer. You have to develop a solid work ethic. Remember, when you drive on a road called progress, it’s always hard work that travels with you.

I believe anybody reading this can be a programmer. Actually I know it. Let’s face it. I know it even better than you because I already did it and I know how it works and what it takes. So if you think I’m giving you some cheap motivational crap here, then think again. Anytime you’ll start having doubts, come here and read this chapter again. This fear of yours is a fake bullshit thing. Your honest determination and believing in yourself is not. You can do it.

Make Studying Fun

Encouraged or discouraged you can still make work and studying more productive by ... making it more fun. Fun! Yay!

The best way how to make it more fun is to find interesting stuff about what you’re learning about right now. Are you learning Ruby on Rails? Have you heard how its creator fell in love with Ruby? Have you recently started a course about SQL and databases? Have you seen the documentary about how Google collects tons of data? Any of these things can make you more excited.

Find things that are somehow related to other things you like. Are you a gamer? Did you know you can learn coding by playing games? Are you interested in starting your own tech startup? Have you read about how Paypal mafia and Elon Musk revolutionized online money transfer with code?

You can avoid boring stereotypes. Change tasks during the day. It helps to keep novelty and interest. For example start by learning language syntax and later switch to designing websites with CSS. But don’t be multitasking. Focus on a single thing at the moment. Multitasking isn’t our friend.

Join a study group or find a buddy with similar interests. You can help each other and discuss new stuff you learned recently.

Study somewhere different. Changing places breaks boredom. Library, café, whatever that makes you productive and isn’t distractive.

Prepare some reward if you successfully finish the day or lesson with intended results. If you finish a chapter about responsive website design then you can watch Netflix for an hour. Rewarded activity tends to be repeated.

Use temptation bundling. Do something you like with something what needs to be done. Read about how servers work while you drink from a cup of fresh coffee. It won’t be that hard to start if you know you’ll have your favorite drink. Nope, I don’t think beer is a proper drink for studying.

Everybody is different and everybody reacts to certain incentives differently. Just try things and you’ll see what works for you and what makes you feel better and more excited.

Now that you know everything essential about learning, let’s finally talk about coding!

Web development