This talk gives an overview of development of software engineering since the term was coined in 1967. The presentation identifies major eras in software development, as well as cross-cutting themes (including abstraction, modularity, user experience, management, and tools), key advances over the 50 years, and some forecasts for the near future. A recurring theme is that hardware advances drove software innovation. The presentation concludes with the observation that software has now become critical global infrastructure and that software engineers must be aware of their responsibility to society. The presentation also contains photos by the author of many of the cities that were host to the International Conference on Software Engineering. This presentation was originally given at the School of Computing at the National University of Singapore and at the SF Bay Area Chapter of the ACM.
1. Fifty Years of Software Engineering
Tony Wasserman
Carnegie Mellon University Silicon Valley
Bay Area ACM
15 November 2017
2. Software Today
• Massive, highly reliable global applications
— Facebook and WhatsApp
— Amazon.com
— Google Search, Gmail, and YouTube
— Netflix
— GitHub
— WeChat (Weixin)
• Millions of mobile apps, mostly for Android and iOS
• Highly interconnected platforms, applications, and devices
• Inconceivable 50 years ago
3. Computing Power - 1967
• IBM 360/65
— Processor speed 1.333MHz (A11 about 4000x faster)
— Core: up to 1Mb (iPhone 8 about 256,000x more)
— Extended storage: up to 8 Mb
• Everything was slow
— Lots of effort aimed at efficient use of highly constrained
resources
— Many tasks infeasible
• Sizeable space requirements
• Astonishingly high prices by today’s measure
5. Software in 1967
• Focus on individual programmer; no concept of software
professional
• No techniques for estimating required effort
• Very beginning of software industry
— Most software bundled with hardware or given away
— Autoflow as first commercial product
• Numerous large critical software projects in trouble
— Led to collective effort to address this problem
6. The Birth of “Software Engineering”
• Term credited to Prof. Dr. Friedrich (Fritz) Bauer by Brian
Randell, co-editor of first report
• Two NATO-sponsored workshops
— Fall 1968: Garmisch-Partenkirchen
— Fall 1969: Rome
• Mix of academic, industrial, government participants
• Discussion of business and technical topics
9. Getting Here from There: Hardware
• Hardware advances enable higher performance, lower costs,
and new types of applications
— Personal computers
— Alphanumeric and bit-mapped displays
— Networking and distributed systems, esp. Ethernet
— Large scale connected storage
— Flash memory
— Mobile devices
— Cloud computing
— Sensors and connected devices
Behind the scenes:
Faster processors
Miniaturization
Cheaper memory
Display technology
Higher bandwidth
10. Hardware Advances Drive Software
• Personal computers => Consumer-packaged software
• Bit-mapped displays => Windows and GUIs
• Networking and distributed systems => Web and hosted
applications
• Large scale connected storage => Data management
• Touch screen => Tablet and Mobile apps
• Mobile devices => Apps
• Cloud computing => Massive scalable applications
• Sensors and connected devices => Ubiquitous computing
13. Getting Here from There: Eras
• Programming Methodology (from 1968)
• Software Lifecycle (from 1970)
• What Not How – Requirements and Specifications (from 1976)
• Computer-Aided Software Engineering (from 1980)
• Capability-Maturity Model (from 1988)
• The Web – Everyone’s a User (from 1994)
• Mobile Apps (from 1997)
• Connected World – Ubiquitous Computing (from 2008)
15. Getting Here from There: Software Themes
• Abstraction
• Modularity and architecture
• Notations
• Development Teams and Processes
• Product Quality
• User Experience
• Reuse
• Tools and Automated Support
• Management: People, Process, Product
17. Abstraction
• System software – OS, DBMS, and Networks
• Programming languages – Procedural, Functional
• Objects
— Simula67, Smalltalk
• Frameworks
— MacApp (1985), .NET, J2EE, Angular
— Patterns
• Virtual machines
— Originated with time-sharing in 1960s
• Containers
— Docker, Kubernetes
18. Modularity and architectures
• Centralized
— Functions and subroutines
• Client-server
• Frameworks and libraries
— Server side – associated with programming languages
— Client side (Angular, React)
• Cloud computing
• Microservices
• Containers and orchestration
20. Notations
• Programming Languages
— Traditional compilation vs. virtual machine vs. interpreted
— Domain-specific
— FORTRAN to Pascal to C to C++ to Java to Python
— LISP to Haskell and Erlang to Scala
— JavaScript
• Modeling
— Structure Charts
— Entity-Relationship Diagrams
— Dataflow Diagrams
— UML
21. Development Teams and Processes
• Waterfall
• Iterative development - Spiral model
• OO development
• Agile and Scrum
— Agile Manifesto (2001)
• Continuous development
• DevOps
— Chef, Puppet (2007-8)
23. Team Collaboration
• Face to face
• Written specification and design documents
• Email
• IRC
• Video conferencing
• Chat applications
— Slack, Mattermost
27. User Experience
• Contextual design
• Technology dependencies
— TTY
— Alphanumeric displays
— GUI
— Web
— Mobile
— "Smart" devices
o Automobiles
o Fitness and health
30. Reuse
• Architectures
• Libraries and frameworks
• Code
Software engineers formerly prioritized writing code,
but now prioritize finding existing components, often
free or open source.
31. Tools and Automated Support
• IDEs
• CASE tools
• Version control and configuration management
• Issue tracking
• User Interface design and prototyping
• Testing
• Collaboration and workflow support
• Integration and DevOps
34. Management: People, Process, Product
• Chief Programmer Teams
• Key Process Areas in CMM
• Agile Management
• Product and Process Metrics
• Communication Processes
• Product Roadmaps
36. Continuous Improvement through Eras
• Early days
— Slow machines required extra attention to performance
— Bespoke code with little reuse and few libraries/frameworks
— Little experience with large development teams
• Today
— Machine and data speeds make up for poorly written code
— Heavy reliance on frameworks and libraries
— Integrated development environments include collaboration
— Decades of experience lead to “best practices”
38. Backsliding
• Modern emphasis on coding schools
— Online, e.g., Codecademy
— Coding Bootcamps, e.g., General Assembly
— Everyone’s a programmer, e.g., Girls Who Code
• Hackathons
• Focus on code, not on software engineering or computer
science foundations
40. Key Advances over 50 Years
• Programming methodology, esp. structured programming
• Unix and C
• SEI and software processes
• Linux, MySQL, and open source
• Web browsers w/JavaScript
• Development environments (Visual Studio, Eclipse)
• Abstractions (OO, Libraries, Frameworks, Virtual machines)
• Massive web and cloud applications
• Agile Development
• ”Low code” applications (Content Management, Blogs)
• GitHub and GitLab
42. What’s Next?
• More new development methods and tools
• Software-related crises
— Autonomous vehicles
— Medical devices
— E-commerce systems
— Major security breaches
— Cyberwar
• Potential licensing/certification of developers working on
critical applications
• Larger government roles
• More hardware advances – quantum computing
46. Software as global critical infrastructure
• Economic, political, and social implications
— Importance of tech leadership
— Economic importance of software businesses
— Ability to defend against cyber attacks
— Education for the current and future workforce
• Toward a digital planet with leaders and laggards
48. Contact information
Anthony I. (Tony) Wasserman
post: Carnegie Mellon Silicon Valley
Moffett Field, CA 94035 USA
email: tonyw@acm.org
Skype: tony.wasserman
Twitter: twasserman