0% found this document useful (0 votes)
14 views14 pages

1 CodingVEngineering

Uploaded by

Cole Warren
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views14 pages

1 CodingVEngineering

Uploaded by

Cole Warren
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 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