The transition from the academic world to industry requires changes of perspective that are often completely unforeseen. Sometimes it also requires changes in the way you think and work.
In school and college, software development is rather straightforward. The lifecycle of software is well-understood, and development consists of figuring out the requirements, settling upon a viable design and writing the code to do the job. However, for practical applications, both ends of this lifecycle terminate in virtual blackholes, and in many cases, there is very little direct interaction with authoritative sources of information. In effect, this makes it much harder to come up with a software that works consistently for all the components that participate in the system.
Another aspect of software development that comes to the fore is the complexity of code. Not only is it practically impossible to understand all the intricacies of the software, but a large codebase also makes the process of compilation and debugging a lot slower. This may not seem like a very big deal, but it definitely is: it is much easier to focus on a problem and solve it in a hour than to spend a day doing it, with interruptions. Also imagine what it would be like to add a printf statement to hunt down an error, and then spend fifteen minutes waiting for the code to compile. The best option in this scenario is to figure out the problem using abstract reasoning, rather than practical testing.
The third trick that requires some effort to learn is multitasking. Arguably, the degree of multitasking is higher on the job, or at least it is more fine-grained. No professor ever asked for project updates more than once during a week, but your boss is likely to want those twice a day. Projects are harder to keep track of when you need to keep juggling between so many all the time.
Perhaps the biggest challenge is that feeling of responsibility that is thrust upon you — getting paid to write software, instead of paying your professor to let you do it. I am tempted to quote Tom Sawyer’s lesson on the distinction between work and fun, but then writing software has always been fun.