It is a really important question to me! I've worked 7 months on a 13" laptop with colleagues having 24" desktop monitors, and I found myself spending lots of time shortening lines to end up with something readable.
80 columns is a bit small in lots of cases (except if you're working on a terminal with vi the only option ;)), but more than ~150 is too much (see below).
That's for the pure 'readability' question.
Now, for the 'good practice' part, I very often find such long lines to be flawed, ie having some part that should be extracted in a temporary variable, or which is duplicated, for instance (ObjectiveC, common snippet in iPhone programming):
CGPoint point = CGPointMake(someOtherView.frame.origin.x + someOtherView.frame.size.width, someOtherView.frame.origin.x + someOtherView.frame.size.height);
Please note this can become even nastier when working with 3 dimensional vectors or matrices.
CGRect frame = someOtherView.frame;
CGPoint origin = frame.origin;
CGSize size = frame.size;
CGPoint point = CGPointMake(origin.x + size.width, origin.x + size.height);
This is now fitting on a smaller screen, easier to debug using an IDE or some write to standard output, and might even be faster, depending on the cost of method/property invocation. This is a bit forced of course, most real world examples are much more complex...