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

Mark Woodward 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.

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?
  

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 Woodward 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.

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,

Andy Hunt and Dave Thomas' _The_Pragmatic_Programmer_
http://www.pragmaticprogrammer.com/ppbook/index.shtml

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 Dec 31, 2006, at 6:30 PM, Mark Woodward 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.

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 Mon, Jan 01, 2007 at 09:30:10AM +0900, Mark Woodward 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.

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?

--

Jeremy Hinegardner jeremy@hinegardner.org

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/

···

On 12/31/06, Mark Woodward <markonlinux@internode.on.net> 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.

thanks to all who replied.

···

On Mon, 01 Jan 2007 11:28:11 +1100, Mark Woodward 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.

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

Jeremy Hinegardner 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.

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/ ).

···

--
Posted via http://www.ruby-forum.com/\.

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 1/1/07, M. Edward (Ed) Borasky <znmeb@cesmail.net> wrote:

Jeremy Hinegardner 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.

--
(.) CAMPANHA DA FITA ASCII ( http://arc.pasp.de/\)
/ \ Contra formatos proprietarios

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 Konrad wrote:

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/ ).

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.

If Rails interests you, I found Agile Web Development 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

···

On Jan 2, 2007, at 8:57 AM, Felipe Navas 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:

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

Felipe Navas 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:

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

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. (Help Buyers Navigate Through Their Behind-the-Scenes Buying Journey | New Sales Paradigm) 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.

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

Hi Felipe,

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

...

···

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

--
Mark

M. Edward (Ed) Borasky wrote:

Felipe Navas 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:
>
> 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
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. (Help Buyers Navigate Through Their Behind-the-Scenes Buying Journey | New Sales Paradigm)
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.

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 Woodward wrote:

Hi Felipe,

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!
  

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:

···

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

--
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 Schaffer <schapht@gmail.com> writes:

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 ?

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 Jan 2, 2007, at 8:57 AM, Felipe Navas wrote:

--
tcross (at) rapttech dot com dot au

> 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!

Well, realistically, I've been working as a programmer for about a
decade and I feel pretty much the same way. "Life is short, the art is
long."

I think Ed's recommendations about "soft skills" are pretty good,
certainly vital to getting real use out of your education, but if
you're feeling your training is too academic, I think Dave Thomas'
comment that you learn the most about programming **by** programming
is especially relevant. Pick up some freelance work and cut your teeth
on some especially practical project, some diametric opposite to your
academic work, just as a learning exercise. Realistically, you need
both "street smart" programming **and** an understanding of computer
science (whatever that term really means).

···

--
Giles Bowkett
http://www.gilesgoatboy.org

http://gilesgoatboy.blogspot.com