# First Steps On A Software Project CS 300 Lecture 1.2 Bart Massey 2013-10-03 # Overview * Misc notes * How to think about software * Things you'll want to set up * How software is built * "Version Control" with Git # Misc Notes * I was wrong about Start-In-9, the new MCECS startup program. Looking at the fine print, it's open only to mechanical and electrical engineering students. * I will be displaying fragments from *The Daily WTF's* *Code Snippet Of the Day* feature each class lecture. You are encouraged to peruse on your own: there's amazing stuff in there. Today's CSOD is . # Class Eligibility * Let's walk through getting set up on the Moodle. (demo) You will be expected to be set up no later than Monday morning. Otherwise, you may be dropped from the course. * Speaking of being dropped from the course, let's talk about prerequisites... Anyone without the prerequisites for this course will be administratively dropped *unless* by close of business tomorrow they have sent me an email explaining why they have the required prerequisites anyhow. (Reminder, the relevant prerequisites are CS 163, CS 202, the prerequisites for those courses, and either currently admitted to the program or in-progress this quarter.) I don't want to waste your time and ours on this class if you can't build software well enough to get started. # How To Think About Software * Chapter 2 of the course text is an extended discussion of how to think about software development, couched primarily in metaphor. * I think that some of these metaphors are better than others. * Writing code: McConnell picks letters instead of books. * Growing code: McConnell is basically right, I think. But OSS? * Accreting code: Yes, this happens all the time. * Constructing code: This is the central metaphor of the book, but it's weak in some ways. # Things You'll Want To Set Up: Ergonomics * How to set up a room * Lighting plan * Temperature * Quiet * Clutter-free * How to set up a monitor * Size / resolution / distance (glasses) * Brightness * Laptops are evil * How to set up a chair/desk/keyboard/mouse: * Elbows level * Wrists elevated or flat (wrist braces?) * Good horizontal spacing # Things You'll Want To Set Up: Prog. Env. * "Physical" infrastructure * **Backups** * **"Version Control"** * Operating system * Selected language and tools (more later) * Internet connection (best possible) * Communications * What modalities? * Interruption and flow state # How Software Is Built * Engineering is a four-step process: * *What* are you going to build? (requirements) * *How* are you going to build it? (design) * *Build* it (implementation) * Is it built *right*? (validation and verification) * Development is * Incremental (build successively more of the project * Iterative (may have to revisit the four steps a lot) * V&V plan should be known at start of project * Testing * Inspection * Formal Methods * Failure to do requirements properly is biggest failure mode. # Version Control With Git (In-class Git tutorial. Transcript will be placed on the Moodle later.)