6.0001 and many compromises

About 6.0001

I've started the 2nd course of OSSU, called Introduction to Computer Science and Programming in Python (or 6.0001), some weeks ago.

I couldn't take the course on edX because it started on January 26th, so I preferred to take the one on OCW (the alt link that OSSU provides). That course was recorded in 2016, but the fundamentals haven't changed since a long time before that.

About its teachers

Now, I felt that Dr. Ana Bell, the professor that teaches most of the lectures, wasn't really comfortable on the first lectures (in contrast to Prof. Eric Grimson who you could feel the security on his words), but she really improved over time.

That makes me think how difficult it must be standing there in front of a class!

About its contents

About the contents of the course, it amazes me how much they cover in so little. Even in a beginners course.

You get the basic operations and variables on the first class, branching (ifs) and loops; on the second, a cool implementation of bisection (binary?) search, also on the third she explained the concept of abstraction with functions!

I really like that because in my college they didn't teach me how to write good code. And abstraction is one pillar of writing clean and concise code!

Also, they encourage people to write modular functions with no side effects. Something I didn't practice until now. This modularity is achieved by making your dependencies the parameters of the function. And the no-side-effects policy means that we cannot mutate any mutable parameters. For example:

def is_word_in_hand(word, hand): # Modular code. We depent on a word, and a hand of letters.

    # No side effects. We make a copy of the hand (a dictionary, a mutable type).
    # And reassign it to another variable of the same name.
    hand = hand.copy()

    for letter in word.lower():
        if hand.get(letter, 0) <= 0:
            return False
        hand[letter] = hand[letter] - 1
    return True

Also, Prof. Eric Grimson teaches us more advanced stuff like recursion, efficiency (Big O), and sorting. Some people really struggle with finding how efficient is their algorithm, and some teachers explain it with lots of math stuff.

When in reality you just need to identify the patterns and taking the largest meaningful part.

About the assignments

The assignments are really fun to do. They guide you a lot with is really helpful, and the sense of satisfaction you get when finishing is wonderful.

The edX version is now available

Now the 26th came, and the course was available on edX, I watched the first video, and it seems that it's different. So I might do that course too, but I need to continue with the curriculum.

Personal issues and compromises

To be honest, it's hard to start a goal. I've been dealing with lots of distractions and procrastination. And in a few days I'm starting a new semester, meaning less time.

From now and then a notification rings, there are meaningful relationships I have to maintain, often there's a passing thought or questing I need to address. Hell, I kind of miss building websites, too!

And sometimes there's doubt:

Do I really need to take this course? Am I too advanced for this? Man, this is for beginners, I'm wasting time.

Even now that I'm just beginning the Core Programming section, I wonder if it's worth it to take the Core Math part.

Fortunately, I have people around me that I can trust in these issues, and their advice have been really helpful.

I don't know how many new things I'm going to learn. And if you're following me in this journey, that's why we are here: to have solid foundations. Even if that takes to learn things that makes us feel uneasy, like math (in my case).

And some say that I shouldn't spend all my time on this, which I currently am. I should plan my day and manage it in pieces, so I can be more thoughtful about it.

So I'm starting to use the pomodoro technique, and I'm watching Barbara Oakley's Learning How to Learn course.

Conclusion

Starting a journey is hard, you have to shift your mindset to prepare for what's coming. And with a big journey like this one, you have to remember the main purpose of doing what you're doing.

And yeah, maybe we are not beginners, but we might learn or remember something that it's either useful, or makes you understand something you already knew better.