I Throw Itching Powder at Tulips
Total Page:16
File Type:pdf, Size:1020Kb
I Throw Itching Powder at Tulips Richard P. Gabriel IBM Research [email protected] Abstract program. But it also works for physical devices, biological systems, and people too. For example, when we teach a child Programming comes in many shapes & sizes. to add, we are creating a program that builds on the child’s Categories and Subject Descriptors D.2.9 [Software process existing ability to count on fingers. To the child the notion models] of adding is novel, but perhaps counting on fingers is not. At first, addition is a program; later it is an ability. General Terms Experimentation When we describe how to drive from one place to another, Keywords Agile; science; programming; natural language that’s a program that uses the driver’s ability to understand generation directions, to drive, and to recognize telltales to get that per- t son from one place to another. When people try to put together large software systems— I want to remind you of something simple: Programming large enough that teams are needed and dangerous enough and software engineering are not the same things. Neither that safety is crucial—they apply engineering techniques (as is programming the same as algorithm design. We’ve tan- best they can) to the project. That’s the start of software -en gled the several notions of programming—if we try we can gineering. When people wonder whether the program they unweave them, but sometimes we push on too quickly / get have devised really will achieve its desired purpose using the confused. William Griswold ventured this definition of soft- underlying mechanisms of the “computer,” that’s the start of ware engineering: the theory of computation and algorithm design. In recent years the conflict of more traditional software The practice of constructing software to satisfy all engineering approaches and agile have made a muddle of the stakeholder requirements so as to maximize value concept of programming—to a degree where sometimes only –William Griswold, personal communication, 2013 software engineering is considered programming. I think. t Programming is more fundamental. Venturing a guess, I would define programming as designing a set of mechanisms Software engineering is not what I do when I program. I am to enable some device (very broadly construed) to do some- programming. I write software as part of doing science. I use thing it normally could not using mechanisms it already has. software as a machine or instrument to explore how the mind Thinking about computers is the simple case: programming / brain might work. Not when the mind’s thinking—that’s is putting together instructions in a programming language old AI. I mean when people are creating. that is easy for people to understand which cause the under- Software engineering is for producing something that lying mechanisms of the computer—including its physical someone can describe, either using specifications (the old- and electrical components—to realize the purpose of the fashioned way) or a product backlog (or some other suchlike thing in an agile setting). I don’t do anything like that. And Permission to make digital or hard copies of all or part of this work for personal or software engineering is about producing software in a group. classroom use is granted without fee provided that copies are not made or distrib- The way we teach programming makes everything software uted for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others engineering. Pundits’ statements are deceiving: than the author must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior Programmers mediate between the negotiated and un- specific permission and/or a fee. Request permissions from [email protected]. certain truths of business and the crisp, uncompromising Onward!’14, October 20–24, 2014, Portland, Oregon, USA. domain of bits and bytes and higher constructed types. Copyright is held by the author. Publication rights licensed to ACM. ACM 978-1-4503-2585-1/14/10…$15.00. –Kevlin Henney, 97 Things Every Programmer Should Know, http://dx.doi.org/10.1145/2661136.2661155 2010 [1] 1 This looks correct, innocent even. When I program I in- The “matters at hand” are roughly the stuff in the real world deed worry whether the programs I write will do something that the program being built needs to handle, and the theory like what I intend; but there are no “truths of business” in in question is a conceptual framework for understanding the sight. The most progressive teachers reinforce this and other means by which software achieves that handling. stereotypes, like this programming assignment: In my case, the theory is a scientific theory to be discovered, and the software is an instrument to help discover / forge that Develop a function that when given an initial amount theory, which the software does by reacting to or revealing of money (called the principal), a simple annual inter- something about the material agency of the world. The re- est rate, and a number of months will compute the bal- sulting software may or may not be interesting by itself. My ance at the end of that time. Assume that no additional model of doing science with software can be used to discover deposits or withdrawals are made and that a month is the Naurish theories programmers build to create software, 1/12 of a year. Total interest is the product of the prin- and it might happen that the software created in my model cipal, the annual interest rate expressed as a decimal, is the software the programmers eventually create. and the number of years. t –Felleisen et al, How To Design Programs [3] Productivity and value are essentials for business program- A business-related problem; a problem posed to the stu- ming. Jeff Sutherland wrote this about Scrum: dent by an outsider; a problem. Everything that the program should accomplish is spelled out, by an expert instructor or Scrum is a simple framework used to organize teams “customer”—of course it is solvable, of course it is achievable, and get work done more productively with higher qual- of course all thinking is reduced to whether the program ity. It allows teams to choose the amount of work to be achieves its intended purpose using the underlying mecha- done and decide how best to do it, thereby providing a nisms of the computer at hand. Programming happens, but more enjoyable and productive working environment. in a limited context. A very well-respected professor ventured Scrum focuses on prioritizing work based on business this opinion to me: value, improving the usefulness of what is delivered, and increasing revenue, particularly early revenue. I think the biggest mistake we make with the starting –Jeff Sutherland, A Brief Introduction to Scrum, 2007 [4] point for undergraduate education is that we introduce programming at all. The right starting point, IMHO, is Notice that the assumed context is business, creating value requirements and specification together with the asso- for a customer who drives requirements and judges accept- ciated mathematics that they require. ability, and programming while consuming cash slowly and –anonymous, ruminating on a first course producing revenues quickly. After being taught (implicitly) that programming begins when someone (a teacher) tells Problem solving; being told what to solve, what goals to you to start, and that the goal / topic / domain / problem for achieve. This is hammered into students and job seekers programming is given (by that teacher), working as part of who are asked repeatedly to solve problems (homework / someone else’s machine is not foreign. Sutherland continues: job interviews). The idea of “a problem” doesn’t necessar- ily encompass the certitude of solution, but as taught in the Designed to adapt to changing requirements during the context of programming, the unintended implication is that development process at short, regular intervals, Scrum a problem is a puzzle, and puzzles have solutions. A puzzle allows teams to prioritize customer requirements and is a test of ingenuity. adapt the work product in real time to customer needs. t By doing this, Scrum provides what the customer wants at the time of delivery (improving customer satisfaction) My characterization of why I program—building a software while eliminating waste (work that is not highly valued machine to explore nature and create a theory—might remind by the customer). you of Peter Naur’s “Programming as Theory Building” [2]. –Jeff Sutherland, A Brief Introduction to Scrum, 2007 [4] Naur is talking about a related but different task—the creation of software as the final goal: Agile’s contribution was to turn on its head the follow- ing premise of earlier software engineering methodologies: …the primary aim of programming is to have the change is expensive and needs to be avoided. Or at least lim- programmers build a theory of the way the matters at ited to the earliest possible parts of requirements gathering hand may be supported by the execution of a program. and design. The idea is that making a change to a design is –Peter Naur [2] cheaper than making a change to an implementation. Steve McConnell tells it this way: 2 In the worst case, reworking a software requirements without a specific subject in mind, preferring instead problem once the software is in operation typically costs to let the subject emerge as they work. Experimental 50 to 200 times what it would take to rework the problem painters rarely make elaborate preparatory sketches. in the requirements stage (Boehm and Papaccio 1988).