\documentstyle[twocolumn]{article}
\input{use-full-page}

\begin{document}
\bibliographystyle{alpha}

\title{Becoming a Computing Professional}
\author{Gary T. Leavens \\
Department of Computer Science, Iowa State University \\
Ames, Iowa 50011-1040 USA
leavens@cs.iastate.edu %\\
\and
Charles Wright \\
Department of Electrical Engineering and Computer Engineering, Iowa State University \\
Ames, Iowa 50011 USA
wright@isuee1.ee.iastate.edu
}
\maketitle

\begin{abstract}
Becoming a computer scientist or computer engineer is more than
passing courses: it's learning how to think for yourself
as a computing professional.
This paper suggests some ways to achieve that goal.
\end{abstract}

\section{More than Skills}

How can you become a computer scientist or computer engineer?
Certainly taking courses and practice help.
But just as there is more to life than getting a job and working,
there is more to being a computing professional than having a diploma,
even more than having the needed skills.
What more?---enjoyment and intellectual stimulation.

For us, enjoyment and intellectual stimulation go hand in hand.
We also believe that if you do not enjoy your work,
you will not perform as well as you could.
Further, if you really enjoy something, then you will do better at it.
If you enjoy it, you are more likely to continually improve your skills.

The difficulty is that how well you do is also tied to your enjoyment
of a subject.  So the dilemma in learning is how you can find an enjoyable
way to increase your performance and enjoyment.

Fortunately there are many gifted authors ready to help.
These true teachers have found ways to write about their subject
in a way that is fun and enlightening.
You read them for fun, you learn more, you perform better,
and so you enjoy the subject more, which starts the cycle all over again.
It may sound like magic or paradox, but it is common knowledge in education,
and it has worked for us.
Nevertheless, if it doesn't work for you, don't despair over it.
The only test for whether you should do this or any field is whether you
do well at it and enjoy it;
there's more than one way to learn to enjoy something.

\section{Computing Literature}

The computing section of the library is mostly in the call numbers
that start with QA76.  Some Computer Engineering literature also appears
under call numbers that start with TK7885.
These books and magazines are mostly stocked on the second floor of the
Parks library, although some current issues are in the reading room,
and some reference materials are on the first floor.
Take some time and get acquainted with what's in these sections of the library,
as we can only discuss a small sample of the available literature.
Just ignore anything that you don't care about or looks too technical.

\subsection{Interesting Reading about Computing}

Douglas Hofstadter has written two classic books with a very eclectic mix
of philosophy, art, and computer science \cite{Hofstadter79}
\cite{Hofstadter85}.
(These citations, like \cite{Hofstadter79}, are keys to the references section
at the end of this paper.  Many math and science texts and journals use
a similar system for citing references.
It's wise to look them up as you go, even if it means flipping back and forth.)
In the second book, \cite{Hofstadter85}, is an introduction to LISP
(Scheme is a LISP dialect).

A. K. Dewdney has written several popular books on computing.
Highly recommended is his {\em The Turing Omnibus\/} \cite {Dewdney89}.
%Among his other books, {\em The Planiverse\/} \cite{Dewdney84}
%is not really about computers,
%but is highly entertaining, especially if you are interested in mathematics.
His book, {\em The Magic Machine\/} \cite{Dewdney90} features lots of
``programming recreations''.

A very basic introduction to the hardware and software in a personal
computer is White's book {\em How Computers Work\/}
\cite{White93}.

Computer Engineers should not miss reading Tracy Kidder's account
of the development of a new (at the time) data general minicomputer
\cite{Kidder81}.
It is also good for giving (anyone) some idea of what it's like working on
a major project.

An excellent introductory text that emphasizes
the engineering side of computing
is \cite{Ward-Halstead90}.

For some amazing computer graphics,
check out the books of Clifford Pickover \cite{Pickover90} \cite{Pickover91}.

William Poundstone's book {\em The Recursive Universe\/}
\cite{Poundstone85}
relates simple computational processes to the limits of scientific knowledge.
If you like this book, you might search out others by him.

William Robinson's book {\em Computers, Minds, and Robots\/}
\cite{Robinson92b} is an interesting philosophical discussion about the
possibility of Artificial Intelligence.  Daniel Crevier provides a fascinating
historical discussion of the same subject in his book {\em AI\/}
\cite{Crevier93}.

A good biography about Alan Turing, one of the pioneers of computing, is
\cite{Hodges83}.
A pioneer of more local fame, J. V. Atanasoff, is profiled in a biography
by Mollenhoff \cite{Mollenhoff88}.
The history of programming languages is discussed in \cite{Wexelblat78}.

Other professors recommended the following introductory books
(in addition to the above).
Information theory is closely related to computing and is
the subject of  R. W. Lucky's {\em Silicon dreams\/} \cite{Lucky89}.
An interesting view of the use of computers in education
and some other thoughts about computers is found in Seymour Papert's book
{\em Mindstorms\/} \cite{Papert80}.
David Harel's book {\em Algorithmics\/} \cite{Harel87b} may be a bit advanced,
but gives a good overview of Computer Science.

You might also want to read books about science or some other science
in general to get some perspective.
For example, Stephen Jay Gould writes wonderfully about biology,
and Issac Asimov writes well about most sciences.

\subsection{Interesting Books about Programming in General}

Books specifically about programming may be hard for you to grasp at the
beginning.  But at least sometime next term you might want to read
Abelson and Sussman's book \cite{Abelson-Sussman-Sussman85}.
Some of the insights in Dijkstra's {\em The Humble Programmer\/}
\cite{Dijkstra72} are not too difficult too understand,
and will be of help even to fairly new students.
Eventually books such as Jon Bentley's will be of interest
\cite{Bentley82} \cite{Bentley86b} \cite{Bentley88}.

An older book that discusses problems of large-scale programming
and software engineering is Brook's classic
\cite{Brooks75}.
Kennighan and Plauger's {\em The Elements of Programming Style\/}
has some good ideas about programming style \cite{Kernighan-Plauger78}.
You may eventually be interested in more mathematical approaches
to programming and program correctness, such as Dijkstra's classic
{\em A Discipline of Programming\/} \cite{Dijkstra76}.

\subsection{Magazines and Journals on Computing}

Several magazines cater to the home computer enthusiast;
some of these, such as {\em Byte\/} even feature an occasional article
about programming (among the advertisements).
But to read about programming and other computing topics,
you should try some of the following journals:
{\em Computer} (published by the IEEE Computer Society),
{\em IEEE Software}, {\em Communications of the ACM\/}
(also known as CACM), and {\em Computing Surveys} (published by the ACM).
Sometimes {\em IEEE Transactions on Education\/} and {\em SIGCSE Bulletin\/}
(published by the ACM) have good introductory articles as well.
These are available in the library, or you can subscribe.
To subscribe, join the ACM and/or the IEEE Computer Society.
Both of these have local branches, and student rates are cheap.
See the Computer Science or Computer Engineering department office
for more information about how to join.

{\em Scientific American\/} also publishes occasional articles about computers.

\section{What is Computing as an Academic Discipline?}

You can gain some perspective on computing as a discipline,
and the similarities and differences between Computer Science and Computer
Engineering, if you listen to the debate about how to teach computing.
Denning and others discuss this in an article in which they
try to give a framework for the entire ``discipline of computing''
\cite{Denning-etal89}.
A more specialized and personal treatment is \cite{Parnas90}.
Several other articles continuing these discussions have appeared
over the last few years in CACM.

\subsection{Useful Books Related to this Class}

\subsubsection{Scheme and LISP Books}

Besides our course textbook
\cite{Springer-Friedman89}
another classic book on Scheme is
{\em Structure and Interpretation of
Computer Programs\/} \cite{Abelson-Sussman-Sussman85};
read it after this course is over if you want to understand it better,
but read it sometime.
More helpful for learning Scheme is {\em The Little LISPer\/}
\cite{Friedman-Felleisen87}.
Another introductory book with many interesting examples is
\cite{Harvey-Wright94}.

A reference on Scheme and Chez Scheme is \cite{Dybvig87}.
These books are on reserve at the library.
The PC Scheme dialect of Scheme is used in the text
\cite{Eisenberg88} and described in detail in the reference
\cite{TexasInstruments88}.

Scheme is a dialect of LISP.  Although most of the Scheme books are
on reserve in the library, none of the LISP books are on reserve
(at least not for 227).
For example,
Watson's book has a lot of interesting applications written in Common LISP
\cite{Watson91}.

Books about functional programming will also have some good ideas you
can use in Scheme.

\subsubsection{Unix Books}

There are many books about how to get along in Unix.
Among the best are the following
\cite{Troy90} \cite{Sobell89} \cite{Todino-Strang86}
and \cite{Abrahams-Larson92}.
The \cite{Abrahams-Larson92} book is very much a reference,
but it is handy once you know your way around more.
If you are running Unix on a PC, look into \cite{Gardner91}.
If you want a book about workstations like those on Project Vincent,
look into \cite{Barkakati91}.

\subsubsection{Emacs Books}

Three books specifically about emacs are \cite{Roberts92}
\cite{Cameron-Rosenblatt91} and \cite{Schoonover-Bowie-Arnold92}.

\section{Thinking and Problem Solving Books}

We highly recommend the following books for sharpening your thinking
skills.
Polya's classic {\em How to Solve It\/} has been read
by generations of programmers \cite{Polya57}.
A newer book in the same vein is {\em A whack on the side of the head\/}
\cite{vonOech90}.
Also recommended is Mason's {\em Thinking Mathematically\/};
it describes the problem solving process and gives many examples.

If you want to think more logically,
look at a logic text
(\cite{Smith74} is a good introduction),
or read some of the books by Smullyan,
such as {\em What is the Name of this Book?\/} \cite{Smullyan78}.

\bibliography{journal-abbrevs,distrib,datatypes,languages,se,old-datatypes,etc}

\end{document}
