Course Goals and Promise FAQ
I and the entire CSE 110 staff team are excited to bring you the concepts and skills that will enable you to build world-changing software systems. To helps us get on the same page for the expectations for this course, we answer the a few questions for you below.
Why does this course matter?
Software permeates every aspect of life on this planet. And virtually all of you will be working with software in the near (and foreseeable) future, either directly as programmers or managers, or indirectly as part of a larger team. Software engineering is the practice of successfully making software that makes a difference.
What does this course offer to you?
In this course you will gain basic skills in the fundamentals of software engineering. Building software that others can use is hard. After this class, you will have the skills to build modestly complex systems with a small team. We will be using a set of methods that are generally known as Agile Software Development methods, because they allow a programming team to adapt on the fly as issues arise. Such change comes from customers, the market, advances in technology, and the team's own experience. These skills include the ability to:
Apply the Agile software development process
employ an Agile software process to address project risks.
work productively with a small team (2-6 people).
reason about and mitigate problems in an Agile software project.
Develop correct software that customers need
turn vague customer requirements into precisely specified features that customers actually need.
turn feature specifications into executable code.
find (and remove) flaws at all project stages using methods such as testing and code review.
Design software to aid testing, changes to requirements, and developer collaboration
derive a first-cut software design from specified features
employ design patterns to solve software design and programming problems.
change the design of your existing code -- refactor -- so that it is more understandable, more flexible, and easier to extend and reuse.
Use tools to improve productivity and quality
employ a range of automated software tools (e.g., an issue tracker) to speed your work, reduce errors, and keep your team up to date.
productively employ component-oriented software development.
Reason, communicate, and problem-solve in the software project milieu
cope with ambiguity and tradeoffs in a software project.
solve technical problems on your own (independence).
use common (software) engineering concepts and terminology in speaking and writing.
productively debate software issues in the project team setting.
discuss how software fits into the world and the consequent responsibilities that software developers carry.
What this course will not be able to do is provide skills in working with users or building very complex systems. Specifically:
User interface design for a great user experience (take CSE 170 or COGS 120!).
Methods for high assurance (i.e., high levels of correctness and reliability suitable for an airplane or medical device). CSE 112 will get you closer.
Construction of large-scale systems (say, in excess of 1 million lines), built by a large team or multi-team group. CSE 112 will get you closer.
In short, this course gives you a basic foundation in software engineering, suitable for use in student projects in other classes, smaller "start-up" projects, in industry for entry-level positions, and in preparation for advanced coursework in software engineering.
How are you going to accomplish this?
You will be reading best-in-class literature, attending lectures, performing hands-on labs in key topics (mostly tools and technologies), attending discussion sections, and completing a small-team project. They are designed to work in concert.
Each week, before most lectures, you’ll read several pages in the assigned texts to give you your first experience with the new concepts of the week. To figure out if you understood the basics of the reading, you’ll take a basic online “reading quiz” at least 1 hour before coming to class.
Then, in lecture, we’ll work together to test out your understanding of the material and discuss confusion and misconceptions that you may have about it. Note – this makes lecture a very interactive place – you are expected to come prepared to engage and help yourself and others gain a much deeper understanding of the concepts.
Lab comes in as the next element. In lab you will work, typically in pairs, to get hands-on experience with the tools and technologies introduced in the course. We will have lots of TA and tutor support on-hand to help you through any difficulties you may encounter.
In discussion section, the TA will walk you through the labs. For difficult course concepts, we will be developing problems that you can work on in groups and then discuss as a class.
Finally, these elements have prepared you for a small team project where you will experience for yourself the power (and challenges) of applying software engineering techniques in a realistic setting. This is the part where you can really test out your knowledge and understanding of software engineering concepts. You will be expected to explain how the techniques were applied to the project, including what worked and what didn't. The project will be based in Java, so you don't need to learn a new programming language.
Then, in the future, no matter what software project you are working on, you will be able to apply and build on your software engineering knowledge to make you and your project more successful.
How will you (and the CSE 110 team) know if you are making progress in your learning?
You will be getting constant feedback on your learning of each key concept or skill in the course. First, there is the on-going reading quizzes, worksheet questions, and labs. The project, too, will be broken into two planning phases and milestones, which will give the course team a chance to give you feedback on your project at intermediate points. Additionally, we will be conducting regular in-class quizzes (in lieu of a midterm), also giving you weekly feedback on your learning.
You should reflect on each of these experiences each week to determine for yourself if you are making adequate progress – and plan specific changes if you are not.
While working harder will often solve the problem, sometimes working smarter is the better approach, which means doing things like scheduling your preparation for the various activities and assessments and changing how you study. Studying a little bit every day has been shown to be more efficient than cramming, for example. You should not hesitate to ask for help if you need it - in person or on the discussion forums. Study groups are also very productive for many students.