Course Overview


Course Catalog Description

Introduction to key concepts and tools in the development of software not introduced in the introductory programming courses. Includes programming with explicit memory management and layout (e.g. C or C++), techniques for group software development, modern design, implementation, and testing patterns and strategies, and societal impact. Prerequisite: CSE 143.

Actual Course Goals

We normally think of our courses as providing a mix of concepts (generalizable ideas), skills (less generalizable ideas), and abilities (experience with some specific tools or methodologies). As you move on to higher level courses, they will increasingly concentrate on concepts. At the same time, quite often they will reinforce your learning of the concepts with homeworks that ask you to build software artifacts. That is, you'll be doing some programming.

A primary goal of this course is to provide you with abilities, skills, and concepts that will make later course experiences more valuable by making you more efficient as programmers. The less time you have to spend translating ideas into working code, the more time you'll have to spend thinking about the ideas. We'll try to do this directly, by giving you experiences with some tools that will be useful in those later courses (and beyond). Moreover, we'll try to help you acquire the skill of quickly mastering new tools.

Additionally, programming systems are themselves interesting and often quite beautiful (or at least elegant). We'll try to develop a sense of what distinguishes well designed from poorly designed systems.

Finally, it is important for people engaging in professional activiities to think about how their work relates to the larger social context. A portion of this course is set aside for discussions on that topic.

Assumed Background

We assume you know the material from CSE 142 and 143. What is important is some general programming experience - we may not program in Java at all. No more experience than 142/3 is expected, though.

Homework

There will be homework. Most of it will be implementations and/or designs. We won't be tunneling down to try to learn every detail of anything. We will be moving quickly from one tool to another, with the idea that you can return to figure out exactly how to do something with a tool later, now that you know the tool exists and have the idea of what it is you're looking for.

What Are the Risks?

It's always a good idea to think about what the risks are before starting a project, such as this course. Based on previous versions of this course, the main risk appears to be getting control over the amount of time you spend on this course. While the workload is designed to be appropriate for a 3 hour course, and most students report that they are able to complete the homeworks in that time, for a few the amount of time spent has been much, much larger.

If you find that your progress on an assignment is painfully slow, you shouldn't adjust to it by putting more and more hours each day into it. Instead, you think about why progress is so slow, and how you might change how you're working to make it more efficient. Usually there is some concept that hasn't been communicated to you. Come talk with the instructor or TA. Most often, the time you spend will be more than repaid by hours saved finishing the assignment.

Other Odd Things

Think of some common tool you use all the time, like your cell phone, or maybe Word. Do you know everything that can be done with it, and how to do it? Me neither, for any of the technologies we'll use. The same is true of everyone. Getting along with not knowing everything is one of the abilities the course will highlight. Hopefully, having some sense of when it's time to look for something you don't know about, rather than struggling trying to use only the things you do, will come out of this course as well.

Exams

There will be a midterm: If the schedule for class material changes significantly, the midterm date could change as well.

There will be some kind of final. The form and time at which it will take place are TBD -- i.e., don't make vacation plans during our scheduled exam time (8:30-10:20, Thursday, March 20) just yet.

Grades

Grades will be assigned roughly as follows:

Policies