I live in Central Europe and I have experience with working for IT companies of all sizes: a small dev company, a mid-size company making software for financial houses or a top five system integration and outsourcing corporation.
But I've struggled to find smart people anywhere. As a developer, it is in my opinion critical to have people that are smarter than you around. Otherwise is is really tough to progress your skill when working with people who do not really care about programming, it is just about money for them. These kinds of people usually produce very sub-par quality code that is extremely frustrating to navigate, debug and modify. To give an example, I've been assigned to add functionality to a recently written WPF based application and there is no MVVM, DI or OR/M. Just XAML + codebehind + native SQL which is not very exciting to work with.
I guess my question is, are there some specific characteristics that I can look for when searching for companies that contain smart people and the development experience will be more fun? Because I have no clue how to identify these job opportunities and the time I get with the company's experts during the hiring process is very limited.
Thanks for any advice.
You need to determine the "culture" of the establishment, which is generally hard when you are younger. If you go for the biggest companies - Microsoft included - then it is more than like that you will be working on Legacy technologies or technologies that are not easily transferable, so you can only ever work for a handful of companies. Some of the most interesting work I have done in scientific and engineering domains has paid far worse than less interesting corporate/enterprise software.
As time progresses, you will find that the reason most code bases are like the project you described is due to Scrum/Agile methodologies that just do not focus on quality. It is an excellent project management tool, Management like it because it allows for greater transparency, but the focus is on coding to get a usable bit of code ASAP, however pretty or ugly.
This has the benefit for allowing companies to bring products to market quicker, and since very few software is like Word or Visual Studio nowadays, this disposable way of coding is why you end up with no MVVM or ORM, the guy that coded it was quick and dirty, more than likely because the owners of the company did not want to spend 6 months on the project and allowed for a budget of 3 months. That is the reason why there is a lot of bad code about. Developers nowadays are under an incredible amount of pressure to produce code like it is coming off a production line, this is why Visual Studio and Windows are generally far less stable until the first service packs than years of yore, since this is the practice that Microsoft uses. I watched an entity framework video a few days ago that had an unbelievable bug in it, so even though Microsoft will say that they have performed the greatest amount of testing of product X in the world ever, Windows 8 and Visual Studio 2012 will be riddled with bugs. I am not singling out Microsoft here, because pretty much everyone up to and including Apple develops software this way, and why the next time you open iTunes it will ask you to update.
Someone like you will more likely be looked at as unproductive, because you are aiming for perfection all the time, so if you pick a company to work for where "quick and dirty" is mantra, for all your smartness, you will more likely not be offered a permanent role because you are not as productive as the person that wrote the WPF application with no MVVM, its clearly not right, but this is how the world tends to work, so I would focus less on complaining about other developers, but on improving whatever scrambled mess you find, and leading by example.