Tuesday, May 17, 2011

Work Experience I had while at NUS

Some students are simply slackers - They just want to enjoy during their holidays. Some students are forced to work during holidays because they need the money for school fees. Well, I am neither one of these two. I worked of my own accord not because of the school fees but because I want to learn more.

Although it is really unfortunate that my experience is very limited and my areas of learning lacked focus, I'll still do a short description.

Google Summer of Code 2009

The 2nd Semester of my first academic year was my highest point in my life at NUS, relatively speaking. I will not list any names here. I was somehow accepted into the Google Summer of Code, where back then my remuneration for successful efforts was US$4500 for three months of development (During my holidays). I was really exposed to the complications of actual software development is, that is, a bit of it, now from how I perceive it.

Technical
The Open Source Organization focuses on Image Processing in Java (Java's the language I am most familiar with), but my project topic was to help them to improve one of their components that was not related to Image Processing (Sorry have to be a little vague here). Technically-wise, of course I learned a lot as an amateur: Learning how to use Git to do revision control of my work so that I can refer back to my old code easily if I need to. I learned about the existence of dependencies between the different components in the software package, and that I have to capture their information in XML properly so that my own software component can keep track of them. I learned to perform hashing on a single plugin component and then do hash-checking after sending it across the internet to maintain integrity of the download. There's more...

Non-technical
But what is equally valuable, or perhaps even more so, is the soft skills I gained. Firstly, having a first-hand appreciation of real world software development: While much of the development of my involved software component is by myself, at times I have to merge my codes with the other developers' occasional contributions to it. I have to either accept their input or argue my case to them on why it should not be done that way, and vice versa. The project also emphasizes on reliability: I cannot simply assume that the download of a particular software plugin will not be corrupted, and I need technical measures to ensure the download is reliable. Then secondly, I learned the importance of refactoring. My fellow developers often insisted that I make my code more concise so that it is more readable to them. This is because actual software development still continues even after I left the project or when I am not available, and they need to understand what I write so they can continue to maintain it in the event of bugs or future development.

Conclusion
Despite the simplicity of the project compared to the other students' Summer of Code projects, it remains my most successful recent major project as of this writing and the one I am most proud of.


Internship at Codebox Pte Ltd 2010
My second attempt at Google Summer of Code 2010 was an abject failure. I completely failed the simple yet unfamiliar technical test that the Open Source Organization set up - They probably did it to filter the number of candidates. This is one of my show-stopping weaknesses (Slowness in adapting to the unfamiliar) that killed me there, so I decided to go for a difference experience instead - Real-life working. Although I had an internship back then in Polytechnic, it wasn't satisfying enough, we don't really get to learn much of how real-life work is like.

What I learnt
My Boss decided that it is probably be better for me as an intern to focus on developing my soft skills, because as a Software Engineer I am required to pick up the technical skills by myself anyway. As a software engineering intern I take part in testing out the company's web service and then suggesting ideas on how it can be improved. I learned that well, Software Engineering in the purest sense is simply Engineering - Improvement of a process. In the real life work I am not supposed to follow instructions blindly and neither am I given clear instructions on what should be done. I have to figure out for myself that for the role I am given, what can I do best so that I can help to improve the quality of work. So I have to continually question myself: Right now I am finding out bugs for the developer, but is this helping to make the product better? Can I make better suggestions? Given that this is working in a real office environment, I also learn about the general do's and don'ts - Frequency of interrupting your fellow developer while he is busy, communicating effectively to colleagues, giving colleagues/superiors prior notice to events, and the like. Besides the soft skills, I get some introductory fun with Ranorex Automated testing tool, and learnt how to build patch panels for the company's networks at the wire level!

Realization of crippling weaknesses
My weaknesses start breaking me down during my internship. Firstly, is of course how weak my communication skills are, although from that point onwards I've been trying to improve them. Secondly, is my poor adaptability, shallow understanding, and low creativity. I have a strong start during the internship, although I cooled down somewhat later on. Although I did picked myself up towards the end, it gradually brought me to realization that I am simply bad at critical thinking and suggestions, a trait that also manifests itself during all modules that Professor Zhao Shengdong taught (He emphasizes on idea novelty and creativity), especially the 8 MCs robotic project. Besides that I am a bit slow at learning and understanding overall, although I *might* have a quick start. This is probably why I spend more time than others in my studies.

Conclusion
Even though Codebox focuses on Web Services which is not really where I want to specialize in (As of time of this writing), I will always remember it for not just giving me a glimpse, however short it may be, into real-life engineering, but also being one that sparks me off in thinking about my future career options, however late it may be.

No comments:

Post a Comment