When many of us were in school, we were given definitions of computer science such as "the study of information processes and their transformations" or "the study of phenomena arising around computers." But when we entered the world of professional practice, we experienced computer science in a completely different way from these abstract definitions.
In our professional world, our ability to obtain a job depends on how well we display competence in using computational methods and tools to solve problems of interest to our employers. We have to be able to create small apps on the fly with no more effort than writing a Post-It note. We discover that we have customers who can be satisfied or not with our work—and that our professional advancement depends on an ever-expanding legacy of satisfied customers. We discover that over time we become proficient and our peers and bosses call on us to solve ever more complex problems. We are beset with unpredictable surprises and contingencies not covered in school or our previous experience—and yet we must deal with them effectively.