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
Last modified: Tuesday, 29 September 2015, 6:21 PM