What is  Software Engineering? <ul><li>the multi-person construction of multi-version software (David Parnas, 1975) </li><...
What we do, how we do it <ul><li>Multi-person:  </li></ul><ul><li>system is designed by decomposition into independent com...
Design for Change <ul><li>Defining characteristic of software as a product is its  malleability </li></ul><ul><li>The Code...
Three Laws of Software Engineering 1. A software engineer must design for change. 2. A software engineer must obey orders ...
Examples of Bad Design <ul><li>A restaurant menu: </li></ul><ul><li>Proudly serving Victoria for 25 years </li></ul><ul><l...
Good Design: Object-Relational Mapping (ORM) in Java <ul><li>Industry best-practices: </li></ul><ul><li>DAO pattern isolat...
The Human Factors of Programmers... <ul><li>software development is done by teams of people working towards a common goal ...
My Software Development Philosophy <ul><li>Programmers are not interchangeable eunuchs </li></ul><ul><li>Methodology is tr...
We are all imperfect <ul><li>“ Adjusting to the requirement for perfection is, I think, the most difficult part of learnin...
We are all still in school... The most important lessons you will learn during your career as a software engineer are the ...
 
Lord of the Files <ul><li>Essays on the Social Aspects of Software Engineering </li></ul><ul><li>By Russell Ovans, Ph.D. <...
For more... http://facebook.com/LOTFiles
Upcoming SlideShare
Loading in …5
×

What is Software Engineering?

606 views

Published on

Software engineering is a social activity. Find out why in this short presentation that discusses the Three Laws of Software Engineering and the human factors of programmers.

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
606
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
19
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

What is Software Engineering?

  1. 1. What is Software Engineering? <ul><li>the multi-person construction of multi-version software (David Parnas, 1975) </li></ul><ul><li>whereas the scientist builds things in order to study, the engineer studies in order to build things (Fred Brooks, 1996) </li></ul>
  2. 2. What we do, how we do it <ul><li>Multi-person: </li></ul><ul><li>system is designed by decomposition into independent compilation units (i.e., modules, classes) </li></ul><ul><li>software is written by teams of programmers working in parallel </li></ul><ul><li>Multi-version: </li></ul><ul><li>the software will change over time </li></ul><ul><li>each module hides one design decision behind an abstract interface (e.g., .h file in C, public methods in Java) </li></ul><ul><li>interfaces are less likely (than the implementations they hide) to require modification </li></ul>
  3. 3. Design for Change <ul><li>Defining characteristic of software as a product is its malleability </li></ul><ul><li>The Code of Conduct for any professional software engineer is to design and build systems that are easy to change </li></ul><ul><li>To better server humanity and the customer, it is unethical to do anything else </li></ul>
  4. 4. Three Laws of Software Engineering 1. A software engineer must design for change. 2. A software engineer must obey orders given by his or her manager except where such orders would conflict with the First Law. 3. A software engineer must protect his or her own continued employment, even if this conflicts with the First or Second Law.
  5. 5. Examples of Bad Design <ul><li>A restaurant menu: </li></ul><ul><li>Proudly serving Victoria for 25 years </li></ul><ul><li>Software system: </li></ul><ul><li>Two digit year </li></ul><ul><li>Bad design = difficult and costly to change! </li></ul>
  6. 6. Good Design: Object-Relational Mapping (ORM) in Java <ul><li>Industry best-practices: </li></ul><ul><li>DAO pattern isolates object persistence regardless of how/where data is stored abstract interface defines CRUD methods </li></ul><ul><li>JDBC isolates RDBMS JDBC is an abstract interface defined in java.sql </li></ul><ul><li>Stored procedures isolate schema changes schema is likely to change, so hide it behind an abstract interface of stored procedure calls </li></ul>
  7. 7. The Human Factors of Programmers... <ul><li>software development is done by teams of people working towards a common goal </li></ul><ul><li>project success is effected by the team's ability to communicate and co-operate, and to understand each other and to be compassionate and supportive </li></ul>
  8. 8. My Software Development Philosophy <ul><li>Programmers are not interchangeable eunuchs </li></ul><ul><li>Methodology is trumped by talent </li></ul><ul><li>Politics leads to inefficiencies </li></ul><ul><li>Overcome your insecurities and be nice to your co-workers: better software will result </li></ul><ul><li>Software Engineer = Good Programmer + Good Person </li></ul>
  9. 9. We are all imperfect <ul><li>“ Adjusting to the requirement for perfection is, I think, the most difficult part of learning to program” -- Fred Brooks, Mythical Man-Month </li></ul><ul><li>Adjusting to the imperfections of others is, I think, the most difficult part of learning to be a software engineer . </li></ul>
  10. 10. We are all still in school... The most important lessons you will learn during your career as a software engineer are the personal ones that make you a better human, not the technical lessons that make you a better programmer. Software engineering is a social activity; forget that and your career is lost.
  11. 12. Lord of the Files <ul><li>Essays on the Social Aspects of Software Engineering </li></ul><ul><li>By Russell Ovans, Ph.D. </li></ul><ul><li>Paperback: 114 pages </li></ul><ul><li>Publisher: Thought Pilots (August 10, 2011) </li></ul><ul><li>ISBN: 978-0986941801 </li></ul><ul><li>Available from: Amazon </li></ul><ul><li>This is not your father's Mythical Man Month... </li></ul>
  12. 13. For more... http://facebook.com/LOTFiles

×