A lot of students when they graduate and get their first job, feel like they don't really know how to program even though they may have been good programmers in college.

What are some of the differences between programming in an academic setting and programming in the 'real world'?

In a traditional undergraduate computer science program you learn just programming.  But the real world doesn't want people who are just programmers. The real world wants real software engineers. I know many job descriptions don't seem to express this distinction, which only confuses the matter. In the real world you need to be able to:


Gather and analyze requirements when they aren't directly given to you
Design and analyze architecture with near endless possibilities
Create test plans and act on them to evaluate and improve the quality of a system
Work collaboratively on a team of people with different backgrounds and experience levels
Estimate and plan work even if you don't know exactly what to build
Communicate effectively with stakeholders who have different needs that don't necessarily align
Negotiate schedule, budget, quality, and features without disappointing stakeholders


Oh yeah, and you also have to be able to write code too, though that takes, on average, only 40 - 60% of a software engineer's time.

So, it's not that freshly minted computer science undergrads don't know how to program (many are in fact, very good programmers). It's that many of them don't know how to do anything else.
