Coding-specific Learning Tips

There is arguably a difference between learning to code and learning another subject like chemistry, zoology, or business economics. In this section, we take a look at some learning tips specific to learning coding, drawing on the best practices acknowledged by professionals in the industry.

A building site showing foundations.

Build Strong Foundations

So much of coding requires mastery of the core concepts. If you do not ensure your fundamentals are strong, this will trip you up over and over further down the line. Fundamentals include data structures, variables, control structures, syntax, tools, and text editors. If you’ve practiced all the concept in a lesson, but and feel your fundamentals are still shaky, look online for coding exercises and challenges to strengthen those specific areas. For example, if you Google “programming exercises to strengthen data structures python”, you get useful hits like Python data structure exercises for beginners, and Python data structures and algorithms exercises.

Abstract representation of a network with many nodes and edges.

Join Coding Communities

Network, network, network. Joining a coding community helps you to find like-minded people at all levels of expertise. Those who are more experienced can provide the valuable perspective of having been where you are now. Those who are also beginners may provide the opportunity to learn by helping others. Coding communities can facilitate peer-programming, share knowledge, teach tips and tricks, share useful resources like research papers, great videos, and upcoming talks, organise coding events and meetups, and provide the opportunity to both teach and learn from others. There are many online communities, some of which are location-specific (for example if you live in London or Cape Town and specifically want to take part in face to face meetups, you might Google for coding communities in these specific locations). Some examples of online coding communities to get you started are Hashnode, Freecodecamp, and StackOverflow

A man taking notes in a notebook.

Research Effectively

Learn how to research effectively, and use the results to learn without resorting to plagiarism. Start off by taking a few minutes to watch this YouTube video on "How programmers effectively search for answers on the Internet". Once you have done that and have some idea how to start, consider what to do once you’ve found resources relevant to the coding problem you are trying to solve. Never just copy and paste a solution you have found: firstly, this is plagiarism and could get you disenrolled from your bootcamp, and secondly because your goal should be to gain skills, which happens as a side effect of solving problems yourself. You will learn nothing by pasting an answer you sourced online, and when you come to having to perform in a technical interview, or in the workplace, you will fall short.

Imagine you’re looking for a way to approach solving a word search game. This is not an uncommon programming exercise, and so you’re likely to find a few solutions online. Carefully read through the code for each one. Paste each into your own development environment and try running it. Tweak the code to see what effect variations have. Try adding your own comments as you work through the solution. When you’ve done this with one example solution found online, remove it entirely and go through the same process with the next. Once you’ve done this for 3 or 4 solutions, you should be starting to 1) notice common elements, and 2) notice and understand different approaches to the solution. At this point, close every tab or development environment window containing any of the sourced solutions. Without looking at what you found in your research process, sketch out the pseudo-code for how you intend to create your own individual solution. Once this is complete, set about coding your solution as usual. Avoid referring back to the solutions you found online because you will inevitably just reproduce them. Instead, use the usual process of debugging, asking a mentor for help, asking a peer for input, or asking questions in an online coding community specific to the aspect of your program you’re stuck on. If you’re doing this properly, your research will help you understand the problem and give you ideas for how to approach solving it, but the final solution will be uniquely yours, and you will have succeeded in building the intended skills along the way. Undeniably, solving the problem yourself is harder and slower than copying and pasting a solution you found online. This is the hard truth of learning a skill that is highly sought after and well paid, like programming — it takes time and effort. If it didn’t, there would be no shortage of programmers and the skill would not be as sought after or well-compensated as it is. 

A hand reaching into a toolbox to extract a tool.

Use your Toolbox

In your HyperionDev coding bootcamp, the coding tasks and projects are set such that you can solve them using only what you’ve learned so far - your toolbox of skills you’ve gained from each challenge you’ve already completed. If something you haven’t covered yet is necessary, the task will provide a keyword to research, an additional resource in your Dropbox, or a link to an online resource to go and read up on. Why is this important? Well, often when students don’t know how to address a problem they Google to find an approach to solving it. There might be many ways to solve the problem; some might use a combination of certain fundamental building blocks only, and some might use more advanced concepts, libraries, and data structures. Don’t fall into the trap of seeing an approach to a solution using more advanced concepts and thinking the problem is impossible to solve using only the fundamental building blocks you know and the hints or resources provided. If you can’t see a way to solve the problem using what you’ve covered so far and any suggested additional concepts, you need to persevere! If necessary, engage with a coding community, chat to a peer, or book a 1:1 mentor session to get you unstuck. Never resort to just branding the task “impossible’, and never copy and paste a more advanced solution you’ve found online (this is plagiarism, and is also not going to contribute to growing your skills as a coder)! The goal of the coding exercise is not to provide a solution — we already know what the solution is — it is to wrestle with the problem and in so doing to build the skills that result from solving the problem yourself. 

A yellow rubber duck.

Teach to Learn

In order to assist or teach a peer or a friend how to code, you have to get the concepts really clear in your mind, be able to articulate them, and relate theory to practise. This is an incredibly useful learning tool. It’s so useful in fact that something called “rubber duck debugging” is a common technique used by professional coders. The name comes from a story in the book The Pragmatic Programmer in which "a programmer would carry around a rubber duck and debug their code by forcing themselves to explain it, line by line, to the duck” (Hunt and Thomas, 1999).

Why does this work? After all, the duck can’t understand you, or ask questions! The value lies in the fact that in order to explain your code, you need to be able to mentally frame what you’re doing clearly. The exercise of articulating what you’re doing and why in natural spoken language forces you to gain clarity, and often helps you to see where your intentions and what your code is actually doing diverge. If you find you can’t explain a section of your code, that’s a good indication that you don’t really know what you’re doing there, and need to work that out before you can effectively debug your program as a whole.  

A milestone in the countryside.

Engage Actively and Go the Extra Mile

In learning a practical skill like coding, you have to be active rather than passive. You cannot become a good programmer just by reading (although a lot of reading is necessary!). You have to try things out, tinker, and write and run code snippets. You can paste examples from your course into your IDE and run them, change parameters and see what happens, try building up more complex programs from simple examples. Play with the code, try to optimise the code, attempt different approaches to coding solutions for the same problems, and so on. This facilitates creating depth of understanding. If you do the bare minimum and only code answers to mandatory tasks in your course, you will achieve a certain breadth of understanding, but not the depth needed to be a really excellent programmer or stand out amongst your peers. To this end, consider incorporating playing coding related games, doing coding challenges, and building your own projects into your daily life (although this may need to be after you complete your course, depending on the time you have available). What you put in determines what you get out, and the truth is that there is no shortcut to coding mastery. 

A photograph of the legs of a number of people running a marathon.

It's a Marathon, Not a Sprint

Mastering coding is going to take some time. Don’t expect to get there overnight, or in a month, or even in a few months. You will graduate from your bootcamp with some great foundational knowledge and a variety of portfolio projects, and that is a wonderful start, but there is always more to learn, and the more you know, the more this becomes clear! Perseverance and grit are your watch words. Remember the children’s tale of the hare and the tortoise: slow and steady wins the race. The only thing that guarantees mastery is to keep practising, every day. 

An open, ring-bound notebook with a yellow pencil and a crumpled ball of paper on top of it.

Code on Paper

Firstly, we can’t over-emphasise the value of planning a solution in pseudo-code before you start coding. It is very common for eager students to ignore this advice, as they want to leap into actually writing the code, and the pseudo-code planning stage seems boring, a waste of time they could spend actually coding. The price to be paid for this is confusion! The more complex the problem you’re trying to code a solution for, the greater the risk of becoming mired in the details. Without a planned pseudo-code solution, it can be difficult to “zoom out” of the minutiae of your code to see the bigger picture that is required to address the problem. Even if you don’t use pseudo-code, however, try coding on paper. This will force you to be more careful and intentional about the coding process as you’ll have to check your logic by hand - you can’t just keep running the code to check whether you’ve made a mistake yet. Coding by hand is more difficult - it has a higher cognitive load - but because of this, it can facilitate deeper learning. The last reason for coding by hand is that many interview evaluations for coding jobs require you to do this. If you’re entirely reliant on your IDE to remember syntax or pick up errors, you are likely to do badly in this sort of interview. Practice is vital to achieving proficiency and gaining the confidence to ace paper-based assessments.

A set of bronze scales for comparing the weights of objects.

Don't Compare Yourself to Others

Different people find different things easy. Also, some people have stronger skills in logic or problem solving, and some have previous experience coding. The zen of coding lies in how every programmer's journey to coding proficiency is different. Yours will frustrate and reward you, push your boundaries, and force you to grow as a person, emotionally as well as cognitively. The only thing that will really determine your success is yourself, your own motivation and perseverance.

Thumbs up and thumbs down.

Embrace Failure

This is the last specific tip for learning to code, and it is the one most people find hardest to accept or implement. Coding is different to a lot of other professions in that failure is part and parcel of the everyday job of a developer. The more complex a project is, the harder it is to get the code right, and the more time you will spend debugging and problem-solving. This is particularly frustrating to beginners, but even seasoned senior developers experience it. To succeed as a coder, you need to be able to recognise that failure is necessary, not just when learning to code as a beginner, but also when learning on the job, and building experience in a tech role. As one seasoned developer and open-source guru puts it:   "As long as you can be not frustrated by how long it is taking you to finish a project, the harder the project is, the more you have to learn. What’s more, it feels really good once you’ve accomplished your project. For example, when I took over a Ruby [on Rails] project called Shoes, it took me six months to even figure out how to compile it. I was pretty much banging my head on the wall day after day for months, but when I finally fixed the project, it was the best feeling I ever had" (Klabnick, 2014).

Make failure one tool in your toolkit for learning to code, and strengthen the soft skills needed to manage frustration. With determination and perseverance, nothing can stop you. 

Pause and Reflect

Let's work on your metacognition again! Do any of these tips seem more difficult to you than the rest? If so, why is that? If not, why? Can your answers to these questions give you any insight into how you think or work as a person? Jot down your thoughts.

Use the remaining time before your coding course begins to select and join some coding communities and familiarise yourself with hope to search these for useful information, and how to post your own questions.

In Conclusion

By this point you have, hopefully, learned quite a lot about how your own brain works and how best to approach a self-directed online learning course. Use what you know to help you as you progress through your course. Good luck!

References

Barile, N. (n.d.) Exercise and the Brain: How Fitness Impacts Learning. https://www.wgu.edu/heyteach/article/exercise-and-brain-how-fitness-impacts-learning1801.html

Center for Disease Control and Prevention. (2021) Insulin resistance and diabetes. Center for Disease Control and Prevention.
https://www.cdc.gov/diabetes/basics/insulin-resistance.html

Coyle, D. (2009). The talent code: Greatness isn't born, it's grown. New York: Bantam Dell.

Cover, S. (1989). The 7 Habits of Highly Effective People. New York: Simon and Schuster.

Csikszentmihalyi, M. (1990). Flow: The Psychology of Optimal Experience. Harper & Row.

Zijlstra, D. (2023). Is There an optimal Spacing Formula for Spaced Repetition? Debunking Common Myths. https://traverse.link/spaced-repetition/the-optimal-spaced-repetition-schedule#481ba3695c7242f08fbc091ffb6d9a17

Doidge, N. (2007). The Brain That Changes Itself: Stories of Personal Triumph from the Frontiers of Brain Science. James H. Silberman Books.

Drew, C. (2023). What Is Constructivism In Education? Piaget’s Pros & Cons. https://helpfulprofessor.com/constructivism/

Ericsson, N. & Pool, R. (2016). Peak: How all of us can achieve extraordinary things. London: Penguin Random House.

Galinsky, Ellen. (2010). Mind in the making. New York: Harper.

Gladwell, M. (2008). Outliers: The story of success. London: Hachette UK.

Glerum, J., Loyens, S., Wijnia, L., & Rikers, R. (2020) The effects of praise for effort versus praise for intelligence on vocational education students, Educational Psychology, 40:10, 1270-1286. https://doi.org/10.1080/01443410.2019.1625306

Gómez-Pinilla, F. (2008) Brain foods: the effects of nutrients on brain function. Nat Rev Neurosci. 2008 Jul;9(7):568-78.

Halse, M. (2018). Learning and Neuroplasticity. https://illumined.co.za/learning-and-neuroplasticity-HTML/content/index.html#/

Halson, S. (2020). Overtraining syndrome in athletes. In F. G. O’Connor (Ed.).
https://www.uptodate.com/contents/overtraining-syndrome-in-athletes

Harvard Medical School. (2007). Healthy Sleep: Sleep, Learning, & Memory. Harvard Medical School. https://healthysleep.med.harvard.edu/healthy/matters/benefits-of-sleep/learning-memory

Howard, J. (1994). The Owner's Manual for the Brain: Everyday Applications From Mind-Brain Research. ISBN 0-9636389-1-2.

Hunt, A., and Thomas, D. (1999). The Pragmatic Programmer: From Journeyman to Master. Addison Wesley. ISBN 978-0201616224. p. 95, footnote.

Jessop, D.S. (2019) The power of positive stress and a research roadmap, Stress, 22:5, 521-523. https://www.tandfonline.com/doi/full/10.1080/10253890.2019.1593365

Kaufer, D. in Sanders, R. (2013). Researchers find out why some stress is good for you. Berkeley News. https://news.berkeley.edu/2013/04/16/researchers-find-out-why-some-stress-is-good-for-you/

Klabnik, S. (2014). Steve Klabnik’s 9 Tips for Programming Beginners. https://www.codementor.io/learn-programming/steve-klabniks-9-words-advice-programming-beginners

LearningLabAdmin. (2022) Why You Should Embrace Praising Effort Over Performance. Learning Lab. https://learninglabfl.com/why-you-should-embrace-praising-effort-over-performance/

Mcleod, S. (2023). Jean Piaget’s Stages Of Cognitive Development & Theory. Simply Psychology. https://www.simplypsychology.org/piaget.html

Meeusen, R. Exercise, Nutrition and the Brain. (2014) Sports Med 44 (Suppl 1), 47–56. https://doi.org/10.1007/s40279-014-0150-5

National Heart, Lung, and Blood Institute. (n.d.). How sleep works. https://www.nhlbi.nih.gov/health-topics/how-sleep-works

Puderbaugh, M. and Emmady, P. D. (2022). Neuroplasticity. In StatPearls. StatPearls Publishing. https://www.ncbi.nlm.nih.gov/books/NBK557811/

Salve J, Pate S, Debnath K, Langade D. Adaptogenic and Anxiolytic Effects of Ashwagandha Root Extract in Healthy Adults: A Double-blind, Randomized, Placebo-controlled Clinical Study. Cureus. 2019 Dec 25;11(12):e6466. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6979308/

Schneiderman N, Ironson G, Siegel SD. Stress and health: psychological, behavioral, and biological determinants. Annu Rev Clin Psychol. 2005;1:607-28. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2568977/

Selhub, E. (2022). Nutritional psychiatry: Your brain on food. Harvard Medical School. https://www.health.harvard.edu/blog/nutritional-psychiatry-your-brain-on-food-201511168626

Seligman, M. E. P. (1998). Learned optimism. New York: Pocket Books.

Sleep Foundation (2022). Eight Benefits of Sleep. https://www.sleepfoundation.org/how-sleep-works/benefits-of-sleep#references-82908

Team Asana. (2022) The Eisenhower Matrix: How to prioritize your to-do list. https://asana.com/resources/eisenhower-matrix

Todist. (n.d.) Productivity Methods. https://todoist.com/productivity-methods

Yaribeygi H, Panahi Y, Sahraei H, Johnston TP, Sahebkar A. The impact of stress on body function: A review. EXCLI J. 2017 Jul 21;16:1057-1072. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5579396/ 

© Copyright 2023 HyperionDev - All Rights Reserved