What does a person with an undergraduate degree in CS still need to learn to be employable as a developer? Some recent CS graduates feel unprepared to enter the job market. Some may actually be unprepared. 


What is missing from a typical undergraduate program, or not sufficiently emphasized, that a person needs to know for successful employment in a software development position? The gaps may be technical or not. What evidence do you have for the gaps you suggest? How can a person fill the gaps? 
What advice can you give to a recent graduate about what they should learn on their own and how they might go about learning it? Advice might be for developing hard skills or soft and both may be needed to be employable. 


Many entry level positions are not very challenging or rewarding, unfortunately. This may be the fault of the educational process itself, leaving graduates unprepared for better positions. 



I assume that no educational program can teach everything. Therefore some things are emphasized more than others and some necessary things may be omitted, especially in a changing world. I'm not making an indictment of the educational process, but wondering what important things the individual still needs to know, and what skills they need, beyond their formal education. 



My personal context is the US, but the same is likely true, but with different details, elsewhere. Your answer may depend on your own context, of course, so you may want to mention it.
To know that you know nothing.
Recent graduates can be afflicted by arrogance or low self worth. These are two sides of the same problem.
It is important to know that you are at the beginning of a journey, that has no end. The sum of all knowledge that is known, is but a drop in an ocean, and your personal knowledge is but an atom.
However this has not stopped other such as Turing, Lovelace, Hopper, Ritchie, Liskov, Stallman, et al; It has not stopped you in the past; and it will not stop you in the future.
Experience
I have heard many a new journeyman say “To get a job I need experience, but how do I get experience without a job?”.
So get experience: Find a good Free Software / Open Source project, that you are interested in, and contribute to the project.
Software engineering tools
As well as testing (@BenI). Revision control: Learn how to use revision control tools, for example: mercurial (hg), git, subversion (svn).
Of these subversion is previous generation, but still has some use-cases that best suit it. It is still widely used.
Mercurial and git are more modern, distributed systems. git is the most popular, but is a git to use, and very hard to learn. Mercurial is similar in how it works, but much easier to use (it has a more intuitive command line interface, and a nice graphical interface(tortoise hg)).