In May last year I passed the Fundamental Information Technology Engineers Examination.
The Fundamental Information Technology Engineers Examination, or FE for short. It’s the most rigorous and widely-taken IT exam that you’ve never heard of.
Go on, then. Why have I never heard of it?
Probably because it’s administered by a Japanese quasi-governmental organisation, in Japan, and it’s all in Japanese.
That makes sense. So I have no chance of passing it?
Well, you do if you speak Japanese. Or if you take the version that’s translated into English.
There’s a translated version? Why have I not heard about that either?
Because as of March 2017 it’s only available in India, Singapore, South Korea, China, Taiwan, the Philippines, Thailand, Vietnam, Myanmar, Malaysia, Mongolia, and Bangladesh.
Hey, that’s actually a lot of countries.
Yes, it’s a widely accepted qualification in Asia. It just hasn’t made it to the West yet. I guess IT exams have never caught on in Western countries. There are a bunch of vendor-specific certifications, but not much in the way of general ones, except for, you know, getting a computer science degree.
So you took the “fundamental” test? That doesn’t sound too hard.
I wish they had chosen a different word! It was actually one of the hardest exams I have ever taken, and that’s not just because it was in Japanese. Think of it as a test of all the knowledge that you need to be a productive software engineer. And I do mean all of it - it tests everything from logic circuits and hardware right through to project management and business strategies.
So it’s all breadth of knowledge and not much depth?
Well, that’s true for the morning exam. The test is split into two exams of 2 hours 30 minutes, one in the morning and one in the afternoon. The morning exam is designed to test the breadth of your knowledge, and the afternoon exam is designed to test whether you can apply that knowledge. All the questions in the morning exam are required (there are 80 of them), but in the afternoon exam you can choose the questions you answer, to a certain extent.
The first question, on security, is required. Then there are seven questions on various different topics, of which you choose four. After that there is a required question on an algorithm written in pseudocode. And finally, you choose one question about a program written in a real programming language, out of a choice of five. That makes for seven (multi-part) questions in all.
What programming languages can you choose from? Can I answer a question about Python?
No, sorry. They seem averse to scripting languages, for some reason.
Nope. In fact, the only normal languages available are Java (which I chose) and C.
That leaves three non-normal languages.
Well, there’s also COBOL, which is sort of normal. For 1970.
Is there anyone still actually writing COBOL?
They are for the FE. And it still runs your ATM.
OK, so what’s less normal than COBOL?
The Information-Technology Promotion Agency (or IPA), who administer the exam, wanted to have a question about assembly language. But there isn’t one assembly language that works across all common systems today (that’s why C was invented, after all). X86 assembly comes close, but it has different system calls for Windows and Linux. So the IPA decided to write their own.
They did. In Java.
You can’t be serious.
No, it’s called CSM, and it’s right there in the exam scope document (see annex 1). They even made their own virtual machine in Java, called Comet, so that people could run CSM code while they were learning it. But as silly as testing a made-up assembly language with zero real-life applications is, it’s not even the silliest choice.
OK then, what is the silliest choice?
Now you’re just pulling my leg.
No, seriously, there’s a question about programming in spreadsheets, using macros and dragging-and-dropping formulas and stuff. Apparently it’s a safe choice.
Safe if you don’t know any programming languages, you mean.
Touché. But I never tried any of the spreadsheet questions, so I couldn’t tell you how hard they are.
Speaking of difficulty, how hard is this exam, exactly?
Over the last eight years, the average pass rate for people taking the exam in Japan is only 26 percent. And that’s from an average of 78,000 applicants. That number goes down to 57,000 if you only consider the people who actually sat the exam, though. Presumably the other 21,000 started studying the week before and then just gave up after they tried to do a past paper. If you only consider people who actually sat the exam the average pass rate is 36 percent.
36 percent is still incredibly low.
My theory is that people apply for it because it will look good on their CV, but seriously underestimate how hard it is to pass. I myself was considering taking it in October 2015 without thinking it would be that hard. I’m glad I waited until April 2016.
I thought you said you passed it in May.
That’s when they published the results, which is the date that counts in Japan. The actual exam was in April, though.
So why do people underestimate the difficulty?
There’s just so much stuff to learn. Take a look at the syllabus. It’s 138 pages long.
Yikes. And that’s just describing what you have to study.
Exactly. The textbook I bought to study from was 650 pages long (and all in Japanese). I typed it all into Anki and studied it for over an hour every day for four months, and I didn’t finish until a few weeks before the exam. And it wasn’t even a complete textbook; I saw plenty of past questions that were about things that were only mentioned briefly in the textbook (and sometimes not mentioned at all).
You need to put some serious time into this, then.
That’s right. It was a good job I started early. The few weeks I had before the exam after having mastered the material were incredibly useful. I had been doing past questions already, but I had the time to do detailed preparation for the afternoon test - including learning Java and C.
You learned both Java and C just for this exam?
And assembly. Although I learned 32-bit x86 assembly from Paul Carter’s book, not any of this CSM nonsense. X86 assembly isn’t actually on the test, of course, but after learning about CPUs and memory from the textbook, I had to see for myself how real machine code worked.
I’m not an expert in any of these languages yet, by any means. There’s a big difference between learning enough Java to be able to answer test questions, and learning all the libraries necessary to write an Android app, for example. Java was pretty easy to pick up, though, as I had learned most of the concepts in it through other programming languages already.
What part of the exam did you find the most difficult?
The fact that it was all in Japanese, definitely. In addition to the normal problems caused by Japanese being generally difficult to read, there were a lot of technical terms that cropped up. Some of these I knew in English but not in Japanese, but a lot of them were new to me in both languages. I made a point of studying the new vocabulary as part of my regular Japanese study, in addition to studying the material itself.
Also, in the exam itself there is a lot of text to read and a limited amount of time to read it in, so you have to be a fast reader, particularly in the afternoon exam. You can’t just skim-read any of the questions, either—you have to be precise. Reading the questions quickly and accurately was probably the hardest part, although it gets easier if you know the material well.
As for the material, the business and project management stuff was new to me, so that was probably the hardest to learn. A lot of the programming concepts I knew already, so those parts were easier. The object-oriented programming questions I found particularly easy, as I had learned OOP for programming in Lua a couple of years previously, and I had been using it in most of my programs.
Was there anything you found useful?
Learning about binary adders was an “aha” moment for me. That really brought home how the insides of a computer work. Before, I thought of the insides of a computer as a black box that somehow did magic with zeroes and ones, but now I feel like I could design a very basic computer circuitboard myself if I really wanted to. Learning how kernels do task scheduling and virtual memory management was also enlightening, and learning SQL has been very useful. I knew a little SQL before, but now I have a much better understanding. There is much more, but those are the things that I can think of off the top of my head.
Considering that hardly anyone has heard of the FE, was it all worth the effort?
While it may be true that hardly anyone has heard of it in the West, that’s certainly not the case in Japan. It is a national examination, meaning one which is run by the government (well, quasi-governmental agency), and which is recognised across the whole country. National exams are the most prestigious exams in Japan, and carry more clout than vendor qualifications. Businesses often advertise how many of their employees have passed the FE (and give them bonuses), and it’s seen as an important stepping-stone in the career of software engineers in Japan. So I think it should come in handy.
Now that you’ve passed, what’s next?
Finding a programming job would be a good start. But after that, there’s a whole bunch of other exams run by the IPA that I could take. The next one up is the Applied Information Technology Engineer Examination, which is like the FE but goes into more detail in every area. After that, there are the specialist exams which go into a single area in depth. There are exams for IT strategy, systems architecture, project management, networking, databases, embedded systems, IT services, and systems auditing. And they recently introduced a test for security specialists. The security test sounds interesting, but who knows where the future will take me?