16

17 comments

[–] gold_bee [OP] 6 points (+6|-0)

MIT OpenCourseWare (OCW) is a web-based publication of virtually all course content from the Massachusetts Institute of Technology, one of the US’s most prestigious universities. OCW is open and available to the world. This course is their most popular!

[–] Kittyrose 3 points (+3|-0)

Thanks for highlighting this, gives a much needed excuse to start learning python.

[–] gold_bee [OP] 1 points (+1|-0)

You are most welcome! There are so many resources online now, I posted a few other links in the comments if you would like to check out other options as well :)

[–] Kittyrose 1 points (+1|-0)

Thank you so much for sharing I will check them out!

[–] gold_bee [OP] 1 points (+1|-0)

For sure! Also check out /u/antandro 's post below with some additional thoughts & resources - and a very kind offer to field questions via DM.

[–] [Deleted] 2 points (+2|-0)

Is it too advanced? I'm borderline a tech grandma, but this sounds interesting.

[–] lucrecia 4 points (+4|-0)

I just took a glance; I'd say not so much advanced as very... theoretical? There's a lot of detail packed into a small space which isn't really related back to what you can actually use it for, and I didn't see the practical details on my skim. So I could see this being frustrating for someone who wanted to go straight to making things. I'm kind of inclined to think it might be more useful for someone who has already done some programming and wants to be able to abstract the things they've learned to help them with learning more languages and knowing the terms to search. But I'm someone who learns by trying to do things and breaking everything; other people might find a theory-first approach suits them better.

[–] inTERFerence 2 points (+2|-0)

Any intro to comp sci course is pretty much the same. I would say it's mid-level difficulty; it can take a while to wrap your head around implementing some of the concepts because there's not as many set methods for solving a problem (unlike math). But once you 'get it' it's fairly easy.

Don't be intimidated-you won't know if you like it or not unless you try!

[–] gold_bee [OP] 1 points (+1|-0)

Not "advanced" - just might be a bit boring depending on how you learn! Since it's free, might be worth a look to see if you take to it.

Here are some other options, with plenty of courses on different languages to choose from - there's sure to be something that will catch your fancy :)

[–] antandro 1 points (+3|-2) Edited

I'm a Computer Scientist and academic. This looks good, but also quite dense. If you are new to it all, you may want to start with a (free!) Codecademy Python course instead, and then take this one.

[–] gold_bee [OP] 1 points (+1|-0)

Great input! Do you have a link to share?

[–] antandro -2 points (+1|-3)

I last used them a year or two ago, and I recall their Python course being free. I see their Python 3 course is paid-only, but Python 2 is here.

An alternative which might work is Runestone Academy's How To Think Like A Computer Scientist. Chapters 1-13 will take you through all the basics, and the rest is kind of optional. I worry about 17-19 because Python does object-oriented programming differently enough to cause confusion if you move to something like Java or C#, but it might be worth going through just so that you have encountered the ideas of "class" and "object". I prefer this particular Runestone Academy book because my experience is that it's an easier introduction for the beginner: the project-based Foundation Of Python Programming sometimes leaves the beginner floundering with a heck of a lot of syntax and no clear path to understanding what it all means. (maybe I'm a little bit biased, too, having contributed a bit to How To Think Like A Computer Scientist!)

One thing's for sure, though, if you are starting off, you will run into trouble at some point. Many thousands of other students have as well! Think about it, come back to it, worry at it like a dog with a bone, and don't give up! When you do run into trouble, write up some code that you think should work, and then ask someone about why it's not doing what you think it should do. Often, this kind of trouble can be cleared up with a few hints from an expert, so if you have a knowledgeable friend who can help you through the "tough" parts, then your journey will be much easier. When you're just beginning, unfortunately, resources like StackOverflow can sometimes cause more harm than good because they're usually aimed at people who already know the fundamentals. Teaching is a big part of my job so I'm happy to answer questions if you inbox me. I might be a little bit slower in answering them because of work pressure, but this is something that I love and I'll do my best to help you out. I know there are other coders here on Ovarit and most of us (in my experience) tend to be very welcoming to any newcomer to the field ... maybe some of them want to reply and volunteer to be inboxed? If there was a /o/Programming circle on Ovarit, that would probably be an even better place to ask questions and get answers, but there isn't (yet!).

[–] gold_bee [OP] 2 points (+2|-0)

That is very kind of you to offer! And thank you for sharing the online offerings. We're working on compiling resources for people interested in learning STEM topics, and I love the idea of a Programming A-Team that can answer questions from newcomers. I'll see about putting up a sticky post to see who is interested in volunteering.

[–] lucrecia 1 points (+2|-1) Edited

I took a longer look at it. It was kind of funny; to me this is typical of the divide between programming-as-taught-in-an-academic-context, and programming-in-industry. These are just my thoughts on the lecture notes; I didn't watch the videos because I don't get on with videos. :P So much of this may have been covered in the videos and I'm sure some confusing things are clearer when delivered as the lecturer intended. But I'm probably not the only one who just reads stuff, so here are some notes for anyone like me:

Overall, I think that this is a course for someone who likes maths and wants to do mathematical operations on a computer, or someone who wants to write their own programming language, or to help develop Python itself. It's not a course for someone who wants to build the kind of software needed for most businesses or hobby projects. So if you're coming at this like 'I want to learn to code, I've been thinking of changing industries', I don't think this is the right resource to start with, as it's not really representative, though it will help you impress someone in a job interview, because tech job interviews are notoriously unrepresentative of the work. :P And you will still learn a lot, and there are some jobs where it's relevant, I just don't think it's universal. So if that's where you're coming from, maybe you'd be better off searching 'software engineering' courses than 'programming' courses. (I will try to put together some practically-focused resources at some point.)

There are a lot of cool details and I want to read through more closely sometime, because I have big gaps in my knowledge around algorithms and theory. However, I honestly think someone could read and memorize this entire lecture series and still be unable to run the simplest python program. Some core things are missing: how to set up your computer so that python will run on it, how to include code other people have written, etc. (Someone else mentioned codecademy, which shares this issue, though it's probably a friendlier introduction to the basic ideas and a better place to start if you've never done any kind of programming before). This course comes at things from a very abstract, theoretical angle; I'm inclined to think it's a better fit for someone who can already program and wants to abstract some of the things they've learned, than for someone who is completely new to programming. Because in practice, at the first confusing error message, this course will be no help to a newbie. Memorising the academic distinction between 'syntactic errors' and 'static semantic errors' is useless for fixing the errors. And on the section on debugging, I didn't spot any mention of the most obvious tool: search the internet for your error message. Maybe this all sounds flippant. :P But the approach in here doesn't much resemble the day-to-day of programming tasks, and I think that's important to know. The industry can be a shock to people coming into jobs straight from compsci degrees, because they often haven't been taught much that's used on the job, and it can destroy people's confidence if they're used to getting good grades etc. So it's worth being aware of the dynamic.

I think the biggest omission in these types of things is an acknowledgement that a programmer will be working with other people. On real projects, it matters that you are able to write clear code, and use and build on things that other people have made. There's an emphasis on keeping things as easy to understand as possible, naming things sensibly, using shared libraries, and so on. And you need to use development techniques that let you retrieve old work if you break things, let you automate tasks that are likely to need repeating, and reduce the risk of human error.

So for one small example of this contrast, in lecture 6, there's a program that evaluates whether lines are palindromes, via recursion. Here, the code is used as a way to explain recursion, so the approach makes sense (and also I'd never thought of evaluating palindromes like that before, so that was fun). But in real life, you wouldn't write some complex function using a bunch of single-letter variable names and idiom unique to python, a clever recursive structure, and a complex return statement that performs a bunch of operations on one line. You'd assume your colleague had 3 hours' sleep and was used to programming in a different language. Ignoring the sections to convert the string to lowercase and strip non-alphabet characters, you'd be more likely to see something like this in the wild:

def is_palindrome(word):
  flipped_word = word[::-1] # reverses the string
  return word == flipped_word # returns True if they match, False if they don't

Whereas, as part of their recursive solution, the course features this return statement...

return s[0] == s[-1] and isPal(s[1:-1])

It's doing so many things! It works out the truth value of an AND comparison, and the truth values of both halves of the comparison; one half compares the first and last characters of a string and returns True if they match or False if they don't, and the other half strips a string of the first and last characters, then calls the function recursively on that stripped string. I don't think there's a reason to do so many things on one line, and in practice this would be confusing to work with. I mean, I bet this paragraph was confusing to read! There are times when more confusing code is worth it (eg: if it gives a performance boost that you actually need), but it's pretty rare imo.

The course covers a lot of material, which is nice, though the order feels kind of random, and it's often not clear what things can be used for. I think it explains things in quite confusing ways, or in terminology that nobody seems to actually use ('re-bind' variables? Reassign.) There were places where I was like 'oh wow what is this, I've never seen this before', then after staring at the page for a bit, realised it was something very easy that I already understood and used all the time. Where things are more complicated, I don't think it explains them particularly clearly.

There's a lot of python-specific idiom, that I think would be confusing to a newcomer. And because this course is using python as a means to an end, to teach more general concepts, I'm not sure it's helpful. And again, it also doesn't really explain why you'd want a lot of it. For someone already familiar with python, it's probably nice to be able to use this for quick reference. Although, simultaneously, the style is... not pythonic? eg: examples in CamelCase. python style is to use underscores by default ( https://www.python.org/dev/peps/pep-0008/). (I don't think pep8 comes up anywhere, or pip, or anything else in the wider python ecosystem) It's a small thing, but it means the course doesn't go into the specific strengths and weaknesses of python. And yet I'm not sure it works too well as a general course, because it doesn't really put the language into context on a bigger computing system, or into its historical context.

There's a LOT on performance efficiency and algorithms. I know almost nothing about this so I suspect I'll find it useful to read sometime, but it did make me laugh that this showed up in a python course, because what I do know is that, in a lot of cases, if you really care about speed, you don't use python, because it's relatively slow. Maybe I missed it but I didn't see this pointed out anywhere. I assume they were trying not to make the course too broad, and python was just chosen because it was an easy entry point for programming in general, and especially good for data-analysis, which is very popular at the moment; it's not really a course about python. But it's worth being aware that a big reason python is so popular is that it already has the tools that this course is teaching people how to create.

This DOES look like a very good guide for the kinds of theoretical questions people get asked at job interviews, especially the section on efficiency. Those are the most frequent contexts in which you would be asked to implement a sort algorithm, rather than import an existing library and just run its sort() method. :P And if you wanted to contribute to those shared libraries, or write your own programming language, you'd need to understand how the building-blocks were implemented, eg: if you wanted to contribute code to python itself. But if you wanted to make, eg: a dating app, or a forum, or a simple game, this course wouldn't be the best starting point.

[–] antandro 0 points (+2|-2)

This is an AWESOME and comprehensive review of the course! That's a lot of detail, thank you. In an actual tertiary-institution setting, students are "motivated" by marks and deadlines to do the assignments, and there are tutors, and there's peer support, and the lecturer answers questions, and maybe there are prerequisites to get in ... and this kind of course can work in that environment. Without that support structure, it's probably not the best resource for a beginner's self-study.

[–] lucrecia 1 points (+1|-0) Edited

Yeah, I think if someone treats it as they would in that setting, ie: watches all the videos, seeks out the exercises, reads the textbooks, searches everything, etc, they'll get a lot more from it, but I think someone learning from home is less likely to do that and there are better online-first resources they can use. It's barebones, but for example https://www.w3schools.com/python/python_intro.asp both includes some install instructions, and lets you try things in the browser, no need to sign up for an account. So for each of the specific data structures mentioned, you'd probably learn more reading the relevant w3 sections and trying things out, than reading the lecture notes. Or there's codecademy for a more guided experience, or for someone comfortable with the basic terminology, there's Dive Into Python (getting old, but the best book I've come across, as it puts everything into a practical context). To some extent, I think stuff will just click with repetition, and there's no one resource that can do everything, but the description of that MIT course doesn't really match up to the content imo. It's not a bad course, it's just not what it says on the tin, and I think I'd've come away with the impression that python was really difficult if I'd started there.