Unit 1: Software Engineering

« Previous | Next »

After a brief introduction to programming concepts, this unit focuses on the importance of abstraction and modularity for managing complexity. General principles are developed in the context of state machines, with tangible applications in controlling the behaviors of a mobile robot.

Diagram of sensor input, brain, and action.

Topics procedures, data structures, objects, state machines
Lab Exercises implementing robot controllers as state machines
Abstraction and Modularity

Combinators

Cascade: make new state machine (SM) by cascading two SMs

Parallel: make new SM by running two SMs in parallel

Select: combine two inputs to get one output

Theme PCAP (Primitives, Combination, Abstraction, Patterns)

Looking for something specific in this course? The Resource Index compiles links to most course resources in a single page.

« Previous | Next »

« Previous | Next »

Session Overview

Diagram of EECS, the universe, and 6.01 topics.

In this session, we introduce you to some of the core concepts of 6.01. We will also focus on programming, in particular the object-oriented programming paradigm in Python. Topics include primitives, expressions, assignments, functions, environments, OOP, and inheritance.

The overview handout provides a more detailed introduction, including the big ideas of the session, key vocabulary, what you should understand (theory) and be able to do (practice) after completing this session, and additional resources.

Session Content

Readings

Read chapters 1-3 of the course notes.

Lecture Video

Watch the lecture video. The handout and slides present the same material, but the slides include answers to the in-class questions.

About this Video

Introduction to the four modules of 6.01 (software engineering, signals and systems, circuits, probability and planning). The lecture then introduces object-oriented programming in Python, and ends with a discussion of environments.

Recitation Video

These videos have been developed for OCW Scholar, and are designed to supplement the lecture videos.

Session Activities

The problems in the tables below are taken from the 6.01 Online Tutor, an interactive environment that is not available on OCW. Do not try to answer these questions in the PDF files; answers will not be checked, and cannot be submitted.

Design Lab

PROBLEM # QUESTIONS
1.3.1 Fibonacci numbers (PDF)
1.3.2 Simple OOPs (PDF)
1.3.3 Transcript (PDF)
1.3.4 2D vector arithmetic (PDF)
1.3.5 Polynomial representations (PDF)
1.3.6 Polynomial class (PDF)

Additional Exercises

PROBLEM # QUESTIONS
1.4.1 Structured assignments (PDF)
1.4.2 Nested and shared structure (PDF)
1.4.3 List comprehensions (PDF)
1.4.4 OOPs (PDF)
1.4.5 OOPs (PDF)
1.4.6 OOPs (PDF)
1.4.7 Palindrome [optional] (PDF)
1.4.8 Substring [optional] (PDF)
1.4.9 Extract tags [optional] (PDF)
1.4.10 Fruit class [optional] (PDF)
1.4.11 Warehouse [optional] (PDF)

Check Yourself

Nano-Quiz

Nano-quiz problems and solutions are taken from a previous version of the 6.01 Online Tutor. Do not try to answer these questions in the PDF files; answers will not be checked, and cannot be submitted.

« Previous | Next »

« Previous | Next »

Session Overview

Image of the Towers of Hanoi puzzle.

In this session, we expand on programming, introducing other programming paradigms and indicating features of Python that tie in to notable programming concepts.

We also introduce state machines. State machines model systems that are functional, but also have memory. State machines are incredibly general, but incredibly powerful, and can be used to model all kinds of systems, as you’ll see in future sessions. You can use state machines to control, model, and predict behaviors in systems.

The overview handout provides a more detailed introduction, including the big ideas of the session, key vocabulary, and what you should understand (theory) and be able to do (practice) after completing this session.

Session Content

Readings

Read chapter 4 of the course notes.

Lecture Video

Watch the lecture video. The handout and slides present the same material, but the slides include answers to the in-class questions.

About this Video

Discussion of imperative, functional, and object-oriented programming styles. State machines are introduced, using a turnstile as an example.

Recitation Video

These videos have been developed for OCW Scholar, and are designed to supplement the lecture videos.

Session Activities

The problems in the tables below are taken from the 6.01 Online Tutor, an interactive environment that is not available on OCW. Do not try to answer these questions in the PDF files; answers will not be checked, and cannot be submitted.

Software Lab

PROBLEM # QUESTIONS
2.1.1 State machines (PDF)
2.1.2 Turnstile state machine (PDF)
2.1.3 Double delay state machine (PDF)
2.1.4 Comments machine (PDF)
2.1.5 First word machine [optional] (PDF)

Design Lab

Additional Exercises

PROBLEM # QUESTIONS
2.3.1 Inheritance I (PDF)
2.3.2 Inheritance II (PDF)
2.3.3 Inheritance and state machines (PDF)
2.3.4 Introduction to recursion (PDF)
2.3.5 Slow mod (PDF)

Check Yourself

Nano-Quiz

Nano-quiz problems and solutions are taken from a previous version of the 6.01 Online Tutor. Do not try to answer these questions in the PDF files; answers will not be checked, and cannot be submitted.

Homework

Homework 1 refers to five questions in the Online Tutor. In this case, PDF files for each question have not been provided, since they do not contain any additional content beyond what is described in the handout below.

« Previous | Next »

Learning Resource Types
Lecture Videos
Recitation Videos
Problem Sets
Exams with Solutions
Lecture Notes
Instructor Insights
Programming Assignments
Exams