Benchmarks: Teach Yourself Python in Less than Four Months, Part II

In the first post of this series, I developed a self-study time table for beginner Python programmers, using MIT's free online Introduction to Computer Science course as my general guide.  The present article will look more closely at the MIT course to set up learning benchmarks on the basis of the course's problem sets and quizzes.  The next post in the series will provide links to related but alternative text and video resources available for free on the web.

Before jumping in though, let's take a step back for a moment.  MIT is consistently rated one of the top universities in the world for computer science and information systems.  It's courses are challenging, to say the least. But, more importantly for the current context, we should also keep in mind that its courses are geared toward students who are completing degrees in engineering, physics, biology, chemistry and the like. And this orientation is reflected in its Introduction to Computer Science class in the course's focus on scientific computing, and in the choice of topics emphasized in its problem sets and quizzes.

Working through the course on their own, many people may find this aspect of the course intimidating or uninteresting, or simply irrelevant to their own individual learning goals.  The next post in this series will therefore provide alternative resources to supplement the course materials that may prove of interest to people whose primary focus is not on scientific computing. 

In the previous post, I worked out a time table for completion of the course which began by assuming a person would devote 10 hours of work to this project every week, and  finish the course in 15 weeks.  (You can also consult that post for alternative time lines.)  That ten hour weekly work load was broken down in the following manner:

      • Watch the lectures (2 @ 50 mins): ~2 hours
      • Textbook and background reading: ~2 hours
      • Recitation/discussion video tutorial: ~1 hour
      • Homework problems and exercises: ~2 hours
      • Free study tutorials or reading: 1-2 hours
      • Free study independent projects: 1-2 hours

With that in mind, let's set up some learning benchmarks using the course's 3 quizzes as our primary guide, with the interstitial space filled in by its 12 problem sets.  To begin, let's note when the quizzes are scheduled and what topics they cover.  Then we'll have a general sense of how much work-time is necessary to grasp those topics.

Quizzes

Quiz #1 follows the 9th lecture in the course.  You can find its topic list here.  It covers:
  • • Basic computer science terms and definitions: syntax, semantics, straight line vs. branching vs. looping programs etc.
  • • Basic aspects of Python: values, types, expressions, statements, control-flow, functions, scope.
  • • Basic algorithmic techniques: guess and check, linear, bisection, approximation, Newton's method.
  • • Binary representation of numbers
  • • Debugging protocols
  • • Orders of growth  
Quiz #2 follows the 19th lecture in the course.  You can find its topic list here.  It covers:
  • • Big O notation and orders of growth
  • • Sort and search methods and algorithms
  • • Python: values, types, (im)mutability, control flow, functions/methods, recursion, objects/classes, simulations
  • • Basics of statistics: standard deviation, confidence, linear regression
  • • Data abstraction, debugging
Quiz #3 is the course final, and follows the 26th lecture in the course.  You can find its topic list here.  It covers those topics found in the first and second quizzes, and it adds the following:
  • • Call stacks, exceptions, polymorphism
  • • Algorithms: divide and conquer, basing, orders of growth
  • • Simulations
  • • Basic statistics and computational models
  • • Optimization strategies  

Problem Sets

The course also has 12 problem sets.  Here we'll simply note when each is due, and what it covers:
  • 0) Due lecture 2: install python, set up IDLE, write a basic program to get user info, print out that info
  • 1) Due lecture 4: simple debt calculator, bisection search
  • 2) Due lecture 6: successive approximation and a word game, i.e. Newton's Method and Hangman
  • 3) Due lecture 7: debugging, implementing two versions of game introduced in lecture
  • 4) Due lecture 10: implementing a version of the Caesar Cipher
  • 5) Due lecture 12: implementing an RSS feed filter
  • 6) Due lecture 14: simulating a Roomba, using classes
  • 7) Due lecture 16: simulating spread of disease and virus population
  • 8) Due lecture 18: optimization, topic cont'd from previous assignment
  • 9) Due lecture 20: schedule optimization
  • 10) Due lecture 22: clustering to analyze census data
  • 11) Due lecture 24: optimization, finding most direct route between two points
Note: Detailed information on each of the problem sets can be found on the page for the lecture when that problem set is due.  So, the information for problem set 0, which is assigned in lecture 1, is actually on the page for lecture 2

Benchmark Summary

Let's now cross-reference the quiz schedule with the problem set schedule, and estimate the number of hours necessary to complete those assignments on the basis of our time table above.  We see that:
  • quiz #1 coincides with problem set #4 and lecture 10: ~ 40-50 hours of work
  • quiz #2 coincides with problem set #9 and lecture 20: ~ 90-100 hours of work
  • quiz #3 coincides with problem set #11 and lecture 26: ~ 150 hours of work
In the next post in this series, I will detail alternative text and video resources that can be used to supplement the materials offered in the MIT course.  

Microsoft Ends Support for Windows XP

From Microsoft:
Microsoft has provided support for Windows XP for the past 11 years. But now the time has come for us, along with our hardware and software partners, to invest our resources toward supporting more recent technologies so that we can continue to deliver great new experiences.
As a result, after April 8, 2014, technical assistance for Windows XP will no longer be available, including automatic updates that help protect your PC. Microsoft will also stop providing Microsoft Security Essentials for download on Windows XP on this date.
If you continue to use Windows XP after support ends, your computer will still work but it might become more vulnerable to security risks and viruses. Also, as more software and hardware manufacturers continue to optimize for more recent versions of Windows, you can expect to encounter greater numbers of apps and devices that do not work with Windows XP.

Falkvinge: 5 Predictions that Won't Shock the World

Over at Private Internet Access, Rick Falkvinge makes some fairly conservative predictions for the new year:
So here are my five predictions for privacy in 2014: Snowden will continue to shock those who understand what he’s saying, oldmedia will continue to not care, the average person hasn’t understood what’s going on and will continue to not understand, politicians will continue to pretend nothing happened, and laws enabling the mass surveillance won’t change or will go the wrong way, unless politicians lose their jobs over it.

Two Apps to Ring in the New Year!

New York City's Times Square Alliance is has released a free app that will provide a commercial-free live stream of the Times Square New Year's Eve webcast.  You can check it out on iTunes here.

AgupieWare's exclusive New Year's Eve Nosie Maker app is also available from the App Store.  Bring the noise!

Schneier: "In the coming years we're seeing a lot more power struggles play out on the internet."

From an interview with Vice, Bruce Schneier speculates about how power struggles will play out on the internet in the coming years:
The internet is interesting because it really changes so many things. When the internet was born, there was this belief that it would vastly change the power structure. There's a great quote from John Perry Barlow in the mid-'90s at the World Economic Forum, and he basically says the governments of the world have no business on the internet, that have no power over the internet. You can't legislate it. The internet is it's own thing. It's a really utopian way of looking at the world, but we believed it. We believed the internet would change the world, would give power to the powerless. And it did, for many years. The ability to organize, to coordinate—it made so many things different.
And that changed recently. Governments discovered the internet. So now we're seeing that in China, for example, the internet is a tool of social control, and now both sides are using the internet. The Syrian dissidents are using the internet to organize, the Syrian government uses the internet to round up dissidents. That interplay between the institutionally powerful—the governments and corporations—and the distributively powerful—dissident groups, criminals, and hackers. How they both use the internet to increase their power, how they use the internet against each other, I think is fascinating. It's something that we need to look at. In the coming years we're seeing a lot more power struggles play out on the internet. And I'm just curious how that's gonna end up—it's not at all obvious.

Online Learning: Teach Yourself Python in Less Than 4 Months, Part I

The purpose of this article is to lay out a general time management template for anyone who wants to jump in to programming and computer science with little or no experience in the field.  A future article will flesh out the details, providing links to learning resources and other materials freely available online.  [Edit: See the second article in the series, which covers learning benchmarks for beginner Python programmers.]

For starters, I should say up front that I do not have any formal background in Computer Science. I'm a language teacher by trade and training, and never really considered myself a "computer person."  But some time back, after expressing some interest in programming to a programmer friend, he challenged me to try and pick up a programming language. The gist of his argument was fairly straightforward: if you can understand English, with a bit of effort you can understand a programming language, it's just syntax and semantics.  That made it sound pretty simple, and my interest was piqued, so I set to work. 

After doing a bit of background research, I decided that I would focus on the Python programming language, using MIT's Introduction to Computer Science and Programming course – all the materials for which are available for free online – as my general guide.  I finished that course within three months, supplementing it with tutorials and readings that were more in line with my own particular interests. The skills and knowledge that I acquired in that time have proven to be indispensable in my daily life, for both work and play, so much so that I wonder how it is that I was able to get by for so long without them! 

As stated above, I do not have any formal background in computer science.  However, I have over ten years of experience in planning, developing and teaching natural language learning curricula, from task-based lessons to overarching course goals, in two languages.  This article will lay out a general time-plan for self-guided study of the Python programming language for absolute beginners, using the MIT Introduction to Computer Science class as its overarching framework and scaffold.   

To begin our assessment, let's take a closer look at the MIT course. The class has 26 lectures, each about 50 minutes long, for a total of 1300 minutes, or 21 total hours of time, less than a single day.  In theory, you could easily blow through the whole course's lecture series over a long weekend, if you did it like it was your job, or a marathon of your favorite television series on Netflix.

Obviously, that does not mean you can learn all the material covered in those lectures in a three day period.  The process of learning requires things to sink in, as it were, and that just takes time.  Furthermore, it just wouldn't make any sense to simply blow through all the lectures in this way, because we still have to account for the recitation/discussion sections associated with the course, as well as for the independent study necessary to complete homework assignments, which would be normal for any university course. 

In a serious course of study at any college or university, and even for graduate level work,  disciplined students should expect to devote around ten hours a week to study for each course they take.  Assuming a full time work week of 40 hours, this would make taking four college or university classes the labor equivalent of a full time job. 

To begin working out our time table, let's therefore assume that a person should devote 10 hours a week to this project.  A college semester is about 15 weeks long, so that comes out to 150 hours of total work to successfully complete a course that like offered by MIT.  Assuming you did nothing else except this, as if doing the work for this single course were a full time job at 40 hours a week, you could complete it within a month. This is doable, but very intensive. To finish in 3 months, you'd have to devote 12-13 hours to it a week.  To finish in six months, you would have to spend 6-7 hours on it a week.  To finish it in a year's time, you could spend just 3-4 hours of work on it a week. 

For the sake of simplicity, let's assume that we have 10 hours a week to devote to this project, taking our benchmarks and cues from the syllabus for the MIT course.  (We'll work out alternative time lines at the end of the post.)  What do we do with all this time?  The answer is deceptively simple:  watch the lectures, read, do tutorials and exercises, and begin work on your own individual programming projects.  Let's flesh this out a bit.   

With 26 lectures at 50 minutes each, that comes out to 100 minutes of lectures a week, the equivalent of the time you might spend watching a bad movie you wish you hadn't watched to begin with.  In a university course, each week you are also going to spend around another hour in your discussion/recitation section, reviewing materials covered in the corresponding lectures.  That leaves us with around 7 hours and 20 minutes of time for independent study.  How should one spend that time?  Reading, research and practice. 

Let's assume that in a given week, the professor covers more or less the same materials that can be found in the course textbook, in more to less the same amount of time that it would take you to read those sections of the text(s).  So now we have a ballpark figure of 1.5 hours to devote to reading, leaving us with just under 6 hours of time left for the week. 

Doing the reading is not an end in itself, there are also homework assignments that need to be completed. In the MIT course, the homework and problem sets reinforce the lessons covered in the lectures. However, as you complete such exercises, you will find that there are things in the textbook or from the lecture that you did not understand, or you will come across a problem that requires looking into something that has not yet been covered in the lectures or readings at all, and you will therefore have to inquire into these things a bit more closely. So homework will also necessitate more reading, research and tutorials.

Let's assume that doing the homework requires about as much time as you would normally spend in class including discussion section, around 2.5 hours.  We're now left with 3.5 hours of free study time to do with as we please.  This can be spent doing more background reading, tutorials, exercises, or working on one's own little programming projects. 

So here's our plan for 10 hours of work a week, to complete the course in about 15 weeks:
   • Watch the lectures (2 @ 50 mins): ~2 hours
   • Textbook and background reading: ~2 hours
   • Recitation/discussion video tutorial: ~1 hour
   • Homework problems and exercises: ~2 hours
   • Free study tutorials or reading: 1-2 hours
   • Free study independent projects: 1-2 hours

Let's break this down even further.  For each 50 minute lecture, one should do:
  • 1 hour of reading
  • 30 minutes of recitation/tutorial videos
  • 1 hour of problems or exercises
  • 1 hour of targeted external tutorials
  • 1 hour on your own little project(s)

Assuming you were to devote 90 minutes a day, 3-4 days a week to this project, within 4 months, you will have watched all the lectures from the course, read a couple books, done tens or hundreds of problems, completed a number of tutorials, done a lot of online (re)searching, and created a bunch of your own little programs, putting in 150 hours of work.

Doing 90 minutes a day, 2 days a week, it would take 50 weeks, just under a year, to complete the course.  Doing 60 minutes a day, 3 days a week is the same, of course.    

Doing 90 minutes a day, 3 days a week would take 33 weeks, about 8 months.

Doing 90 minutes a day, 5 days a week would take 20 weeks, or 5 months.

Doing 90 minutes a day, every day, would take 3.5 months. 

Doing 2 hours a day, 3 days a week would take about 6 months. 

Doing 1 hour a day, every day, would take just over 5 months. 

In the next article in this series, I'll detail specific textbooks, video and text-based tutorials, and other assorted learning materials to help put some muscle on the skeleton framework presented in this post.  

See the second article in the series, which covers learning benchmarks for beginner Python programmers.

New Year's Apps: Clock Watchers, Noise Makers and Resolution Keepers

As noted the other day in our post on New Year's apps, New York City's Times Square Alliance is has released a free app that will provide a commercial-free live stream of the Times Square New Year's Eve webcast.  You can check it out on iTunes here.  And AgupieWare's exclusive New Year's Eve Nosie Maker app is also available from the App Store for just $0.99.  Bring the noise!

Over at CNET, Sarah Mitroff  profiles five apps to help keep your New Year's resolutions:
Lose weight, stop smoking, save for a new house, organize your life: Your resolutions are set, and you have every intention of keeping them -- at least until life gets in the way. Don't give up on your goals before February, instead download a few apps that can nudge you in the right direction and coach you to stay on track.