<p>Can you tell me what is the difference between <strong>abstraction</strong> and <strong>information hiding</strong> in software development?</p>

<p>I am confused. Abstraction hides detail implementation and
information hiding abstracts whole details of something.</p>

<p><strong>Update:</strong> I found a good answer for these three concepts. <a href="https://stackoverflow.com/a/8694874/240733">See the separate answer below</a> for several citations taken from <a href="http://web.archive.org/web/20080906224409/http://www.itmweb.com/essay550.htm" rel="noreferrer">there</a>.</p>

The meaning of abstraction given by the Oxford English Dictionary (OED) closest to the meaning intended here is 'The act of separating in thought'. A better definition might be 'Representing the essential features of something without including background or inessential detail.'
Information hiding is the principle that users of a software component (such as a class) need to know only the essential details of how to initialize and access the component, and do not need to know the details of the implementation.
Edit
: I seems to me that abstraction is the
process
of deciding which parts of the implementation that should be
hidden
.
So its not abstraction VERSUS information hiding. It's information hiding VIA abstraction.