From Nowhere
to Pokémon GO

Chapter 3: Theory and Practice

College Entrance Exams

In 2004, as I entered my third year of high school, college entrance exams were approaching. Since I enjoyed programming, which I had been doing since middle school, and it was my area of expertise, I had decided to study information science in college. At that time, I vaguely understood that after studying programming, one would typically become a “Systems Engineer” or SE, but I didn’t really know what an SE actually did (in the end, I never became an SE). At that time, rather than focusing on what would happen after graduating from college, I simply wanted to learn more about computers in university. I was good at subjects like Japanese, mathematics, and physics, but English was my greatest weakness. On my final English test in high school, I scored a disappointing 17 out of 100. I chose Yokohama National University as my first choice because it had an information science department and didn’t require strong English skills. The first-stage examination was the Center Test, which is common for national universities with five subjects across seven disciplines, and the second-stage examination was solely mathematics. For the foreign language section of the Center Test, I could choose Chinese instead of English, and as a native Chinese speaker, I scored almost perfectly, missing only one question.

On the day before the second-stage examination at Yokohama National University, despite having been fully prepared until then, I became so nervous that I couldn’t sleep at all that night. I headed to the exam in the morning, but I forgot even basic things like a watch and stationery, and the exam ended before I knew what was happening. I failed spectacularly. Fortunately, I was accepted into Shinshu University, my second choice, and my path to higher education was secured.

As a side note, when it came to taking entrance exams, private universities were never an option for my family due to our financial situation. National university tuition was very affordable, with an enrollment fee of about 280,000 yen and annual tuition of about 540,000 yen. This remains largely unchanged as of 2017. Moreover, students with good academic performance and low family income are eligible for half or sometimes full tuition waivers. I met these conditions, so my enrollment fee was completely waived, and my tuition was reduced by half. I was truly fortunate to have been able to immigrate to Japan thanks to my grandmother. I don’t know much about university conditions in China, but considering our family’s circumstances at that time, it’s uncertain whether I could have attended university if I had remained in China. On the other hand, in America where I currently live, the top universities are mostly private. Speaking of prestigious computer science universities, there’s Massachusetts Institute of Technology, Stanford University, Carnegie Mellon University, and others—all of which are private. Taking Stanford University as an example, the annual undergraduate tuition is about 67,000 dollars1 (approximately 7.5 million yen). The total tuition for four years of university adds up to 30 million yen. Of course, there are aids like scholarships and student loans, but even considering living expenses, it’s a dizzying amount just to imagine.

In Japan, whether you have money or not, everyone is given equal opportunities, and anyone can attend a good university as long as they study diligently.

University Student

Although I failed to get into Yokohama National University, my first choice, I successfully passed my second choice and in April 2005, I enrolled in the Department of Information Engineering at the Faculty of Engineering, Shinshu University. Shinshu University is a comprehensive university consisting of eight faculties spread across five campuses throughout Nagano Prefecture. The Faculty of Engineering was in Nagano City, my hometown, about a 20-minute drive from my home. Its proximity to my home was one of the reasons I chose Shinshu University. However, regardless of faculty, the first year was to be spent at the campus in Matsumoto City, Nagano Prefecture, so I left home for the first time and began living alone in Matsumoto City.

After completing the orientation upon enrollment, I was excited at the prospect of finally studying computer science. However, contrary to my expectations, once classes actually began, they were not interesting at all. In the long-awaited computer science classes, they were teaching things I had already learned through self-study in middle school. This was natural because the first-year classes were mostly general and preparatory before beginning specialized studies. Disappointed, I gradually started skipping classes. I handled assignments and tests adequately through self-study and began to focus more on part-time work rather than attending classes. After trying several part-time jobs, I started working at the repair counter of an electronics store called Eiden through a temp agency. I started earning about 150,000 yen per month, sometimes up to 200,000 yen. With an hourly wage of about 1,200 yen, having that much income meant I was sacrificing most of the time I should have been devoting to my studies. My first year of university was spent immersed in part-time work.

The year 2005, marking the 60th anniversary of the end of World War II, was unfortunately also a year when a storm of anti-Japanese demonstrations swept through China. In major cities like Beijing and Shanghai, demonstrators turned into mobs, and the sight of many Japanese cars and stores being destroyed was reported daily. As Chinese residents in Japan, both my family and I were embarrassed and angered by this. I have never met a Chinese person who has been to Japan or lived in Japan and harbors anti-Japanese sentiments. Among those who were hostile to Japan and engaged in destructive activities against Japanese products, very few likely knew the real Japan. I believe if they had come to Japan once and seen the Japanese people who value tradition and are courteous, their thinking would have been different. Conversely, it is also true that many Japanese who dislike China and the Chinese have a lack of understanding about China. I have been fortunate enough to live in three countries—Japan, China, and the United States—and meet people from many different backgrounds, which has allowed me to accept differences in language, culture, customs, and values. I sincerely hope that many people will travel abroad and learn about other cultures so they can become more accepting of differences.

The More You Learn

In 2006, as I entered my second year of university, I returned to Nagano City, where Shinshu University’s Faculty of Engineering and my family home were located. In my second year of university, we finally began taking more specialized, higher-level classes. The course subjects included Programming Languages, Computer Architecture, Signal Processing, Logic Circuits, Algorithms and Data Structures—just hearing these names excited me. I entered a level of learning that was a step deeper than the programming I had been studying on my own, and I came to realize how superficial my knowledge had been and how much I lacked in understanding the essential aspects. I certainly had knowledge of programming, but my mathematical and fundamental understanding of it was completely insufficient. In the Algorithms and Data Structures class, I particularly learned methods for mathematically analyzing programs and quantitatively measuring performance. In university, it’s more important to learn the theories and principles behind how programs work rather than practical matters like “how to make an app.” Programming languages can be learned through self-study by reading books, and you can make things that work to some extent, which might seem like a shortcut. However, this knowledge is like a castle built on sand, and you’ll reach your limits when confronted with unfamiliar problems. I believe that universities should not prioritize education that neglects fundamentals just to make students immediately useful in the job market.

To explain this to readers unfamiliar with specialized topics, to risk oversimplification, my self-study up until then was like cooking by watching cooking shows. In other words, I could make various dishes if I had a recipe, and I knew about different types of seasonings. I could create my own arrangements and make relatively tasty dishes. By learning specialized knowledge at university, my understanding of the ingredients used in cooking gradually deepened, and I gained a more fundamental understanding of why certain ingredients are combined, what the nutritional values of each ingredient are, and what kind of dishes are appropriate for different seasons and occasions.

Just as the saying goes, “The more I learn, the more I realize how much I don’t know2,” the more I studied, the more I found things I didn’t understand, and my desire to study increased even more.

Because studying was interesting, I progressed on my own ahead of the curriculum. At this time, Professor Niimura, who was teaching the Programming Languages course, introduced me to a book called “Structure and Interpretation of Computer Programs” published by MIT Press. This book has been used as a textbook at the Massachusetts Institute of Technology since the 1980s and is a masterpiece that explains abstract concepts related to programming. Programming languages go in and out of fashion; for example, “Perl,” the first language I learned, was a major language at that time but is not used much now. However, programming concepts are universal, which is why a book written in the 1980s can still be used as a textbook today.

Encounter with Logic Circuits

Among the many courses at university, the one that excited me the most was Professor Izawa’s “Logic Circuits” class. Logic circuits are a type of electronic circuit that constitutes computers, comparable to gears in a car or screws in a building—they support the foundation of a computer. Until then, having only studied programming, I had only a superficial understanding of how the programs I wrote worked, and fundamentally, how computers operated. Using a car analogy, I could drive, but I didn’t understand the inner workings of the engine. By studying logic circuits, I was able to comprehensively understand the mechanisms of computers in detail. Professor Izawa was extremely good at explaining things clearly, and I was captivated by his every word. After the class ended, wanting to learn more sooner, I spent the weekend studying on my own using the class materials that Professor Izawa had uploaded to the internet. I read through the materials while muttering to myself, “So that’s it!” and “I understand now!” and in my enthusiasm, I completed all the assignments for the second semester in just two days over the weekend. In the next logic circuits class, I proudly went to report to Professor Izawa that I had completed all the assignments. “All done? Really?” he asked skeptically, to which I replied with a proud “Yes, all completed.” Hearing this, Professor Izawa said, “I see, then you don’t need to attend class anymore, do whatever you like.” From then on, I began frequently visiting Professor Izawa’s office. He lent me an empty room, saying I could use it as I pleased. The room had various tools like soldering irons and components, and I played around making small circuits. The professor always answered my questions politely and clearly.

Note: What is a Computer

Personal computers, or PCs, and other computers are made up of logical and physical structures layered like mille-feuille. Let me briefly explain how this computer mille-feuille is constructed.

At the very top is software. Among these, the layer called “applications” or “apps” is the most familiar to everyone. “Pokémon GO” is one such app. The layer directly supporting apps is called the “Operating System” or “OS.” Examples include Windows, Mac, Android, and iOS. This layer manages apps and handles the hardware layers below. Apps and the OS itself are also made up of multiple layers, but I’ll leave detailed explanations to specialized books. The profession called “Software Engineer” is, as the name suggests, responsible for creating this software.

Below the software layer is the hardware layer. Unlike software, which is abstract, hardware is visible and tangible. Displays, speakers, keyboards, printers are all hardware. Like software, hardware is also composed of multiple layers. If you disassemble a PC, you’ll find components like the CPU, GPU, motherboard, memory, and hard disk inside the box. While there are minor differences between gaming consoles and smartphones, the general structure remains the same.

Let’s look even deeper into the computer mille-feuille. Since there are countless types of hardware in the world, it’s impossible to cover everything. Here, I’ll use the CPU as an example to briefly explain what’s inside. The CPU is made up of complex “logic circuits.” Logic circuits use the electricity flowing through them to represent the numbers 0 and 1, which are used for calculations. Any complex calculation performed inside a computer can ultimately be traced back to sequences of 0s and 1s. Numbers consisting of sequences of 0s and 1s are called “binary numbers.” Since binary requires many digits even to represent small numbers, humans use bundles of multiple 0s and 1s when handling them. This is the “hexadecimal” that I learned about from Action Replay in Chapter 2. Hexadecimal exists purely for human convenience; for CPUs, 0s and 1s are sufficient.

The logic circuits that make up a CPU are a type of “electronic circuit.” The electronic circuits inside a CPU are made by connecting parts called “semiconductors,” such as “transistors.” Substances that conduct electricity, like iron, are called conductors, while those that don’t, like rubber, are called insulators. Semiconductors are materials in between, which may or may not conduct electricity depending on conditions. For example, there’s a semiconductor called a “diode.” A diode has two “legs” and has the property of allowing electricity to flow in only one direction, either positive or negative. When you connect a small light bulb to a battery, it lights up regardless of whether you connect it in reverse, but a “light-emitting diode,” a type of diode, won’t light up if the battery is connected in reverse. A slightly more complex semiconductor with “three legs” is a transistor. In transistors, the amount of electricity3 flowing between two legs is controlled by the electricity flowing into the third leg.

Transistors are made by adding small amounts of impurities such as boron or phosphorus to crystals of silicon, element number 14 on the periodic table. As an aside, in 1955, Sony created the TR-554, Japan’s first portable radio using transistors, marking the beginning of Japan’s semiconductor industry. In the United States, during the 1960s, the semiconductor industry, including Intel, became active, and the entire region where these companies were located came to be known as “Silicon Valley.” Google’s headquarters, where I would later work, is located right in Silicon Valley.

My Last Part-Time Job

From the time I started delivering newspapers in sixth grade, I continued working part-time jobs, changing the type of work until my second year of university. During my university days, I worked as a dispatch employee selling Dyson vacuum cleaners, iPods, Macs, and other Apple products at Yamada Denki stores. However, as university studies became more interesting, I began to feel that I didn’t have enough time. And then one day, I suddenly realized that the time spent working part-time was wasteful. I realized that I was selling my precious time for just 1,200 yen per hour, and that even if I wanted to buy back that valuable time from when I was 20 years old after becoming a working adult, I couldn’t. After this realization, I immediately quit my part-time job. I started using the time I had been spending on part-time work to study, program, or do things I enjoyed. However, since I still needed money, I decided to take out a student loan. Thinking of it as borrowing money from my future self, or rather, my future self buying this time when I was 20, it seemed very cheap. I also regretted wasting time during my first year of university. Now at 31, I look back and think that decision was correct. If I could go back to being 20 years old for 1,200 yen an hour now, there couldn’t be a better deal. If any reader is a university student immersed in part-time work like I was then, I recommend using that time for anything you like or are passionate about.

Games Again

Although I hadn’t played many games since high school, I hadn’t completely lost interest. As a third-year university student, having acquired a certain level of computer science fundamentals, I was driven by an urge to create something with the knowledge I had gained. What I came up with was “building a Nintendo Entertainment System” aka “NES.” As its official name, “Family Computer,” indicates, the NES is genuinely a computer. On the internet, the NES had been thoroughly analyzed by enthusiasts, so it was easy to learn what kind of computer it was. Released in 1983, the NES was equipped with an 8-bit CPU manufactured by Ricoh. This CPU was a customized version of the 65025 CPU developed by MOS Technology in the United States in 1975. The 6502 is widely known as the CPU that was installed in Apple’s Apple II. I thought that now I could recreate this classic CPU myself. I decided to build my own NES. At that time, the Department of Information Engineering at the Faculty of Engineering, Shinshu University had a program called the “Edison Project.” This program allowed students to freely conduct research and earn credits by presenting their findings. I decided to develop a NES as part of the Edison Project.

Of course, a NES is made up of numerous parts, not just a CPU, including a chip called the PPU for outputting characters to the screen, controllers, cartridges, and more. As I still had limited hardware experience, rather than immediately trying to build one, I decided to first recreate the NES on a PC using my strong suit, software programming, to deepen my understanding. In other words, I decided to develop what is known as an “emulator6.” I proceeded with development using the “C++ language” that I had learned around that time. C++ was a programming language that I had studied in middle school but had given up on because it was too difficult. However, I had studied it again on my own after entering university and had mastered it by this time. I bought a second-hand NES and a large number of cartridges, and gradually advanced the development while reading through resources scattered across the internet. The operation of the 6502 was much more complex than the CPUs I had studied in class, but the operating principles were almost the same. It operates according to the basic principles of a CPU: fetch instructions from memory, decode them, execute them, and then write back the results. On the other hand, the PPU, the chip for image processing, had completely different operating principles. The CPU calculates the position and type of characters, and the PPU draws them as images and outputs them to the television screen. After repeated trial and error, I recreated all parts, including the PPU, in C++, and finally succeeded in running Mario on my PC using the software I had created. The joy I felt when Mario started running on the NES program I had made was incomparable. Among the students who attended the presentation of this project was Iwasaki-san, who would later provide the opportunity for me to join Google. Iwasaki-san was two years older than me and was a first-year graduate student at the time. He was better at programming than I was and gave me various observations and comments.

Handmade NES

As I entered my fourth year of university, I had to decide which research laboratory to join. After much deliberation, I decided to join Professor Wazaki’s laboratory, where Iwasaki-san was. The Wazaki Laboratory was conducting research called formal verification. However, I was in no position to do research. This was because I had only half-achieved my goal of “building my own NES.” I had managed to recreate the NES on a PC, but this was just the first step. Next, I wanted to actually create a NES as a physical machine in hardware.

Design schematic for the handmade NESDesign schematic for the handmade NES

Professor Wazaki was understanding of his students and supported what they wanted to do. He purchased the necessary parts and tools for building a NES and patiently taught me what I didn’t understand. Additionally, I had experience in my third year creating a CPU, the brain of a computer, from scratch using an FPGA (hardware that can create hardware) in another class, so I was prepared to build a NES. “Building a NES” is completely different in nature from “building a custom PC.” What is generally called a custom-built PC is assembled by buying existing PC parts such as a CPU, memory, and the motherboard that holds them. In other words, it would be more accurate to say “assemble” rather than “build.” On the other hand, building a NES doesn’t involve buying and assembling existing parts; you have to build the CPU itself. It’s similar to making dumpling wrappers from flour rather than buying pre-made wrappers and just filling them. After various twists and turns and three months of hard work, the ‘homemade NES’ was born.

The reason a PlayStation controller is plugged into what is supposed to be a NES is to save on the number of “pins,” or connectors, on the FPGA that I had borrowed from Professor Niimura. Since a NES cartridge has 60 pins, ingenuity was needed to connect it to the FPGA. One such ingenious solution was the PlayStation controller. Although they’re rarely seen nowadays, many people who have used old computers might remember something called a printer port. The printer port was a large connector, as the name suggests, used to connect printers, and the cable was as thick as a pinky finger. This was called a “parallel connection” and required many wires. As of 2017, most printers can be connected to a PC with a thin USB cable. USB uses a method called “serial connection,” which allows connection with fewer wires. The difference between a NES controller and a PlayStation controller is precisely the difference between parallel and serial connections. I used the PlayStation controller with its serial connection to save on the number of connector pins, or the number of connecting wires. The actual handmade NES from my university days and its back sideThe actual handmade NES from my university days and its back side

As you can see in the photo, this NES can be played by inserting cartridges. Just like with the real NES, when games don’t start properly, they start working if you blow on the cartridge with a “hoo-hoo,” and if you accidentally bump into it during gameplay, the screen gets distorted and the game becomes unplayable.

I couldn’t have even dreamed at that time, but later I would end up showing this to the late Nintendo President Iwata. I’ll talk about that later, but being able to build a NES from scratch by myself felt like I had achieved a certain result from what I had been pursuing all this time, and I was very happy.

PlayStation 3

This is not a story about building a PlayStation after the NES. In late 2008, as I approached the end of my fourth year of university, I purchased a PS3. The PS3, which had been on the market for several years, had decreased in price from its initial release, and a used one could be bought for around 30,000 yen. I also purchased Metal Gear Solid 4, which I had wanted for some time. The first Metal Gear Solid for PS3 was a masterpiece with first-class storytelling, gameplay, volume, graphics, and sound. However, beyond Metal Gear Solid 4, I had an additional motive for purchasing the PS3. That was the “Cell” processor inside the PS3. I had previously researched and presented on the mechanism of the Cell processor as an assignment for a Computer Architecture class. The Cell, jointly developed by IBM, Sony, Sony Computer Entertainment (now Sony Interactive Entertainment), and Toshiba7, was a completely different and innovative processor compared to previous CPUs. Also, since the publisher at that time recommended programming on the PS3, individuals could program on the PS3 as well. At that time, by coincidence, a company called Fixstars was holding a programming contest called “Hack The Cell” using the Cell processor of the PS3, so I decided to participate. “Hack The Cell” was a competition to see how much participants could speed up a Mersenne Twister program, which generates random numbers, on the Cell. In the early stages of the contest, participants reported their progress on an internet bulletin board. At first, there were reports of achieving 2x or 3x speed, but as time passed, figures like 10x and 20x began to emerge. Like Dragon Ball power levels, as the speed inflated, participants became suspicious of each other, and reports gradually decreased. As a result, I managed to speed it up about 60 times, but the winner achieved a 120-fold increase. Nevertheless, my code was praised for its simplicity, and I received a prize called the Fixstars Award along with a prize of 100,000 yen. I recovered the cost of my PS3.

Japanese Citizenship

In this year, my fourth year of university, I went through the naturalization process and became a Japanese citizen. Having lived in Japan for over 10 years, I made this decision thinking that I would probably never return to live in China. Scissors were taken to my Chinese passport, and from that time on, “Tatsuo Nomura” became my official name.

Previous Next

  1. As of May 2017, from Stanford University’s official website (https://registrar.stanford.edu/students/tuition-and-fees) 

  2. “The more I learn, the more I realize how much I don’t know”… Often attributed to Einstein, though the source is unclear 

  3. Electricity… More precisely, current 

  4. “MADE IN JAPAN” by Akio Morita 

  5. From the Computer History Museum’s official website (http://www.computerhistory.org/timeline/1975) 

  6. Emulator… A type of program that mimics a specific computer or mechanical device 

  7. From IBM’s press release (http://www-06.ibm.com/jp/press/20050208002.html)