“Is this OOO?"
“This year, we would like to hold a Master the Mainframe World Championship."
The beginning of this story was like a dream — just as I came up with the idea to finish my reflection on the 2009 Master the Mainframe contest, I got a call from IBM Taiwan. They asked me whether I would like to join the first-ever Master the Mainframe World Championship.
“We will invite students around the world who have won Mainframe contests in the past to join this IBM Master the Mainframe World Championship. Participant must still be a student and be willing to complete some introductory challenges remotely and to go to New York City for the final rounds. This is a great opportunity to meet talented people and all expenses will be paid by IBM. Are you willing to participate?"
It had been so many years since my last participation in the 2009 IBM Mainframe contest, so I was rather surprised by the call. Although I was not that keen on travelling, I still felt it would be a good thing to go to see the US. This could make me braver. The opportunity to demonstrate and present my work before everyone would also be a good way to improve myself.
The competition had three stages; and in addition to technical challenges, we had to write three reports and to demonstrate our work in person. The competition started from 3/10 and participant could complete different tasks at his own pace. But we did have specific deadlines for the reports. Preliminary rounds for demonstration were held in the US, and 6 finalists were selected. The final rounds were held on 4/7. All challenge documents can be found on the website.
The technical challenges didn’t take long to complete, so it went pretty smoothly at the beginning of the competition. However, there were some ambiguous instructions. Since I always preferred it to be precise, I had many email conversations with IBM before I finally solved some problems. In this process, I figured out a logical error in the code of the tasks, so IBM changed the instructions to ask participants to fix it.
Meanwhile, I got a lot of support from IBM Taiwan, and we also had several oversea teleconferences, where we could ask technical questions and listen to lectures about the business trends that could help us write the analysis.
When I finally started the implementation of the bank application, I heard that someone asked whether it’s okay to use PHP instead of Liberty for the development and was given the permission. Since I was unfamiliar with Liberty development using Java, I also decided to use Django for the backend application. However, the DB2 driver given only had JDBC support and cannot be used with Django. So I searched for a while for Python drivers, but I had never succeeded in making it work. Finally I realized that a license file was needed to use the driver, so I sent an email to IBM, and they told me they would try to figure out the solution, but Liberty was still recommended.
But I didn’t want to give up. I spent more time searching, and I found that I could use Jython to execute an old version of Django. In this way, I could use JDBC. So I finally started to develop my web application. After some time, IBM released a trial license file for us to use, but the version did not match the software package on the website, so I spent some time to find the correct package. However, even if I solved the license problem, I still got permission problems when I connected to the DB2, and only after I contacted IBM for this did I make it work. So I finally could use the latest Django with Python. I think this might be the biggest challenge that I solved during this competition.
During the development of the application, I learned a lot about jQuery and Bootstrap. It had really been a long time since I was involved in front-end development in the past, and I had never had opportunity to learn these two libraries. I was really surprised by their capability to construct a beautiful interface in such a short time.
Since I only had 6~8 minutes for demonstration, I couldn’t demonstrate any advanced, complicated features even if I wanted to. So what kind of extra features should I make? I wanted to have a creative and easy-to-understand feature, so I finally decided to create a mobile app that could disable and enable a debit card in real-time. With this app, one could enable the card before an online purchase, and disable it immediately afterwards so nobody could make an illegal payment with her information.
Originally the instructions were that the final rounds were mainly about demonstration, and there was no need to do a presentation. But after a rehearsal, I realized that I was unable to state my ideas clearly during the demonstration. If I wanted to make a good impression, I must first do a presentation before the demonstration.
After I finished my slides I soon started my journey to New York. I first arrived in Tokyo, Japan for a transfer, and finally got to New York in the afternoon. After I arrived in Waldorf Astoria, I only had some time to put my luggage. I then had dinner with other participants, and on the early morning next day, we must start our preliminary rounds.
I was a little excited and nervous before the presentation and kept checking my mobile phone and presenter. But after I got on stage, everything seemed to work smoothly and the time passed so fast. The judges seemed to be excited about the mobile app, and I got good feedback from them.
We then visited the zEnterprise plant, had dinner, and went to Times Square. I really felt that the amount of food provided by the restaurants there was so much that I often accidentally ordered too much.
The finalists were announced in the next day, and I was really happy to be selected.
After some preparation and interviews, the final rounds finally began. I had to stay in one room, and 6 judges would come to different rooms one at a time, so I had to give 6 consecutive presentations. I was really tired after 6 rounds. Other students would go with the judges, so they would also be able to see the work of 6 finalists. The judging style of different judges were very different. Some judges were very strict, and some were very encouraging.
I still remember a judge asked an unexpected question: “How do you think programming can make the world a better place?"
I also gave an unexpected response: “Actually programming can solve many problems. For example, we can even make the government more efficient and more transparent. We can make every modification of the laws easily understandable (using something like a version control system), or visualize budgets of the government." (I don’t really remember exactly what I said, but right, I was paying a tribute to organizations such as Code for America, Code for Tomorrow, and g0v.)
Maybe it’s because of some news reports in Taiwan, I suddenly received a lot of congratulations on the Facebook. It really made me feel a little overloaded, and it took me several days to reply. The influence of the media could be really big, and I also felt very impressed after I read the reports. Haha, it actually seemed a bit unnatural. When I saw the word “genius", I suddenly recalled the conversation when I was being interviewed at IBM Taiwan before the competition:
An experienced member at IBM said that he felt that one must have the gift to be in the software industry. Not everyone would like to work so hard to study a problem. I said I didn’t really agree with this. I thought hard work and the time spent was more important. Considering the fact that I spent a lot of time on the computer since I was in the elementary school, it should not be surprising even if I did well.
Afterwards, someone said: “I think he didn’t mean you have to be gifted. What he meant was that personality was important." Maybe. But I couldn’t help but start to think that this kind of thinking implied that — “Personality itself is a natural talent. Or to be precise, the capability to work hard is innate." So it could also be interpreted negatively — If you didn’t have the talent to work hard, you couldn’t even try to work hard. To be honest, I didn’t really want to accept this kind of world.
It seemed to be again a deadlock between nature and nurture. Wasn’t there already a answer for this question? The two affected each other, and no single factor was unimportant. Every known and unknown factor worked hand in hand, it’s just that we humans tended to attribute to some simple reasons — just like what I am going to do next:
The Perfect Factors
When I was talking with students from other countries, I mentioned that I had been reading Thinking, Fast and Slow recently. I was unable to explain clearly what the book said, but I was surprised to meet someone who also had read this book. A passage in the book went like this:
A recurrent theme of this book is that luck plays a large role in every story of success; it is almost always easy to identify a small change in the story that would have turned a remarkable achievement into a mediocre outcome. Our story was no exception.
I felt, my story was also the same.
It took too many coincidences and factors to win this prize. Even if one factor had been missing, the result might not have been the same. I felt really lucky and thankful for this.
Everything started when I was a child. I was lucky enough to learn some web design. Because no one in my family was in the computer industry, I spent a lot of time learning by my own. Therefore, I acquired the ability to analyse a system by trial and error and became familiar with searching for solutions. That’s why I was able to solve the difficulties in the competition.
In the junior high school, I was bored by the English grammar courses, so I decided to find a new way to learn English and started to read a lot of books. English gradually became my interest. The long hard work enabled me to read technical documents efficiently and allowed me to write good reports. Moreover, the practical experience I got from Wenzao English Debate Workshops and National Taiwan University English Debate Society sharpened my communication skills. In the 2009 competition, I already felt that English was a great advantage to win. This time I felt this was even more true.
Even if my English was good, it’s still impossible for me to be better than native speakers. But there was another factor which might be even more decisive: the presentation skill itself. I got interested in presentation when I learned the Takahashi method in senior high school. Afterwards, I prepared every presentation thoroughly to sharpen my skills. In the last semester, I happened to take the course Speaking in the Disciplines, and learned some voice techniques. And I got a presenter as the prize of the final presentation on that course. This helped me a lot in the competition.
However, technical skills and presentation alone were far from enough. To write the analysis documents, I still needed background knowledge. I happened to take the course Introduction to Cloud Computing and Big Data last semester, and learned some ideas to help me write the reports.
Even the smart phone that played an important role in the competition was just bought for several days. I had been using my old traditional phone for more than 4 years, but it suddenly broke. That’s why I decided to buy a new one. Without the phone, even if I wanted to make a mobile app, I might not be able to borrow a phone to realize it.
And finally, about the idea to enable and disable the debit card in real-time. This idea actually originated from a feature of the Chunghwa Post debit card. It allowed us to use an integrated circuit card to sign in the webATM, and from the webATM, we could disable online transactions and foreign payments for the card. I really loved this feature, and I always disabled it until I really wanted to make a purchase.
In early January, I came across a post on the Bank_Service board on ptt.cc, and the author asked whether other banks had the same feature, but nobody seemed to know one. So I learned two things: (1) Other people also liked this feature. (2) Almost no banks had this feature.
But using webATM and an integrated circuit card was just too complicated. It didn’t make sense if we want to disable and enable the card frequently. Why not use a mobile app? So this became my final idea.
This feature could potentially save the bank a lot of money. Moreover, it could give a sense of security to people like us, and made us more willing to accept debit cards.
Just like this. Every factor worked together so perfectly. Even if just one had been different a little bit, the result might not have been the same. This itself was incredible.