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.