In this course you will learn how to become a good software engineer: how to think about software, how to structure software, how to modify it, and how to evaluate it. We will give you the basic tools and concepts to help you build software artifacts that are reliable, dependable, usable, safe, and secure. In the real world, developers work on code bases they cannot comprehend completely, and this requires a different approach from what works on a project you wrote yourself. Planning a feature, estimating total cost, packaging it up for distribution and maintenance is something that inexperienced developers never get right, but is often vital for the success of a software project. Mediating between the needs of customers and the turn-coffee-into-code hacker attitude requires understanding both sides of the equation. In CS-305, we expect you to learn best practices for developing, organizing and managing software projects, along with responding in an agile manner to changes in requirements and conditions.
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 this course is to help you evolve from a mere coder into a top-10% software developer.
Milestone #4 has been posted.
Optional Milestone #5 has been posted.