This Software Engineering (SwEng) course provides the foundations of becoming a good software engineer: how to think about software, how to structure software, how to modify it, and how to evaluate it. We study the basic concepts and tools necessary in building software artifacts that are reliable, secure, user-friendly, and safe. We learn best practices for developing, organizing and managing software projects, along with responding in an agile manner to changes in requirements and conditions.

Working in large teams, using unfamiliar code bases, interacting with real customers, planning a feature, packaging it up for distribution and maintenance, etc. are things that inexperienced developers rarely get right, but are often vital to the success of a software project. Mediating between the needs of customers and the turn-coffee-into-code hacker attitude requires understanding both sides. Because of this, it is generally accepted that there is an order of magnitude difference in the productivity and programming quality of a top-10% developer vs. an average developer. Our goal in SwEng is to help students evolve from mere programmers to top-10% software developers. 

( The companion Software Development Project course will not be offered in the 2013-2014 academic year. )