[comp.lang.c] 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

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

gwyn@smoke.BRL.MIL (Doug Gwyn ) (04/04/89)

In article <1203@microsoft.UUCP> w-colinp@microsoft.uucp (Colin Plumb) writes:
>One thing I've wanted for a while ...
>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.

So far the closest I've seen to this is the "Numerical Recipes" series
(Fortran, Pascal, and C versions) by Press, Flannery, Teukolski, and
Vetterling.  I can't say much for their use of C, and occasionally they
pick an ill-advised algorithm, but at least there are a lot of workable
algorithms in most areas of numeric computation.