Non compete clauses are pretty common in software development.
In general, the clause should define a geographical area, a time frame and what you are agreeing to not do.
In general terms, when you find a new role, choose to work in a different market sector, and everyone's happy.
However, where it can get complicated, is where the specialist sector knowledge is valuable, such as in the investment banking sector, or where the employer has a wide presence in the market place - usually with additional restrictions on working for customers and suppliers as well.
These clauses are often worded to forbid you from competing, not from working for a competitor. In that case, you can work for a competitor - as long as you are not working in a department where your prior knowledge could benefit your new employer unfairly.
That said, at least in the U.K., non compete clauses that make it difficult to find future employment are not enforceable.