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):
@dfarrell07
Others:
dfarrell@redhat.com
dfarrell07 on IRC, GitHub
Made with Slides.com