Lecture 1-1
Elements Of Software Engineering
CS 300 Lecture 1.1
Bart Massey bart@cs.pdx.edu
About This Course
- Make you a programmer
- Prepare you for industry
- Prepare you for Capstone
- Prepare you for Academia
Coursework
- Project-oriented
- Python on Raspberry Pi B+
- Collaboratively-graded
- In-class work, additional assignments
Syllabus
http://moodle.svcs.cs.pdx.edu 13ftw
About Bart
- 30 years experience
- 2.5 years full-time industry
Why Is Programming Hard?
- Figuring stuff out
- People
Entrance Exam
Write a function (or method or whatever) that, given an array of positive integers, returns the array index (position) of the first occurrence of the minimum value in the array.
Sample Solution in Pascal
function min_index(var a : array of int; int n) var min_v, min_i, i : integer; begin min_v = a[0]; min_i = 1; for i from 2 to n do if a[i] < min_v then begin min_v = a[i]; min_i = i end done; return min_i end
Software Engineering Is Engineering
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)
Engineering is interdisciplinary
Engineering is two-tiered:
- Project: Actually constructing the necessary artifact
- Process: Managing the work of constructing the artifact
Engineering is about risk management
- What are the likelihoods of various risks?
- What are the consequences of various risks?
- How do risks interact?
Software Engineering Is Weird Engineering
Extraordinarily complex artifacts
- Other fields are complicated only as software enables this
Bits are not atoms
- Product is infinitely perfectly replicable and distributable instantly at zero cost
- Wear and tear are not a thing
Software doesn't exist by itself
- Software-intensive systems
Software Engineering Is New
Didn't exist until about 50 years ago
- Wasn't a real thing until about 40 years ago
Tremendous (though slowing) pace of change
Still highly failure-prone
What Does This All Mean To You?
You (supposedly) know how to program at this point. Gratz
What do you still need to learn?
- End-to-end engineering
- How use / manage process
- How to work with people
- How to manage large scale complexity
- How to manage risk
- How to manage rapid change
There's only so much I can tell you
- We only know so much
- I only know so much
- Much of it isn't well-written-down