decomposition creates structure it allows us to break problem into modules that are reasonably self-containedand that may be reused in different settings abstraction hides detail it allows us to use piece of code as if it were black box--that issomething whose interior details we cannot seedon' need to seeand shouldn' even want to see the essence of abstraction is preserving information that is relevant in given contextand forgetting information that is irrelevant in that context the key to using abstraction effectively in programming is finding notion of relevance that is appropriate for both the builder of an abstraction and the potential clients of the abstraction that is the true art of programming abstraction is all about forgetting there are lots of ways to model thisfor examplethe auditory apparatus of most teenagers teenager saysmay borrow the car tonightparent saysyesbut be back before midnightand make sure that the gas tank is full teenager hearsyes the teenager has ignored all of those pesky details that he or she considers irrelevant abstraction is many-to-one process had the parent said yesbut be back before : and make sure that the car is cleanit would also have been abstracted to yes by way of analogyimagine that you were asked to produce an introductory computer science course containing twenty-five lectures one way to do this would be to recruit twenty-five professorsand ask each of them to prepare fifty-minute lecture on their favorite topic though you might get twenty-five wonderful hoursthe whole thing is likely to feel like dramatization of pirandello' "six characters in search of an author(or that political science course you took with fifteen guest lecturersif each professor worked in isolationthey would have no idea how to relate the material in their lecture to the material covered in other lectures somehowone needs to let everyone know what everyone else is doingwithout generating so much work that nobody is willing to participate this is where abstraction comes in you could write twenty-five specificationseach saying what material the students should learn in each lecturebut not giving any detail about how that material should be taught what you got might not be pedagogically wonderfulbut at least it might make sense this is the way organizations go about using teams of programmers to get things done given specification of modulea programmer can work on implementing that module without worrying unduly about what the other programmers on the team are doing moreoverthe other programmers can use the specification to start writing code that uses that module without worrying unduly about how that module is to be implemented "where ignorance is bliss'tis folly to be wise "--thomas gray