In this course, we will continue sampling the perspectives and methods of computer science. The main change from MCS-177 is a different perspective on computation. In MCS-177, we emphasized functions that computed output values from input values. The values themselves could be complex, but were unchanging. In MCS-178, by contrast, we will be emphasizing sequences of actions, many of which modify data objects.
I will be available in my office (OHS 304) from 1:30-2:20 on Tuesdays and Thursdays, from 11:30-12:20 Wednesdays, and from 10:30-11:20 on Fridays, as well as by appointment. Or try your luck: just stop by and see whether my door is open. You may send me electronic mail at sskulrat@gustavus.edu or call me at extension 7654. I'll try to put any updates to my office hours on my web page, so check there if in doubt.
We will use two textbooks, both of which are available without charge on the web: Python for Software Design: How to Think Like a Computer Scientist, by Allen B. Downey, and Concrete Abstractions: An Introduction to Computer Science Using Scheme, by Max Hailperin, Barbara Kaiser, and Karl Knight. No programming will be done using Scheme; the readings from Concrete Abstractions need only be understood at a language-independent, conceptual level. Note that the free manuscript of Python for Sofware Design goes by its working title, Think Python.
Attendance is expected for all project work days. (If you turn in a report early, you are excused from the remaining days devoted to that project.) I will excuse up to two absences per student, for any reason. Use yours wisely. If you exceed this allowance, I may reduce your course grade by one letter grade.
The syllabus shows due dates for six homework assignments. You must turn in all the problems in an assignment by that assignment's due date, but may turn in individual problems earlier if you wish. I will return each problem to you as quickly as I can, but normally with only an indication of whether it is acceptable or needs more work. The reason why I won't write much on the work I turn back to you is because I would like to talk with you face-to-face. If a problem needs more work, you should treat that as an invitation to come talk with me about it. Once you've done the additional work, you may turn the problem in again, attached to (or clearly marked on) the original. In fact, you may turn each problem in as many times as you like, until it is marked as acceptable. Your grade for the homework portion of the course will be based on the fraction of homework problems that you eventually did acceptably.
The final deadline for rewrites of homework problems is 12:30pm on March 5th for assignments 1-3, 12:30pm on April 14th for assignments 4 and 5, and 12:30pm on May 19th for assignment 6.
Unless I indicate that a particular problem must be done individually, you may work on any problem in a group of two or three students. One copy of the solution produced by the team should be turned in, with all team members' names on it. Write “we all contributed fairly to this solution” and have all team members sign under that statement.
There will be two intra-term tests as shown on the syllabus below and a final exam as scheduled by the registrar. If you have a conflict with a testing time, please contact me as soon as possible to make an alternative arrangement.
Exams will be closed-book and mostly closed-notes. You may, however, use a single 8 1/2 by 11 sheet of paper with hand-written notes for reference. (Both sides of the sheet are OK.)
Any substantive contribution to your solution by another person or taken from a publication should be properly acknowledged in writing. Failure to do so is plagiarism and will necessitate disciplinary action.
The same standards regarding plagiarism apply to team projects as to the work of individuals, except that the author is now the entire team rather than an individual. Anything taken from a source outside the team should be be properly cited.
One additional issue that arises from the team authorship of project reports is that all team members must stand behind all reports bearing their names. All team members have quality assurance responsibility for the entire project. If there is irreconcilable disagreement within the team it is necessary to indicate as much in the report; this can be in the form of a “minority opinion” or “dissenting opinion” section where appropriate.
You are expected to be familiar with the college academic honesty honor code policy and to comply with that policy. If you have any questions about it, please ask.
If you are too sick to complete a report on time, you will not be penalized. Simply write “late due to illness” at the top of the report, sign your name and hand it in. Other circumstances will be evaluated on a case-by-case basis.
The course components will contribute to your grade in the following proportion:
Please see me if you have any question how you stand. Class participation is not graded; however, it allows you to find and repair the gaps in your understanding before doing the assignments, and thus can dramatically improve your grade. You are responsible for all course material, whether or not you are present when it was covered or distributed.
If you have a learning, psychological, or physical disability for which a reasonable accommodation can be made, I would be happy to refer you to the college's disability services coordinator and to cooperate in the accommodation process. It is generally best if this can be done as soon as possible.
This schedule of topics is my best guess and is subject to change. Be sure to let me know if there are other topics you want to spend time on or if our pace needs to change. In the readings column, TP = Think Python (followed by chapter numbers) and CA = Concrete Abstractions (followed by section numbers). Recall that Think Python is also known as Python for Software Design.
| Date | Reading | Topic | Due |
|---|---|---|---|
| 2/8 |
TP1, TP2, TP3 | Variables, expressions, statements, and functions | |
| 2/9 |
Project 0: Warmup (day 1 of 1) | ||
| 2/10 |
TP5, TP6 | Conditionals, recursion, and return values | |
| 2/11 |
Project 0: Warmup Part 2 (day 2 of 2) | ||
| 2/12 |
TP7, background | Iteration and GusAir | HW 1 |
|
|
|||
| 2/15 |
An ancient Chinese approximation of π | ||
| 2/16 |
Project 1: GusAir fixed pricing study (day 1 of 4) | ||
| 2/17 |
TP8, TP9 | Strings | |
| 2/18 |
Project 1: GusAir fixed pricing study (day 2 of 4) | ||
| 2/19 |
TP10 | Lists (in the Python sense) | HW 2 |
|
|
|||
| 2/22 |
CA12.2 | Memoization and dynamic programming | |
| 2/23 |
Project 1: GusAir fixed pricing study (day 3 of 4) | ||
| 2/24 |
CA12.3 | Memoization with two dimensions | |
| 2/25 |
Project 1: GusAir fixed pricing study (day 4 of 4) | ||
| 2/26 |
CA12.4 | Dynamic programming with two dimensions | HW 3 |
|
|
|||
| 3/1 |
TP11, TP12 | Dictionaries and tuples | Project 1 |
| 3/2 |
Project 2: GusAir dynamic pricing study (day 1 of 4) | ||
| 3/3 | TP13, TP14 | Data structures and files | |
| 3/4 | Project 2: GusAir dynamic pricing study (day 2 of 4) | ||
| 3/5 | Review, catch up | HW 1-3 rewrites | |
|
|
|||
| 3/8 | Test 1 | ||
| 3/9 | Project 2: GusAir dynamic pricing study (day 3 of 4) | ||
| 3/10 | TP15, TP16 | Objects | |
| 3/11 | Project 2: GusAir dynamic pricing study (day 4 of 4) | ||
| 3/12 | TP17 | Object-oriented programming | Project 2 |
|
|
|||
| 3/15 |
CA13.2 | Shift/reduce parsing | |
| 3/16 | Project 3: Parsing and interpretation (day 1 of 4) | ||
| 3/17 | CA10.2 | EBNF | HW 4 |
| 3/18 | Project 3: Parsing and interpretation (day 2 of 4) | ||
| 3/19 | TP18 | Inheritance | |
|
|
|||
| 3/22 |
Patterns of object composition, subtyping, and inheritance | ||
| 3/23 |
Project 3: Parsing and interpretation (day 3 of 4) | ||
| 3/24 |
TP19 | Graphical user interfaces | |
| 3/25 |
Project 3: Parsing and interpretation (day 4 of 4) | ||
| 3/26 |
CA14.5 | Adventures in the imaginary land of Gack | HW 5 |
|
|
|||
| 3/27 - 4/5
SPRING BREAK |
|||
|
|
|||
| 4/6 |
Project 4: Adventures in the imaginary land of Gack (day 1 of 6) | ||
| 4/7 |
More on the land of Gack | Project 3 | |
| 4/8 |
Project 4: Adventures in the imaginary land of Gack (day 2 of 6) | ||
| 4/9 |
More on GUIs and patterns | ||
|
|
|||
| 4/12 |
More on design patterns | ||
| 4/13 |
Project 4: Adventures in the imaginary land of Gack (day 3 of 6) | ||
| 4/14 |
Review, catch-up | HW 4-5 rewrites | |
| 4/15 |
Project 4: Adventures in the imaginary land of Gack (day 4 of 6) | ||
| 4/16 |
Test 2 | ||
|
|
|||
| 4/19 |
Designing a GusAir demonstration application | ||
| 4/20 |
Project 4: Adventures in the imaginary land of Gack (day 5 of 6) | ||
| 4/21 |
GusAir demonstration design, continued | ||
| 4/22 |
Project 4: Adventures in the imaginary land of Gack (day 6 of 6) | ||
| 4/23 |
Project 5: GusAir demonstration (day 1 of 5) | ||
|
|
|||
| 4/26 |
Project 5: GusAir demonstration (day 2 of 5, in lab) | Project 4 | |
| 4/27 |
Project 5: GusAir demonstration (day 3 of 5) | ||
| 4/28 |
Project 5: GusAir demonstration (day 4 of 5, in lab) | ||
| 4/29 |
Project 5: GusAir demonstration (day 5 of 5) | ||
| 4/30 |
Demonstrating the GusAir demonstrations | ||
|
|
|||
| 5/3 |
CA11.1-2 | The SLIM architecture | |
| 5/4 |
Project 6: Assembly language programming (day 1 of 4) | ||
| 5/5 |
CA11.3 | SLIM's instruction set | Project 5 |
| 5/6 |
Project 6: Assembly language programming (day 2 of 4) | ||
| 5/7 |
CA11.4 | Iteration in assembly language | |
|
|
|||
| 5/10 |
CA11.5 | Recursion in assembly language | |
| 5/11 |
Project 6: Assembly language programming (day 3 of 4) | ||
| 5/12 |
More on assembly language |
HW 6 | |
| 5/13 |
Project 6: Assembly language programming (day 4 of 4) | ||
| 5/14 |
How similar is SLIM to real processors? | ||
|
|
|||
| 5/17 |
TBA |
||
| 5/18 |
No Lab |
||
| 5/19 |
Review and evaluation | HW 6 rewrites, Project 6 | |
|
|
|||
Course web site: http://homepages.gac.edu/~mc28/S2010/