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 ----------------------------------------------------------------------------
gm@mitisft.Convergent.COM (G.M. Harding) (04/01/89)
Phil Windley writes: > 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. I know it was a typo, Phil, but it was a very serendipitous one. Indeed, one cannot be a good programmer without a func()damental understanding of what's going on. More seriously, your main point is well taken. The best programmers I know are well-rounded human beings. I've always taken a certain amount of pride in the fact that I don't have a BS or MS; rather, I have a BA (history). One of the best software engineers I ever knew had a BA and an MA (music). We often miss the point of what an engineer really is. An engineer, in any discipline, is one whose job consists of translating theory into reality. Hence, first and foremost, engineers are people well-grounded in reality. In the software engineering discipline, that implies a deep, almost intuitive understanding of, or "feel" for, how computing machines work. Second only to being well-grounded in reality, however, software engineers ought to understand basic theories. This includes algorithm theory, of course, but in a broader sense it encompasses all branches of human knowledge: Science, mathematics, commerce, even the much- maligned liberal arts. This explains my conviction of long standing that C is the ideal engineering language. Most other languages place their emphasis on the latest algorithmic nicety to come out of academia. That's putting the cart before the horse. We are engineers, not academicians or theore- ticians. Our job is to MAKE IT WORK, and that means that our first emphasis must be on the machines that will do the work. Since, however, we must translate theories from all walks of life into computing models, it behooves us to understand theories of many different types, if only so that we can tell our clients when they're dreaming. GMH -- * * * * * * * * * * * * * * * * * * * All of your opinions are sound. * * That's all--just sound. * * * * * * * * * * * * * * * * * * *
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
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.