General Programming Books

Hi all,

This is not ‘yet another recommended ruby books’ question, but more a
‘general programming’ one.

I often read a reference to non language specific books here and was
just
wondering what peoples favourites are.

I’m asking this after reading the ‘… pretending to be a computer
scientist’ post and the reference to Bertrand Meyers’ OO Software
Construction. I’ve seen this recommended quite a few times now.

So, what are some others you’d recommend to improve programming in
general?

happy new year,

Mark W. wrote:

Construction. I’ve seen this recommended quite a few times now.

So, what are some others you’d recommend to improve programming in
general?

That’s a tough one … but I’d have to say right off the top of my head
to pick the ones from the “Pragmatic Programmer” series on unit testing,
version control, etc., that are closest to the language/environment you
know best. It’s really the practices, the communications skills and the
domain knowledge that separate a good programmer from an average one,
especially since a large number of programmers work with mandated
languages, operating systems, IDEs, etc.


M. Edward (Ed) Borasky, FBG, AB, PTA, PGS, MS, MNLP, NST, ACMC(P)
http://borasky-research.blogspot.com/

If God had meant for carrots to be eaten cooked, He would have given
rabbits fire.

Mark W. wrote:

Construction. I’ve seen this recommended quite a few times now.

So, what are some others you’d recommend to improve programming in
general?

happy new year,

Andy H. and Dave T.’ The_Pragmatic_Programmer
http://www.pragmaticprogrammer.com/ppbook/index.shtml

On Dec 31, 2006, at 6:30 PM, Mark W. wrote:

I’m asking this after reading the ‘… pretending to be a computer
scientist’ post and the reference to Bertrand Meyers’ OO Software
Construction. I’ve seen this recommended quite a few times now.

OOSC is a good book. If you can find the first edition somewhere, go
for it: I prefer its focus over the second.

Brad Cox’s Object-Oriented Programming is a good little book, too.

Then, I’d choose books based on your interests: design issues,
patterns, languages, methodologies, and so on.

But, in the midst of all the reading, don’t forget that what makes a
good programmer isn’t reading, but doing. Write lots of code. And, as
you;'re writing, look at it through a critical eye, using stuff you
pick up from the books. The more you write, the better you’ll
understand the books.

And remember to enjoy it.

Dave

On 12/31/06, Mark W. [email protected] wrote:

Hi all,

This is not ‘yet another recommended ruby books’ question, but more a
‘general programming’ one.

I often read a reference to non language specific books here and was just
wondering what peoples favourites are.

The other books that have mentioned are excellent, so +1 to each of
those. (I’ve not read all, but most of them)

If you’re interested in participating in a leading, or just getting
some background on development practices and processes related to free
software development, “Producing Open Source Software” is a great
book. It’s even available for free online.

http://producingoss.com/

Jeremy H. wrote:

But again, the most effective way to learn all of this is to get out
there and do it. This really is a Craft profession and the only way to
learn a craft is Practice, Practice, Practice, and then practice some
more.

While it’s tempting to think programming is still a craft profession,
that’s only part of the story and less true today than it was when I
started 45 years ago. Yes, there are still craftsmen and women, there
are still guilds, mentors, apprentices, etc. And I’m convinced there
always will be, just as you can buy tea from Lipton or from Leaves.com.
But an awful lot of “programming” takes place in “software factories”
these days, and not everything produced by such factories is of lesser
quality than the hand-crafted works of the craftsmen and women.

Of course Ruby programming is a lot more a craft profession today than
C++ or Java programming are, and probably even more so than the typical
LAMP-based project. And I believe most of the active participants in
this list are craft professionals, even if they happen to earn a living
in a software factory. So by all means, yes, practice, practice,
practice, and practice in Ruby. And welcome to the “guild”. :slight_smile:


M. Edward (Ed) Borasky, FBG, AB, PTA, PGS, MS, MNLP, NST, ACMC(P)
http://borasky-research.blogspot.com/

If God had meant for carrots to be eaten cooked, He would have given
rabbits fire.

I’m currently coursing my fourth year (of five) in Computer Science.
I can make a lot of (cool) things but my code isn’t the most
politically correct :wink:

In academic universe people don’t talk about unit-test, design patterns,
etc…
Software Engineering it’s at most theoretical, not practical.

There’s something like: “Academics to Real World - What really need to
know but then never told you” ?

What you’d recommend ?

Thanks

On Mon, Jan 01, 2007 at 09:30:10AM +0900, Mark W. wrote:

Construction. I’ve seen this recommended quite a few times now.

So, what are some others you’d recommend to improve programming in
general?

The books on my shelf that I have learned the most from over the years,
in the order I pulled them off my self:

The Pragmatic Programmer                    - Dave and Andy
Software Craftsmanship                      - Pete McBreen
The Practice of Programming                 - Kernighan and Pike
The Mythical Man Month                      - Frederick P. Brooks, 

Jr
Programming Pearls - Jon Bently

Advanced Programing in the Unix Environment - W. Richard Stevens
UNIX Network Programming                    - W. Richard Stevens

Alogorithms in C++                          - Robert Sedgewick
Introduction to Algorithms                  - Coremen, Leiserson, 

Rivest
Practical Algorithms for Programmers - Binsotck and Rex
Expert C Programming (Deep C Secrets) - Peter Van Der Linden
- this one has funny stories in it too :slight_smile:

Programming with Threads                    - Kleiman, Shah, 

Smaalders

Machine Learning                            - Tom M. Mitchell
Artificial Intelligence - A modern approace - Russle and Norvig

But again, the most effective way to learn all of this is to get out
there and do it. This really is a Craft profession and the only way to
learn a craft is Practice, Practice, Practice, and then practice some
more.

enjoy,

-jeremy

On Jan 2, 2007, at 8:57 AM, Felipe N. wrote:

What you’d recommend ?

Thanks

If Rails interests you, I found Agile Web D. with Rails had
a good first section that walked through the development of a simple
app. It was a nice blend of rails code and agile project flow.
Included unit testing basics, short feedback loops, not so much
design patterns.

I’m currently reading Extreme Programming Explained by Kent Beck,
which seems good so far. It’s short and is totally about the
process, which I never got much of in my 5 years of CS. You don’t go
to Drexel by any chance, do you? :slight_smile:

Honestly, my favorite primer to patterns was in Matt Zandstra’s PHP 5
Objects, Patterns and Practices. But if you’re not interested in
PHP, it’s probably not for you. I haven’t seen a Patterns for Ruby
book yet, but maybe I just missed it. I find that some patterns
become unnecessary when you change languages, so it’d be great to see
something ruby specific.

-Mat

There’s something like: “Academics to Real World - What really need to
know but then never told you” ?

My transition from the academic to the non-academic world was kind of
rough, mostly because of the reasons you mentioned. Right out of school
we
had a project havoc that really burnt the team.

But

When we finally finished I read in order:

  1. Mythical Man Month (Aha, our problems were neither new nor unique)

  2. The pragmatic programmer (Ouch, I wish I had read this 9 months ago)

  3. Pickaxe (Now that’s a language I like)

So, I’d say 1) for the classic overview and 2) for the
down-to-earth advice, then 3) for the solution.

All the best
JE

Felipe N. wrote:

What you’d recommend ?

Thanks
Well … where to start? :slight_smile:

  1. I consider myself very much a “practical real-world business
    oriented” person, but if you compare me with my colleagues, I probably
    look like an ivory tower academic. My degrees are in applied
    mathematics, but I’ve always been interested in the “computer science”
    paradigms as well – formal semantics of programming languages, the
    lambda calculus, functional programming, etc. What you are learning is
    very practical – don’t let anyone convince you otherwise!

  2. Books to bring you from academia to the real world: by “real world”,
    I’m assuming you mean business, to be distinguished from “real world”
    non-profit organizations, “real world” teaching or “real world”
    government jobs. In any event, the distinctions between the various
    types of organization, at least in the “western capitalist society”, are
    mostly legislative and accounting fictions and have little to do with
    how one behaves, the quality of what one produces, or how one is
    compensated for one’s efforts.

Given that, there are two books I would recommend. One is “Selling With
Integrity”, by Sharon Drew Morgen. (http://www.newsalesparadigm.com/)
and the other is “Mastering the Complex Sale” by Jeff Thull
(http://www.primeresource.com/).


M. Edward (Ed) Borasky, FBG, AB, PTA, PGS, MS, MNLP, NST, ACMC(P)
http://borasky-research.blogspot.com/

If God had meant for carrots to be eaten cooked, He would have given
rabbits fire.

Hi Felipe,

On Tue, 02 Jan 2007 22:57:42 +0900, Felipe N. wrote:

I’m currently coursing my fourth year (of five) in Computer Science.
I can make a lot of (cool) things but my code isn’t the most
politically correct :wink:

This is why I asked the original question. I’m just about finished an IT
degree, hovering around a distinction average and still feel I know very
little programming wise!

In academic universe people don’t talk about unit-test, design patterns, etc…
Software Engineering it’s at most theoretical, not practical.

Yep!

There’s something like: “Academics to Real World - What really need to
know but then never told you” ?

What you’d recommend ?

Thanks

M. Edward (Ed) Borasky wrote:

know but then never told you" ?
paradigms as well – formal semantics of programming languages, the
compensated for one’s efforts.
If God had meant for carrots to be eaten cooked, He would have given rabbits fire.
Well, as for books about the ‘real world’ of programming, I found Herb
Sutter’s books “Exceptional C++” and “More Exceptional C++” to be very
enlightening. It was amazing to me how many C++ programmers there were
around me who had very little insight into the mechanics of C++ and the
other real-world-C++ topics/lessons/puzzles Herb addresses so well.
Hey - not a plug for C++ nor a dig at Ruby - I have to get paid to
program in C++; I’d code in Ruby for free (well almost for free :slight_smile:

Ken

Mark W. wrote:

This is why I asked the original question. I’m just about finished an IT
degree, hovering around a distinction average and still feel I know very
little programming wise!

I’d say you know a lot more than you think you do. My recommendations
are the same as they have been all through this thread:

  1. Learn the pragmatics and processes of software engineering, to be
    distinguished from programming languages and computer science, and

  2. Learn the so-called “soft skills” – how to behave in a room full of
    15 people where you are smarter than the other 14 combined. :slight_smile: Sales,
    marketing, communication, people skills, questioning, listening,
    emotional intelligence – it goes by many names and buzzwords, but there
    are very real and fundamental differences in the way one is expected to
    behave in a university faculty/student setting and in a business,
    non-profit or government setting.

In academic universe people don’t talk about unit-test, design patterns, etc…
Software Engineering it’s at most theoretical, not practical.

Yep!

And for those of you still in academia, as an end-user of computer
science research, I beg you not to stop doing it! Your stuff is very
valuable. The products we take for granted would not exist without it.
I’m not just talking about the hardware, either – the ever-increasing
amount of hard disk space you can buy in an iPOD, for example. Wireless
technology would be totally impractical without the complex protocols
designed by computer scientists to insure reliable and (mostly) secure
and private communication between a couple of radios with minuscule
power budgets and miscellaneous junk moving around between them. :slight_smile: And
the whole field of business process modeling is built on two core
theoretical computer science disciplines – process algebras (the
Pi-calculus) and Petri nets.

On a purely personal note, if you stop producing computer science
theory, I’ll have to read African mythology or French romantic fiction
to relieve the boredom! :slight_smile:

There’s something like: “Academics to Real World - What really need to
know but then never told you” ?

What you’d recommend ?

Hurry up and graduate! :slight_smile:


M. Edward (Ed) Borasky, FBG, AB, PTA, PGS, MS, MNLP, NST, ACMC(P)
http://borasky-research.blogspot.com/

If God had meant for carrots to be eaten cooked, He would have given
rabbits fire.

Mat S. [email protected] writes:

There’s something like: “Academics to Real World - What really need to
know but then never told you” ?

What you’d recommend ?

In a similar vain - I’m after on-line resources, both general and Ruby
specific. One of the reasons I’m after on-line resources rather than
dead tree
books is because I’m a blind programmer and on-line resources are far
more
accessible for me. So far, i’ve gone through the Pragmatic programmers
on-line
book for Ruby and I’ve found a few others, but always welcome more
pointers to
on-line resources - books. relevant blogs, articles etc.

I found the Pragmatic Programmers book to be quite a good intro to Ruby.
I’ve
also found some of the “Rails” stuff quite good. I’m quite impressed
with the
Rails framework and very impressed with Ruby so far. In fact, I was able
to get
some really useful Ruby scripts written in just my first day of using
the
language, which is considerably faster than other languages I used. I’ve
also
found Ruby fits well with the way I think about problems, so I’m quite
keen to
develop my skills in this area further. (just for background, I started
with C
20years ago, then a couple of years with C++, but then escaped that
nightmare
and did a few years with Tcl/Tk, Perl and then Java, with a year of
Prolog in
the mix. I then indulged an interest in Common Lisp, a language I still
enjoy
using and a quick pass at Python, which for some reason I never warmed
to.
Currently, my preferred languages are Ruby and CL, with a bit of perl
for small
quick system hacks. Java is OK if you have to use it, but I find it a
bit
verbose and frustrating.)

Tim
.

On Mon, 01 Jan 2007 11:28:11 +1100, Mark W. wrote:

Construction. I’ve seen this recommended quite a few times now.

So, what are some others you’d recommend to improve programming in
general?

happy new year,

thanks to all who replied.

So, what are some others you’d recommend to improve programming in
general?

http://mitpress.mit.edu/sicp/ (classic)

http://www.htdp.org/

both are scheme (simpler lisp variant) related, good environment for
experimenting with scheme is drscheme ( http://www.drscheme.org/ ).

Tim X wrote:

In a similar vain - I’m after on-line resources, both general and Ruby
specific.
Check out the c2 wiki: http://c2.com/cgi/wiki

It’s completely disorganized, but is filled with discussions on all
sorts of topics – patterns, best practices for exception
raising/handling, To Be or Not To Be Agile, etc.

The great thing about it is that for every topic you’ll find at least
three sides of the coin. It’s a great way to force you to think about
software design.

Besides that… yeah, The Pragmatic Programmer. Unfortunately, Dave &
Andy don’t have the rights to the book, so they weren’t able to
republish it in PDF format.

Devin

Please consider this one, a big classic, just do not take it for what it
is
not, it is about Algorithms not Software Design so it cannot replace
most of
the adivce already given in this thread.
The Art of Computer Programming (TAOCP)
by Donald E. Knuth.
http://www-cs-faculty.stanford.edu/~knuth/taocp.html

HTH
Roberts


“The real romance is out ahead and yet to come. The computer revolution
hasn’t started yet. Don’t be misled by the enormous flow of money into
bad
defacto standards for unsophisticated buyers using poor adaptations of
incomplete ideas.”

  • Alan Kay

Vladimir K. wrote:

Which brings up an interesting question – what language is used in the
OPs coursework? At some point in a typical CS degree, there would be the
traditional comparative programming language courses, but what do they
actually code in?

Along the lines of the OP, though, Scheme is thought of – if thought of
at all – in the business world as a simple, academic, almost “toy”
language. It isn’t, of course – you can do anything in Scheme or its
bloated cousin Common Lisp that you can do in Ruby or Perl or Java or
PHP or C++ or Visual Basic. If the OP is learning Scheme, he might have
a culture shock in his first job. :slight_smile:


M. Edward (Ed) Borasky, FBG, AB, PTA, PGS, MS, MNLP, NST, ACMC(P)
http://borasky-research.blogspot.com/

If God had meant for carrots to be eaten cooked, He would have given
rabbits fire.