Learning to code can be difficult. At times, it may appear like nothing is absorbing. This article is meant to help you improve your ability to learn by going over the 5 factors that directly affect your ability to learn, and 8 effective ways to learn programming.
Here are 5 factors that will direct affect your progress so you should be sensitive about them when learning:
- Visual — We are visual creatures and this is perhaps the most convenient way to learn something. A huge part of our brain is dedicated to visual processing and by taking advantage of this, we can learn things much faster. Diagrams are very helpful in that it can provide an overview and sometimes even a detailed look of a procedure or a concept. It is important to note that you may recognize, but not understand everything at first glance so don’t force yourself to look at every detail. Instead, print out the diagram, image, or code that you would like to learn and stare it periodically and frequently. Also, close your eyes and try to visualize what it is you’re trying to learn. Do this often, the better you can visualize it, the better you will know it. Drawing your own diagrams, charts, and illustrations enhances your learning because it forces you to internalize the information and articulate it in the form of a drawing.
- Audio — Humans interact and communicate through audio and this is a very powerful tool when it comes to learning. We give and receive instructions through sound, we listen for danger through sound, and this very mechanism is hardwired into us. We can improve the chances of absorbing the information by uttering what we are learning out. For instance, as you write a line of code, utter the key words or the syntax parts of the language. For concepts, utter the main key words and a brief definition of it. When are watching or reading something and you didn’t get the gist of it, re-watch it or re-read it several times, and as you roll it back, utter it out loud. This might sound silly, but by uttering out loud, you are priming your brain learn the topic — do it enough times and you will inevitably remember it. Additionally, you may want to cut out other sounds if you want to remain focused, but remember that focus is a limited resource so do not expect to be able to remain focused forever.
- Belief — This is very important when it comes to learning or creating projects. You might think this is easy, but the stronger and more steady your belief is, the higher chances you will have at becoming a competent coder. This is directly related to your motivation and emotions. No matter how badly you perform, no matter how badly you missed your goals, no matter what your friends or professor tells you, it is important to never deplete your belief. As long as you have a steady belief you will make progress and you will inevitably master any subject you pursue.
- Curiosity — Typically, the curious-minded already have an understanding of a system and would like to pursue more knowledge to enrich their understanding. It could be a piece that just isn’t consistent with their current understanding. This drive can be very powerful for some. Curiosity is definitely a sign of interest and even as sign of understanding. If you do not have curiosity, you can cultivate it by discussing coding topics, listening to coding podcasts, or reading more about coding. Immerse yourself in the subject and your curiosity will grow.
- Repetition — Our brain is highly adaptive and re-wires itself based on the inputs we have during our day. We cannot even control all of it. Paradoxically, if you are learning a topic and wind up telling yourself “I’m overwhelmed!” or “I’m confused”, you are absorbing the concept and you are actually in the process of learning it. One of the ways to break through this bottle neck is by using repetition. Whether it’s a physical movement or a language, when you repeatedly expose yourself to something, you will eventually become familiar with it. By repeatedly drilling something, you are directly affecting the wiring in your brain and it will adapt to your inputs. Do it often, do it well, and it will bring you closer to mastery.
Keep these factors in mind while learning. When you get stuck, find out which of these factor are affecting your progress. Many times, you can do exercises related to these factors to effectively alleviate some of the friction preventing from progressing.
This perhaps the most convenient way to learn on this list. Videos provide a visual and audible way to see and hear how a professional code. In the short term, it cuts time and delivers the message quickly.
However, the problem with videos it can relax the viewer too much. In order for learning to be effective, the user has to be engaged. This is especially true if the audience are beginners because they do not have any experience to relate to. Individuals who have experience coding have a much easier time absorbing the information. But even experienced programmers must apply it to master the new concept.
If you are a beginner, strike a balance between watching and learning. For every minute you take to watch a video, spend 5 minutes applying it. Most websites like Udemy or YouTube contain endless hours of tutorial content. If you spend back-to-back hours watching these videos, the only thing you will gain is an illusion of understanding; you will gain nothing in terms of skill or experience. Only by putting in the work, writing code, failing, and re-trying will you really learn. Writing code and struggling with it will take you much further than watching a video ever will.
So how do you know when to stop watching and code?
- When you watch a video, take out a pen and paper and write down the general topic of the video.
- Before you watch the video, ask yourself what are the topics you want to learn from this video. If you have no idea what the video is about or if the author of the video is intentionally keeping it a secret, ask yourself if this video is aligned with your goals or not. Your time and attention is a scarce commodity so do not squander it!
- Focus on a small number of topics covered in the video. If it is code, apply it. If it is a concept, write down the definition or draw out an illustration if they are connected. You can re-watch the video, but do not move on to other topics for the time being.
- Test yourself. The following morning, regurgitate what you’ve learned with just your memory — you don’t have to be perfect. Try to define the concept(s) using pen and paper. If it is code, write down the new syntax/language feature you learned with a pen and paper. If you cannot, that’s fine, figure out your mistakes so you can work on them and improve on it the next day.
- Avoid long videos. For me, the best courses are those that run in a series and are broken into chunks of 2–4 minutes. Attention is a limited commodity and you want to devote most of your attention to application, not just watching videos.
2. Open Source Community
This is an opportunity to see how code is written for projects that work. Even if you do not have work experience, you can look for projects that you admire and see how it is written. The wisdom and experience of great programmers are distilled in the code. This may seem complicated if you are a beginner, but it is well worth the study.
If you are a total beginner, you may want to try the other ways to learn that’s mentioned in this article.
You can even contribute to the projects by writing patches for them. However, do not expect to be able to do everything you want. The open source community has its own policies on what is socially acceptable.
I’m talking about college here. Getting a degree from an accredited institution will increase your odds for landing a job. There are many junior colleges and universities that offer accredited certificate programs. Having a Computer Science (or a degree in a related field) will make you recognizable academically by all employers. The degree will mean that you can critically think, analyze, and problem-solve Computer Science related problems. In addition, you can further your learning by going deeper into research and academia if you have the interest.
There are, however, some drawbacks.
- It will be expensive.
Depending on which school you attend, college will not be cheap. At my alma mater, it costs about $28,331 to earn a computer science degree. Other colleges, can cost up to $69,000. The upside is I live in California and financial aid covers a lot in terms of tuition costs. If you live in other states, it may cost far less. Check out the link here for a list of institutions and the cost to attain a degree. Keep in mind that this is just the tuition cost, and it does not include the cost of living.
- It will not train you to use the most relevant technologies.
Once you have graduated, your employer will not expect you to have the skills relevant for the job. This is a very common expectation of many employers. This means that they will have to take time and resources away from their business to train you. In essence, they are investing in you, in the hopes that one day you can add value back to the company. Remember that every employer who hires you expects to make them more than what they pay you. The framework and skills that you need to know will very dramatically from company to company.
- Your professors may not fit your learning style.
Learning is a complicated process and not everybody will learn the same. It is important know what you’re good and the best ways to learn for yourself. If you can’t figure this out in time, you will inevitably encounter a course where your professor does not meet your learning style and you will suffer in the course. I have taken courses were I worked so hard to study for it only to end up with a 30% at the end of the course. Then, retaking the course with another professor and getting a significantly higher performance as well as a much better understanding with the same kind of work ethic. You might argue that I only performed better because I repeated the course, but actually the details of the content is actually different; the second professor covered some of the same topics, but made us go about it totally differently. It’s not like the professor was out to get me, but knowing your style of learning and looking for the right professor will save you from lots of pain.
- It will involve tests.
You will not enjoy school if you are not a good test taker. Many people think you can mitigate the stress of tests by studying steadily. Let me just say — it doesn’t work that way. The professors will build-up the curriculum throughout the session and the stuff you learn will be cumulative even if your professor is not intentionally trying to cram you with things. Planning ahead is a luxury, and you have to learn how to deal with uncertainty, last minute changes, and long nights. Sometimes you may feel like you are procrastinating, but that’s not necessarily true. It’s far better to focus on things you need to study than to focus on how many things you don’t know. When it’s done, let it all go. If you received a bad grade, know that it doesn’t define you and move on. I say this because school will try to reduce you to a grade or a skill and sometimes we build these invisible walls in our head that trap us and we forget what values we can provide to the world.
- It will take 4 years to complete.
You will have to put up with the things I’ve previously mentioned for about 4 years. Need I say more?
Lastly, do not expect to be guaranteed anything after receiving your degree. The things that you learn after receiving your degree are primarily problem-solving skills. Although this will make you stand out from individuals without a degree, it will not supply you with the same kind of hands-on experience of a professional. Luckily, you can acquire this experience, even without going to school.
Being able to apply what you know to produce results and add value to your company is going to be tremendously more valuable than having a degree. The best way to demonstrate that you are capable of producing results is by having a track record of completed projects that are used by others.
This is perhaps my favorite pass-time and among my favorite ways to learn. Unlike videos, books are not constrained by a timeline. Books contain information that can be carried with you where ever you go and it doesn’t need to be powered. You can skim through the pages to find your topic of interest and delve into the particular topic if you need to.
How are books different from online websites and articles? Books a more conventional way of learning things. They are little packages that distill the topics of interest. With each book, often times, the author will instruct the reader about how to read it. No, you don’t read computer tech books like a novel, much like you don’t read a college math book like you read a dictionary. A common way to read a programming book is by chapter. Another way is by the topic. If you are reading a cookbook, you will read it based on the problems of your interest and study the solutions.
The great part about reading is it forces you to imagine the scenario, so it’s similar to video, except you have to put forth more effort to read and this is typically sufficient to keep you engaged. Moreover, you can stop, highlight, and take notes within the margins of a book. This can further your understanding and maintain your attention on the subject. By doing this, you are putting fourth more effort and exercising your brain more to gain knowledge about the subject. This method is particularly useful if there is a particular concept or idea that you would like to really break down and understand. Additionally, this method works beautifully with pen and paper exercises that is mentioned in the next section.
The drawback of books is it requires a lot of effort and imagination. Sometimes a simple 1–2 minute video can deliver the same message as hours of reading. Having a mentor instruct to you and interact with you about a concept or a language can save you chapters of reading. Doing your own projects and struggling with them can give you a better intuition and insights than entire books.
This is not to say that methods previously mentioned are superior to books. They aren’t. However, reading books alone will not help become a better coder. It must be supplemented with other forms of learning, especially application of your knowledge. The reason I love reading so much is because it can enrich my understanding of a topic.
One way I like to learn is by jumping into a brand new programming language without knowing anything about it. I try to piece together the syntax and read or watch videos only when I’m stuck. When I have used the language for about 2–3 months, I go back and look for an intermediate level book about the language. This way, when I’m reading the book, I have a solid base to understand the language and I can rediscover the many gems and nuances within the language.
5. The Pen & Paper
Coding is an introverted discipline. Every piece of code is going to come from your head. One true test of whether or not you know something is by putting pen on paper. This is one of my favorite ways to learn because I can design drills that effectively attack weak points in my skills or knowledge. I can immediately spot where I’m lacking and address that issue.
Typically, I use this approach with code that I’m unfamiliar with. I will compile some snippet of code that does interesting functions that I would like to learn. Then, every morning, I will try to reiterate the snippet from my head. My goal is to get 3–4 lines correctly at a time. So if I’m working with a snippet containing 11 lines of code, I only worry about 3–4 lines first. It only counts if I can perfectly get it the first time I do the drill in the morning. I give myself about a week to learn the 3–4 lines.
It usually takes me 10–15 minutes to do these drills and when I’m finished, I always compare it to the correct answer. Typically, I will make mistakes, and when I do, I circle them. This is where I can identify what it is I need to work on to reach the next level. So based on the mistakes I made, I simply repeat the correct answer about 5–10 times. Do not rush when you are correcting your mistakes. You want to do the exercises thoroughly so that you can commit the right knowledge to memory. You will probably go through several mistakes (some of them more than once), so do not stress and do not lose patience.
Choose wisely what you want to work on because the longer you take to work on these things, the less effective this technique will be. Your concentrated attention is the most important thing about this exercise so do not squander it by forcing yourself to learn too many things in one single session. This technique is great for building memory and intuition, but it is not great for solving brand new completely unrelated problems. If you are doing a problem that requires critical thinking for long periods of time, you may want to set aside time for it in another session. This is also why I recommend to do these exercises in the morning, it is the when your rote memory is at it’s keenest. Lastly, this technique is great only to focus on specific details and break them down and master them little by little. It is not very effective if you are rushing to learn too many things at once. It is not good for cramming for a test. Also if you are relying strictly on this one technique alone to learn you may feel like you are learning very slowly. This is because it focuses on aspects of a very specific skill or concept instead of progressing to newer or different things. Rest assured that you are going to gain deeper insight into the particular concept or topic, but you may feel that you are not progressing as much if you only rely on this technique alone. As mentioned in the previous section, this technique pairs well with learning from a book.
6. Free Lancing
Lots of people have ideas and projects, lots. Don’t be surprised if you bump into somebody in real life who has this idea to build an app. Online there are even websites like Fiverr and Craigslist where you can put yourself on to get hired for projects. Even better, you can look for organizations that are looking for somebody to do their website or write an app for them and gain experience that way.
If you cannot find regular work, this is one of the best ways to gain real life experience in coding. Here, you will be forced to communicate with others to write up project requirements and meet deadlines. You will need to know how to negotiate with stakeholders and deliver your project on time to meet their expectations. Is there a lot of pressure? Yes, but the experience alone will be worth the it all.
You can find this kind of work almost anywhere and it will look good on your resume. You will be able to use the people that you’ve collaborated with as reference on your resume. You can grow your network this way as well. You may meet someone who can see your talent and click with you.
Best of all, this kind of work will build your personal brand. If you persist along this line of work, you will confidence in yourself. This is particularly useful if you intend on getting into entrepreneurship somewhere down your career. Building a business requires a lot of self initiative and self belief and doing this line of work will help you build that sort of muscle.
With that being said, it can be rough. Most people need to be convincing before they start believing in what you say. Be ready to get rejected and misunderstood. Be ready to negotiate because your clients will have unrealistic expectations. To be successful here, you have to learn how to ask the client what they want and learn how to pitch your idea to the prospect. Even if you get rejected, just relax. Always know that there are more opportunities out there and learn from your mistakes so you can do it again.
7. Get a Mentor
This is probably the safest way to learn, especially if you are under a time constraint. If you pick the right mentor, this person can help you grow by aligning on the right path. If you stray from the path they can quickly detect this and help you re-align. Not ‘straying from the path’ is a bad thing — just that they know it is not necessarily the result that you want in the given time.
A good mentor is one who has been in your footsteps before and they can see what is needed to get you to the next level in your learning. Even better, if your mentor understands you and knows what you’re good at and what your preferences are, they can devise drills and activities, suggest articles and books to read, or probe your curiosity to motivate your learning. Through a guidance of a mentor, you won’t have to set aside as much time to figure out what to learn. Additionally, if your mentor really knows you, they can give you ideas and ask you to produce projects that exercise your imagination and problem-solving skills.
The down side of having a mentor is you will be regimented. When this is taken too far, you will not have the opportunity to experience newer ideas that differ from the perspective you were given. There is actually a usefulness to feeling lost and ‘staying from the path’. It is useful to get a mentor for a specific topic for a specific time.
8. Creative Projects
This is my favorite way to learn, it is also the most time consuming of the ones on this list, but it is also the most gratifying. I personally believe that the most effective way to learn is to go into it and do it. For every little syntax and concept that you learn, find out creative ways to apply it. Apply it as many ways as you can. This will drive your curiosity through the roof! In doing so, you will want to learn how to do other things and that will naturally lead you to want to learn those things and so on.
For instance, say that you’re new to programming and you learn to print. What I would do is to print what is stated in the example first. Then I would delete a word, then add one. Then add another line. Then add 10 lines then 100 lines. Then I would try to print my personal information, like my name, age, email, and phone number. Then I would want to learn how to print text in a different color. Eventually, this would lead me to some other topic like how do I get an input from the user? When I learn that, I would repeat the process. Eventually, I would want to learn if statements. And then the process starts all over, except now I have more things that I can mix and match together to produce something new. Each time I apply something, I usually start from a brand new project.
Once I can start creating enough application features, I like to go back and read about them from textbooks or from open source to see how other people have done them. Because I have an intuitive understanding of the language features and the concepts, I can quickly understand and digest what is going on. As a matter of fact, at times, I could marry my ideas with the ideas of the person I’m reading from. Most of the times, I’m just surprised that I can understand what they are doing — that in itself, being able to recognize the that I learned patterns, shows that I understand what I’ve learned and improves my coding skills.
Why is this so interesting? Programming requires creativity. You have a problem and you have a language that can solve it. However, you have to arrange your problem in away that will meet some kind of criteria or some set of parameters. Many programmers starting struggle with the ability to articulate code. But exercising creativity actually requires us to turn off parts of our brain that does logic. This is a bit paradoxical, but coding utilizes memory, logic, and creativity in a series. By doing creative projects you are exercising this muscle.
You will not always have your creative juices running. Your creativity is a scarce resource and it will drop if you are under stress, if you are angry, if you did not rest enough, or if you are too busy. Creativity is hard to attain sometimes. Pursuing creative projects can also produce things that are not always useful. Also you may develop bad habits if you do not explore what others also do.
Many of the most effective tools were built this way. These are the passion projects.
— — — — — — —
Facebook Page: https://fb.com/intully
Facebook Community: https://fb.com/groups