Please stay healthy and well!

2/7

2/21

2/28

5/22

Team Selection

Client Presentations

Project Proposal

Revised Project Proposal

Final Project Documentation

No class

No class

No class

Project Presentations

5/11

No class

Implementation / Testing / Deployment

18 Days

Full-Power

Project Presentations

5/11

5/13

5/15

5/22

Everything needs to be done

Project Presentations

Be loud, be proud!

Stay High-level (nobody wants all the details)

Summarize the problem

Talk about your Plan, Ideas, and Solutions

Describe Main Challenges (1-3)

And how you solved them...

Show something in action (video or live)

Describe final steps to finish in the last weeks..

Opportunity!

Grade!

Very sorry....

Course Evaluations

Please give anonymous feedback

Due this week!

Let's Recap!

Lecture 1

Mariner 1

Destructive abort 294.5 seconds after launch

$18.5 million

1962

During implementation, a smoothing operation was left out

Control center thought that they lost control of the rocket

... and destroyed it

Panama City Radiotherapy Accident

2000

Wrong Radiation Dose Calculation

Lack of Treatment Plan Verification

Beam Blocks

Too much Radiation

At least 9 Patients died (maybe 17)

many different SDLs

highly dependent on project

Lecture 2

Dr. Grace Hopper

Pioneer of computer programming

Invented first linker

Popularized machine-independent programming languages

COBOL

1906-1992

40 Honorary Degrees, Presidential Medal of Freedom, National Medal of Technology

Grace Hopper Celebration of Women in Computing (GHC) conference series for women in computing

Why don't we just start coding?

Technical Debt / Signature of Mess / Maintenance Hell

Requirements

Design

Implementation

Verification

Maintenance

Testing and Deployment

What?

How?

Build

More Testing / Evaluate

Bugs / New Features

- allows input of 2 numbers

- calculates the sum and displays it

- HTML/CSS for UI

- JavaScript for logic

- write JS code

- comment code

- write unit tests

- deploy on github pages

- does the UI show the sum?

- do users understand the UI?

- what if numbers are too long?

- subtract? multiply?

- fix bugs, create future plan

Lecture 3

Lecture 4

Linus Torvalds

*12/28/1969 in Helsinki, Finland

Creator of Linux

Creator of Git

Opensource Software Pioneer

MS Thesis: Linux: A Portable Operating System

Net worth $150+ million

Lecture 5

Lecture 6

Lecture 7

Lecture 7

Lecture 7

Lecture 8

Kristen Laird

Lecture 9

Lecture 9

Lecture 9

Keep it simple!

Lecture 10

Jupyter Notebook ("glue"-code)

Package structure

Package structure

from .controller import *
from .view import *
from .mathengine import MathEngine
class MathEngine:

  def __init__(self):
    '''
    A constructor.
    '''

    print('Really new Math Engine instance.')

  def add(self, number1, number2):
    '''
    Takes 2 integers, and adds them.
    '''

    return number1 + number2

No user interaction here! Just Logic!

from .ui import UI
class UI:

  def __init__(self):
    '''
    '''

    print('New UI')

  def start(self, controller):
    '''
    We ask the user for 2 numbers.
    '''

    print('Please enter number1')
    number1 = input()

    print('Please enter number2')
    number2 = input()

    result = controller.add(int(number1), int(number2))

    print('Result:', result)

UI stuff here that calls the logic!

This was the VC (View and Controller) part of the MVC pattern!

Why structure the code like this?

Architecture is more important than features!

Remember this!

Divide and Conquer

Problem

Sub-Problem

Sub-Problem

Sub-Problem

Solved

Sub-Problem

Solved

Solution

Divide

Divide

Conquer

Conquer

It's a lifestyle!

Information Hiding

class MathEngine:

  def __init__(self):
    '''
    A constructor.
    '''

    print('Really new Math Engine instance.')

  def add(self, number1, number2):
    '''
    Takes 2 integers, and adds them.
    '''

    return number1 + number2
....

controller = MathEngine()
result = controller.add(int(number1), int(number2))

....

Project Proposal Template

Lecture 11

Lecture 12

Lecture 13

Lecture 14

class Circle:
    
    instance = None
    
    def __init__(self):
        '''
        Constructs a circle.
        '''
        self.__radius = 7 # this is private
        self.__radius2 = 1
        
        print('called constructor')
        
    def setRadius(self,radius):
        
        if radius == 7 or radius == 8:
        
            self.__radius = radius
        
    def getRadius(self):
        
        return self.__radius
        
    def getRadii(self):
        '''
        Returns a list of both values.
        '''
        return [self.__radius, self.__radius2]
        
    def draw(self):
        print('O'*self.radius)
        
    @staticmethod
    def create():
        
        if Circle.instance == None:
            Circle.instance = Circle()
            
        return Circle.instance
        
public final class Circle {

    private static final Circle INSTANCE = 
      new Circle();

    private Circle() {}

    public static Circle getInstance() {
        return INSTANCE;
    }
}

Hands-on Series!

Lecture 15

No Code Access!

Who fixes bugs?

And, how fast?

What about interfaces between our code and the bought component?

Migration and Support Team!

Super Coder

Expand Your Coding Knowledge

Know As Many Tools As Possible

Improve Your Communication Skills

Think Big Picture

Understand All Solutions Are Not Equal

Build and Break Stuff

A system generates weather maps using data collected from unattended weather stations.  Each weather station collects meteorological data and produces summaries of the data.  On request, it sends the summary information to an area computer.  The area computer uses a database of digitized maps to generate a set of local weather maps.

Noun Identification

Prof. Kenneth Fletcher