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.
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.
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.
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.
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.
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.
There will be a midterm:
If the schedule for class material changes significantly, the midterm date could change as well.
- Midterm: Monday, February 11
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 will be assigned roughly as follows:
- Homeworks: 50%
- Midterm: 15%
- Final: 30%
- Other: 5%
- Late Policy: unless otherwise indicated, assignments and projects are due by the beginning of lecture on their due date. So, if an assignment is due on February 14, it must be submitted by 12:30pm on that day. You have two no-questions-asked one day extensions (by explicitly saying you are doing so with the submission). Un-extended, late submissions will have 20% taken off for each day (or portion thereof) they are late.
- Cheating vs. Collaboration: Let me just state up front that this is an unresolvable issue. Collaboration, as an aid to learning, is highly encouraged. Cheating is just as highly discouraged.
The university more or less requires that each course present you (students) with a clear definition of unacceptable behavior. Here it is for this course: cheating is any effort made to earn points without actually doing the work those points represent or understanding the material to the degree those points indicate. Not cheating is anything you do that helps you understand the course material (not just the solution to a single problem, but the underlying information on which the solution rests). If you're unsure about any particular activity, please ask.
One point of this course is to use code/tools already written by someone else (for some purpose other than completing the same or a similar assignment). We will direct you to some of these, but you may well find others on your own.
If how these guidelines apply to something you're considering doing isn't clear, please ask.