Free In-depth Resources For The Intermediate Programmer

There's a million online tutorials and websites aimed at beginner programmers. But once you get beyond the basics, finding quality, free resources becomes much more difficult. One reason is that a lot of the basic programming tutorials are written by programmers who have only a year or two of experience. This is also why so many online tutorials are poorly written.

Once you have an understanding of strings, arrays, loops, etc. many of these tutorials are no longer helpful. The next step is to go off and code your own programs. This is great, but if you are a novice programmer, it can become easy to fall into bad habits. To avoid bad habits, you need to go back and find intermediate level coding resources. These resources offer much more in-depth practice and advice.

I am a self-taught developer who works are a FAANG (Facebook, Amazon, Apple, Netflix, Google) company. I The path that got me to my job began with simple programming tutorials. Things that explained what a loop was, and instructions on how to code a simple tic tac toe game. From there I began to build my own websites and apps. This was great, but looking back now, I know how awful my code actually was. It all worked fine, but I was making a lot of mistakes that a professional should never make. At that point I feel like I hit a plateau. I was writing code and making things, but I wasn't producing quality code. I could have went on doing this for the rest of my life. But eventually I went back to doing online tutorials and taking advantage of free online resources. It quickly became apparent that while my code worked, it had a lot of issues. I then took a break from working on projects, and again took the time to work on my coding skills. That really elevated my skill level and got me to where I am today.

Practicing coding using even one of these resources can make a world of difference in your skill level. Here is a list of the best intermediate free coding resources and tutorials.

Codewars

Codewars is an online community where users solve coding challenges. These coding challenges can be found all over the web and are not unique. What makes Codewars an amazing resource is that after you finish a challenge (or give up on that challenge) you get to see the code that all the other members of the site wrote.

These solutions to the problems are then voted upon by the community for the best solution, most creative solution, etc.

Seeing how other people tackled a problem is one of the best ways to improve your own coding skills. I learned a ton of ways in which to make my code more efficient or more readable just by seeing the solutions others came up with.

Along the way, I also began to understand why certain solutions were poorly written. Recognizing bad code and understanding why that code is bad is almost as important as being able to write good code.

Codewars allows users to talk to one another and ask questions about their solutions. If you are someone who does a lot of solo coding, this is invaluable.

MOOC.fi Java Courses

University of Helsinki's Department of Computer Science created a few free online courses. This is not that unique. A ton of other schools have done the same. What makes MOOC.fi stand out is that their Java courses are not based around watching videos. It's all text bases, with an IDE plugin that allows you to be graded on problems created for the course.

The above description does not do the course justice. This is by far the best online coding course I have ever seen. You learn at your own pace, mostly by solving coding problems. The problems are prefaced by an explanation of some property of Java.

The courses can be taken by a beginner, and are intended for beginners, but anyone who is unfamiliar with Java would benefit from taking this course.

When I took this course I was an experienced developer, but one who did not have experience with Java. Much of what I coded for the course was simple, but doing it in a new language was great practice.

Along with learning Java syntax, I came away from this course having a much deeper appreciation for object oriented programming. Java is a language that relies heavily on object oriented programing. If you come from a language like JavaScript or Python that does not necessarily rely on object oriented programming, taking this course will give you great insight into thinking about problems a different way.

Gophercises

A few years ago I got a job which required the use of Golang. This language was totally new to me. I was able to get up and running in Go pretty quickly using two great resources. The first was The Go Programming Language, a great book that really explains a ton about Go. The other was building mini-projects on the Gophercises website.

The coding exercises are cool because they are chosen to show off specific strengths and features of the Go programming language. Once you complete an exercise you can watch a video walkthrough of the author completing the exercise. As with Codewars, seeing someone else solve a problem, and talk through his thought process is super helpful in understanding how to code better.

I've come to really appreciate Golang and really enjoy working in it.

Leetcode

You've probably heard of Leetcode. It's a website that has coding challenges that are super common in interview questions, especially at FAANG companies. A lot of people "grind" leetcode before an interview by solving as many of these problems as they can.

Preparing for an interview is not the same thing as learning how to code, or learning how to code better.

While leetcode is usually thought of an interview preparation, it is actually good for improving your own code. Like Codewars, you can see sample solutions to every coding problem on the site. The cool thing about leetcode is that these solutions are ordered in terms of their speed.

A junior software developer can solve problems. An intermediate software developer can solve those problems efficiently. By practicing leetcode problems and then looking at the most efficient solutions, you will learn to make your own code faster and more efficient. Choosing the correct algorithm takes skill, and leetcode is a great place to practice that skill.

Comminalities

Ok, those are the resources that helped me advance my coding skills the most. The common themes are:

1) Reading and trying to understand and emulate good code.

2) Active learning. Solving a problem is going to teach you more than watching a video of someone else solving a problem. However, after you have solved that problem, then see how someone more experienced solved the same problem.

3) Practicing writing good code. Make sure your code is good by comparing it to others or being guided by a course like MOOC.fi

4) Thinking about efficiency and code structure. Gophercises and and MOOC.fi help show you how to structure your code well. Codewars and leetcode focus on writing efficient algorithms and solutions.