In MPCS 50101, we provide an immersive introduction to programming for students who may not have prior experience. Although we use the Java programming language, the course gives emphasis to fundamental concepts in computer programming, in favor of the quirks of Java. The main distinctive feature of Java that finds its way into our curriculum is its emphasis on object-oriented software design. Therefore we characterize this course as a broad introduction to general-purpose computer programming and algorithmic reasoning in an object-oriented context.
The specific goals of the course are these:
- to learn to construct algorithms to solve common problems,
- to learn to express algorithms precisely as computer programs,
- to learn to refine and improve programs by an iterative process, including by identifying errors carefully and fixing them,
- to learn to identify when primitive data types are appropriate to a task, and when compound data is needed,
- to develop a notion (as opposed to a theory; that comes later) of computational efficiency,
- to learn about data structures for collections to the greatest possible extent, including but not limited to arrays, lists, stacks, queues, maps, sets, trees, and hash tables.
As additional goals, students will begin to learn to view a computer as a programmer does, becoming acquainted with common tools like the command-line terminal and emacs, and will also learn some of the language computer programmers and computer scientists use to talk about problems and their solutions. In this course alone, mastery should not be expected, although we intend to put you on the path to mastery as best we can in the available time.
It is expected that students will go on to write programs in other languages and in other paradigms later in their careers. Correspondingly, the course is designed to provide broad rather than narrow preparation.
Course Contents (subject to change)
- Week 1: programmers' tools, primitive data, operators, expressions
- Week 2: objects, classes, methods, interfaces, tests
- Week 3: conditionals, recursion, iteration, Strings, arrays, collections
- Week 4: images, enumerated types, class equality, I/O, exceptions, errors
- Week 5: midterm exam; searching, sorting, efficiency
- Week 6: lists, trees, generics
- Week 7: sets, maps
- Week 8: hash tables, case studies: data sets
- Week 9: case studies: game strategy, graphs
- Week 10: final exam
Introduction to Programming in Java, Sedgewick, Wayne. The textbook is available on campus at the Seminary Co-op Bookstore (5751 S. Woodlawn Avenue); you can of course find new and used copies at your favorite online bookstore as well.
Coursework is comprised of homework exercises and exams. You score will be computed according to the following formula: homework exercises 40%, midterm exam 30%, final exam 30%. The lowest homework score will be dropped for each student. We will scale the grades, so what precisely constitutes an A, B, etc. will be determined by the collective performance of the class.
Homework: There will be weekly homework assignments. These will be assigned shortly after class and due before the next one (the exact time is to be announced).
Exams: There will be a midterm exam for all students tentatively scheduled at the following time: Thursday, July 23, 5:30pm. Plan accordingly. The final exam will be on Thursday, August 27 at 5:30pm. Both exams will be held in Ryerson 251 (our regular classroom).
Late Work: Deadlines in this course are rigid. Since you submit your work electronically, deadlines are enforced to the minute. Late work will not be counted, but the lowest homework grade will be dropped from the final reckoning (providing de facto amnesty against one missed deadline).
(We will also accept late work in the case of special circumstances, when those circumstances are extraordinary.)