Software Engineering

(Computer Science)

Daniel Farrell
Red Hat SDN Team

VERY QUICK: INTRO TO ME

Daniel Farrell
Software Engineer, Red Hat SDN Team

VERY QUICK: INTRO TO ME

OpenDaylight Integration/Packaging PTL
(delivery pipelines, DevOps tools)

VERY QUICK: INTRO TO ME

OpenDaylight Integration/Test Committer 
(system testing)

VERY QUICK: INTRO TO ME

OPNFV CPerf PTL
(performance testing)

VERY QUICK: INTRO TO ME

OpenDaylight Technical Steering Committee
(tech leadership)

Overview

Overview

Journey to job

OVERVIEW

What is Software Engineering

OVERVIEW

Example Software Engineers

OVERVIEW

Kool-Aid: My favorite parts of the job, conclusions

How I became a Software Engineer

HOW I BECAME A SOFTWARE ENGINEER

"I like biology and medicine..." *click*

HOW I BECAME A SOFTWARE ENGINEER

Linux!

HOW I BECAME A SOFTWARE ENGINEER

"I'm avoiding BioMed work to hack on Linux all night..."

HOW I BECAME A SOFTWARE ENGINEER

BioMed -> Computer Science!

HOW I BECAME A SOFTWARE ENGINEER

NCSU IEEE Robotics
^^best training in Uni

HOW I BECAME A SOFTWARE ENGINEER

Internships in early SDN

HOW I BECAME A SOFTWARE ENGINEER

Open Source + SDN -> Red Hat CTO Office

Software Engineering

SOFTWARE ENGINEERING

Create software

SOFTWARE ENGINEERING

Create: Design, develop, test, doc, maintain

SOFTWARE ENGINEERING

Software: Everywhere! All types, all layers.

SOFTWARE ENGINEERING

Engineering -> Certified Engineer
^^We ignore this

SOFTWARE ENGINEERING

Build on hardware via EE/ECE

SOFTWARE ENGINEERING

Robot team: EE/ECE, ME, CS

vs Computer Science

VS COMPUTER SCIENCE

"Software Engineering vs Computer Science?"

VS COMPUTER SCIENCE

"Science vs Engineering"

VS COMPUTER SCIENCE

Science: Study physical world

VS COMPUTER SCIENCE

Engineering: Build on science to create 

VS COMPUTER SCIENCE

Computer Science: Turing Machine
(what can be computed)

VS COMPUTER SCIENCE

Engineering: CPUs
(do computation)

VS COMPUTER SCIENCE

Computer Science: Graph Theory
(shortest/weighted paths)

VS COMPUTER SCIENCE

Software Engineering: Google Maps
(running software implementation)

VS COMPUTER SCIENCE

Pure CS is possible

VS COMPUTER SCIENCE

Most people use CS degree as foundation

Vs Developer

VS DEVELOPER

"Developer" ~= "Engineer"

VS DEVELOPER

"Software Engineer" == "Software Developer"

VS DEVELOPER

Convention: "Web Developer" over "Web Engineer"

Examples: Software Engineers

Web

web

Web-based content

WEB

Front-end user interface
(HTML, CSS, JavaScript)

WEB

Back-end infrastructure
(databases, Ruby, Python, Linux servers)

Mobile

MOBILE

User-facing apps on mobile devices

MOBILE

Android/iOS Software Development Kits

MOBILE

C++, Java

MOBILE

Simulated phones

MOBILE

Emphasis on aesthetic design, usability

Embedded

EMBEDDED

Software that's close to hardware

EMBEDDED

Low-level code for devices
(SSDs, RAM, network interface)

EMBEDDED

Embedded systems
(robots, IoT, automotive)

EMBEDDED

Assembly, C, Linux, Python

Game

GAME

Create games

GAME

Development via engines of shared libs
(Unity, Unreal, LibGDX, OpenGL)

GAME

Underpinned by CS: Computer Graphics
^^quickly underpinned by math

Test

TEST

Validate software

Test

Functionality: does it work?

TEST

Performance: how fast is it?

TEST

Usability: is it easy to use?

TEST

Security: does it have known vulnerabilities?

TEST

Layers of automated tests per-change

Network

NETWORK

Make the Internet work

NETWORK

Software logic of how data flows

NETWORK

Distributed Routing -> Software Defined Networking
(BGP, RIP, OSPF -> OpenDaylight, OVN)

NETWORK

Specialized Hardware -> Common Software
(hardware switches/firewalls -> vSwitches, VNFs)

Sysadmin/Devops

SYSADMIN/DEVOPS

Manage infrastructure

SYSADMIN/DEVOPS

DevOps*: Automate everything, infra-as-code, modern delivery
(Ansible, Puppet, Packer, Docker, Vagrant)

SYSADMIN/DEVOPS

DevOps* - Proper definition would take 45mins

SYSADMIN/DEVOPS

Code change ->
tests pass ->
release artifacts built ->
more tests pass ->
release published ->
systems updated

Niche

NICHE

Important work, few workers

NICHE

Programming language creation, compilers

NICHE

Operating System Kernel

NICHE

Security
(audit, design)

FAVORITE parts: Software Engineering

FAVORITE PARTS: SOFTWARE ENGINEERING

Open Source

FAVORITE PARTS: SOFTWARE ENGINEERING

Open Source: Development method

FAVORITE PARTS: SOFTWARE ENGINEERING

Open Source: Communities

FAVORITE PARTS: SOFTWARE ENGINEERING

Creative activity

FAVORITE PARTS: SOFTWARE ENGINEERING

Lasting, positive impact
(efficient software -> less energy -> less climate change)

FAVORITE PARTS: SOFTWARE ENGINEERING

Flexibility: Work from home, flexible hours

FAVORITE PARTS: SOFTWARE ENGINEERING

$$$

FAVORITE PARTS: SOFTWARE ENGINEERING

Travel

Conclusions

CONCLUSIONS

Software is eating the world

CONCLUSIONS

Engaging, creative, well-rewarded job

CONCLUSIONS

Skills to build: critical thinking, communication
(math: over-emphasized in stereotype)

CONCLUSIONS

Self-driven learning very possible
(Degree de-emphasized)

CONCLUSIONS

Room to job-shape into something fun for you

Contact

Daniel Farrell
Twitter (optimal):

Others:
dfarrell@redhat.com
dfarrell07 on IRC, GitHub

Software Engineering

By Daniel Farrell

Software Engineering

Talk given at IEEE RoboResearch 2016 about Software Engineering

  • 2,007