assembly line manned by semi-skilled
interchangeable workers is fundamentally flawed and wasteful. It pushes the
most competent people out of the field
and discourages students from entering it. To break this vicious circle, academia must produce more graduates
with relevant skills and industry must
adopt tools, techniques, and processes
to utilize those skills.
Dreams of Professionalism
“Computer science” is a horrible and
misleading term. CS is not primarily
about computers and it is not primarily a science. Rather it is about uses of
computers and about ways of working
and thinking that involves computation (“algorithmic and quantitative
thinking”). It combines aspects of science, math, and engineering, often
using computers. For almost all people in CS, it is an applied field—“pure
CS,” isolated from application, is typically sterile.
What distinguishes a CS person
building an application from a professional in some other field (such as
medicine or physics) building one? The
answer must “be mastery of the core
of CS.” What should that “core” be? It
would contain much of the established
CS curriculum—algorithms, data structures, machine architecture, programming (principled), some math (
primarily to teach proof-based and quantitative
reasoning), and systems (such as operating systems and databases). To integrate that knowledge and to get an idea
of how to handle larger problems, every
student must complete several group
projects (you could call that basic software engineering). It is essential that
there is a balance between the theoretical and the practical—CS is not just
principles and theorems, and it is not
just hacking code.
This core is obviously far more
“computer-oriented” than the computing field as a whole. Therefore,
nobody should be called a computer
scientist without adding a specialization within CS (for example, graphics,
networking, software architecture, hu-man-machine interactions, security).
However that’s still not enough. The
practice of computer science is inherently applied and interdisciplinary, so
every CS professional should have the
equivalent to a minor in some other
field (for example, physics, medical
engineering, history, accountancy,
French literature).
Experienced educators will observe: “But this is impossible! Hardly
any students could master all that in
four years.” Those educators are right:
something has to give. My suggestion is
that the first degree qualifying to practice as a computers scientist should be
a master’s—and a master’s designed
as a whole—not as a bachelor’s degree
with an appended final year or two.
People who plan to do research will as
usual aim for a Ph.D.
Many professors will object: “I
don’t have the time to program!”
However, I think that professors who
teach students who want to become
software professionals will have to
make time and their institutions
must find ways to reward them for
programming. The ultimate goal of
CS is to help produce better systems.
Would you trust someone who had
not seen a patient for years to teach
surgery? What would you think of a
piano teacher who never touched the
keyboard? A CS education must bring
a student beyond the necessary book
learning to a mastery of its application in complete systems and an appreciation of aesthetics in code.
I use the word “professional.” That’s
a word with many meanings and implications. In fields like medicine and engineering, it implies licensing. Licensing is a very tricky and emotional topic.
However, our civilization depends on
software. Is it reasonable that essentially anyone can modify a critical body
of code based on personal taste and
corporate policies? If so, will it still be
reasonable in 50 years? Is it reasonable
that pieces of software on which millions of people depend come without
warranties? The real problem is that
professionalism enforced through
licensing depends on having a large
shared body of knowledge, tools, and
techniques. A licensed engineer can
certify that a building has been constructed using accepted techniques
and materials. In the absence of a widely accepted outline of CS competence
(as I suggested earlier), I don’t know
how to do that for a software application. Today, I wouldn’t even know how
to select a group of people to design a
licensing test (or realistically a set of
tests for various subspecialties, like the
medical boards).
What can industry do to close the
gap? It is much more difficult to characterize “industry” and “industrial
needs” than to talk about academia.
After all, academia has a fairly standard structure and fairly standard approaches to achieving its goals. Industry is far more diverse: large or small,
commercial or non-profit, sophisticated or average in their approach to
system building, and so forth. Consequently, I can’t even begin to prescribe
remedies. However, I have one observation that related directly to the academia/industry gap: Many organizations that rely critically on computing
have become dangerously low on technical skills:
Industrial manager: “The in-sourc-ing of technical expertise is critical for
survival.”
No organization can remain successful without an institutional memory and an infrastructure to recruit
and develop new talent. Increasing
collaboration with academics interested in software development might
be productive for both parties. Collaborative research and an emphasis
on lifelong learning that goes beyond
mere training courses could play major roles in this.
conclusion
We must do better. Until we do, our
infrastructure will continue to creak,
bloat, and soak up resources. Eventually, some part will break in some unpredictable and disastrous way (think
of Internet routing, online banking,
electronic voting, and control of the
electric power grid). In particular, we
must shrink the academia/industry gap
by making changes on both sides. My
suggestion is to define a structure of CS
education based on a core plus specializations and application areas, aiming
eventually at licensing of software artifacts and at least some of the CS professionals who produce them. This might
go hand-in-hand with an emphasis on
lifelong industry/academia involvement for technical experts.
Bjarne Stroustrup ( bs@cs.tamu.edu) is the College of
engineering Chair in Computer science Professor at texas
a&M university in College station, tx.