Many developers are so pressured by demanding schedules that their goal is just to "get the job done", by which they mean "it functionally works." While this is a great first step, professional programming requires more, such as:
As you go from a hobbyist toy to an enterprise app, these criteria become self-evident. They're buzzwords that everyone has heard, but surprisingly few seem to put into practice. Interesting questions to ask yourself (or someone you need to interview):
Maintainability - Have you ever had to write code that will be maintained by other people? How did you code differently to make it more maintainable?
Performance - Have you ever had to write code that was performance critical? How did you ensure that that code was fast enough?
Scalability - Have you even had to write code that was used by more than 1 million users? What might you do differently to ensure the code handled that?
Security - Have you ever had to write code that protected secure data and you knew someone would try hacking it? How did you make it secure?
Testability - How would you ensure that your code could be tested?
Of course some of these, like performance tuning, may take more time. But that goes with the territory of large-scale apps.
In general, I come across two kinds of programmers - those that just worry about functionally "getting it done", and those that look beyond functionality. It seems the first group digresses into boring copy and paste work, whereas the second is constantly on an adventure doing new, fun things. The beauty is that there's nothing that stops someone from jumping into the second group. You can read about all the techniques online, use open-source tools, and often it's even faster. For example, anyone could use NUnit, or MSTest to write unit tests to help their testing, or read about Refactoring or design patterns for more maintainable code.