5 Great Strategies for Learning to Code
Tags: motivation, career, writing, beginners
Published: 2019-08-23 16:03:30

As a teacher, I get a lot of questions from students on how to learn more about programming outside of class, and until now I haven’t had a really good answer. At long last, I’ve collected my thoughts and put together this list of strategies for learning to code.

## Motivation

Right now, I’m preparing to teach a software course where the primary programming language is Java. Of course, not all of the students coming into the course know Java. As a result, they’ll have to get up to speed rather quickly. Naturally, this article is for them.

In addition, I’ve had several students email me in the past asking for coding resources. These are students who aren’t necessarily going to go into Computer Science, but they still want to learn some code for their field (Math, Finance, Business, etc.). As a result, this article is also for them.

Finally, I’m sure there plenty of people out there who are just looking for more support as they learn to code. If that’s you, this article is also for you.

## The List

Without further ado, here’s my list!

### #1: Join Coding Communities

I’ll come right out of the gate and say it: no article is ever going to give you an up to date list of the best resources for learning to code. As a result, I always tell people to **get involved in coding communities**.

Personally, I’m partial to Twitter (where I follow the [#CodeNewbie](https://twitter.com/search?q=%23codenewbie&src=typeahead_click) and [#100DaysOfCode](https://twitter.com/search?q=%23100DaysOfCode&src=typeahead_click) hashtags) and [Dev.to](https://dev.to/), but there are literally hundreds out there. For instance, I’m familiar with [Medium](https://medium.com/) as a popular blogging platform among developers as well as [FreeCodeCamp](https://www.freecodecamp.org/) which now has its own blogging community.

Once you find a few communities you like, I recommend building up a list of your favorite contributors. That way, you can point others to awesome content. If you’re lucky, your favorite contributors will start building a nice following which means more awesome content for you. It’s a wonderful feedback loop!

To be honest, I’ve been really bad about this because I tend to focus mostly on creation rather than consumption, so feel free to recommend your favorite contributors in the comments.

### #2: Complete Coding Challenges

In the wonderful age of the internet, there are now a ton of websites which offer gamified education through coding challenges. In general, these sort of platforms provide a series of problems in increasing difficulty which can be solved for some form of internet points (aka bragging rights). In some cases, these internet points can help you score a job which is a nice bonus.

While I’m not big into the coding challenge craze, I have toyed around on a few sites for my own enjoyment. For instance, I’m quite fond of [HackerRank](https://www.hackerrank.com/) which is one of those sites where you can tackle some practice problems while gaining exposure to potential employers. As far as I can tell, they offer problem sets for a variety of languages including C, C++, Java, Python, and Ruby.

If you’re more interested in web development, I recommend [FreeCodeCamp](https://www.freecodecamp.org/) (again). Personally, I used the website to try to brush up on some JavaScript, so I could learn a few useful libraries like WebGL for 3D graphics and D3 for data visualization.

In addition, I’m familiar with at least one niche coding challenge site called [CodingBat](https://codingbat.com/java) for people learning Java or Python. If you’re just looking for code practice, CodingBat is the way to go. There’s no signup or internet points to worry about.

Beyond that, a quick Google search yields a few additional resources like:

- [CodeWars](https://www.codewars.com/): Achieve Mastery Through Challenge
- [Exercism](https://exercism.io/): Code practice and mentorship for everyone
- [HackerEarth](https://www.hackerearth.com/practice/): Programming Tutorials and Practice Problems
- [Coderbyte](https://coderbyte.com/): Improve your coding skills

As always, if you know of any coding challenge websites that you think others could benefit from, share them in the comments.

### #3: Use Q&A Forums

Sometimes when you’re learning to code, you just want your questions answered. In other words, you don’t want to have to sift through blogs or documentation to get a recommendation on how to solve a problem. Thankfully, there a lot of resources for people who just want answers to their questions.

Perhaps the most infamous coding Q&A website on the internet is [StackOverflow](https://stackoverflow.com/). In general, it’s a forum-like website where you can ask questions and get answers from people in the community. If you’ve ever Googled a coding question, you’ve probably found yourself there.

Of course, there are other Q&A platforms on the internet including [Quora](https://www.quora.com/) which is a bit less coding oriented. That said, I think the platform excels in areas that StackOverflow doesn’t like coding philosophy questions (i.e. [What are the best programming practices and coding standards independent of programming languages?](https://www.quora.com/What-are-the-best-programming-practices-and-coding-standards-independent-of-programming-languages)).

In addition, there’s always [Reddit](https://www.reddit.com/). Unfortunately, I haven’t personally tried to use that platform as it’s also a bit infamous. It’s really too bad there isn’t a benevolent Q&A platform as far as I know, but I think you can still get some value out of these services regardless.

### #4: Explore Open-Source Projects

One thing that I think a lot of new learners overlook is the value of open-source code. In particular, I mean having access to a near limitless amount of production quality code in the wild.

Of course, there’s always a bit of a barrier to open-source code as many platforms require some knowledge of version control. Fortunately, you don’t need to know version control to be able to browse code. Seriously!

Right now, [you can go on GitHub and explore the most popular repositories by topic](https://github.com/topics). In other words, if you’re interested in Python, you can find a list of active projects written in the language like [Flask](https://github.com/pallets/flask) or [Django](https://github.com/django/django). As a consequence, you’ll be able to explore real code and get a feel for how real projects are written and managed. If you want, you could even fork your own version and make some changes.

While I was writing this article, I noticed that GitHub already has a [“Learn to Code” collection](https://github.com/collections/learn-to-code) which is loaded with awesome resources like this [Project Based Learning collection](https://github.com/tuvtran/project-based-learning) and this [Python Programming Challenges collection](https://github.com/zhiwehu/Python-programming-exercises).

Naturally, GitHub isn’t the only open-source hub on the internet. You may also get some value out of [BitBucket](https://bitbucket.org/) and [GitLab](https://about.gitlab.com/). Of the two, I’ve only used BitBucket which used to be the only place to get free private repositories. That said, GitLab has been gaining a lot of traction since Microsoft took over GitHub, so it may be worth checking out.

### #5: Never Give Up

Perhaps the best tip I can give to learners is to stick it out. Unfortunately, learning to code is hard because a lot of people have purposely made it that way. In essence, I’m talking about gatekeeping.

For whatever reason, there’s a very vocal minority in the tech community that wants to decide who can and can’t be in the community based on arbitrary criteria. For instance, you might be compelled to quit after someone claims you aren’t a real coder because [you use HTML and CSS](https://therenegadecoder.com/code/what-is-a-programming-language/).

Even as an instructor, I catch nasty comments from elitists every now and then. In fact, I’ve even made an entire [Wall of Shame](https://therenegadecoder.com/about/wall-of-shame/) for some of the comments I’ve gotten. Of course, I wouldn’t recommend you do the same as it’s a lousy coping mechanism. That said, I do think it’s helpful to see examples of the types of things people say to each other under the guise of internet anonymity. In other words, [empathy is lacking in the community](https://medium.com/compassionate-coding/what-does-compassion-have-to-do-with-coding-f65b6922a6ff).

All-in-all, as long as you continue to focus on your growth, you’ll learn what you need to learn. And if not, hopefully you can find a community of people to support you. As always, I’m open to mentoring anyone who needs a hand. Just give the word!

## Best of Luck

And with that, all I have to say is **best of luck**!

Once again, this is the part of the article where I shamelessly plug [my membership site](https://www.patreon.com/TheRenegadeCoder). If you’re into that sort of thing and can toss a couple bucks my way, I’d appreciate it! Alternatively, I’d love it if you [hopped on my mailing list](https://newsletter.therenegadecoder.com/). That way, we can stay in touch.

In the meantime, I have plenty more content where this came from. To be honest, I don’t do a lot of list pieces like this or general opinion pieces for that matter. That said, I love to talk about code, so maybe these beginner-oriented articles might interest you:

- [Introduction to Coding in Java](https://therenegadecoder.com/code/introduction-to-coding-in-java/)
- [Why I Urge My Students to Use DrJava](https://therenegadecoder.com/teach/why-i-urge-my-students-to-use-drjava/)
- [Java Number Exploration Lab](https://therenegadecoder.com/teach/java-number-exploration-lab/)

Well, that’s all I got for now. Thanks again for your support, and I hope to see you around.

The post [5 Great Strategies for Learning to Code](https://therenegadecoder.com/blog/5-strategies-for-learning-to-code/) appeared first on [The Renegade Coder](https://therenegadecoder.com).