Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 14

The Engineering Part: How

Software Engineering is Different


than “Coding”
Software Engineering I | Florida State University |Dr. Chris Mills
Programming Assignments

 By this point in your college career you have written a LOT of code – at least as part of programming
assignments.

 My first claim to you is that the process you used to build that code is similar, yet fundamentally different
than the process of creating production software.

 To kick off this class, we want to catalog and explore these differences. Let’s think about some of the key
properties of a programming assignment:
Programming Assignments:

 Are for a grade

 Have well-defined, abrupt timelines

 Have temporal locality with coding concepts

 Have a low ceiling on negative impacts to your life

 Are often short and intended to be completed by a single developer


Why do these things matter?

 Are for a grade – based on the syllabus, you can just skip some parts or “optimize” failure.

 Have well-defined, abrupt timelines – procrastination has a shelf life of a couple weeks.

 Have temporal locality with coding concepts – you have notes and a textbook to reference; techniques can be
inferred from the assignment’s learning objectives

 Have a low ceiling on negative impacts to your life – if you fail a class, you can take it again.

 Are often short and intended to be completed by a single developer – sociological issues are minimized; so what if
you have a disagreement with yourself?
Coding

 Coding as a verb is just the act of writing some code.

 Nowhere in this action is the intent implied – you could be coding for educational purposes or for work or
just for the fun of it.

 To be a bit pedantic, software engineers do produce code, but there is a lot more to it than just opening a text
editor or IDE and typing on a keyboard.
Software Engineering

 Software engineering is the process of creating a tangible, concrete solution to a problem – with software.

 More than just the ability to code, software engineers must:


 Play the role of bartender/therapist/manager to define the problem and drive projects.
 Design solutions that are generic enough to last a long time and handle unknown situations.
 Work in large teams for a common good – implementing the solution that was designed.
 Stand by their code long after it is delivered.
Software Engineering in Society

 If you think about it, even if you weren’t interested in computer science it would still affect almost every
area of your life.

 Today we have technology that wakes us up, takes us to work, facilitates us doing our jobs, brings us food,
takes us home from work, and helps us fall asleep.

 Much of the history of technology (and software engineering) is predicated on a simple idea: shifting
complexity
Software is Complicated

 Prior to technology capable of removing tedium, humans inherently lived with a lot of complexity.
 Think about producing financial reports without a database or even Excel – it’s not pretty.

 Much of the role of technology is absorbing this complexity from the human condition.
 Rather than you keeping immaculate records in a paper-based ledger, Excel or SQL does the heavy lifting for you –
and you freely give up that complexity.

 The result though, is that software engineering is not trivial.


Software is Big

 Because of the complexity we have shifted from humans to technology, software is also often very large.
 Microsoft Windows ~50 million lines of code
 Microsoft Office \ Linux (most distros) ~30 million lines of code
 Webkit Browser ~140,000 lines of code
 Google Chrome ~1.7 million lines of code
 Chevy Volt ~ 10 million lines of code

 Clearly these are projects that are logistically too large for a single engineer to create, much less maintain.
Software is Big

 Let’s say that you are a “rock star” of a developer and you can generate 10,000 lines of pristine code a day.
 :O that’s a lot of code…

 To build the system for even a simplistic electric car would take almost three years with no time for
debugging, testing, design modifications, etc.

 So, the obvious fix is to bring in more developers – software engineering is a team sport
Software is Built by Teams

 While programming assignments are often solo – production software often isn’t.

 The soft skills required of a good software engineer are vital and EXTREMELY non-trivial.

 Skills like communication, time management, effort estimation, and civility are often quickly overlooked in
lieu of raw technical prowess
 If you are the best programmer on the team, but everyone thinks you are a jerk, you are not the best engineer on the
team.
Communication and Teamwork

 Because software is built in teams, communication is key.

 Many times, unknown aspects of someone else’s life negatively impact their ability to focus, which
negatively impacts their ability to perform their job.

 What happens if an otherwise strong engineer’s parent suddenly dies?


 If a team’s response is cold indifference, the relationship between the team and that engineer might be irreversibly
damaged.
 There are any number of issues like this that exist on a continuum – the simple act of being mean can completely
derail a project.
Software Sticks Around

 While a programming assignment might take several weeks to complete, eventually you complete it and
either take the loss or celebrate the win.

 Software that is released today might still be in use 30 years from now – many banking and business systems
still run on COBOL.

 You can’t simply release a piece of software that is 60% complete and hope for the best – no one will buy it
and your company will fail.
Conclusion

 You might be a fantastic programmer with deep knowledge and years of experience with C++ or some other
language.

 Being a great programmer does not imply that you are a great software engineer.

 To be a great engineer requires soft skills like communication as well as deeply technical skills like
architectural design.

 The purpose of this class is to provide the knowledge and skills to help you bridge the gap from being a
successful programmer to being a successful software engineer.

You might also like