Do you notice with your international colleagues (from ANY country) that coding style and problem solving are in-line with native tongues?
Absolutely. This is a hard fact. The cause-effect chain is however complexer.
The region, its ecosystem, weather conditions, plant and animal life have influenced the development of the local culture religion being a part of it.
The culture and religion have influenced the formation and development of the local language(s).
The culture and the language have left its marks on the society model for this particular ethnic group.
The society model has defined the behavior model - life style, work attitude, social relationships, priorities and values of individuals. That is the part we want.
People of different cultures will be approaching solving a problem with the baggage of their cultural heritage - how they think about it, what attitude they bring to the job, what methodology and problem solving patterns they will apply, what priorities and values they set.
Speaking of examples I can give you two. If we take Germany where I currently reside, there are certain patterns I have observed.
Planning everything in advance and for long-term is the way of the life. Evening meetings with friends can be planned weeks and months in advance. Young people already concern themselves with their retirement (insurance etc.). Mood swing, improvisation, willingness and ability to adjust as-you-go is very low. Naturally it is transferred to the way of work. Planning and order play a big role. Being agile is considered to be an exceptional characteristic to describe a modern person/team with a progressive thinking. However most agile processes which I have observed in German teams seem more like a machine execution of the predefined steps (even if people really try to be agile), but no spirit of agile as such.
Predictability of everything is the norm of the life. People are used to knowing what will happen, where and when. It stretches from everyday life over working style to personal relationships. You can see it for instance when people cross the road. They wait for the green light and start moving without looking if the cars have actually stopped - because they expect them to. People pride themselves on being able to control every aspect of their life. When however the life hits back with something unexpected, when things get out of the control, people sort of freak out. If transferred to programming I've seen that coding is done rather optimistically, no obsession with checking input, foreign keys to verify data integrity and so on. Also no some extra-engineering to keep code to some extent resilient to failures and adaptable to certain future changes, just to satisfy the today's expectations (which aren't likely to change they believe).
Saving money and optimizing their expenditure is extremely important in the culture. It is reflected on the work artifacts. Characteristics and quality do match the planning but do not suddenly exceed them (to make it cooler or just "in case"). Another side of the game is unwillingness to invest into modern hardware and software, to reengineer working code, to refactor it, to make things better just to keep in line with the current state of the things, to prepare for the future. Since there is no immediate winning and nobody is paying for the changes, noone is actually going to get moving.
Entrepreneurship and creativity are rather low in the culture. Unwillingness to take risk on their own account is high. Work outcomes seldom bear the imprints of unusual, unexpected, creative. People tend to follow the trodden path, little experimentation or unusual set up "out of curiosity". People don't like taking initiative into their own hands especially when paired with responsibility. I also heard Germans landing in the Netherlands sometimes have difficulty as people there are used to work independently without tight guidance. Programming-wise it means little experimentation with new languages, tools or libraries, new versions are not adopted for the fear of change. People take design patterns and blindly apply them because they were taught so at university and do not question their applicability.
Function over fashion. It's seen in everyday life. Common urban style, design of buildings, streets decoration, all is down to minimum required for it to function but usually nothing just for the style, the beauty. Programming-wise it's seen in the lack of beautiful UI design. Most corporate and personal sites are rather old-stylish and boring. You also can't persuade the boss and the colleagues to do some polishing because they don't see any tangible benefits.
Complexity and bureaucracy is part of the lifestyle. People take it further and apply everywhere. Personal relationships. work details, decisions and solutions often result in multiple artifacts to document what was done. Programming code often comes out with unnecessary elements, abstraction levels and compositions because it seems to the people more serious that way. The KISS principle is not really popular.
"Saving face" seems to be very important, to appear successful, not to show signs of weakness or failure to anybody else (if you have it's almost certainly will be used against you). In work practice admitting failure comes rather hard, people do everything not to "lose face". Taking critic also comes hard. Criticizing somebody (with the good cause or not) is a sure way to make an enemy. Saying what one has on the mind is not practiced which makes it rather difficult to understand who stands where.
Bottom line is, good executors, planning and schedule top, precision is good. Innovation and creativity are however not to be expected.
The second example deals with the Russian culture to which I belong. It's quite different.
Schedule and planning do not seem to be of particular value. Minor deviations do not concern people unless/until it begins to threaten the bigger outcome. People don't like to live per plan, prefer sort of a mental freedom, do whatever things they like and when they feel like doing them. Programming-wise they may ignore the "non-essential" like writing documentation and doing paper-work. People are much easier with coming and going, if they're bored with the project, dislike the atmosphere and so on. Long-term commitment per-life is not to be expected, people don't want to be bound, don't expect them to come once and stay till retirement. This is nicely seen at the mobile phone market. While in Europe/US it's ubiquitous to have 2-year-long contracts, in Russia this is not practiced. People don't want to be bound for that long and they would probably get bored with their gratis phones in just a few months say nothing of 2 years.
People dislike bureaucracy and prefer informal relationships. Little to no paper work, as few discussions and meetings as possible, simply do the work. Complexity in code is not liked, simple decisions and direct ways are preferred. Boring routine is not favored. Some "non-essential" tasks like commenting and documentation may be ignored. People may put off certain boring stuff and do instead more interesting things or do the boring part in an unexpected way which will keep them motivated.
Costs are not that important. People like to get something newer, cooler, more interesting and more modern just so, without a business case. If it provides satisfaction, they usually won't be unsettled about extra costs incurred.
People are very enthusiastic about everything. Food, music, clothes, artifacts and ideas from different countries and cultures get through the open doors. Programming-wise people would experiment with a new language, tool or library just so, out of curiosity, with a business case or without. Different philosophies and methodologies, all is gladly taken, touched, bitten, experimented with and mixed together in a funky fashion.
Beauty and style are very important. People would spend extra time and money on something that doesn't have any tangible benefits but only satisfies some artistic sense. Often they prefer something stylish over something more functional. Beautiful UI design is highly appreciated. Programming-wise people would reengineer code which seems clumsy and unstructured simply to add more style to it, even if it was perfectly working before, resulting in extra time spent.
Prescription and rules are often disregarded and even despised, people might do something totally different if they're persuaded it's going to be better (or cooler - can't resists that). Many decisions from above will be questioned and argued about. And yes, everybody has a strong opinion just about everything.
Predictability of life is quite low so people always plan for any contingency. The same is often reflected in code, rather a pessimistic attitude, with double checks and fallback plans. Architecture may reflect readiness to future possible changes, but not astronaut-like overarchitecturing. Agile is not a modern methodology but the way of the life. Also people are used to changes and don't try to control every aspect of their life. When something unexpected happens, people just nod, say "will be better next time" and move on without going mental, starting drinking, drugs etc. A project failure doesn't result in suicides, is taken easily.
Political correctness is low so people may just say what they think up front when you're not expecting it. Be prepared.
A different bottom line is, expect the unexpected, something unusual and creative but don't expect machine precision, schedule and following the rules.
Which one is better cannot be easily answered. One work type is better covered by one worker category, the other is by a different one. Bad if people are assigned wrong tasks for their mentality. I suppose it is a challenge for an international team manager to recognize that problem. I'm not sure it's ever been discussed with application to IT industry.