In 2008, a movie was released in Japan with the title “Genkai in a Black Company” [1], depicting the life of a 26-year-old struggling to make a living in the gruelling conditions a so-called “black company”. The term is Japanese slang for companies with long hours, dreadful working conditions and miserable pay that exploit their employees beyond the legal limit — last-ditch options for those who can't get better work. The company in the movie, though, was not the kind you might associate with such a backward, sweatshop-like workplace. It was an IT company.

Not surprisingly, young Japanese are none too keen [2] to work in such coding sweatshops, which are all too real (the movie itself is based on a true story [3], and a not uncommon one). It doesn't help that programmers are associated in the public eye with social ineptness [4], and that the programming task itself is often viewed as grunt work, or not understood at all [5] [ja]. Young Japanese are steadily fleeing the industry, and the exodus is one of the main reasons why Japan is losing its competitiveness in the new digital age [6].

A personal perspective

37-year-old software architect Ryo Asai [7] (@ryoasai74 [8]) and his blog “Becoming a Master Programmer [9]” (達人プログラマーを目指して) [jp] offer a rare counterpoint to this gloomy picture, and a unique window onto the state of the IT industry in Japan. In his profile, the blogger explains:

世間ではプログラマーは忙しいわりに報酬の少ない報われない職業という意見もあるようですが、インターネットで気軽に情報を発信したり、オープンソースの コミュニティに参加して一緒に開発したり、プログラマーが活躍できる場所は以前と比べてずっと広がっているということに最近ようやく気づきました。勉強の 材料もインターネットからほとんど無料で手に入る時代ですし、やはりプログラミングが好きな人間にとっては本当に魅力的な仕事であると思います。IT業界 の現在や未来には悲観的な意見が多く、特にプログラマーに対しては魅力的な職業でないと感じる人々が多いのは残念なことです。ただ、IT技術はなくなるど ころか急速な勢いで高度化しているのですから、今後スキルの高い達人プログラマーが活躍できる場所がもっと増えてくるのではないかと信じています。

While the life of the programmer is commonly seen as unrewarding, stressful and poorly remunerated, I’ve come to see recently that there have been some changes. There is a growing space where developers thrive, sharing information freely online and participating through open-source communities in collaborative development. We are in an age today where most study materials can be accessed freely online, an age that is truly inspiring for anyone who enjoys programming. It is terribly unfortunate that so many people view with great pessimism the IT industry and its future, and in particular that so many see programming as an unattractive profession. But the truth is that far from disappearing, information technology is advancing at breakneck speed, and this, I believe, will create many more places in the future for skilled programmers to thrive.

After working for seven years at OGIS-RI [10], a Japanese system integration [11] company, Asai recently quit to take a job at Amazon Japan. The posts translated in the first part of this two-part series document the motivations for this move.

A passion for programming

Counter to the “black company” image, Asai's experience of being an engineer at a Japanese IT company was positive. In a blog entry posted on October 3rd, he writes [12] [jp] of his environment at OGIS-RI:

およそ7年間にわたり、前職のオージス総研ではソフトウェアアーキテクトとして、SOAやEAといった全社的なシステムのアーキテクチャから、上流のモデリング、Java EEを使ったアプリケーションの開発など、技術者として様々な経験を積ませていただきました。私自身はこのブログでも何度も取り上げてきたように、モデリングやオブジェクト指向といった技術を用いて、実際の基幹業務システムの設計などに活用することで、高品質で保守性の高いシステムの構築に貢献したいという思いがありました。そのようなシステムを構築、維持するためには高品質なアーキテクチャの構築が必要不可欠であり、それが、結果としてお客様の業務を効率化させ、さらにビジネスの価値を向上させることにつながるという信念がありました。

[13]] As I have mentioned many times in the past in this blog, it’s always been my desire to contribute to building high-quality, highly-maintainable systems by actively using modeling and object-oriented techniques in enterprise system design. High-quality architecture is essential to build and maintain such systems, and I’ve always believed that such architecture results in optimizing the client’s operations and contributes to increasing business value. Over the past 7 years as a software architect at OGIS-RI, I have built up a wide range of experience on everything from company-wide system architecture, to upstream modeling and JAVA EE-based application development. [EE = Enterprise Edition ] As I have mentioned many times in the past in this blog, it’s always been my desire to contribute to building high-quality, highly-maintainable systems by actively using modeling and object-oriented techniques in enterprise system design. High-quality architecture is essential to build and maintain such systems, and I’ve always believed that such architecture results in optimizing the client’s operations and contributes to increasing business value.

中でも私としては大変運の良いことに、実際のアプリケーション開発の現場に入って、Java EE、Spring、Hibernateといった標準技術やOSSを利用し、実際に再利用可能なフレームワークを段階的に構築し、複数のプロジェクトにわたって適用するという経験もできました。フレームワークチームとアプリケーションチームが完全に分断された世界で仕事をするのではなく、限られたリソースのなかでアプリケーションの要件をもとにフレームワークを段階的に進化させることが必要でした。複雑な金融商品のドメインモデルを構築したり、大量のトランザクションを処理するための高速化の仕組みを考えたり、ビルド自動化の工夫をするということは、単に新しい技術を適用するということ以上にわくわくする体験でした。

[14]] and Hibernate [a [15]], and Open Source Software (OSS), step by step building reusable frameworks, and applying them across various projects. Rather than being entirely separate, the framework team and the application team had to work together, gradually evolving frameworks based on application requirements and using limited resources. Above and beyond the excitement of simply applying new technologies, it was a thrilling experience to build domain models for complex financial instruments, devise ways to accelerate the processing of huge numbers of transactions, and come up with ways to automate builds. I’ve been very lucky to have found a position where I’m directly involved in actual application development, using standard techniques like Java EE, Spring [a Java framework ] and Hibernate [a Java library ], and Open Source Software (OSS), step by step building reusable frameworks, and applying them across various projects. Rather than being entirely separate, the framework team and the application team had to work together, gradually evolving frameworks based on application requirements and using limited resources. Above and beyond the excitement of simply applying new technologies, it was a thrilling experience to build domain models for complex financial instruments, devise ways to accelerate the processing of huge numbers of transactions, and come up with ways to automate builds.

[16], I was fortunate in working in an extremely positive and supportive environment where I had lots of colleagues around me with whom I had spirited discussions on technology, something which is rare for a company in the the system integration (SI) sector. I am extremely thankful to my bosses and coworkers at OGIS-RI for that. Also, as I’ve written previously on this blog , I was fortunate in working in an extremely positive and supportive environment where I had lots of colleagues around me with whom I had spirited discussions on technology, something which is rare for a company in the the system integration (SI) sector. I am extremely thankful to my bosses and coworkers at OGIS-RI for that.

The 35 year age ceiling

But although his experience at his job was positive, Asai felt at 37 that he had hit a limit:

そういう意味で、なかなか自分から積極的に転職を考えようという気持ちにはなれなかったのですが、やはり、既に37歳という自分の年齢のためか、一般にこの業界で35歳定年説と言われているように、最近は開発現場でバリバリコードを書くという仕事からはどうしても遠ざかってしまっているところがありました。もちろん、自分の体力の衰えということもありますが、私としてはまだまだ現役でプログラムを書いていきたいという気持ちがありました。新技術の吸収力や理解の速さといった面では若い人にはかなわないかもしれませんが、リファクタリングやモデリングの技術などは経験によって深まるものであると思うからです。

In that sense, it was pretty hard for me to consider actively seeking a new job. But the thing is that in the end, maybe because of my age — I’m now 37, in an industry where people say the retirement age for an active programmer is 35 — I started realizing recently that however I might try to avoid it, I was being pulled away from intense coding work. Of course, part of this was due to a decline in physical capacity, but nonetheless I still very much had the drive to continue doing programming work. While I may not be able to compete with young people in terms of the speed with which they can absorb and understand new technologies, I have honed my refactoring and modeling skills through experience.

In a comment on the post [17], he expands on the roots of Japan's age ceiling on programmers, whereby coders are shifted away from coding to more managerial or consulting positions — usually around the age of 35:

実際に海外ではプログラマーの35歳定年説というものはまったく ないと思います。35歳を過ぎているからといって全然特別なことはまったくありません。結局は仕事ができるかどうかで、年下が上司とかふつうだと思います し。でも、日本のPGの募集だと35歳までとか制限を設けているところも実際に多いようですし、自分の経験上プログラミングはなるべく原価を抑えられる若 い人を優先するという考え方もあって、だんだんとコードを書く仕事がなくなってくるのは事実だと思います。つまり、プログラマーの定年については、スポー ツ選手のように個人の能力の問題というよりも、組織や給与体系の問題が大きいのではないかと思います。

I don’t think outside of Japan there’s anything like this “retirement age” of 35 that is imposed on programmers here. There’s absolutely nothing special about being over 35 years of age over there. All that matters is ultimately whether you can do the work or not, and often you have younger people in senior positions. But in Japan, there actually are a lot of places that impose this age limit of 35 when recruiting programmers, and from my experience, they favor younger programmers because that way they can keep costs down, leaving you with less and less programming work [as you get older]. In other words, the problem of the age limit is not a problem of individual ability, as it is say for athletes, but is a problem of organizations and their pay structure.

Ultimately, he found himself being pulled away from his passion:

そういう状況の中で、このブログのタイトルでもある「達人プログラマーを目指す」という自分の目標からどんどん遠ざかってしまっているのではないかという焦りや不安が常にありました。アーキテクトとしてパワーポイントやワードの説明資料を作成するのも広い意味でプログラミングの一種だと言って自分をごまかすこともできなくはないと思いますが、やはり、毎日IDEやエディタを起動してプログラミングスキルの向上や開発環境の改善に励みたいという思いがありました。

[18]] or editor every day, and strive to boost my programming skills and improve the development environment. It was this situation that caused me to become impatient and uneasy that I was steadily drifting away from my goal of becoming a master programmer, the title of my blog. I suppose I could get around this by convincing myself that in a very broad sense, creating powerpoint slides and word documents to explain architecture is a type of programming, but really, I knew that what I really wanted was to open an IDE [ Integrated Development Environment ] or editor every day, and strive to boost my programming skills and improve the development environment.

Amazon, here I come

The pull away from programming convinced Asai to take the plunge and apply for a position at Amazon Japan. He writes of his motivations:

Amazonはサービス企業のイメージがあるかもしれませんが、IT技術によって小売をサポートするという広い意味においてSI業界におけるユーザー系企業に近い立場であり、エンタープライズ開発の一種であると考えることもできると思います。今回AWSではなく、Amazon.comの本業である小売業を支えるアプリケーションの開発を行うポジションに応募したのは、エンタープライズアプリケーション開発者としての経験を少しでもいかしたいという自分のこだわりというところもありました。

Amazon may have an image of being a service company, but in the broader sense that it supports retail through Internet technology, it’s position is similar to user-oriented corporations in the system integration (SI) industry, and what it is doing can be thought of as one type of enterprise development. The reason I applied for a position not at Amazon Web Services (AWS), but in application development for retail operations, Amazon.com’s core business, is that I wanted to put to use my experience as an enterprise application developer.

He writes of his interview:

詳しいことは書けませんが、面接はいわゆるシリコンバレー方式で、合計5時間くらいにわたって、同僚や上級のプログラマーからアルゴリズムやデータ構造など技術的な質問を英語で受け、心身ともにヘトヘトになりました。私の英語力の問題もありましたし、情報系の卒業でもなく、基礎的な計算機科学の勉強も不十分だったため、いきなりアルゴリズムに関するコードを書き下す問題にはなかなかてこずりました。

While I can’t reveal all the details of my interview experience at Amazon here, what I can say is that it was Silicon Valley-style: for five hours, I was subject to technical questions in English from Amazon junior and senior programmers on everything from algorithms to data structures, leaving me both mentally and physically exhausted. I had a pretty tough time suddenly coming up with code for algorithms on the spot like that, partly because my English skills are not very good, but also because I never graduated with an IT-related degree and haven’t studied enough basic computer science.

落ちても失うものは何もない、ダメでもともとという気持ちで応募したポジションですし、自分としてはこのチャンスを最大限に生かすべく、一日も早くAmazonのビジネスに技術力で貢献できる達人プログラマーの一員になることを目指して精いっぱい頑張っていきたいと考えています。

I applied for the position because I felt that I really had nothing to lose. Now that I’ve been given the chance, I want to make the most of it, and strive to become one of the expert programmers that contribute to Amazon’s business through technical capabilities.

Another loss for Japan

In bookmark comments, readers of Asai's blog offered their congratulations, and their thoughts:

H_Yamaguchi [20]:

プログラマなら一度は通る道なんでしょうね。35才定年説に関係なくコードを書いていたいという気持ちと、実際の仕事との差にみんな悩むんだろうな。。。あっ、私も明日で37才、今日も明日もプログラマです。

This is something that every programmer experiences, I guess. The gap between the desire to continue writing code well pass the “retirement” age of 35, and the reality of the workplace, causes a lot of distress. But hey, I'll be turning 37 tomorrow, and I'll be programming then just as I am today.

tt4cs [21]:

おめでとうございます！ 神の見えざる手に導かれたに違いないと、他人事ながら少しだけ感動しました。。

Congratulations! I'm really impressed — although it's not my position to say so, it strikes me that there must have been some invisible force drawing you to this path.

Nan_Homewood [22]:

35過ぎても、こうやって転職できる方は凄い。かなり努力されていると思います。見習いたい。

I am so impressed by people over 35 who can switch jobs like this. It must take a lot of work. Now I want to follow his example.

And junkcollector [23], with the take-away message:

こうして優秀な人材を失っていく日本企業。昔のように残ってはくれない。

Japanese corporations are losing their talented programmers. It's not like the old days — they just don't put up with it anymore.

In the second part of this two-part series, I'll be introducing a follow-up post [24] in which Asai describes his first few weeks at Amazon Japan, in particular the challenges he faces adapting to the different work culture. Stay tuned!