Computer programming is quickly becoming an essential career skill. Learning to code is a fantastic opportunity equalizer—if you’re good at it, it can help you achieve your dreams. —Cory Booker, U.S. Senator
According to statistics from The Conference Board and National Center for Education Statistics, there are over 550,000 computing jobs available nationwide, and nearly (or only) 50,000 computer science students graduated last year.
None of that should surprise anyone paying attention to the U.S. and global economies. More important, computer science jobs are continuing to increase. The U.S. Bureau of Labor Statistics projects computer and information technology occupations to grow 13% over the next decade, with a median annual wage of $85K. Mid-career pay for the best computer science jobs runs to $126K.
The problem is that there aren’t enough workers to fill these roles. Despite recent traction, computer science education continues to lag at the high school and college level. Intimidating subject matter is one reason: students tend to flee at the first sign of coding. But lack of resources is a major prohibitor.
Fortunately, tech innovators recognized the problem early and have offered a practical, appropriate solution: online education. This is particularly helpful for adult learners, working professionals, and continuing education students who want to learn computer science fundamentals without pursuing a full degree. (That said, if you are interested in a bachelor’s or master’s in computer science, click here.)
Below we’ve outlined a potential computer science curriculum that’s available through free MOOCs (massive online open courses), or you can pay a small fee to earn a verified certificate. GitHub’s Open Source Society University has been an especially helpful resource for this DIY syllabus, as has an in-depth outline by the Bradfield School of Computer Science. With a few Stanford exceptions, Coursera, edX, and Udacity host most of the courses.
There are several introductory computer science courses available online, the best of which seem to be on edX. MIT offers a two-course sequence in Introduction to Computer Science and Programming and Introduction to Computational Thinking and Data Science. (The first is credit-eligible.) Alternatively, if you want to earn a professional certificate, Microsoft offers an affordable three-course Introduction to Computer Science that covers Python programming and Logic and Computational Thinking.
Both of these MOOCs are great options, but for our purposes it’s tough to beat Harvard’s CS50x, the most popular course on campus and one of the most popular courses online. Subjects include algorithms, data structures, resource management, security, software engineering, and web development, and students are introduced to multiple languages, from C and Python to SQL, Java, CSS, and HTML. To develop practical CS skills, students complete 9 problem sets (10-20 hours each) in areas like cryptography, finance, and forensics, followed by a final project. Whether you’re starting a full DIY curriculum, or simply seeing if computer science is the right fit, Harvard’s MOOC is an excellent introduction to CS theory and practice.
University of Washington’s Programming Languages course is a three-part module that focuses on basic concepts and functional programming, giving students a practical framework to learn how to use effective language constructs and write “robust, reusable, composable, and elegant programs.”
Part A is a deep dive into the ML programming language. Topics include rules for expressions, list functions, comparison operations, tuples, nested patterns, type inference, and much more.
Part B instructs students in Racket, building data structures, programming implementation, and static typing versus dynamic typing in ML and Racket.
Part C emphasizes Ruby programming, including inheritance and overriding for object-oriented programming, as well as a comparison of Ruby, ML, and Racket.
All courses include reading, assignments, and quizzes to help you develop practical programming skills, and students are expected to spend 8-16 hours a week on the material. (Scroll down to find courses on popular high-level programming languages.)
Without a solid foundation in math, your computer science courses won’t amount to much — or at least not in the long-term. Tools, languages, and technology change, but the underlying math remains the same.
The main math areas you’ll need to know are Linear Algebra, Calculus, and Discrete Mathematics, but to narrow it down let’s focus on Stanford’s four-course Algorithms Specialization.
Among the most in-depth MOOCs on the subject, each self-paced course is designed as a four-week study. Students also have the option to forego the specialization and focus on individual courses. Topics include asymptotic notation, divide and conquer, random algorithms, graph search, data structures, dynamic programming, minimum spanning trees, shortest paths, and much more. Each lesson features problem sets, programming assignments, and quizzes to test your knowledge, and the specialization concludes with a multiple-choice final exam. For those interested, Princeton offers another popular algorithms course for computer science, and UC San Diego offers an upper-level course in Algorithms and Data Structures as part of their MicroMasters program.
Our policy is literally to hire as many talented engineers as we can find. The whole limit in the system is just that there aren’t enough people who are trained and have these skills today. —Mark Zuckerberg
We’ll cover two courses here.
For beginners, Google offers The Bits and Bytes of Computer Networking as part of its professional certificate in IT Support. First, students will learn about TCP/IP and OSI networking models, as well as how various layers fit together to create a network. From there, the course goes deeper into IP addresses, subnetting, transport and application layers, networking services, wireless and cellular networking, and the future of networking.
Georgia Tech’s Computer Networking course is part of the school’s renowned online MS in Computer Science .
It’s certainly more advanced than Google’s intro survey, but far from inaccessible. The first part of the program covers computer network implementation, design principles and goals. The second unit features lessons in congestion control and traffic shaping for networking applications. In the final section, students learn SDNs, traffic engineering, and network security.
Each of the above MOOCs are taught by industry professionals and feature interactive content to develop skills and and test your knowledge.
Databases are critical to the underlying technology we use every day in telecommunications, banking, gaming, and dozens of other fields. Unfortunately, many professional computer scientists don’t have an adequate understanding of how they work; mastering database fundamentals will both help you improve your CS skills and put you ahead of the competition.
In Stanford’s set of database mini-courses, originally offered as a MOOC, students will cover a variety of database essentials, including data models, querying relational databases, querying XML databases, database design, and advanced SQL features, among others. Each online course is self-paced and designed for maximum flexibility, and students can pick and choose which individual courses they want to take, or complete the entire program for a comprehensive survey. Quizzes deliver within video lessons and as separate standalones, and automatically-checked interactive programming exercises provide an experiential component.
Understanding compilers, in addition to improving existent programming skills, will help students have a much easier time learning additional languages in the future. Like the database course, Stanford’s Introduction to Compilers is hosted on the university’s proprietary Lagunita platform, and covers “the interplay of theory and practice in computer science, especially how powerful general ideas combined with engineering insight can lead to practical solutions to very hard problems.”
Major topics include lexical analysis, parsing, syntax-directed translation, types and type checking, dataflow analysis, program optimization, code generation, and runtime systems. In-video assignments and quizzes reinforce critical concepts, and students complete a midterm and final exam to measure progress. The course’s instructor, Alex Aiken, holds the Alcatel-Lucent Chair and was a Research Staff Member at the IBM Almaden Research Center and professor at UC Berkeley prior to Stanford. Additional honors include an ACM Fellowship and Phi Beta Kappa’s Teaching Award.
For anyone serious about learning the ins-and-outs of programming, this is a can’t-miss online course.
Most systems are distributed, and distributed systems depend on distributed algorithms.
KTHx’s two-part Reliable Distributed Algorithms is one of the only of its kind online, taking a big-picture approach to a big-picture concept.
In the first course, students review a range of key-value stores and consistency model topics: concurrent programming of distributed algorithms; models of asynchronous systems using input/output automata; failure detectors and equivalence between various distributed abstractions; specs and algorithms for reliable and causal-order broadcast; distributed shared memory and consistency models; and single value consensus and the Paxos algorithm.
In the second course, topics include dynamic reconfiguration of distributed services, efficient distributed algorithms, and relaxed consistency models and the CAP theorem, including various consistency models and conflict-free replicated data types.
Each course is designed to take 5 weeks and includes quizzes and programming assignments to reinforce core concepts.
If you’re interested in a specific type of distributed system, the following MOOCs are highlights: Arizona State’s Distributed Database Systems, Part 2 of the Big Data Systems Specialization; University of Illinois Urbana-Champaign’s four-part Cloud Computing Specialization, which covers cloud systems and infrastructure, big data, and cloud networking, among other topics.
Below are some of the most popular online courses in high-level programming languages. Whatever language you prefer, try to familiarize yourself with at least two others. It will help you in the long run, plus the solid foundation of above courses should make new languages easier to pick up.
Python
Released in 1991, Python remains one of the most popular programming languages, in part for its code readability, and is actively used by Google, Wikipedia, Facebook, Amazon, Instagram, and other organizations. Reddit exclusively uses Python. Designed as a general-purpose language, Python is particularly good for software development, scientific and numeric computing, web development, and data analysis.
Michigan’s Python for Everybody Specialization is the most comprehensive online Python module for beginners, composed of 5 courses: an introduction on procedural programming; a course on core data structures of Python; a course on how to use Python to access web data, including working with HTML, XML, and JSON data formats; a course on SQL and basic database design; and finally a capstone that gives students the opportunity to build applications to retrieve, process and visualize data using Python. Built-in quizzes and assignments help students develop their coding skills, and students have the option to skip course material not relevant to their needs. Students who complete the entire specialization earn a certificate to share with prospective employers and their professional network.
Java
Java is one of the most common program languages in use, particularly on Android operating systems, edge devices, and IoT development. Key traits include portable and robust code, object-oriented programming, flexibility, and ease of use: develops often learn Java quicker than many other languages.
Duke offers a specialization in Java Programming and Software Engineering Fundamentals designed for beginners and consisting of four units: 1) Programming Foundations with JavaScript, HTML and CSS; 2) Solving Problems with Software; 3) Arrays, Lists, and Structured Data; 4) Principles of Software Design. In the fifth and final course, students will complete a capstone project to create a recommender system (e.g., Netflix or Amazon recommendations). Each course delivers over 4 weeks, with students expected to spend 4-8 hours per week on coursework, practice assignments, and quizzes. This is an ideal course for students who want to develop practical skills in a popular language and real-world environment. Also available as a certificate.
C++
Released in 1985, C++, or C with Classes, is known for its power, programming control, scalability, and speed. Games as well as desktop, web, and mobile apps all use C++, including notable software such as Adobe, Amazon, PayPal, and Google Chrome.
There are several MOOCs for C++ programming, including course modules by UC Santa Cruz and Microsoft, but Udacity offers the shortest and most in-depth. C++ For Programmers is built as a 3-week, 9-lesson MOOC designed for intermediate students familiar with at least one other language. Following an introductory lesson, students learn C++ For Programmers, control flow, pointers and arrays, functions, classes, overloading, and templates. All Udacity instructors are experienced industry professionals, and classes include interactive quizzes, self-paced learning, and a student support community .
Once you’ve developed a solid foundation in computer science, you can start exploring specializations and career paths. The elective courses below will help students develop in-demand skills for rapidly growing tech fields such as AI, VR, cryptocurrency, gaming, machine learning, robotics, and more. Find what suits your interests, or create your own track from the hundreds of specialized online CS course available as free MOOCs, certificate programs, and online degrees.
Full Stack Web Development
Want if one course could knock out all of your development needs? Udacity’s Full Stack Web Developer nanodegree covers every aspect of front- and back-end development through a series of courses and hands-on projects, ranging from building a movie trailer site to developing a single-page map application. Created in partnership with Amazon, GitHub, AT&T, and Google, students gain valuable real-world experience as well as career guidance, project feedback, mentorship, and more.
Blockchain
SUNY Buffalo’s Blockchain Specialization is an excellent survey MOOC for programmers interested in blockchain basics and Ethereum blockchain development. In particular, you’ll learn about smart contracts, end-to-end decentralized applications, and the larger blockchain ecosystem. For additional options, check out our full-length feature on online courses in bitcoin and blockchain.
Artificial Intelligence
Udacity’s nanodegree in Artificial Intelligence is a 3-month track that features instruction from some of the world’s foremost AI professionals. Coursework covers AI essentials, including search, optimization, planning, and pattern recognition, and all students receive 1:1 support from industry mentors and personalized project reviews. Gain a foothold in the industry, build professional relationships, and develop a set of in-demand and lucrative skills: per Udacity, top AI specialists make $300-500k annual salaries. (For a more intermediate track, consider this Deep Learning Specialization.)
Interaction Design
Design is a critical aspect of technology. UC San Diego’s Interaction Design Specialization is an 8-course study in how to make intuitive, human-centered interfaces, combining elements of visual design, psychology, and computer science. In addition to an elaboration on principles, courses focus on social computing, input and interaction, user experience, information design, user-centered experiments, and more, concluding with a capstone project. Whether you’re interested in mobile applications or video games, this is a great primer on best design practices.
Cybersecurity
Cybersecurity is arguably the most important, urgent field in computer science. Maryland’s Cybersecurity Specialization is a great place to start for infosec beginners. Over five courses, students learn how to design usable secure systems, the foundations of software security, practical cryptography, and hardware security. A capstone project allows students to practice their skills in a real-world environment, and a certificate option can help highlight experience to prospective employers.