770 likes | 886 Views
Read’n Writ’n ‘Rithmetic … & Cod’n. Grady Booch IBM Fellow. NUMB3RS @ http://www.cbs.com/primetime/numb3rs/. “One Hour,” NUMB3RS @ http://www.cbs.com/primetime/numb3rs/. Software in the Mainstream. An entire generation has grown up believing that the Internet has always existed
E N D
Read’n Writ’n ‘Rithmetic … & Cod’n Grady Booch IBM Fellow
“One Hour,” NUMB3RS @ http://www.cbs.com/primetime/numb3rs/
Software in the Mainstream • An entire generation has grown up believing that the Internet has always existed • Software-intensive systems pervade the interstitial spaces of society
Our civilization runs on software. Bjarne Stroustrup
You have riches and freedom here but I feel no sense of faith or direction. You have so many computers, why don’t you use them in the search for love? Lech Walesa Epstein, J., Yale Book of Quotations, New Haven, Connecticut: Yale University Press, 2006.
The Promise Software-intensive systems can amplify human intelligence • They cannot replace human judgment Software-intensive systems can fuse, coordinate, classify, and analyze information • They cannot create knowledge • Software-intensive systems can amplify human intelligence • Software-intensive systems can fuse, coordinate, classify, and analyze information •
The Limits Not everything we want to build can be built • There exist pragmatic theoretical and technical limits Not everything we want to build should be built • There exist moral, economic, social, and political limits • Not everything we want to build can be built • Not everything we want to build should be built •
The Beauty Software-intensive systems are perhaps the most intellectually complex artifacts created by humans • Software is invisible to most of the world • The best software is simple, elegant, and full of drama as manifest in the cunning patterns that form its structure and command its behavior • Software-intensive systems are perhaps the most intellectually complex artifacts created by humans •
1994 Chaos Report • 16.2% of software projects are successful • 31.1% of software projects are outright failures • 52.7% of software projects are challenged http://www.standishgroup.com
2006 Chaos Report • 35% of software projects are successful • 19% of software projects are outright failures • 46% of software projects are challenged http://www.standishgroup.com
Reasons for Improvement • Better project management • Iterative development • Emerging Web infrastructure http://www.standishgroup.com
Software Engineering Body of Knowledge • Project of IEEE, released in 2004 • Knowledge areas • Requirements - Configuration management • Design - Management • Construction - Process • Testing - Tools and methods • Maintenance - Quality http://www.swebok.org
Computing Curricula • Project of ACM, first released in 1968 • Major subjects • Information structures and processes • Information processing systems • Methodologies • Mathematical sciences • Physical and engineering sciences Curriculum 68, Communications of the ACM, Vol. 11 (3), March 1968.
Computing Curricula (Computing Topics) • Data structures • Programming languages • Models of computation • Computer design and organization • Translators and interpreters • Computer and operating systems • Special purpose systems • Numerical mathematics • Data processing and file management • Text processing • Computer graphics • Simulation • Information retrieval • Artificial intelligence • Process control • Instructional systems • Elementary analysis • Linear algebra • Differential equations • Algebraic structures • Theoretical numerical analysis • Methods of applied mathematics • Optimization theory • Combinatorial mathematics • Mathematical logic • Number theory • Probability and statistics • Operations analysis • General physics • Basic electronics • Circuit analysis and design • Thermodynamics and statistical mechanics • Field theory • Digital and pulse circuits • Coding and information theory • Communication and control theory • Quantum mechanics Curriculum 68, Communications of the ACM, Vol. 11 (3), March 1968.
Historical Perspectives • Computing as mathematics • Computing as engineering and design • Computing as art • Computing as science • Computing as a social science • Computing as interdisciplinary Goldweber, M., et al, Historical Perspectives On The Computing Curriculum, ACM SIGCUE Outlook, Vol. 25 (4), October 1997.
Computing Curricula • Project of ACM and IEEE, released in 2005 • Major disciplines • Computer engineering • Computer science • Information systems • Information technology • Software engineering http://www.acm.org/education/curricula.html
Computing Curricula (Computing Topics) • Algorithms and complexity • Architecture • Discrete structures • Graphics and visual computing • Human-computer interaction • Information management • Intelligent systems • Net-centric computing • Operating systems • Programming fundamentals • Social and professional issues • Software engineering http://www.acm.org/education/curricula.html
Computing Curricula (Computing Topics) • Programming fundamentals • Iterative programming • Algorithms and complexity • Computer architecture and organization • Operating system principles and design • Operating systems configuration and use • Net Centric principles and design • Net Centric use and configuration • Platform technologies • Theory of programming languages • Human-computer interaction • Graphics and visualization • Intelligent systems • Information management theory • Information management practice • Scientific methods • Legal/professional/ethics/society • Information systems development • Analysis of business requirements • E-business • Analysis of technical requirements • Engineering foundations for software • Engineering economics for software • Software modeling and analysis • Software design • Software verification and validation • Software evolution • Software process • Software quality • Computer systems engineering • Digital logic • Embedded systems • Distributed systems • Security issues and principles • Security implementation and management • Systems administration • Management of information systems organization • Systems integration • Digital media development • Technical support http://www.acm.org/education/curricula.html
K-12 Model Curriculum • Project of ACM, released in 2003 • Sructure • Foundations of computer science (K-8) • Computer science in the modern world (9-10) • Computer science as analysis and design (10-11) • Topics in computer science (11-12) http://csta.acm.org/Curriculum/sub/ACMK12CSModel.html
Missing Curriculum • Estimation, procrastination, and motivation • Programming and testing • Tools • Documentation • Users and User Interface • Delegation and interpersonal skills • Meetings • Health and appearance • Finance and future http:engtech.wordpress.com/2007/03/01/missing_programmer_curriculum/
Estimation, Procrastination, and Motivation • Personal estimation: why it is going to take more than two weeks to hit your deadline • Why cramming for deadline is effective at school but not in the workplace • The Internet: do you really need it for your job? • The passion of the code: loving what you do • Metrics: what isn’t measured, isn’t done • Focus on the important, not the immediate http:engtech.wordpress.com/2007/03/01/missing_programmer_curriculum/
Programming and Testing • Why we don’t’ teach scripting languages even though you’ll use them more often than Fortran, Pascal, C, or Java • All programming is maintenance programming • Why re-writing from scratch is always the worst choice • Verification: if it wasn’t tested it doesn’t work • Automation vs doing it by hand: what is more efficient? • Hardening: the only bug-free code is old code • The turtle and the rabbit: fast and lazy vs slow and diligent http:engtech.wordpress.com/2007/03/01/missing_programmer_curriculum/
Tools • Don’t blame the tools (even though the tools suck) • Don’t reinvent the wheel: leveraging open source • How version control will save your life • Text editors: why notepad isn’t enough • Bug tracking: more than Post-It notes • Back up strategy: painful but necessary http:engtech.wordpress.com/2007/03/01/missing_programmer_curriculum/
Documentation • Diagrams, diagrams, diagrams: a picture is worth a thousand words • English: not just for managers • Automation document generation: why documentation should be tied to code • Abbreviation: why abbreviating four to five helps no one http:engtech.wordpress.com/2007/03/01/missing_programmer_curriculum/
Users and User Interface • Keep it simple, stupid • Cognitive overload • Users are people, not problems • Support isn’t a four letter word (it’s seven) • Servicing interrupts: getting work done while supporting co-workers http:engtech.wordpress.com/2007/03/01/missing_programmer_curriculum/
Delegation and Interpersonal Skills • Passing the buck and shifting the blame • Making small talk when you have nothing in common • Why co-workers are companions, not competition • Trust issues: don’t assume that what your co-worker gave you works • Bribing IT: getting your computer problems fixed in a reasonable time http:engtech.wordpress.com/2007/03/01/missing_programmer_curriculum/
Meetings • How to avoid meetings • Who to invite to meetings • How to stay awake in meetings when they are unavoidable • Shutting up: keeping meetings productive when you have nothing useful to say • Why design by committee doesn’t work http:engtech.wordpress.com/2007/03/01/missing_programmer_curriculum/
Health and Appearance • Staying in shape even though you’re sedentary • Eating healthy when you have fast food every day • Hygiene: friend of foe? • World Wide Wassup: meeting your mate on the Internet • I am pretty: why do into consulting or marketing http:engtech.wordpress.com/2007/03/01/missing_programmer_curriculum/
Finance and Future • Planning for retirement • Public companies vs start ups: pros and cons • How much of the company do VCs own? • Stock options dos and don’ts • How to evaluate benefits compared to salary http:engtech.wordpress.com/2007/03/01/missing_programmer_curriculum/
Handbook Of Software Architecture (Genres) • Artificial intelligence • Commercial and non-profit • Communications • Content authoring • Devices • Entertainment and sports • Financial • Games • Government • Industrial • Legal • Medical • Military • Operating systems • Platforms • Scientific • Tools • Transportation • Utilities http://www.booch.com/architecture
Lessons Learned • Essential skills • Abstraction • Collaborative development • Metaskills • Fundamentals • The ability to learn • Passion, beauty, joy, and awe
Fundamental Human The Limits of Software • Laws of physics • Laws of software • Challenge of algorithms • Difficulty of distribution & concurrency • Problems of design • Importance of organization • Impact of economics • Influence of politics • Limits of human imagination •
Laws of Physics • The speed of light • Has pragmatic implications for distributed systems • Relativistic effects • There is no such thing as absolute time • Quantum effects • There are theoretical as well as practical limits to information density • Thermodynamic effects • Software is weightless/containers for software are not • Computation dissipates heat
Laws of Software • Sometimes we can’t do it • Halting problem • Gödel's theorem/highly non-computable problems • Sometimes we can’t afford to do it • Sorting problem/Towers of Hanoi/chess • Exponential time • Sometimes we just don’t know • Traveling salesman/scheduling/bin packing • NP complete Harel, D., Computers, Ltd: What they Really Can’t Do, Oxford, England: Oxford University Press, 2003
Challenge of Algorithms • Compression • Photorealistic rendering • Speech recognition • Simulation • Knowledge representation • Intimate/massive parallelism Halo 3 @ http://www.bungie.net •
Difficulty of Distribution/Concurrency • A distributed system is one in which the failure of a computer you didn’t even know existed can render your computer unusable (Leslie Lamport) • The average developer does not have, as a core competency, the ability to develop secure, concurrent, and distributed systems
Problems of Design • The entire history of software engineering is that of the rise in levels of abstraction • The limitations of human understandability • Building for resilience • Sometimes worse is better • The discovery of patterns
Importance of Organization • All meaningful development is formed by the resonance of activities that beat at different rhythms • The activities of the individual developer • Social dynamics among small sets of developers • Dynamics among teams of teams • Work products and work flows • Parallel development • The cacophony of stakeholders • The tension of high and low ceremony processes
Impact of Economics Performance = (Complexity) (Process)* (Team) * (Tools) Performance= Effort or time Complexity= Volume of human-generated code Process= Methods, notations, maturity Team= Skill set, experience, motivation Tools= Software process automation
Influence of Politics • Success as defined by the software development team is sometimes misaligned with success as defined by the management team • Software as a strategic weapon • Software as a pawn
Limits of Human Imagination • The visionaries • Alan Kay, Danny Hillis, Marvin Minsky, Rodney Brooks, Bill Joy, Bill Gates, Adele Goldburg, Tim Berners-Lee, Nicholas Negroponte… • The dreamers • Arthur C. Clarke, Neal Stephenson
Software development has been, is, and will remain fundamentally hard
What We Know • Fundamentals • Craft crisp and resilient abstractions • Maintain a good separation of concerns • Create a balance distribution of responsibilities • Process • Grow a system’s architecture through the incremental and iterative release of testable executables
What We Know • Reuse • Patterns • Languages • Architectural codification of certain domains
System integrators Performance Scalability Throughput Representing Software Architecture Logical View Implementation View Programmers Configuration management End-user Functionality Use Case View Process View Deployment View System engineering System topology Communication Provisioning Conceptual Physical Kruchen, P. The 4+1 Model View, IEEE Computer, vol. 12 (6), November 1995
Gallery of Software Architecture: Air Traffic Control Gallery of Software Architecture @ http://www.booch.com/architecture/architecture.jsp?part=Gallery
Gallery of Software Architecture: C3I Gallery of Software Architecture @ http://www.booch.com/architecture/architecture.jsp?part=Gallery
Gallery of Software Architecture: Games Gallery of Software Architecture @ http://www.booch.com/architecture/architecture.jsp?part=Gallery