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.
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.