Living abroad is one of those experiences that tough to communicate to someone who hasn’t experienced it. It’s like explaining colours to a blind man. Only someone who can see the colour will really understand.
I had always wanted to go abroad when I was younger. In University I joined the student organization AIESEC which offered international exchange opportunities. Through their programs I was lucky enough to have the chance to live in Hong Kong, Kenya, Croatia and Poland. Since graduating, I’ve also lived in China and, recently, Japan
There are some things I learned that also apply to software development:
You can never come home again
…not to the same home anyway.
One of the most common things people are unprepared for when living abroad is not that the other culture will be different. Most people expect that. The major shock happens when you come home. You’ll notice your own culture is different. You’ll notice things about people at home that you never noticed before. It’s not because they’ve changed. It’s because you’ve changed.
There’s been a few times where I’ve come back to a codebase I previously worked on. After being away from it for an extended period of time, I had a chance to look at it through both fresh and familiar eyes. The first time it happened was early on in my career. The first time I worked on the code, I didn’t really understand MVC. When I came back later, everything was much clearer to me. The codebase was the same but I had grown in my understanding.
You are the one who needs to adapt
In programming culture, developers get hung up on the most meaningless things like whether braces should go at the end of a line or on a new line. If you have a preference one way but start working on a codebase that does it differently, you are the one that needs to adjust. Don’t force everyone else to do things your way.
I’ve met ex-pats abroad who want everything to be just like it is back home. These people are some of the most miserable people you’ll ever meet. Another culture will never be like you home culture. And no matter how hard you try, you are never going to change it. But these people will keep complaining about the culture. They don’t learn to adapt and they become some of the most miserable people you’ll ever meet.
I remember reading a comment on a message board for foreigners here in Japan. He wanted to buy a cell phone but was adamant that there be no kanji (Chinese characters) on the phone. The guy had been living in Japan for many years but wanted nothing to do with Japanese culture.
Unfortunately, like this person, there are plenty of developers that want others to adapt to them. These people are very difficult to work with and spend energy on things that don’t really matter.
Be adaptable. You will learn better, understand others and have more fun in the process.
Codebases, like cultures, have things in common but there are also differences
It’s funny living abroad how I tend to generalize. If a bad driver cuts me off in my home country, I think that guy is an idiot. If a bad driver cuts me off in Japan, I think “All Japanese are bad drivers.”
Just because a culture has a set of shared values doesn’t mean everyone is like that. Japan is a culture that highly values the collective over individuals but I have met Japanese people that don’t think that way. They will usually be people that feel they don’t fit into their own culture. Of course, a lot of people in Japan do value collectivism, which is how the generalizations come about. But there will always be outliers.
When it comes to software development, the codebase you are working on will also have a common culture. There will (hopefully) be a standard way of doing things. However, don’t be too strict when enforcing this standardization. Things become too stale if everything is the same. I’ve always preferred working on a codebase where I can tell from the code who wrote it. It may be a particular syntax or a favourite way of doing things that gives it away but it makes things more interesting. When you can identify your fellow developer’s individual code and styles without using ‘git blame’ it helps in understanding your co-workers better.
Just as it helps if you are adaptable, the codebase also needs to be adaptable. Don’t make things overly rigid. Most people recoil when rules are too inflexible. You’ll enjoy yourself more and put more effort into your work when there is some flexibility.
If you haven’t had the chance to live abroad, I highly recommend it. You’ll learn a lot about yourself and you’ll come back a more rounded person and a better developer.
I really like the points you make about adapting to new culture. However, I hope it doesn’t discourage people from recognizing the benefits of the contrary. Sometimes, the culture needs to adapt to new ideas. Surely the expatriates recognize that the country they’re in offers a better baseline than their previous one, otherwise they wouldn’t be there. A failure to influence the culture to take on their ideals manifests as misery. In some sense, it’s commendable.
But I wholly agree with you that people fight over the most trivial things. Those things where there isn’t a clear right or wrong. But can you blame them? They are after all, trying to hold on to their culture.
Thanks for the comment Brian. Yes I agree. There are always some parts of a culture that may be better than yours but there may be parts that are better in your own culture. That’s part of the great thing about cultural exchange is that you can choose the best ones to live by.
Nice formulation about experiences which match a lot my own from living abroad. One of the things that has surprised me which I think could be applicable to programming as well, is how many dam good ideas there are for solving various problems in other countries that you realize nobody else outside that country bothered to copy. Why is that?
Same with programming. Different subgroups have come up with good solutions to many common problems that other groups seem to be doomed to have to re-invent.
Frankly I think people have to get a lot better at “stealing” good ideas. Too much time is spent inventing your own smart ideas when somebody else has already done something much smarter, which you could easily copy.