Good books in computer science?

K

koranthala

Hi all,
I do understand that this is not a python question and I apologize
for that straight up.
But I am a full time follower of this group and I have seen very
very brilliant programmers and solutions.
I also want to be a good programmer - so this question.

Which are the classic books in computer science which one should
peruse?
I have (a) Code Complete (b) GOF (c) Art of programming.

Art of programming was too tough for me - and I couldnt understand
much. The other two were good books - I understood and implemented
quite a bit from both.
What are the other books which I should peruse?

Regards
K
 
P

python

Timeless classics - highly recommended:

Software Tools by Plaugher
Mythical Man Month by Brooks

Malcolm
 
P

Paul Rubin

koranthala said:
Which are the classic books in computer science which one should
peruse?
I have (a) Code Complete (b) GOF (c) Art of programming.

Art of programming was too tough for me - and I couldnt understand
much. The other two were good books - I understood and implemented
quite a bit from both.
What are the other books which I should peruse?

Code Complete and GOF are software engineering books but not really
CS books. TAOCP is a CS book but a bit old fashioned. Other classics:

Introduction to Algorithms by Thomas H. Cormen, Charles E. Leiserson,
Ronald L. Rivest, and Clifford Stein.

Structure and Interpretation of Computer Programs by Harold Abelson
and Gerald Jay Sussman (online at mitpress.mit.edu/sicp)
 
K

koranthala

Code Complete and GOF are software engineering books but not really
CS books.

I understand and concur. Since I am a software engineer - coming in to
software from a different background - what I am looking for is self-
improvement books for a software engineer. This can include both CS
and Software books - even though I found that CS books are much less
understandable to me :)
 
N

Nathan Stoddard

Hi all,
I do understand that this is not a python question and I apologize
for that straight up.
But I am a full time follower of this group and I have seen very
very brilliant programmers and solutions.
I also want to be a good programmer

The best way to become a good programmer is to program. Write a lot of
code; work on some large projects. This will improve your skill more than
anything else. It's also important to learn new languages regularly. I
recommend to learn C, Python, and Lisp first.
Which are the classic books in computer science which one should
peruse?

A list of some good books is at steve.yegge.googlepages.com/ten-great-
books. Also read programming blogs.
 
R

Rhodri James

I understand and concur. Since I am a software engineer - coming in to
software from a different background - what I am looking for is self-
improvement books for a software engineer.

In that case The Mythical Man-Month (Brooks) is a must.
 
R

Roy Smith

"Rhodri James said:
The Mythical Man-Month (Brooks) is a must.

What's amazing about this book is just how relevant it is today, 35 years
after it was written. Some of the technical details have changed (how many
of us still keep our project notes on microfiche?), but cross out
"microfiche" and write in "wiki" and what he's saying is just as valid
today. It's not about computer science. It's not really even about
software engineering. It's more about general project management than
anything else.

In the same vein, Death March, by Ed Yourdon.
 
K

koranthala

In that case The Mythical Man-Month (Brooks) is a must.

Thank you Rhodri.
I do have Mythical Man-Month - a great book indeed.
I was looking for more technical books -
I have now got a good set - Putting it across so that others can also
use maybe -

Code Complete,
GOF,
Mythical Man-Month,
SICP - Thank you Paul - I have downloaded it from Web Site,
Introduction to algorithm - I have placed an order for the same,
The Pragmatic Programmer - Planning to buy,
Refactoring: Improving the Design of Existing Code - again planning to
buy,
The C Programming Language - I had this, lost it, now I will buy
again,
The Little Schemer - I am not sure about buying this - I dont know
scheme
Software Tools - Seems to be a classic - not sure whether I will buy.

Regards
K
 
R

rustom

Software Tools - Seems to be a classic - not sure whether I will buy.
In that vein but more modern -- Art of Unix Programming by Eric
Raymond (available online)
Some of my old favorites:
Intro to functional programming by Bird and Wadler
TAOCP slightly more modernized more heady and less programmer oriented
-- Concrete Mathematics by Knuth and...
Science of Programming by David Gries; again more modernized to
Logical Approach to Discrete Mathematics
Bentley's Wriiting Efficient Programs and Programming pearls

Dijkstra's writings -- http://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD1036.html
--
are not kind to software engineers [His defn of SE -- How to program
if you cannot].

Seemingly irrelevant -- Good programmers are very good with their
editors -- someone mentioned yegge. Read him for inspiration on
emacs. Of course you can use something else but its important to get
good at it.
 
L

Lawrence D'Oliveiro

In message <d177c9ea-4643-4dbe-
I do have Mythical Man-Month - a great book indeed.
I was looking for more technical books ...

No-one has mentioned Andrew Tanenbaum's "Computer Networks". So much of
programming seems to involve networking these days, I think the current
(4th) edition is a great introduction to how to think in network terms,
particularly about security issues.
 
R

Roy Smith

Paul Rubin said:
I've been wanting to read "Antipatterns".

I didn't think that was so great. It had a lot of hype, which lead to be
believe it would be something wonderful, but I wasn't so impressed.
 
P

Paul Rubin

Roy Smith said:
I didn't think that was so great. It had a lot of hype, which lead to be
believe it would be something wonderful, but I wasn't so impressed.

Hmm, good to know. Thanks.
 
S

Steven D'Aprano

Nathan said:
The best way to become a good programmer is to program. Write a lot of
code; work on some large projects. This will improve your skill more than
anything else.

I think there are about 100 million VB code-monkeys who prove that theory
wrong.

Seriously, and without denigrating any specific language, you can program by
(almost) mindlessly following a fixed number of recipes and patterns. This
will get the job done, but it won't make you a good programmer.
 
C

Christof Donat

Hi,
Which are the classic books in computer science which one should
peruse?

From having read this discussion up to now I'd recomend you to read code
written by good programmers.

Christof
 
R

rustom

I think there are about 100 million VB code-monkeys who prove that theory
wrong.

Seriously, and without denigrating any specific language, you can program by
(almost) mindlessly following a fixed number of recipes and patterns. This
will get the job done, but it won't make you a good programmer.

When Dijkstra was asked what next programming language to learn he
would typically recommend Latin :)
Really? So you don't think that the best way to get good at something
is to practice? I think I'm paraphrasing Richard Feynman here, but the
only way to truly understand something is to do it.
Obviously a bit of guided learning is a major boon, but you can't be practice.

For every one Horowitz there are a thousand wannbes thumping on the
piano trying to become Horowitz.
The traction that practice gives is maximal only in the beginning.
 
S

Steven D'Aprano

Graham said:
Really? So you don't think that the best way to get good at something
is to practice?

Shame on you for deliberately cutting out my more serious and nuanced answer
while leaving a silly quip. As I went on to say:

"... you can program by (almost) mindlessly following a fixed number of
recipes and patterns. This will get the job done, but it won't make you a
good programmer."

There are huge numbers (millions?) of lousy programmers who program every
single day and never become good programmers. "Practice makes perfect" only
works for mechanical skills and rote learning, neither of which are
especially applicable to good programming. (Although rote learning is
helpful for reducing the time taken to look up syntax and library
functions.) Without some level of understanding and creativity, as soon as
you hit a problem that can't be efficiently solved by one of the patterns
or recipes you've learned, you're in trouble.

All the practice in the world won't give you the discipline to write
appropriate comments, or to test your code thoroughly. Practice won't
*necessarily* make you creative -- you can't be creative in a field you
know nothing about, but having learned the language and the libraries
doesn't necessarily mean you can apply the tools to solve novel problems.
Many programmers know a few good tricks, and try to hammer every problem
into a form that can be solved by one of the few tricks they know, no
matter whether it is appropriate or not. Witness how many people try to
write regexes to parse bracketed expressions, a problem which requires a
proper parser.

(This is not necessarily a bad thing, but it often is.)

You could write a piece of code like:

s = ""
for word in some_data:
s += " " + word

a thousand times a day, and *never* learn that this is Bad Code, because you
never profile it with more than a few thousand words and so never discover
that it's O(n**2). Eventually when it gets released into the real world,
somebody reports that it takes eight hours to process 100MB of words, and
then *some other guy* re-writes your code to use s = " ".join(words), and
you remain in blissful ignorance, happily writing your bad code every
single time.


I think I'm paraphrasing Richard Feynman here, but the
only way to truly understand something is to do it.

An amazingly inappropriate quote for a *theoretical* physicist to have said.

Whether Feynman did or didn't say that, it's clearly untrue: many people do
without understanding. Many people can cook, some people are expert cooks,
but few people understand precisely what takes place when you cook food.
People can catch and throw balls, and have little or no understanding of
gravity, air-resistance, and the mechanics of their own bodies.

In fact... just before you hit Delete on this post, how about you explain
*how* you make your finger reach out and press the Delete key? You probably
move bits of your body a million times a day, and the chances are very high
that until now, you've never once noticed that you have no idea how you do
it. I think that simple fact blows out of the water the concept that doing
implies understanding.

Obviously a bit of guided learning is a major boon, but you can't be
practice.

I didn't say that practice was useless. Arguably, it may even be necessary
to be a good programmer. (Although less so for an unsurprising language
like Python, where it is very common to write code which works correctly
the first time.) But practice is clearly not *sufficient* to be a good
programmer.
 
K

koranthala

There are huge numbers (millions?) of lousy programmers who program every
single day and never become good programmers.

I think I can attest to that.
I was a programmer (in a low level language) in a huge MNC code monkey
shop for > 7 years.
I consider myself to be Ok - not great, but not very poor either.
I had written a lot of code in those 7 years, but due to lack of
exposure and laziness, never knew that I have to read books.
As I mentioned before, I come in from a non-computing engineering
degree, so I did not even know which books to read etc.

I had seen many of the frameworks written by others, and was extremely
impressed. I considered those people who wrote those frameworks to be
geniuses - until I accidently came across one site where I read about
GOF.
I bought it and read it - and straight away understood that whatever I
learned in the last 7 years, I could have learned most of them in 6
months, provided I had read the right books. All the frameworks were
just amalgamation of these patterns.

Now, I voraciously purchase and read books - both in the domain of my
work and on computer science in general. Even though I am not going to
be recruited by google any time soon :), I think I have become a much
better programmer over the last one year. I see my code before 1 year
and I am horrified :).

Practice makes perfect only if you push yourself - and you need
exposure to know that.
 
C

Chris Jones

I think there are about 100 million VB code-monkeys who prove that theory
wrong.

Seriously, and without denigrating any specific language, you can program by
(almost) mindlessly following a fixed number of recipes and patterns. This
will get the job done, but it won't make you a good programmer.

Vivaldi vs. Mozart

And the latter especially had definitely mastered his editor. Just think
of the sheer volume of the coding he managed during his short life.

Not many bugs either…

CJ
 
D

dads

I'm wanting to purchase some of the titles that have been raised in
this thread. When I look they are very expensive books which is
understandable. Do you think getting earlier editions that are cheaper
is a daft thing or should I fork out the extra £10-£30 to get the
latest edition?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,899
Latest member
RodneyMcAu

Latest Threads

Top