verifiers, practices from science such
as taxonomies of design patterns,
and validation methods such as careful statistical testing. Design in computing is fundamentally an engineering practice.
In computing, we work closely with
the notion that programs can be expressed as structures of abstract objects, and the useful work happens
when those abstract objects control
machines that affect the world. The science-math mind plays a strong role with
structuring the abstractions; the engineering mind plays a strong role with
bringing the effects into the world. The
field cannot survive if these two aspects
do not maintain a synergized balance.
These arguments are not new. In
his 1968 ACM A.M. Turing lecture,
award recipient Richard Hamming argued that the computer is at the heart
of computing; without it, almost everything computing professionals do
would be idle speculation. In the past
two decades, we have added natural
information processes, such as DNA
transcription, to what we study, but
the computer remains the heart. Every
programming language is a means for
designers to control an abstract machine that when simulated produces
useful and practical results. Computer science graduates, Hamming argued, must learn design in the context
of bringing value to users.
This is why I am concerned that
our academic departments embody
too strong an emphasis on the theoretical side of computing. The engineering side has been diminished in
the process. Recent reforms to computing curricula have introduced
a new first course “CS principles.”
Most of the content of these courses
is concepts relating to programming
and algorithm organization. A few departments, more so in engineering,
use design courses and Raspberry Pi
or Arduino labs to introduce students
to the field. The teachers are always
surprised by how much the students
accomplish in the role of designers
without much grounding in the science of the field. More departments
ought to consider starting students
with a design course.
The result is curricula that encap-
sulate computing inside a boundary
of math-science-theory and diminish
crucial engineering aspects in archi-
tecture and design. This is unhealthy
because most of the jobs for which
our graduates are aiming are much
more strongly oriented around en-
gineering than science. It is no won-
der that employers complain that CS
graduates do not fit and need exten-
sive training and hand holding to be-
come profitable employees.
It bothers me that all the modern
advances—in AI, machine learning,
big data, cloud computing, and computer security—are touted as triumphs
of science rather than what they really
are, achievements of engineering and
science working together.
Science and engineering need each
other. Neither is the application or
fulfillment of the other. Science emphasizes the discovery of recurrences. Engineering seeks to harness effects before the recurrences are fully
known. Science moves in when the effect has proved useful and we seek to
understand it better, optimize it, make
it more reliable, and exploit its recurrences for prediction. Science takes
care of abstractions, engineering the
details that enable abstractions to
work. The marriage of science and engineering in computing is critical for
the continued health of the field.
1. Bowler, P. J. and Morus, I. Making Modern Science: An
Historical Survey. University of Chicago Press, 2010.
2. Daylight, E. A Turing tale. Commun. ACM 57, 10 (Sept.
3. Denning, P. Remaining trouble spots with computational
thinking. Commun. ACM 60, 6 (June 2017), 33–39.
4. Denning, P. et al. Computing as a discipline. Commun.
ACM 32, 1 (Jan. 1989), 9–23.
5. Haigh, T. Actually, Turing did not invent the computer.
Commun. ACM 57, 1 (Jan. 2014), 36–41.
6. Parnas, D. David Parnas speaks of software
engineering. CCSL Centro de Competéncia em
Software Livre, 2014; http://ccsl.ime.usp.br/en/
7. Petroski, H. To Engineer is Human: The Role of Failure
in Successful Design. Vintage, 1992.
8. Petroski, H. and Denning, P. Your science T-shirt
doesn’t fly. ACM Ubiquity (Dec. 2016); http://ubiquity.
Peter J. Denning ( firstname.lastname@example.org) is Distinguished
Professor of Computer Science and Director of the
Cebrowski Institute for information innovation at the
Naval Postgraduate School in Monterey, CA, is Editor of
ACM Ubiquity, and is a past president of ACM.
The author’s views expressed here are not necessarily
those of his employer or the U.S. federal government.
The author thanks Fernando Flores and Henry Petroski for
conversations with insights about science and engineering.
Copyright held by author.
K-CAP 2017: Knowledge Capture
Contact: Oscar Corcho,
UCC ‘17: 10th International
Conference on Utility
and Cloud Computing,
Co-Sponsored: Other Societies,
Contact: Alan Fraser Sill,
Middleware ‘17: 18th
Las Vegas, NV,
Contact: Anshul Gandhi,
CoNEX T ‘17: The 13th
on Emerging Networking
Experiments and Technologies,
Incheon, Republic of Korea,
Contact: Taekyoung Kwon,
GROUP ‘18: 2018 ACM
Conference on Supporting
Sanibel Island, FL,
Contact: Michael Prilla,
SIGCSE ‘18: The 49th ACM
Technical Symposium on
Computing Science Education,
Contact: Tiffany Barnes,