johnpfeiffer
  • Home
  • Engineering (People) Managers
  • John Likes
  • Software Engineer Favorites
  • Categories
  • Tags
  • Archives

Best Computer Science online and a More Complete Education

Contents

  • Just starting with coding (mostly python)
  • Introduction to Programming by Universities
    • Stanford
    • Harvard
    • MIT
    • Princeton
  • More Courses
    • Udacity Design of Computer Programs
    • Udemy
  • Information and Models
    • MIT
    • University of Michigan
  • Software Engineering
    • Vanderbilt
  • Online Masters in CS
  • PRACTICE, PRACTICE, PRACTICE
  • Interview Resources
  • Things Often Not Covered By Universities
    • Version Control
    • Quality and Testing
    • Build and Continuous Integration
    • Performance and DevOps and Operations

Learning is a life long pleasure. Programming and Computer Science are challenging and take time but luckily the resources available today make it free to get access to top quality materials.

In the 6 years since I first wrote this article many of the links had to be updated (and some resources are no longer free, goodbye MOOC), hopefully I have managed to maintain this somewhat

Just starting with coding (mostly python)

I've been asked often enough about getting started in software programming that I decided prepend this "guide" from 2019 that I believe is a free and easy way to get bootstrapped.

  1. Watch a couple of videos from https://www.coursera.org/learn/interactive-python-1 (pro tip, if possible watch at 1.25x or 1.5x speed and pause and go back to replay a specific part when necessary)
  2. Do about 3 hackerrank exercises: e.g.- https://www.hackerrank.com/domains/python?filters%5Bsubdomains%5D%5B%5D=py-introduction (but stop after doing "Errors/Exceptions" and move onto the problem-solving track https://www.hackerrank.com/domains/algorithms?badge_type=problem-solving , always feel free to skip an exercise if the problem description is too confusing, the key is practice not perfection ;) , https://www.hackerrank.com/challenges/python-string-split-and-join/problem
  3. Do one "chapter" from KhanAcademy (e.g. https://www.khanacademy.org/computing/computer-science/algorithms start from Binary search and you're "good enough" after finishing merge sort)
  4. Read one "chapter" from the PythonDocs , e.g. start with https://docs.python.org/3.7/tutorial/introduction.html
  5. Watch one video from MIT https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-0001-introduction-to-computer-science-and-programming-in-python-fall-2016/lecture-videos/ note this is the same as https://www.edx.org/course/introduction-to-computer-science-and-programming-using-python-3
  6. Do one exercise from leetcode , https://leetcode.com/problemset/algorithms/?difficulty=Easy&listId=79h8rn6 (easy ones first, then go to mediums or the top100 list)

e.g.

  • (if statements for each edge case) https://leetcode.com/problems/valid-parentheses
  • (nested for loops and dicts/hashmaps) https://leetcode.com/problems/two-sum
  • (nested for loops) https://leetcode.com/problems/valid-sudoku

Then go back to #1 and repeat =]

Of course what I've suggested is really just the minimum. Some good auxiliary learning would be:

  • https://exercism.io/tracks/python
  • https://www.khanacademy.org/computing/computer-science/internet-intro
  • https://scotch.io/bar-talk/a-quick-understanding-of-rest
  • https://blog.miguelgrinberg.com/post/designing-a-restful-api-with-python-and-flask
  • https://programminghistorian.org/en/lessons/creating-apis-with-python-and-flask

Introduction to Programming by Universities

Stanford

by Mehran Sahami (very fun and Java is an ok starting point - though the world has moved to Go)

  • https://see.stanford.edu/Course/CS106A Programming Methodology
  • Then algorithms with https://see.stanford.edu/Course/CS106B Julie Zelenski
  • And more algorithms https://www.coursera.org/learn/algorithms-divide-conquer Tim Roughgarden
  • And advanced algorithms https://www.coursera.org/learn/algorithms-graphs-data-structures Tim Roughgarden

  • https://see.stanford.edu/Course

  • https://online.stanford.edu/course/intro-computer-networking-winter-2014
  • https://www.youtube.com/playlist?list=PLvFG2xYBrYAQCyz4Wx3NPoYJOFjvU7g2Z

Harvard

  • https://cs50.harvard.edu/college/
  • https://www.youtube.com/watch?v=y62zj9ozPOM&list=PLvFG2xYBrYATXXCZdUUdh13gG4MEDqm2S
  • https://www.extension.harvard.edu/open-learning-initiative/intensive-introduction-computer-science

MIT

  • https://www.edx.org/course/introduction-computer-science-python-mitx-6-00-1x now named https://www.edx.org/course/6-00-1x-introduction-to-computer-science-and-programming-using-python-3

Algorithms of course!

  • https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011
  • (also at https://itunes.apple.com/us/itunes-u/introduction-to-algorithms/id341597754)
  • https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures
  • https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2015/lecture-videos/
  • https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/ (listing of all the MIT courses)

Princeton

Algorithms - https://www.coursera.org/learn/algorithms-part1 (aka https://online.princeton.edu/node/201) - https://www.coursera.org/learn/algorithms-part2 - https://www.coursera.org/learn/cs-algorithms-theory-machines

More Courses

Udacity Design of Computer Programs

  • https://www.udacity.com/course/cs101 became https://www.udacity.com/course/introduction-to-python--ud1110
  • https://www.udacity.com/course/ud036
  • https://www.udacity.com/course/cs212
  • https://www.udacity.com/course/cs253

  • https://www.udacity.com/course/cs313 Intro to Theoretical Computer Science

Udemy

  • https://www.udemy.com/learn-how-to-code/#about-course (paid)

Information and Models

MIT

  • http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-050j-information-and-entropy-spring-2008/
  • (also at https://itunes.apple.com/us/itunes-u/information-and-entropy/id424082281)

University of Michigan

  • https://class.coursera.org/modelthinking-2012-002/class/index

Software Engineering

  • https://www.coursera.org/course/security
  • https://www.udacity.com/course/ud805
  • https://www.udacity.com/course/cs258

Vanderbilt

Software patterns - https://www.dre.vanderbilt.edu/~schmidt/Coursera/spring-2013-posa.html - https://www.youtube.com/playlist?list=PLZ9NgFYEMxp6CHE-QQ040tlDILNcBqJnc - https://www.youtube.com/watch?v=2GZttnHChHo&list=PLZ9NgFYEMxp4ZsvD10uXmClGnukcu3Uff&index=13 (patterns)

Online Masters in CS

There are even now recognized, accredited Masters degrees in Computer Science: https://www.omscs.gatech.edu/

PRACTICE, PRACTICE, PRACTICE

  • https://codingbat.com/python (beginner)
  • https://www.hackerrank.com
  • https://leetcode.com
  • https://projecteuler.net
  • http://acm.timus.ru
  • http://www.spoj.com/problems/classical
  • https://codeforces.com/problemset
  • https://tour.golang.org Go for a static language to complement Python
  • https://www.geeksforgeeks.org/javascript-tutorial/#basics

Interview Resources

  • https://github.com/jwasham/coding-interview-university
  • https://triplebyte.com/blog/how-to-pass-a-programming-interview

Things Often Not Covered By Universities

For some reasons the "ivory tower" does not include all of the nitty gritty practicalities required to actually ship and run software in the real world.

Here are some of those topics I wish were covered in the first year. (Hint: they also help immensely in being gainfully employed)

Version Control

The fundamental tool of managing change which was strangely ignored for a very long time in the short history of programming

  • https://en.wikipedia.org/wiki/Version_control
  • https://www.atlassian.com/git/tutorials/what-is-version-control
  • https://betterexplained.com/articles/a-visual-guide-to-version-control

Quality and Testing

The practical answer to actually attempting to validate correctness in practice (rather than just logical proofs)

  • https://en.wikipedia.org/wiki/Software_testing
  • http://martinfowler.com/bliki/TestPyramid.html
  • https://testing.googleblog.com/2015/04/just-say-no-to-more-end-to-end-tests.html
  • http://www.se-radio.net/2015/04/episode-224-sven-johann-and-eberhard-wolff-on-technical-debt

Build and Continuous Integration

Automation as a solution to the shortage of developer time and the exponential increase in software and complexity

  • https://en.wikipedia.org/wiki/Build_automation
  • http://www.drdobbs.com/tools/a-build-system-for-complex-projects-part/218400678
  • https://en.wikipedia.org/wiki/Continuous_integration
  • https://www.thoughtworks.com/continuous-integration
  • http://www.se-radio.net/2009/04/episode-133-continuous-integration-with-chris-read/
  • https://news.ycombinator.com/item?id=15565875 (Write tests. Not too many. Mostly integration)

Performance and DevOps and Operations

With hardware having kept up with Moore's Law and "the cloud" providing so much elastic compute, performance is now often an afterthought. Additionally, how to quickly and efficiently deliver software has coalesced into the term DevOps.

The big idea being that software that is not actually running is not very valuable ;)

  • https://en.wikipedia.org/wiki/Software_performance_testing
  • http://jmeter.apache.org/
  • http://www.opensourcetesting.org/category/performance/

  • https://en.wikipedia.org/wiki/DevOps

  • https://www.atlassian.com/devops
  • https://aws.amazon.com/devops/what-is-devops/
  • http://www.se-radio.net/2015/02/episode-221-jez-humble-on-continuous-delivery/

I know it sounds crazy that Computer Science practitioners (or Developers) should sully their hands with "Operations" but to truly understand the problem domains watching the logs or responding to an outage can vastly change how we write code.

Importantly, seeing latency, traffic volume, and environmental issues makes us thankful when we do get back to the keyboard and can just focus on the theoretical aspects of a problem.


  • « Jinja2, a web html template layout for everyone
  • Logic Puzzles »

Published

May 9, 2013

Category

programming

~716 words

Tags

  • beginner 1
  • computer science 1
  • cs 1
  • cs on iphone 1
  • distance learning 1
  • free education 1
  • learning to code 1
  • mooc 1
  • online learning 1
  • programming 7
  • programming videos 1
  • software 4