the Hidden Realities of Computer Industry in Japan Japanese

2.3 Willpower and Effort


The mentality of an old Japanese idiom, "with willpower you can achieve anything," is still one of the fundamentals of Japanese business practice. Going to the office early in the morning, working late in the evening, working long hours seem to be essential to a model worker. What matters is that how long you worked, or more precisely, how long you were in the office, but not what you achieved.

Then, is this applicable to the world of programmers ? Are long hours of sitting in front of a computer screen and keep on typing considered to be working ? Are they start programming in the first place ? Sooner or later, you should make some visible output. So you start programming right now.

I think you should read books, magazines, or gather information using Internet or BBS once in a while, but beginners seem to have the tendency of going to another direction. The determination of programming precedes establishment of basics. Of course, programs made such way are doomed to be of poor quality.

In the world of sports, especially in traditional sports, willpower is considered important. However, even in the area, many hours of training is required before participating in games. In sports, if you participate in games before basics are established, it would result in injury, disability for the rest of your life, or even death. Willpower during games is considered important, but one during training is considered much more important.

In sports, a training menu consists of many stages, with which you should gradually go up. Should you go up suddenly, you get hurt or get ill. Recently, with the advance of sports medicine, scientific training are becoming popular.

In the sports arena, though they keep saying "willpower" repeatedly, they consider factors other than willpower more important.

But in the software arena, a typical high-tech industry, training is not organized well. Considering the short history and the rapid advance of software technology, it seems hard to make them well organized. However, the faster technology advances, the more effort of knowledge acquisition is required.

In software, the difference of skills between programmers is enormous. It is totally wrong that if you order a program to different programmers, you always get the same result. One might make excellent program better than you expected. The others so poor that you think you shouldn't have ordered them in the first place.

There are several types of programmers. The Japanese are diligent in manufacturing. So they take time in programming. Much more efforts are consumed in taking out errors than writing programs. Even one typo would make a program to fail. Therefore the less errors, the better. If you wrote thousands of or tens of thousands of lines of programs, it is very difficult to find errors in them. To err is a human nature.

The bottom line is not to make errors in programs in the first place. Beginners tend to find errors after all the programs are written. Soon there appear lots of errors, which they should find with all of their effort. The required efforts are enormous.

In any company, there are those who are so disorganized that always looking for a document in piles of papers on their desk. Sometimes they got all the help they need from his colleagues to look for a document, but often it won't be found, because trash and important documents are not distinguished, no wonder someone might have thrown it away.

On the contrary, there are those who always find the document when needed, who are often quiet, but much more competent than the disorganized.

Then, what advanced programmers should keep in mind ? First, they should think how to avoid errors, which is the theme for the advanced. Without this, anyone would not achieve that high level. Of course, their programs are full of tricks to avoid errors, and to make errors visible if any.

These differences result not only in shorter development time but in higher quality of programs. Plus, what makes interesting is how they get involved with computers; beginners seem to tackle with computers with all of their power. You can see them as if they were efforts all over. But if it doesn't work out, they get angry and try to change their programs at random. Sometimes by chance, as an result of the random modification, their programs begin to behave correctly as they wished. They cannot understand why their programs started working correctly. In this way, programming with such a trial-and-error method will result in whole mess in their programs.

The advanced programmers, when get serious, can produce more programs than the beginners by a factor of two or three. With their broader knowledge and skill, the difference is obvious. They can choose the best solution from several candidates of implementations.

When you solve a mathematical question, beginners tend to solve immediately and thoughtlessly, and after all the efforts, they give up. The advanced, first taking a look at the question, then considers which formula gives the best solution. After considering several solutions, he finishes one of which seemed to be the best. You might think there's only a single solution to a mathematical question, but it is wrong.

To take a broader view, let's see studying in general. Who study longer, pupils with good records or the ones with poor records ? There are pupils who make good records while they seem to play all the time. On the contrary, there are ones who make poor records despite of being studying all the time. It is easy to conclude the difference is by talent. But there must be secrets to get good records. Sure it is best to study only important key points, with high efficiency in mind. There are those who pass many difficult entrance exams to elite universities all at once, and those who get rejected from all the universities even with years of studying.

I guess now you know there's a big difference in programmer's capabilities, which seem obvious to everyone. And in theory you know how to reduce the difference. However, with a software development project behind schedule, you tend to advocate the "efforts" strategy.

However, with efforts of trial-and-error, you can make programs unreadable. You should be cautious about efforts. There must be any way other than efforts.

Willpower is more horrible than that. With willpower you can crush not only your programs but also willpower itself -- I hope you won't.


Copyright 1996, 1998 Hirofumi Fujiwara. Translated by S.A.
No reproduction or republication without written permission

the Hidden Realities of Computer Industry in Japan Japanese