Recently I’ve been looking for a gentle, but structured introduction to Computer Science I can recommend to others. I see many posts from people who’ve jumped into programming though a course, but are left wondering ‘Where next…’ at the end.
Many courses rapidly equip you with the basic syntax to get started, and a few useful constructs, but leave it there, so when it comes to starting a project on their own, their toolsets are still rather sparsely equpped. Without an idea of what might be possible, it’s rather hard to search for ideas - a case of “you don’t know what you don’t know”!
I know that a background in Computer Science has aided me grately, so to that aim, I’ve been looking at a couple of free or low cost courses on line to recommend.
My first step is to do the courses myself, which I’m in the process of doing, so here are my initial thoughts.
I’m looking at two courses, both of which aim to introduce Computer Science first, and programming as set of tools to put the theory into practise:
cs50 - from Harvard
MIT 600.1x - from, well MIT!
cs50
This has something of a cult following. It’s run annually, is free (unless you want a validated certificate), and is self paced, that’s to say, all the material is available from day one, and you have until the end of the calendar year to complete.
In it’s current 2020 incarnation, it’s structured as a number of weekly tasks, with a video lecture of between 1/2 hours given by the charasmatic David J. Malan, and problem set to be completed at the end. The course focusses first and foremost on the CS principles, and uses C as the main language, primarily because it’s low level and close to the inner workings of the computer itself. Once you’ve covered the basics, you build to more complex algorithms and data structures quite rapidly, and only then, when you’ve learnt (and built for yourself) the basic under the hood operations of more complex data types, are you introduced to a high level language like Python.
The course curriculum is structured as:
- Week 0 Scratch 😺
- Week 1 C -
- Week 2 Arrays
- Week 3 Algorithms
- Week 4 Memory
- Week 5 Data Structures
- Week 6 Python 🐍
- Week 7 SQL
- Week 8 Information
- Weeks 9 & 10 - You choose a track from web/mobile/games
- Weels 11 & 12 - freeform final project
Ths far, I’ve spent just under a week on cs50 and covered all the material from Week - up to the end of Week 8, although I can imagine it taking the full 8 weeks if you’re coming at this from a standing start.
The material is excellent and modern (C jokes aside), and uses interesting material for the problem sets - building your own image processing filters, recovering jpg files from a card, looking for sequences in DNA etc.
It provides a complete cloud hosted IDE for you (although you don’t have to use it), which means it avoids all the problems associated with getting new users up and running with libraries etc, and it’s automatic grading / testing softare works well, and even scores you on programming style as well as output.
As the course was self paced, I didn’t get a huge sense of ‘community’ around the course as people are at so many different stages at any one time. This may have been different if I’d started in January when the current material was launched.
In summary - fast paced (for a beginner), but contemprary and rewarding.
MIT 600.1x
This is a course focussed on introducing Computer Science using Python, so Python is unsuprisingly the language of choice.
The course also differs from the Harvard offering in that it’s instructor led, meaning that the modules are released based on a set timetable, and you can’t jump ahead, or indeed, fall too far behind.
I started this course first, but because of the instructor led nature, thus far I’ve only completed weeks 1,2 & 3.
I’m a Community TA for the current run of MIT 600.1, so I have spent a lot of time working with other students to understand more the challenges that the course might pose for an absolute beginner.
As everyone is tackling the same problem sets and material at the same time, there’s quite a vibrant discussion pertinent to the current problem set in the focums which can be helpful if you’re stuck on a challenge.
Obviously by week 3, the material covered is less advanced that the week 8 material in Harvard’s offering, so I’ll not comment further on that unil I’ve finished both, but the sylabus is set to cover the details below. Broadly speaking it’s similar to cs50, but with a more ‘pythonic’ approach from the start (you won’t be building linked lists I suspect), with the addition of Object Oriented Programming. Interestingly, some concepts introduced in Week 1 in cs50 and build on (Big O Notation for example), is Lecture 11 material in MITs offering.
Lecture 1 – Introduction to Python:
• Knowledge
• Machines
• Languages
• Types
• Variables
• Operators and Branching
Lecture 2 – Core elements of programs:
• Bindings
• Strings
• Input/Output
• IDEs
• Control Flow
• Iteration
• Guess and Check
Lecture 3 – Simple Programs:
• Approximate Solutions
• Bisection Search
• Floats and Fractions
• Newton-Raphson
Lecture 4 – Functions:
• Decomposition and Abstraction
• Functions and Scope
• Keyword Arguments
• Specifications
• Iteration vs Recursion
• Inductive Reasoning
• Towers of Hanoi
• Fibonacci
• Recursion on non-numerics
• Files
Lecture 5 – Tuples and Lists:
• Tuples
• Lists
• List Operations
• Mutation, Aliasing, Cloning
Lecture 6 – Dictionaries:
• Functions as Objects
• Dictionaries
• Example with a Dictionary
• Fibonacci and Dictionaries
• Global Variables
Lecture 7 – Debugging:
• Programming Challenges
• Classes of Tests
• Bugs
• Debugging
• Debugging Examples
Lecture 8 – Assertions and Exceptions
• Assertions
• Exceptions
• Exception Examples
Lecture 9 – Classes and Inheritance:
• Object Oriented Programming
• Class Instances
• Methods
• Classes Examples
• Why OOP
• Hierarchies
• Your Own Types
Lecture 10 – An Extended Example:
• Building a Class
• Viualizing the Hierarchy
• Adding another Class
• Using Inherited Methods
• Gradebook Example
• Generators
Lecture 11 – Computational Complexity:
• Program Efficiency
• Big Oh Notation
• Complexity Classes
• Analyzing Complexity
Lecture 12 – Searching and Sorting Algorithms:
• Indirection
• Linear Search
• Bisection Search
• Bogo and Bubble Sort
• Selection Sort
• Merge Sort
Lecture 13 – Visualization of Data:
• Visualizing Results
• Overlapping Displays
• Adding More Documentation
• Changing Data Display
• An Example
Lecture 14 – Summary
That’s all I’ll say for now. I’ll revist and post an update when I’ve completed more of MIT’s course and completed cs50.