Having worked with a lot of Japanese programmers, this rings true, but I think it says more about how Japanese companies are run than anything else. There are a couple of interrelated factors that come together here. Typical Japanese companies tend to be very conservative in regard to established technologies. Also, lack of timely Japanese-language materials only makes the problem worse. Even if there is official documentation or an O'Reilly book in Japanese, not having the surrounding ecosystem of blogs and tutorials makes it pretty hard to get familiar with a new technology. Even for mature technologies, the documentation for the newest release or the newest editions of books may not be translated for a while, which further slows things down. Of course, this problem isn't limited to Japanese.
At the small Japanese company where I worked there was a pretty stiff resistance to using full-blown web frameworks. The main argument was that it would take too much time to train people to use the framework, and that open-source frameworks were somehow unreliable. So they ended up poorly re-inventing several wheels (like using plain text files and locking for storing data, or a crude templating system) without first checking out the available open-source alternatives. It often felt like we were working at the wrong level of abstraction. On a more practical note, most of our clients used shared hosting with such draconian limitations and ancient server software that it would have been pretty difficult to use some of the modern frameworks even if we'd wanted to. (Think servers with PHP 4 and FTP access only.) I don't think everywhere is as bad as that was, but in my experience not-invented-here syndrome seems to be pretty common here in Japan.
The PHP4 thing is something I should have brought up. I was brought in to save a restaurant search website project from complete failure, but was horrified when the hosting company was incapable of running anything other than PHP4.
I had to have the president of the company call them and get them to move us to a server with PHP5. This was 2.5 years ago - well after when PHP4 was deadended.
Not my call, brought in at end. Even then, I wouldn't have suggested it either. Managing servers is not a cheap or fun job; if their site was successful it would have made future sense and migrating was easy.
Regardless, setting PHP4 as the default in 2009 is idiotic.
I remember when the PS3 was first shown at E3 many years ago, one of the big selling points that Sony was advertising was how difficult it was to program for it. They happily extolled the fact that it would be a 10 year platform because that's how long it would take programmers to learn how to program for it.
Meanwhile, some big 3D devs like John Carmack were talking about how nice it was to develop for the XBox 360 because everything felt so familiar and MS already had a mature toolset available for people to use.
I don't know if this dichotomy is a reflection of the blog post or more a reflection of the games industry at that time.
Could easily have been a failed attempt to pimp how 'forward thinking' and new the Cell core technology was. "We're so ahead of the curve that it will take years for people to fully understand it."
> I remember when the PS3 was first shown at E3 many years ago, one of the big selling points that Sony was advertising was how difficult it was to program for it.
I'm pretty surprised to hear that, as we have always been working hard to make the SDK easier for game devs.
Do you remember who said that?
Looking back I believe it was Ken Kutaragi that said it, so in hindsight maybe it wasn't entirely true since he was known for saying pretty wild things.
I'm much more inclined to believe that this is a case of the marketing department stretching the truth to promote their product. That happens everywhere.
It's a much deeper social problem. You'd be surprised at the number of potential programmers that went to study law or economics because of the sheer career opportunities you get with this background. You see a lot of engineers that took a roundabout course into the field after wasting years pursuing a different major or regular desk jobs, etc. People with a good engineering background might be educated in FORTRAN (for hard engineering) by a professor that hasn't programmed in decades. Hardcore departments (really depends on professor) might give you a good background in C. In general, it seems the computer science departments are really geared towards creating coding robots more than the big dreamer, tech entrepreneur. If you miss your chance to get a good job out of college, you'll never catch up to your peers and will more or less be relegated to the "loser" group and be lucky to either be job hopping in small venture companies or worse be one of the IT temp workers living in internet cafes (this is less hyperbole than it sounds).
Also, while I agree that there are lots of competent coders, engineers just aren't as ruthless about personal productivity. They'd rather not rock the boat instead of getting into an argument. There's also the social tendency to take any form of argument personally. Combined with age-based seniority in programming teams, this kills innovation quick. A younger engineer with a pulse on the latest cutting edge technology isn't going to be heard at all. A crusty veteran, will just overrule them and say, "follow tradition". After decades of soul-crushing guess what these once brilliant engineers will say to fresh meat?
It would take a lot of courage for a younger, capable engineer to go and rewrite the code of a senior engineer even if it's mediocre, he'd have to be careful even in wording the commit message. Performance on the job is not rewarded as much as "competence (meaning just enough to get by but not so much as to make others look stupid)" and at most you'll rarely get promoted over older employees, you'll just be first among equals in your age group and so will your salary (almost negligible in terms of monetary differentiation, people will just treat you better because you're on the "fast" track). If your body and mental health manages to survive the hours you might get rewarded in a management position by your 40s and join the ranks of "young guns" where you get to try your luck in Japanese corporate politics where deals are cut in dirty drinking shacks over yakitori and beer.
I worked for a large Japanese hardware company many years ago. They had an entire floor full of programmers (YES, not kidding!!!) who were working on a new software product and when the first beta versions started to surface our guys in Europe saw how bad and hopeless it was. So they assembled a small competing team of 3 guys in Europe (I did the software design and coding – it was actually my first real job!). The headquarters provided all the necessary documentation and 1 year later we had a working product finished before them!!
I think one of the major problem was that they had incompetent managers and nobody questioned their authority/ideas. Everyone did what they were told! No independent thinking! Seems like a cultural thing to me.
Correction request: "They had an entire floor full of people programming" lol
Open source is not used too much in Japan because there aren't too many people who can modify and maintain them.
I've worked in Japan for 5 years at one of the major companies, and I think there's a bit more to it than the facts mentioned in the article. At my company we were developing embedded software, yet only a very small subset of the people working there were educated programmers, and only a very small subset of those people were actually good, productive programmers. And of those good, productive programmers, quite a lot of them were forced to do tedious repetitive tasks by the higher-ups.
I think the reason this happens is because people are rewarded differently. For example, if there's a crunch session and you manage to solve your bit of the problem with a fancy algorithm that means you get to go home early, while all the others work the 'less smart' way and spend overtime in the company, then the company will look favorably on those who worked longer, not those who worked in less time.
Since the culture expects you to work overtime anyway some people will believe that there's no point in working smart but less, since you'll only be working smart but the equal amount of hours anyway if you want to be respected. I've seen plenty of my colleagues following this routine and I've seen some foreigners fall for this trap too. It's a kind of culture that does not reward change.
As for me, I couldn't care less about how people perceived me so I just went on designing things the 'right' way (and going home in time for dinner). It worked out very well for me, but I doubt that a Japanese person could pull it off as easily, since they have to worry about their reputation a lot more than foreigners.
About languange barrier:
I was shocked when I found that all the Sun's official JVM documentation is available in Japanese.
This showed the amount of dedication and respect to Japanese market and companies (many of which invested heavily in Java, I know), but I understand how it can go both ways:
When some programming languages and tools are translated to your language and some aren't, you might become stuck with those which are, and they are perhaps older, limited and less experimental. Limiting your toolset based on the human language is surely a problem. When you have to use tool A and not B and C because B and C aren't and won't be translated to your language (and then you have peer and management pressure).
I also remember a few years ago on NH a comment by Dutch developer who claimed that very few books about software development tools are published in Dutch, so they use original English sources and whatever tools are good, but when they come to Germany they see full bookshelves on programming topics in German - so people are reading those instead of original docs and limit their toolset.
But there is another thing, maybe Japanese see programming as Engineering. A respected craft, but you don't reuse much of electrical engineering output between projects, neither expect youe engineers to take care of the product side of the product. They usually do what they are told or don't when it's too expensive or would not work that way.
Programmers are pretty distinct: they can reuse, they have to face the product side and they're much less constrained by a physical media so they can go a long way towards a wrong path.
Which would probably make Japanese system programming thrive but Japanese customer- or developer-faced software suffer.
But there is another thing, maybe Japanese see programming as Engineering. A respected craft, but you don't reuse much of electrical engineering output between projects, neither expect youe engineers to take care of the product side of the product.
Quite the opposite, programming is seen as a grunt work which anyone can do by many of companies.
This is true. Lots of IT companies advertise their entry level programming positions as "liberal arts majors with no programming experience welcome!! we'll teach you how to program". I kid you not.
To put it in perspective programming jobs go from around $30,000 to $50,000 per annum depending on experience. That's not a typo (American dollars). Any programmer making more than $100,000 at a Japanese company is either one of the founders and/or sitting on the board.
I don't buy the language barrier argument. So what if there's little documentation in japanese, I don't see why these developers couldn't just learn the languages and frameworks by reading the documentation in english. Unless they don't speak english, and in that case, I'd say it's their own fault. I may come off as being arrogant now, but let's be honest here, english is the lingua franca of our profession and any self-respecting developer will have at least a basic grasp of the language. You really don't need to speak a language perfectly to be able to read the documentation and learn some new technology. Also, english is quite easy to learn compared to other languages (much simpler grammar than most of the other languages I know or know about) and with all the US/Brittish shows, sitcoms and movies around you almost cannot help but to practice it regularly. Unless they synchronize them in your country, in which case you're out of luck there, but still...
Btw, if anyone is wondering, I am not a native english speaker. But I did learn how to program by reading the books and documentation that were available in english. If I had waited for somebody to translate these to my language, I probably wouldn't know a thing about programming to this day.
Agreed. I'm a native Japanese speaker and learned English because I thought it was required to learn programming. And I had thought it was the norm until I met other Japanese professional programmers. Somehow they thought they were allowed to stay whining about not being able to get information from English resources.
Once I told the management to have them learn English because it's almost mandatory for a software engineer to understand English as much as an aspiring Go player would learn Japanese. But the management told me back it's _harsh_ to require them to learn anything more. Harsh? Huh?
That said, I found the need for technical books real, and translated several English books (including Programming Erlang) into Japanese. However I know this effort will not scale and these days I am inclined to abandon translation and tell them that English is just another tool you have to learn to survive.
But I'm guessing you are a native speaker of a language closely related to English. I'm willing to bet your attitude would be a lot less cavalier if the lingua franca of our profession was Japanese (or Turkish or Chinese or whatever).
Not really, croatian is my mother tongue, and that's a slavic language. But I admit, it would be a lot harder, I think, to keep this attitude if the language of our profession was a language more complicated than english. We can consider ourselves lucky in this regard.
Croatian is still fairly closely related to English, however, so that gives you an advantage over someone who speaks Chinese natively, which isn't related at all.
But you are right that within the Indo-European language family English does not seem to be one of the more complicated languages. Which might have something to do with its origins as a pidgin of French, Anglo-Saxon, Frisian and Danish.
I think this has more to do with how anyone competent or socially adept is promoted out of engineering/development roles, joins a multinat or goes abroad. Very few East Asian companies have the concept of a senior engineer, let alone anyone actually employed as one. Institutional knowledge, and the lack thereof, is the main reason for so much reinvention. Usually, at the coalface, there is no one with significant project experience and those with experience will not help rookies (because they are management now and the questions are below them or they struggle with any form of human interaction).
Nice post. My time at Panasonic & then later selling software tools to the Symbian OS developers was eye opening to say the least. The Japanese corporate mentality was, in many ways, still feudal. Fujitsu's Symbian OS team was given a lot of support by NTT Docomo but also a crushing amount of responsibility -- they were developing something like 30 baseports a year, 15 each for the Spring and Fall seasons, for all their handsets and acting as lead Symbian developer for the entire NTT Docomo group with little to show for it. Talk about churn & burn.
When I spoke to the management about this, they said that they were in a position where they couldn't say no to Docomo and likewise they didn't see anyway of not continuing to do their development. And yet, and no offense to the folks grinding this stuff out, there was little real differentiation in the software, the OEM's were all focusing on the hardware feature differentiation and the software was really just a "necessary evil."
So I'm not convinced that it's simply a case of needing a "force multiplier" framework, the Japanese companies need to see that there's value in cultivating better, highly differentiated software.
DeNA, GREE, and the other Japanese social startups seem to have found this whereas the larger vertically integrated semi manufacturers are basically stuck writing drivers for their whizzbang hardware.
It's cultural -- there is excessive NIH in Japanese corporate culture. They see using a framework as showing some sort of weakness. Managers are rewarded for reinventing the wheel.
This was my experience, too. Our CEO decided against the advice of all of our programmers that we should write our own CMS, primarily because he felt that it would put us at an advantage over our competitors to be able to say that more of the software that we used was written in-house. I left shortly afterwards.
FWIW here's a story about the scene, by a native Japanese.
It was more than 10 years ago when I joined Fujitsu's 3G cellular network project as a subcontractor. It was a huge complex project and I believe was one of the first 3G networks deployed in the world. So I expected I would work with teams of descent engineers.
Except most of them were not.
The subproject had dozens of 'engineers', but many of them had just finished vocational schools that didn't teach them even programming in C. To make it worse, the existing code base was the exemplar of bad code, e.g. each function had more than 3000 lines, function names were a letter and some digits and we had to consult some other documents to find out what they were expected to do, etc as well as more architectural design problems. In fact there I was able to find every horror story about software development.
Why did such a mess happen? One of the reasons was that the contractor company (who then outsourced some senior positions to subcontractors like me) were paid by the headcount of engineers it offered to the project. No kidding. So, in order to maximize the profit, the contractor made up a legion of those incapables who were paid less. Expectedly that made things worse, and Fujitsu thought it needed more engineers to solve the problems. Vicious circle.
I had tried to make the situation better, but the root cause was not in the technical side and I had no clue. The only nice thing for me was that during the personal research to improve the project I got to know Erlang, which was of course never ever used in the project because of the similar reasons mentioned in the article.
Repeating what I commented on the post itself, but this is a really interesting observation.
I can confirm from limited experience that this is happening. But the problem is that “giving Japanese programmers good frameworks and libraries” is not as easy as just handing them a package and being done with it. The pace of modern frameworks like Rails etc. is so fast that there is a big learning curve just getting used to staying in the loop.
We lost at least a week on a project I’m working on catching up when Rails 3.1 hit, because all these useful things (asset pipeline, etc.) require effort to tie into existing practices. Imagine the Japanese developer with limited English skill, trying to navigate the discussion threads like this one ( https://github.com/chriseppstein/compass/issues/337 ) (just as an example). It’s a lot of work.
So I think what happens is that, although re-inventing the wheel is a hell of a job, at least it means that the basic groundwork is constant and designed internally, whereas using frameworks means that you’re building on someone else’s work — usually non-Japanese, so not well documented in Japanese.
The biggest difference between myself and a Japanese programmer is that if I run into a problem I can jump on to Google and find huge amounts of English information (docs, forums, stackoverflow etc.) to help me solve it.
Japanese programmers who are not pretty damn fluent in English cannot do this and this really is a brick wall.
I haven't seen much NIH syndrome, mainly it is because they cannot effectively search the net libraries / apps that they can use; again due to the language barrier.
On the other hand, I will say that even as an English-speaker, I find myself recently skipping the "human language" explanation and jumping directly to the code when I read results from Google etc. I think this is probably the best strategy for anyone not adept at English: start from the code, and then when you don't understand something, go back to the explanation above/below it.
Yes but it doesn't help with thing not directly code related, environmental stuff etc... Which is usually the stuff I end up googling come to think of it.
Plus to dive into the code you have to have a reasonable idea where to start to look for your problem which can also be a barrier in a complicated project where the comments / guides / documentation is in English.
Maybe that says more about the hobbyist nature of programming in the West than anything else.
Westerners, who may have started programming out of personal interest, may simply spend more time after work building up social communities to solve problems they have at work.
In Japan programming may simply be viewed more as "a salary job" they could qualify for, filled with lots of uninspired folks who just want to grind through their shift and get the hell out of there at the end of the day.
At least that's how my friends who've worked in both Japanese and Western companies describe the situation.
In Japan programming may simply be viewed more as "a salary job" they could qualify for, filled with lots of uninspired folks who just want to grind through their shift and get the hell out of there at the end of the day.
Um, have you ever been to the US? It's like that here too.
So logically college in Japan should teach English just as much as programming.
I am from Austria and we need to do lots of coursework in English in economics because all the literature is English and you can't work in the profession without a good command of the language.
There is a difference between NIH and loosing 3 months a year translating documentation. How much time would you loose if 100% of ruby documentation was written in Japanese, and any question you had you had translate to Japanese to get it answered then translate the answer back to your native language?
I hear the weeaboos across the world now screaming “what about Ruby!”, but Ruby just proves the point. A Mormon Japanese dude (read: English literate, world-focused, non-Otaku, non-loner mindset) coupled with an excellent framework that gained fame world-wide (Rails). It’s nice that there are great Japanese Rubyists but they are not responsible for the popularity of the language.
Yes, Ruby (programming language) was, but Rails (a force-multiplying framework) wasn't. Also, anyone can correct me if I'm wrong, but my observation was that Rails adoption was not nearly as strong among Japanese Rubyist as it was in other places.
One interesting phenomenon is the how Ruby and Rails are mostly in parallel worlds. It can't just be a language barrier. There are lots of initiatives like JRuby and Rubinius that are more or less ignored by the Ruby Core team.
With all the Ruby enthusiasts outside of Japan, it seems unnatural that most of the core commiters are still Japanese.
Yes, that's correct. Ruby is much more widely known that Rails, although I have the feeling that is changing.
A few years ago Cookpad (http://cookpad.com/), a Japanese recipe site with millions of users, switched to Rails. That may be contributing to a change in awareness locally.
Yes Cookpad is really involved in promoting Rails use in Japan - and they should be. Their user base boasts 1 in every 2 20-30y.o. women in Japan. Astounding metric.
I automatically discount anybody who believes that people are "too old to be familiar with current programming technologies and shortcuts." Aren't we supposed to be a meritocracy and judge on nothing but talent?
I'm the author. I upvoted you because I see how you may have misunderstood what I wrote. I agree with you in part because I'm a 32 year old and over-the-hill if you go by some things I read here.
I was referring to "old school" more than "old". A 50 year old programmer can bring very valuable perspective to problem solving, even if he doesn't know a word of Javascript. He can also probably provide important leadership; the kind which is sorely lacking here in Japan. Unfortunately, I don't know any here. (I worked with one back in the US and he was awesome for how he provoked me, even if he didn't code that much)
The people I was referring to were people are the ones who believe everything needs to be built close to the metal, and that scripting languages are toys that cannot be used for serious engineering. They are generally older, in positions of management, and useless.
That's the problem in Japan. It's a delayed meritocracy. You collect on your performance from 10 years ago thanks to rigid seniority. So, these ageist stereotypes actually hold true sad as it may seem. The software industry in Japan is more like a medieval European guild than what you imagine.
Perhaps a simple layer between English "force multipliers" and Japanese speakers would prove to be a good solution?
Ideally, you would probably want the Japanese programmers using the exact same frameworks as the rest of the world- reinventing Python in Japanese would boil down to duplicated and thus most likely wasted effort.
I'll just add, because it wasn't in the article: Japanese higher education (and, increasingly, secondary education) is pretty bad. It's bad in completely different ways from US schools which is why it often gets a pass or is thought of as good in the West, but it doesn't produce good programmers.
Lots of focus on certificates and standards and consensus and other proof of 'merit', and not a lot of focus on getting shit done and programming, motherfucker.
At the small Japanese company where I worked there was a pretty stiff resistance to using full-blown web frameworks. The main argument was that it would take too much time to train people to use the framework, and that open-source frameworks were somehow unreliable. So they ended up poorly re-inventing several wheels (like using plain text files and locking for storing data, or a crude templating system) without first checking out the available open-source alternatives. It often felt like we were working at the wrong level of abstraction. On a more practical note, most of our clients used shared hosting with such draconian limitations and ancient server software that it would have been pretty difficult to use some of the modern frameworks even if we'd wanted to. (Think servers with PHP 4 and FTP access only.) I don't think everywhere is as bad as that was, but in my experience not-invented-here syndrome seems to be pretty common here in Japan.