[comp.edu] Texts on fundamentals of programming/computer science

isaac@cbnewsc.ATT.COM (isaac.j.champagne) (03/30/89)

I'm an electrical engineer, who learned computer programming
via Fortran, but have done a fair amount of C programming at work.
I'm interested in doing some reading to strengthen my knowledge of
the fundamentals for "software engineering" or computer science.

So what are some good texts that cover the fundamentals of programming?
I'm particularly interested in:
 	1.A text with more examples than confusing computer science
  	  theory (preferably w/examples in C)
	2.How about some good background in data structures?
	3.How about programming paradigms? It seems like the "how to"
	  of programming may be more important than lots of
	  theories.

Any ideas as to things that a computer programmer should know.

Thanks,
Isaac Champagne,Jr.
ixn5c!isaac   ATT-Bell Labs
              Indian Hill South

windley@cheetah.ucdavis.edu (Phil Windley/20000000) (03/31/89)

In article <354@cbnewsc.ATT.COM> isaac@cbnewsc.ATT.COM (isaac.j.champagne) writes:

   So what are some good texts that cover the fundamentals of programming?
   I'm particularly interested in:
	   1.A text with more examples than confusing computer science
	     theory (preferably w/examples in C)
	   2.How about some good background in data structures?
	   3.How about programming paradigms? It seems like the "how to"
	     of programming may be more important than lots of
	     theories.


Try "Data Structures: an Advanced Approach using C" by Esakov and Weiss is
pretty good.  

That said, I think you're missing the point.  You seem to think that you
can be a good programmer without a funcdamental understanding of what's
going on.  This is a serious mistake.

If you take programming as the act of translating someone else's desing
into working C code, then you're probably going to be able to do that
without a lot of theoretical knowledge.  If you think that you can DESIGN
programs without the kind of important background knowledge that theory
provides then you're in for a rude awakening.  

For exmaple, how do you propose to choose the apporpriate data structure,
for example, without understanding the theory behind the choices?????


--
Phil Windley                          |  windley@iris.ucdavis.edu
Division of Computer Science          |  ucbvax!ucdavis!iris!windley
College of Engineering                |  (916) 752-7324 (or 3168)
University of California, Davis       |  Davis, CA 95616

rudolf@neptune.uucp (Jim Rudolf) (03/31/89)

I've heard good things about "Software Tools" by Kernighan & Plauger.
(Don't hold me on the spelling of the author's names).  Any comments
on this book?

Jim Rudolf


----------------------------------------------------------------------------
Internet: rudolf@oce.orst.edu                 "All opinions herein are mine" 
UUCP: {tektronix,hp-pcd}!orstcs!oce.orst.edu!rudolf
----------------------------------------------------------------------------

w-colinp@microsoft.UUCP (Colin Plumb) (04/01/89)

It isn't C, and it's pretty heavy going alone, but "The Structure and
Interpretation of Computer Programs", by Abelson & Sussman (the textbook
for the first year CS intro for CS and EE programs at MIT) will teach
almost anyone a hell of a lot.  This goes for rank beginners through
Dennis Ritchie.  The C-Scheme compiler is available from MIT.

One thing I've wanted for a while, and never been able to find (Sedgewick's
"Algorithms" and G.H. Gonnet's "Handbook of Algorithms and Data Structures
come very close; after that, Knuth if you can read the goto-laden algorithms)
is a cookbook of data structures and algorithms.  Leave in the details (as
opposed to making them exercises), but make it brief, skip most of the math,
and explain the boundary cases and implementation issues.
-- 
	-Colin (uunet!microsoft!w-colinp)

"Don't listen to me.  I never do." - The Doctor

desnoyer@Apple.COM (Peter Desnoyers) (04/02/89)

In article <1203@microsoft.UUCP> w-colinp@microsoft.uucp (Colin Plumb) writes:
>It isn't C, and it's pretty heavy going alone, but "The Structure and
>Interpretation of Computer Programs", by Abelson & Sussman (the textbook
>for the first year CS intro for CS and EE programs at MIT) will teach
>almost anyone a hell of a lot.  This goes for rank beginners through
>Dennis Ritchie.  The C-Scheme compiler is available from MIT.
>

I second the motion. It uses Scheme (actually a small subset that can
be taught in a class or two) to cover most of the common programming
paradigms. The approach to problem sets in the class at MIT was great
- they would give you lots of code and you would then have to figure
it out and then modify or extend it. Much more of a real-world
approach than writing everything from scratch. 

				Peter Desnoyers

wendyt@pyrps5 (Wendy Thrash) (04/03/89)

There are a couple of places to get ideas about books.  Check out the
bookstore of a nearby university, see what they're using for their courses.
Of course, if someone on the faculty has written a book in the area, the
selection is likely to be biased. :-)  Look also in Computing Reviews,
published by good old ACM.  They frequently do comparative reviews of
textbooks.  The last Data Structures review I remember was in January, 1987.
At that time Kruse, _Data Structures & Program Design_, was the "most liked
by students" while Tremblay & Sorenson, _An Introduction to Data Structures
With Applications_, rated high as a reference.  In the two years since that
review, several low-level data structures books have become available, some
of them in C.  (The two above use Pascal, with some PL/I in T&S.)  The
availability of data structures books at a lower level, BTW, reflects the
desire of authors to cash in on the new recommended curriculum by being
firstest with the mostest in a CS2 book. 

The subject of algorithms books has also been raised in this thread.  I can't
find the CR comparative review of algorithm books, but it's out of date
anyway; some fine boooks have been published recently.  I happen to be taking
an algorithms/algorithmics course this semester (after twenty years of
programming without knowing what I was doing) and, as a compulsive book buyer,
have accumulated the following:
   Aho, Hopcroft,& Ullman, _The Design and Analysis of Computer Algorithms_
   Aho, Hopcroft,& Ullman, _Data Structures and Algorithms_
   Baase, _Computer Algorithms/Introduction to Design and Analysis_, 2nd ed.
   Brassard & Bratley, _Algorithmics/Theory & Practice_
   Horowitz & Sahni, _Fundamentals of Computer Algorithms_
   Knuth, _The Art of Computer Programming_, vols, I-III
   Sedgewick, _Algorithms_
   Tarjan, _Data Structures and Network Algorithms_ (borrowed)
and I'm still looking for a copy of Reingold, Nievergelt, & Deo.

Impressions?  Well, there are cookbooks, math books, and Knuth books.
Sedgewick is a cookbook.  Brassard & Bratley is a math book.  The others
are in between, except for Knuth's books, which are, of course, Knuth books.
I'm rather partial to Brassard & Bratley, but I'm a quondam mathematician
(which is nothing at all like, say, a quantam chemist) so that probably
explains it.  Sedgewick is fine if I really don't want to know what I'm
doing, and as that's often the state I'm in, I'll probably keep it forever.
Speaking as a (very good ;-)) student, I find Baase the best balanced
as a textbook for bright students who want to know algorithmics and not
just algorithms.  I have just heard, though, from sources I'd better not
identify, that there's a "great" new textbook available: Udi Manber's
_Introduction to Algorithmics_.  I haven't seen it myself, but from its
name and from the interests of the person who recommended it, it obviously
concentrates on algorithmic techniques, rather than recipes.

For all you Knuth fans out there, Stanford claims to be appointing him
Professor of the Art of Computer Programming real soon now, so he can go
about producing more books.  Thanks, Stanford!  Knuth's volume III is
absolutely indispensable if you want to know about sorting.  OK, so
his style is a bit dense at times; we're all adults here!  For myself,
if the man wrote twenty more volumes at $100 each, I'd buy them.  There's
no other living author I'd say that about, though I might pay even more
for a new book by James Joyce.

gds@spam.istc.sri.com (Greg Skinner) (04/03/89)

In article <28226@apple.Apple.COM> desnoyer@Apple.COM (Peter Desnoyers) writes:
>The approach to problem sets in the [Scheme] class at MIT was great
>- they would give you lots of code and you would then have to figure
>it out and then modify or extend it. Much more of a real-world
>approach than writing everything from scratch. 

I took this class before the book was written (the book was derived
from the course handouts) and I co-taught a three week seminar on it
once.

While what you say is true (much real-world programming consists of
modifying large software projects) I question whether this is a good
thing to teach as a first undergraduate computer science requirement.
During the time I took the course, I tended to get lost in the huge
pieces of software because I had no framework for debugging (let alone
understanding) a large piece of software.  I know other people that
had this problem.  (In general, I found that students spent much more
time on the subject than was allocated by the department.)  I found my
understanding of how to write software increased once I had actually
written large pieces of software and then started to modify them.
(The software engineering course at MIT, 6.170, is much better in this
regard.)

This is just my opinion, though.  I know lots of people that loved
6.001 and really got a lot out of it, but I and others were lost most
of the time.  I've found it's easier to give the students software
projects of increasing sizes to design on their own to give them a
feel for the size and complexity of software projects.

--gregbo

reuven@athena.mit.edu (Reuven M. Lerner) (04/03/89)

In article <18740@joyce.istc.sri.com> gds@spam.istc.sri.com (Greg Skinner) writes:
>
>This is just my opinion, though.  I know lots of people that loved
>6.001 and really got a lot out of it, but I and others were lost most
>of the time.  I've found it's easier to give the students software
>projects of increasing sizes to design on their own to give them a
>feel for the size and complexity of software projects.
>
>--gregbo


Well, I'm "just" a freshman taking 6.001, and I love the course.  I'm
getting more out of it, and learning more about Computer Science and
programming, than I ever thought imaginable.  The textbook is a bit
dense, and the lectures go a little fast (typical for MIT), but
all-in-all, I'm having a great time.

Reuven