The Dream of a Common Language: The Search for Simplicity and Stability in Computer Science Education Eric Roberts Department of Computer Science Stanford.

Slides:



Advertisements
Similar presentations
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 4 Slide 1 Software Processes.
Advertisements

Keeping Secrets Within a Family: Rediscovering Parnas H. Conrad Cunningham Computer & Information Science, University of Mississippi Cuihua Zhang Computer.
OOP - Object Oriented Programming Object Oriented Programming is an approach to programming that was developed to make large programs easier to manage.
Methods: Deciding What to Design In-Young Ko iko.AT. icu.ac.kr Information and Communications University (ICU) iko.AT. icu.ac.kr Fall 2005 ICE0575 Lecture.
Bad code smells Refactoring Example Game Design Experience Professor Jim Whitehead January 26, 2009 Creative Commons Attribution 3.0 creativecommons.org/licenses/by/3.0.
Teaching American History
Educating Programmers: A Customer Perspective Alexander Stepanov A9.com Workshop on Quality Software: A Festschrift for Bjarne Stroustrup Texas A&M University,
History of Object Orientation. What is Object-Orientation? Programming is one of the most complicated and difficult of human activities. It helps a great.
The Mythical Man-Month by Fred Brooks (I) Published 1975, Republished 1995 Experience managing the development of OS/360 in Central Argument –Large.
No Silver Bullet “There is no single development, in either technology or management technique, which by itself promises even one order-of magnitude improvement.
1 Programming for Engineers in Python Autumn Lecture 5: Object Oriented Programming.
Algorithms and Problem Solving-1 Algorithms and Problem Solving.
OOP in Java Nelson Padua-Perez Chau-Wen Tseng Department of Computer Science University of Maryland, College Park.
Recall The Team Skills 1. Analyzing the Problem 2. Understanding User and Stakeholder Needs 3. Defining the System 4. Managing Scope 5. Refining the System.
Resurrecting Applets Eric Roberts Professor of Computer Science, Stanford University ACM Java Task Force Chair SIGCSE 2007 Symposium Covington, Kentucky.
Writing Good Software Engineering Research Papers A Paper by Mary Shaw In Proceedings of the 25th International Conference on Software Engineering (ICSE),
About the Presentations The presentations cover the objectives found in the opening of each chapter. All chapter objectives are listed in the beginning.
Eric Roberts Department of Computer Science Stanford University CSIT Symposium Norfolk, Virginia March 6, 2004 Educating the Next Generation of Computer.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 4 Slide 1 Software Processes.
Sharif University of Technology Session # 7.  Contents  Systems Analysis and Design  Planning the approach  Asking questions and collecting data 
Software Quality Assurance
OBJECT ORIENTED PROGRAMMING IN C++ LECTURE
1 INTRODUCTION TO OOP Objective: Know the difference between functional programming and OOP Know basic terminology in OOP Know the importance of OOP Know.
Chapter 9 – Software Evolution and Maintenance
Basic Concepts The Unified Modeling Language (UML) SYSC System Analysis and Design.
Long-term Evolution of AP® CS A Renee Ciezki SIGCSE 2013.
Starting Chapter 4 Starting. 1 Course Outline* Covered in first half until Dr. Li takes over. JAVA and OO: Review what is Object Oriented Programming.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 18 Slide 1 Software Reuse.
Copyright © 2002, Systems and Computer Engineering, Carleton University Intro.ppt * Object-Oriented Software Development Unit 1 Course.
Systems Analysis – Analyzing Requirements.  Analyzing requirement stage identifies user information needs and new systems requirements  IS dev team.
The Common Core Curriculum By Dean Berry, Ed. D. Gregg Berry, B.A.
Introduction to Object-oriented programming and software development Lecture 1.
CSCI-383 Object-Oriented Programming & Design Lecture 4.
GENERAL CONCEPTS OF OOPS INTRODUCTION With rapidly changing world and highly competitive and versatile nature of industry, the operations are becoming.
Object Oriented Analysis and Design Introduction.
UNIVERSITI TENAGA NASIONAL “Generates Professionals” CHAPTER 4 : Part 2 INTRODUCTION TO SOFTWARE DEVELOPMENT: PROGRAMMING & LANGUAGES.
1 TOPIC 1 INTRODUCTION TO COMPUTER SCIENCE AND PROGRAMMING Topic 1 Introduction to Computer Science and Programming Notes adapted from Introduction to.
SWE 316: Software Design and Architecture – Dr. Khalid Aljasser Objectives Lecture 11 : Frameworks SWE 316: Software Design and Architecture  To understand.
© 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 1 A Discipline of Software Design.
Knowledge representation
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 4 Slide 1 Software Processes.
No Silver Bullet. CS460 - Senior Design Project I (AY2004)2 No silver bullet "No Silver Bullet" –– a paper by Fred Brooks, Professor of Computer Science.
Software Processes lecture 8. Topics covered Software process models Process iteration Process activities The Rational Unified Process Computer-aided.
An analysis of exam results in the Object-Oriented Programming course at „Politehnica” University of Timisoara Ioan Jurca.
Se Over the past decade, there has been an increased interest in providing new environments for teaching children about computer programming. This has.
(C) P. H. Welch Software Engineering Chapter 3.
C++ Programming Language Lecture 1 Introduction By Ghada Al-Mashaqbeh The Hashemite University Computer Engineering Department.
CSSE501 Object-Oriented Development. Chapter 12: Implications of Substitution  In this chapter we will investigate some of the implications of the principle.
Opposing Viewpoints Teaching American History In Miami-Dade County December 14, 2012 Fran Macko, Ph.D.
Eric Roberts Professor of Computer Science Stanford University Google Atlanta October 1, 2010 Converting Java into JavaScript.
Robert Crawford, MBA West Middle School.  Explain how the binary system is used by computers.  Describe how software is written and translated  Summarize.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 14 Slide 1 Object-oriented Design.
+ Introduction to Sociology 1.1 – The Basics of Sociology.
Freshman Academy Northside High School Fall 2012 Maria Johnson, Principal Kari Page, Freshman Pride Academy.
“No Silver Bullet”. No Silver Bullet  "No Silver Bullet" –– a paper by Fred Brooks, Professor of Computer Science at University of North Carolina in.
Data Structures and Algorithms Dr. Tehseen Zia Assistant Professor Dept. Computer Science and IT University of Sargodha Lecture 1.
Computer Science, Algorithms, Abstractions, & Information CSC 2001.
OOP (Object Oriented Programming) Lecture 1. Why a new paradigm is needed? Complexity Five attributes of complex systems –Frequently, complexity takes.
1 Trends in Computer Science Education ABU, Zaria, July 17, 2006 Trends in Computer Science Education Sahalu Junaidu, PhD Information and Computer Science.
Chapter 5 System Modeling. What is System modeling? System modeling is the process of developing abstract models of a system, with each model presenting.
Introduction to OOP CPS235: Introduction.
©Ian Sommerville 2006Software Engineering, 8th edition. Chapter 4 Slide 1 Software Processes.
Oman College of Management and Technology Course – MM Topic 7 Production and Distribution of Multimedia Titles CS/MIS Department.
 Description of Inheritance  Base Class Object  Subclass, Subtype, and Substitutability  Forms of Inheritance  Modifiers and Inheritance  The Benefits.
Chapter 5 – System Modeling Lecture 1 1Chapter 5 System modeling.
Software Processes.
UFCE8V-20-3 Information Systems Development SHAPE Hong Kong 2010/11
CS310 Software Engineering Lecturer Dr.Doaa Sami
UML  UML stands for Unified Modeling Language. It is a standard which is mainly used for creating object- oriented, meaningful documentation models for.
Presentation transcript:

The Dream of a Common Language: The Search for Simplicity and Stability in Computer Science Education Eric Roberts Department of Computer Science Stanford University SIGCSE 2004 Norfolk, Virginia March 4, 2004 The drive to connect. The dream of a common language. Adrienne Rich “Origins and History of Consciousness” The Dream of a Common Language (1974) —

Complexity. The number of programming details that students must master has grown much faster than the corresponding number of high-level concepts. Instability. The languages, libraries, and tools on which introductory computer science education depends are changing more rapidly than they have in the past. The Twin Perils of Complexity and Instability Engraving of Scylla from Bulfinch’s Age of Fable (1855) —

CC2001 on the Problem of Complexity Computing Curricula 2001 — The number and complexity of topics that entering students must understand have increased substantially, just as the problems we ask them to solve and the tools they must use have become more sophisticated. An increasing number of institutions are finding that a two-course sequence is no longer sufficient to cover the fundamental concepts of programming.

Essential and Accidental Complexity To see what rate of progress one can expect in software technology, let us examine the difficulties of that technology. Following Aristotle, I divide them into essence, the difficulties inherent in the nature of software, and accidents, those difficulties that today attend its production but are not inherent.... The complexity of software is an essential property not an accidental one. Hence, descriptions of a software entity that abstract away its complexity often abstract away its essence. Fred Brooks “No Silver Bullet” IEEE Computer, April 1987 —

Accidental Complexity Has Become a Crisis SIGCSE Proceedings — My fundamental thesis in this paper is that the computer science education community must find a way to separate the essential characteristics of object-oriented programming from those accidental features that are merely artifacts of the particular ways in which technology is implemented today. If we succeed in doing so, we can eliminate much of the inessential complexity and instability that plague computer science education today, which will allow more time to cover the essential elements of the subject matter.

The AP Computer Science (APCS) program was introduced in 1984 using the language Pascal. In 1995, the College Board announced that the APCS exam and course would change to C++. This transition was implemented in , with the first C++ exams given in May Two years later, the College Board announced that the APCS program would move to Java in An Illustrative Example: AP Computer Science The recent changes have been hard on high schools, forcing some to drop APCS.

Skeptical Voices on the AP Change Letter opposing the change in the CSAP Communications of the ACM, June 1995 — Pascal, the AP language, is compact and designed around a small, coherent set of principles., in contrast, was designed to meet industrial rather than pedagogical goals.... At the very least, teachers and students will be forced to work with an enormously complicated tool, large portions of which will be mysterious to them. These mysteries of the language will inevitably rear their heads as students write and debug programs, and there is little experience with or understanding of how much of a teacher needs to master in order to use it as a teaching tool. C++ current Java (after minor updating) original

The March of Progress 266 pages 274 pages 911 pages 1536 pages

An Even More Sobering Thought SIGCSE Proceedings — There are more public methods in the java and javax package hierarchies than there are words in Jensen and Wirth. The amount of text once deemed sufficient to teach the standard introductory programming language is thus no longer sufficient for a full index of the operations available today.

The vitality of the discipline. The number of people contributing to Java’s evolution is orders of magnitude larger than was true in Pascal’s day. As a result, more proposals for change are likely to occur within a given period of time. The economics of proprietary languages. Pascal—as a language—was in the public domain. Java and C#, by contrast, are each under the control of a single vendor. Economic incentives for those vendors expose their user communities to the vicissitudes of the market. Unintended consequences of encapsulation. There are reasons to believe that encapsulation—one of the core strengths of object-oriented programming—may in fact encourage instability by making it harder to overcome perceived shortcomings in existing APIs. Sources of Java’s Instability

A Simple Illustration To illustrate the problem, think about how you would teach students to modify the method so that the string "Hello" is centered horizontally at the point (200, 100). public void paint(Graphics g) { g.drawString("Hello", 200, 100); }

A Simple Illustration Writing the code isn’t particularly hard. All you need to do is use the FontMetrics class to compute the width of the string and subtract half that width from the x-coordinate: public void paint(Graphics g) { FontMetrics fm = g.getFontMetrics(); g.drawString("Hello", fm.stringWidth("Hello") / 2, 100); } The question is how to generalize this operation.

A Simple Illustration What you’d like to do is add drawCenteredString to the Graphics class and then code the method like this: public void paint(Graphics g) { g.drawCenteredString("Hello", 200, 100); } Unfortunately, you can’t add drawCenteredString to the Graphics class because it is part of the java.awt package and therefore outside of your control. It is also difficult to adopt what seems to be the obvious object- oriented approach, which consists of subclassing Graphics so that the new subclass includes drawCenteredString. The problem with this strategy is that the standard AWT and Swing component classes create the Graphics objects, and it is hard to get them to create objects of your subclass instead.

A Simple Illustration In the end, what most Java programmers end up doing is creating a static drawCenteredString method that takes the Graphics object as an explicit argument, like this: public static void drawCenteredString( Graphics g, String str, int x, int y) { FontMetrics fm = g.getFontMetrics(); g.drawString(s, x - fm.stringWidth(s) / 2, y); } Students, however, must understand why you write g.drawString("Hello", 200, 100); but drawCenteredString(g, "Hello", 200, 100);

You could try to get Sun to make the change. Sun has established the Java Community Process to manage changes to the language. If you were passionate about some missing feature, you could try to get Sun to accept it for a future release. You could create your own APIs. The alternative to having Sun introduce the changes is to create your own API hierarchy that incorporates your wish list. Indeed, many of the APIs that are now in Java, including Swing and a variety of more recent packages, got their start in this way. But What If You Really Want Java to Change? The critical point to recognize is that both of these strategies are inherently destabilizing.

The Looming Crisis SIGCSE Proceedings — Beset by the twin forces of complexity and instability, computer science education today faces an increasingly difficult challenge that threatens to become a crisis. The languages and tools we use today in introductory courses change much more rapidly than their predecessors in the early years of computer science. As a result, computer science textbooks and curricula have a shorter shelf-life and must be replaced every year or two. This instability, coupled with the increased detail complexity of the languages and tools, often makes it difficult to develop new materials before they become obsolete.

Where Do We Go from Here? SIGCSE Proceedings — I believe it is time to revisit the question of how we define the notion of “standard.” The principal advantage of a standard is that the authority behind the standard offers some guarantee of correctness and stability. As evidenced by the various ANSI standardization efforts, that guarantee can be effective when the body setting the standards represents the interests of the user community. The force of that guarantee, however, is compromised when the standard is subject to the economic interests of a particular vendor.... What we need instead is a community-sponsored effort to develop our own standards. In much the same way that the ACM Education Board has assembled task forces to develop curricular recommendations such as CC2001, it should be possible to convene a similar task force to define a simple, stable subset of Java and a set of supporting libraries that can meet the needs of our community. If such an effort involves broad representation from the affected constituencies and can attract sufficient funding, it will be of enormous value to the computer science education community.

The ACM Java Task Force In October 2003, the ACM Education Board approved the formation of a new task force with the following charter: To review the Java language, APIs, and tools from the perspective of introductory computing education and to develop a stable collection of pedagogical resources that will make it easier to teach Java to first-year computing students without having those students overwhelmed by its complexity. The Java Task Force held its first meeting at the end of January 2004 and will describe its work at a special session tomorrow: Friday, March 5 10:45 A.M. to 12:00 P.M. Sheraton-Stratford