6.033 is an MIT class that teaches basics of “Systems Engineering” and is available online on MIT OCW for everyone. Recently I have finished watching the lectures and doing the assignments and I can certainly say that I learnt a big bunch from it.
At Meteor, a lot of people talk about 6.033 as of "the class everyone should take". It is hard to overstate the amount of useful and practical knowledge one can learn from this course. Some of my friends who have taken this class live at the real MIT say, that it is "overrated". But I tend to agree with my peers - 6.033 teaches a broad list of topics with enough depth to be in use to anyone who works in modern day tech industry.
What is “Systems Engineering” anyway? What are systems? Doesn't any non-trivial software eventually become a “system”? Building a system seems to be a natural way to manage the complexity in an increasingly advanced project. That's why 6.033 introduces students to:
- Client/Server architecture
- Operating Systems
- Concurrency and parallel computation
- Networks and the Internet
- Distributed systems
- Databases and transactions
- System security
This is a long list of topics covered in about 24 hours of video lectures, two dozens of papers, textbook chapters and assignments. Notably, often the material covered in lectures doesn't overlap much with the content of papers.
Because this course covers so much ground, I am pretty sure that just taking this one class will give anyone enough academic knowledge to work at most SV web-startups positions.
This class involves very little coding (only a bite for each assignment) and lots and lots of reading. Reading textbooks, reading papers, reading essays and reports. A lot of reading. Some of my peers at Meteor call it “the paper reading class”.
These amounts of text can be unusual to some people. An important skill to learn here is how to skip paragraphs of text full of not so useful information, skimming before reading. Also picking the right time for reading a paper is important: a wall of words can easily knock one out to the bed.
Don't hesitate looking out for more compact and better organized summaries about the paper assigned in the class. By taking 6.033 online you would likely limit yourself to just reading and notes taking without the recitations. Discussing the key ideas with others might make a big difference, as well as reading others’ opinions online.
The Longest Journey
My reading of the class began around November 2013. I was watching on average one lecture a week. Each video lecture would take me around an hour to take notes, each assignment would take between 20 and 50 minutes to accomplish. The readings were tough and some especially boring papers would keep me stuck for weeks without much progress - I procrastinated reading them a lot.
I have finished everything except for the final projects (DP1, DP2) in the beginning of October 2014. So 11 month for a class that would take an MIT sophomore 1 semester (6 month) to pass. And my learnings were even easier since there were no hard dates on quizzes and assignments and I skipped both design projects all together.
I collected some data: to keep track of my progress, I would record every week I would do something related to the class. You can clearly see how I was highly motivated in the beginning and then got to break for the whole December. Later I continued in January and then got busy on work. After February, March and April, I got one week of activity in May. And then starting at June everything went smoothly and towards July, August and September there is an acceleration in finish. I also had a week long vacation in September that I dedicated to finishing this class.
Looking back at this graph in retrospect, I probably learnt a lot from real work in the second part of the year and that helped me to accomplish a lot more and move faster.
My notes are available online.
What is next?
Overall I believe this course was very beneficial to me and I would probably recommend at least skimming some of the materials to anyone who did not go through all of this already at school and wants to make up for it learning bits here and there themselves.
After this course it would probably much easier to start learning narrower topics in more details: Operating Systems, Networks, Compilers, Database, Distributed Systems - any of these would be a natural continuation with some obvious real-life practical knowledge. This is exactly what I am going to do next - learn these one by one.
- Watch the version of Spring 2012 on MIT OCW: http://video.mit.edu
- See the schedule with all papers and assignments: http://web.mit.edu/6.033/www/schedule.shtml
- My notes are available online: https://github.com/Slava/6.033-systems-engineering