In this day and age, many people want to learn how to code without knowing where to start. People often find the syntax of programming languages to be intimidating; meanwhile, others want to jump straight to building complex apps and websites without understanding basic programming concepts first. While it’s certainly a viable and common path to focus on a specific subset of coding (such as HTML/CSS or data visualization), like for those who just need to know a little bit of coding for their jobs or people who just want to have fun building simple static websites, this blog post will focus on how to learn the fundamentals of programming for those who want to pursue computer science further, such as in college or as a career path.
First, let’s start with the obvious/common way to learn CS: taking a programming class. Many colleges offer an Intro to Programming/CS class, and some high schools offer AP Computer Science or AP Computer Science Principles. If you take a programming class and have a decent teacher, chances are, you’ll learn the fundamentals pretty well as long as you pay attention, do the assigned homework or practice problems, and don’t cheat. Especially with the rising popularity of CS and the prevalence of code on the Internet, it’s not uncommon to see people cheating in their classes, but it goes without saying that you’re setting yourself up for failure if you take this route.
Of course, not everyone has the opportunity or is willing to take a programming class in person. An alternative to this is to take an online course. There are a plethora of programming courses offered by Coursera, edX, Codecademy, Udemy, and other MOOCs (massive open online course), which may be enough for your needs. I personally have not looked into any of the intro programming classes on these websites, so I can’t say much with authority. However, given that an online setting is often less interactive than an actual classroom, my general advice would be to supplement these courses with projects or learning on your own if you feel the material isn’t sinking in. Thus, you have a combination of passive and active learning.
Learning by doing
A third option is to learn by doing. It’s very common to learn new languages or technologies by simply building a project and picking up the syntax along the way. Learning the fundamentals this way can give you a better idea of what programming is often like; however, it’s also easy to create holes in your knowledge this way. For example, jumping into a large project without knowing of basic concepts like inheritance, polymorphism, or encapsulation (most of which are covered in intro classes) can lead to a messy codebase and the creation of bad coding habits. Instead, if you take this approach, I’d recommend at least having a book or curriculum of some sort and integrating all the concepts into your projects in some way or another, ensuring that you’re learning the right things.
Learning by doing doesn’t always have to be building big projects though; it can also be solving practice problems. In my opinion, everyone should take a look at sites like Practice-It or Project Euler. Practice-It contains over a thousand practice problems grouped by topic and is a great way to practice and reinforce your CS knowledge. In fact, it was the primary resource I used to learn data structures, which goes to show much I recommend it. Project Euler is similar in that it contains hundreds of problems, but different because it focuses on algorithmic problems. Learning how to logically approach these challenges builds problem solving skills and a stronger mindset, as well as helps prepare you for coding interviews. Of course, these are just two of many sites, the others of which you can easily explore as you begin to learn coding.
All in all, there are many paths to approach computer science, largely due to the field’s surge in popularity. People learn in different ways, so all I can do is share various approaches and resources that I stumbled upon when I began coding (which was not too long ago). Of course, if you need additional guidance or have any questions, please feel free to reach out and I’d be glad to help!