Blacklane Developer Journeys: Chikahiro — Senior Backend Developer
By: Blacklane Engineering
Tags: Berlin, Japan, Backend Development, Ruby, Programming

Where are you from, and what is your minimum viable autobiography?

I’m from Fukushima, Japan. I grew up in a small town in the mountains and then moved to Tokyo for university. I lived there for 10 years and came to Berlin about two years ago. Before coming to Berlin, I was a freelance developer for more than four years in Tokyo. I prefer to work with startups. You can find more details on my website: http://ctokoro.me/.

When did you realize you wanted to write code for a living?

When I was a university student studying economics, I did a sales internship for an IT startup, where I sold a kind of advertising package to companies. After a year of sales experience, I noticed the product that I was selling was not of a good quality. I was not good at sales, because I didn’t want to sell something that wasn’t good quality, even though it was my job. At the same time, I thought if I can make a product by myself, I can sell it with confidence and be as reckless as I want to be. I talked with a colleague at my internship office and asked which programming language is good for beginners, and she said Ruby. So I moved to a company famous for using Ruby and started an engineering internship in 2006. I now enjoy writing code for a living as a full-time developer.

I was lucky. At that time, it was like the night before flowers suddenly bloom — Ruby was not as well-known as it is now, but many great programmers were active in the Ruby community. For instance, my colleague who recommended Ruby to me became a Ruby core committer and release manager for version 1.9 of the language. It was a really big release for Ruby, and she wrote a book on Ruby for the publisher O’Reilly Japan. I was surrounded by highly-envied developers in a country where the programming language was born. The creator of Ruby is Japanese, and many of the Ruby committers are Japanese.

I once quit a job because of an illness. At that company, I wrote code in COBOL, Java, and Delphi while wearing a suit, and it didn’t feel like fun. While I was sick, I thought about my career. I asked myself, “Do I really want to be a developer?” I wanted to check myself. So, I found a computer and tried to do something on it. I played with the MySQL cluster and connected it to the server on my laptop at home and found that I was fascinated by the process of tuning them! Then I could see that I actually enjoy software development.

What brought you to Blacklane?

I came by chance. I was struggling with job hunting in Berlin. Nobody knew anything about my career since I had only ever worked with Japanese companies, and I had almost no connection with locals. Also, my English skills were not good. It was a hard time. I went to a Ruby meetup for job hunting, and I did a one minute lightning talk in front of the group. Then, one guy reached out to me to come interview, and I got an offer from them. Blacklane was the host of that meetup.

As a developer, how do you feel about living and working in Berlin?

Well, Berlin is calm and has a good amount of diversity. I can have private time here. Compared to Tokyo, Berlin is a small city and peaceful — less noisy, fewer people. With regard to the programmer community, I feel like Tokyo is more active than here, but it might be my misinterpretation because I think I’m not very well integrated with the community here yet. Regarding the startup ecosystem, I think Tokyo is also more mature than Berlin. Yes, Berlin has a lot of startups, but many of them are early stage, like Seed/Series A, but in Tokyo, it’s not hard to find later-stage startups, even ones that have already undergone an IPO or have already been acquired, but again, I might be wrong, I haven’t been in Berlin that long.

But in general, Japanese companies are really domestic. We have a big domestic market, so there is no necessity to go abroad for business in order to survive. But we don’t speak English fluently, either, so we have a strong language barrier and 99 percent of the developers working there are Japanese, so we are a monoculture. I assume this is also one reason why Japanese companies tend to stay domestic. I am not saying it’s good/not good in Japan — everything has its own pros/cons — but I personally prefer living in the wider world.

Why do you prefer building a life outside of Japan? Do you ever plan to go back?

When I watch TV and read newspapers or books, most of the time I see the world through a Japanese filter. Japan is not the world. It’s just a small part of the world. I want to live in the world, not just a particular area. When I was first traveling 10 years ago, I wasn’t sure what I wanted to see. After traveling for a few months, I realized I wanted to see the different people and cultures in the world, hear their languages, and try their foods. Culture is always composed of people. I talked to people, other travelers or locals, and I realized I like people and discovering the way they think and how they live.

If I had stayed in the Japanese world, then I could have only communicated with other Japanese people and only get information in Japanese, or the Japanese translation of the news. Now that I speak English, the scale is completely different.

If I only spoke Japanese, then, for my career, I would have been stuck in Japan, because I would have had no communication skills that I could use anywhere else. It meant that I would have really depended on Japan, and I think that’s a risk. Anything can happen. If Japan were to go down like the Titanic, then I wouldn’t have had any chance, because I wouldn’t have had any boat.

Currently, I don’t have a plan to go back to Japan. I’m not sure what I will do in the future. I like Berlin and plan to stay here for awhile.

Why do you enjoy staring at a screen for hours and hours every day, manipulating symbols that tell a machine what to do?

I don’t believe that I’m just playing with machines. Software is a way to solve a problem. Source code is always a shade of reality, and actually I’m working for people.

Okay, okay, it’s an “official” reason, but I can say that my personal honest reason is just fun itself. I don’t know why it’s for me, but it is. I can’t think of a reason, but I feel a sense of fulfillment when I’m writing code. So my job is fun, but frankly speaking, I thought many times about my career, that I am not the best developer, because I have met many great, great programmers. And I thought maybe I shouldn’t be a programmer, because I can’t compete with them — I’m just having fun with it, and they are serious. But to be honest, I don’t care. I do it just because it is fun. I enjoy writing code and acquiring new knowledge. I feel like I’m just a student of programming, and I still have a longing to become a “real” programmer. And that is another reason I keep doing it.

How do you find working on a team versus working alone?

There are pros and cons. I prefer working with a team, otherwise I feel lonely (this is probably my personality). Working alone can be extremely productive if you can manage yourself well. But I don’t have fun working alone all the time. I tried it once, but I found I felt lonely and isolated. It’s good to do it sometimes or temporarily, but not all the time. I think I’m just not that type. Also, if I work with a team, I can learn different things from the other team members, like how to solve a problem, how/why we might choose one tech stack over another, and it can lead to better work than what I would do alone. I prefer that.

Do you have any favorite languages, technologies, or frameworks? What do you like about them? Are there any that you secretly despise?

Ruby on Rails is my major technology. I really, really appreciate Ruby and Ruby on Rails because they drove me into my engineering career, even to Berlin! They literally saved my life and provided me with jobs and a livelihood. I can’t imagine what I’d be doing if it didn’t exist.

Regarding my favorite technology, I would say I like TDD. I originally thought it was just Test First, which is a typical misunderstanding, but I eventually realized it’s a tool for designing “clean code that works” by means of a Test First principle. When I tried to do TDD the first time, I was so surprised by the benefit. Also, the history of TDD is very interesting, such as the Chicago and London schools, test doubles, the BDD movement, etc. I’m assuming there are many other techniques that I know just as names, but I don’t know exactly what they mean. They are on my learning todo list.

Language-wise, I like shell-script. It’s powerful, extendable, and you can do many things for redirecting by simple stdin/stdout and a combination of commands. I’m interested in the Unix Philosophy behind the language. But as far as I know, it’s hard to write tests for it and maintain it, so I wouldn’t choose this language for writing applications. Otherwise, it’s useful for simple text processing or ad-hoc automation.

What I secretly despise is Ruby on Rails, though I really appreciate it, too. Oh okay, it’s not Rails’s fault, it’s my fault.

For instance, ActiveRecord, the ActiveRecord pattern mentioned in the book “Patterns of Enterprise Application Architecture (PoEAA),” from which Rails’s ActiveRecord concept originally comes from, is one of the data source architectural patterns, along with other patterns like Data Mapper. But when I started my career with RoR, I didn’t know any other patterns, so I believed ActiveRecord was everything and hard-coupled Rails-MVC was always the way to go. I also had no idea about other architectures, such as the repository pattern, clean architecture, and event sourcing, etc.

After that, I faced some big, monolithic Rails applications that were hard to maintain by a big team, and I wasn’t sure why it happened. I started to look for a solution and realized I didn’t know the context of why Rails was so popular, so productive compared to other frameworks as well as what Conway’s Law and the Inverse Conway Maneuver indicate. Again this was not Rails’s fault, I was just ignorant.

Do you think that design decisions in software are often dictated, perhaps too much, by the choice of technologies? For example, by working exclusively in RoR, is it possible to miss out on better ways of doing things? Or do you think skills and patterns are transferable?

It depends. Rails is a strong conceptual framework. You know, like a rail. For example, Rails has this concept of “convention over configuration.” If you follow the Rails way, it can be fast and powerful. Outside of that, it can be hard, but this is a kind of design. Each framework has a concept. Some force you to fit their concept, and others are more flexible.

We see concepts through language. We see the world through our language. If a word doesn’t exist in a language I know, maybe I won’t understand the concept. This is the same in programming languages. If we don’t have a “word” for something, maybe we won’t see it. Of course, the computer can see anything, but language is a tool for us to understand the world.

What are you looking for in a company when you’re considering a job? What is most important to you?

First of all, it should match my expectations and capabilities, such as my skill set, career plan, life stage, salary, and working hours. Second of all, personally, I don’t want to work with a company that doesn’t have a product for making the world better.

The next most important thing for me about a company is its people — that’s everything. In the early stages of a startup, the personality of the founder is most important. I saw many startups reflecting a culture established by their founders. When I joined Blacklane, the company was already quite big as a startup and growing to maturity, so it was a bit of a different story. So, a boss who I am going to work with can be important in this case. In the case of the whole company, the concept and vision of the company is also important to me, because it represents the character of the company.

I know our company is not the best of the best, we have a lot of space for improvement, but the product is nice and people are so nice, which is amazing. I see that our whole company has a people-oriented culture, no matter which department and this is simply amazing. Again, I believe people are everything. I believe that as long as the people are right, any problem can be solved in the end.

What role do developers have in the world, do you think? Are we just passive code robots, or do we have responsibility for the impact of our work on society?

Of course, we have a responsibility for society, but it is the definition of work for me, (otherwise who pays for your work?). In terms of the job, I don’t see anything special about the developer role itself, which is a similar stance to that of my colleague Philipp. But I am proud to be a developer. I believe this is one of the best jobs to have, because we can help people through programming.

What is it like working in a different country, and culture, than the one in which you grew up?

In Berlin, there is a diversity of people and a great work-life balance. There are vacations and innovative companies, work and life balance (Japan is such a hard working culture). And the ways of communicating are quite different, in some cases I feel better (especially the way we use Slack). It’s high context (Japan) vs. low context (Germany).

What about the developer community?

One thing I found is that, regarding the Ruby community, there is a big gap between Europe and Japan — there is almost no communication between them! I went to the biggest Ruby conference in Europe recently and I was so surprised. There is almost no communication with the Japanese Ruby community.

There are three big conferences for Ruby in the world: one in the U.S., one in Europe, and one in Japan, called Ruby Kaigi, which was the only one I had ever attended.. Many of the Ruby comitters is Japanese, so that conference was a good place to find out about what was coming in the future. But these topics were missing at conferences in Europe. And there were very few Japanese there. Just me, Matz, and the organizer of Ruby Kaigi.

What was it like for you to hang out with Matz (Yukihiro Matsumoto), the creator of your major language?

It was an incredible time for me. He’s such a famous guy. I had a chance to talk with him for a long time and I was surprised by his attitude. When he’s talking, he’s just like a normal person, compared to what he’s done. I know he has strong opinions about the language, because Ruby is such a conceptual language, but he was a very good listener. In my last company, we had a big discussion about types (like static vs. dynamic types). Matz visited our company in Japan and we got to directly discuss our production code with him. We showed him our RoR app. While he’s not actually a Ruby programmer — he’s a C programmer — he was really interested in our experience as users of the Ruby language. I was surprised by that and how good a listener he was.

When we talked one-on-one at the conference, we mostly discussed general topics but I also thanked him for creating Ruby because without Ruby, maybe I wouldn’t have been able to come to Berlin.

If you could take six months off and learn something new, what would it be and why?

I want to travel as a backpacker and just go around the world. Or maybe practice tabla (an Indian musical instrument) or learn more about yoga. Yoga is commonly misunderstood as a healthy exercise, but it is actually more than that.

I did recently take three months off from work to do a yoga training course in India and also traveled to India, Nepal, Thailand, and Cambodia to explore the world. You never know, I might do that again. But these days, I’m more interested in traveling inside myself, if you know what I mean!

What do you imagine about your future? Where do you see yourself many years from now, and what do you hope to have accomplished?

I want to be a person who lives in the world and is not stuck in one particular area like Japan, or even Germany. So I prefer to have portable skills, and nowadays programming is one of them — you see how I got a job in Germany even though I had no experience working abroad before! I personally think it is a risk-free life, because you don’t have any dependency on a country, like well-decoupled code!

So when and where? I don’t know yet. I don’t even know about tomorrow. I’ll possibly keep working in Berlin, but you never know! That’s the fun part of life!