In many ways, coding has never been easier. Between Google, StackOverflow, and all the open source projects on GitHub, just about any question you have can be answered. That said, it can feel overwhelming to try and find a place to get started. Below are 8 of my favorite resources whether you’re just starting out or honing your skills.
Codecademy is a great starting place for new programmers who want to learn some of the essential skills to create programs of any type, but especially web applications (a website with a database and user interaction, for example). The site has a user-friendly platform that will take you step by step through learning the basics of a language or other skill, and build on itself as you go deeper into the lessons. A nice feature for beginners is that all the work is done right on the site, so no need to worry about setting up an environment on your computer, which is potentially an annoying bottleneck at first. Although there are some very specific web-oriented courses which are great to learn if you know what you’d like to do specifically outside of the course (e.g. AngularJS), there are a bunch of universally applicable courses necessary for pretty much all programming (e.g. git, command line, SQL), and then for essentially all web development generically (e.g. HTML & CSS, jQuery). I have personally found that after doing a lot of programming otherwise, certain lessons can be a bit tedious in their scope, but that’s certainly not a bad feature when you’re starting out.
Udacity will give students a series of videos interspersed with short questions and some larger projects to practice new concepts. The site uses a concept of ‘Nanodegrees,’ wherein they define several topics of study and for each, give a set of courses you can complete (and for a price, earn a Nanodegree!). For example, you can go through a set of courses and projects to learn about Machine Learning. All of the content is also available for free — the caveat is that you lose out on personal mentoring, code review, the degree, etc., but if you’re interested in going through the videos and are comfortable with the code you’re writing, perhaps free is a good way to start. A nice feature is that topics are broad, from Machine Learning to Front-End Web Developer, Mobile, and more. My initial impression from working through some of their introductory machine learning course is that the videos are nice to get an overview of topics, but I have yet to find out if I’ll be able to achieve any depth. Likely in the later courses students will work on the gritty details to some extent. If you apply for the Georgia Tech Online Masters for Computer Science, your classes will be taught on the Udacity platform. They can even help you find a job based on a profile you create on their website. Companies like Google, Facebook, Amazon, and more have all helped to build classes so they’re surely watching the talent that goes on there. In any case, though, if you’re looking for good overview material, Udacity is worth a try.
So far I’m a big fan of Coursera, which offers college-level video lectures mixed with individual assignments. Similar to Udacity, there is a paid option but I’ve started with the free version, where you can still go through all of the lectures and assignments. Content is revealed week by week as you go through a course, and with each week comes video lectures, written summaries, and practice work, the combination of which is extremely useful. There is content for all levels of programmers, from an intro course on Python from University of Michigan to a popular Machine Learning Course from Stanford. I’m excited about taking advantage of Coursera as a place to learn about new fields of CS and Math that I didn’t have time for back in school, which I personally think is the best use case for the site. For those of you worried about having forgotten some prerequisite knowledge, know that many courses start with nice reviews (for example, it had been a few years since I did any linear algebra, but the Stanford ML course starts with a basic review of what you’ll need to know). I also find it interesting that you can look through the contents of very similar courses, but from different institutions, so if you aren’t happy with ML from Stanford, maybe another set of ML lectures will be more useful to you.
4, 5. Open Learning Initiative, MIT Open Courseware
Open Learning Initiative (OLI) and MIT Open Courseware are similar to Coursera in that they provide free, in-depth college video/written lectures. A couple schools that participate in the OLI program are CMU and Stanford — both have a few options for programming courses, but perhaps more options for probability, statistics, and other similar courses, which can server as important foundations for many CS-specific courses. MIT Open Courseware has a ton of options, so be sure to take a look. If you look at the math or engineering topics, for example, you’ll see a long list of both undergraduate and graduate level courses. My impression is that going through any of these courses won’t be quite as structured as those on Coursera, so it all depends on your preferences (personally, I like Coursera’s structure because I presume that someone did a good job at planning how much I should fit in a week). The push towards open courseware from some of the biggest engineering schools opens up a lot of doors once you have a solid basis in some of the core programming skills.
6. Cracking the Coding Interview
Cracking the Coding Interview is a very practical book if you’re looking for a job in programming. The book has 189 interview-style questions to help you get ready for the big day, and from what I hear these questions are often very good preparation, since most are based around universal data structures and algorithms. The questions are broken down by topic and then difficulty, so I found it nice to skip around and try to master the basics in each category, and then work in more depth for topics that I consider more important or likely to come up in an interview setting. If nothing else, having the questions in front of you serve as a good reminder of the scope to expect in a ‘generic’ coding interview. The classic recommendation is to write your solutions down on paper or on a whiteboard since that is often the medium used in interviews. Also, interviews aside, the book can serve as a good introduction to some basic data structures and algorithms.
7. Project Euler
Project Euler is a site that maintains a list of interesting programming and mathematical questions, meant to stretch your mind and challenge you to analyze a specific problem to come up with not only a workable, but efficient solution. The site currently has over 500 problems, and if you do a quick search you’ll see that there is a large community that discusses the problems, so if you get stuck it’s likely you can find some inspiration. These problems are very mathematically intensive and focus less on programming concepts. They can range from simply looking at sums of prime numbers, to testing how well you can recognize equations for solutions. A popular complement to Project Euler is Project Euler+ which keeps the same mindset of having math-centric problems, but has the added complexity of putting programming restraints on you. Instead of just submitting a single answer, with Project Euler+ you have to submit the code to run, and the system will not pass you if your solution takes too long which can sometimes be as low as 2 seconds.
8. Khan Academy
Khan Academy is another place worth exploring if you’re looking to learn new topics or get refreshers on subjects you’ve realized you’d like to know. The math portion is nice in the sense that it lays out the major topics starting with the very basics for younger kids, and moving through high school and beyond. There are also courses in both computer programming and computer science theory, as well as other subjects. I’ve sampled some videos and think the explanations are clean and concise, so depending on your level and learning goals, Khan Academy may be a solid option to build up some prerequisite knowledge or learn entirely new topics.
We hope this helps. Programming can be tough at first but if you stick with it, it can be incredible rewarding!
This article was written by Nate at Josh.ai where he focuses on the cloud and web. Previously, Nate was a global markets analyst at RBC Capital Markets in New York. Nate has a CS degree from Cornell and grew up in New York. Nate recently moved to Colorado and outside of work he likes to play golf and tennis, hike, work out, and he’s looking forward to skiing.