Monday, May 30, 2011

Memorable NUS Life Statistics

That nobody cares about. :(

Overall Grades
- 08/09 Sem1 08/09 Sem2 09/10 Sem1 09/10 Sem2 10/11 Sem1 10/11 Sem2
Semester Grade Point Average (GPA) 3.95 4.5 4.17 4.09 4.3 4.25*
Cumulative Average Point (CAP) 3.95 4.23 4.21 4.18 4.2 4.21*
* For the last semester, GPA was originally 3.9 due to a C+, where my CAP plunged to 4.15. However, I used the S/U option and removed the offending grade.

My worst performing semesters were actually my first and final semester. First semester was due to my trying to adjust to NUS standards and the recent final semester was due to divided attention when I was finding a job (And failed to) at the same time.

Grade Letter Statistics
- A/A+ A- B+ B B- C+ C D+ D F Unknown
Number of Modules 10 3 8 6 3 1 0 0 0 0 1
MCs weightage 42 12 32 24 11 4 0 0 0 0 2
  • Fortunately, the only C+ grade I got is for a module which I can S/U, and that I did.
    • It is also the final semester where I got my first and only C+.
  • The only A+ I got in NUS is that of CS2105 - Introduction to Computer Networks, on 09/10 Sem1.
  • The so-called "unknown" grade is that of  CS1280 - Java to C++, which is CS/CU graded, that is, pass or fail and there is no actual grade letter associated.
    • Might not be too important, but I passed anyway.
  • If all but one of my A grades are taken away from the table, it would curiously resemble a bell-shaped curve of sorts eh? :)

Modules with the good grades (From A+ to A-)
1) CS2105 - Introduction to Computer Networks (A+)
2) CS3245 - Information Retrieval (A)
3) CS4348 - Interactive Systems Project
4) CS3103 - Computer Networks and Protocols
5) CS3103L - Computer Networks Laboratory
6) NM3216 - Game Design
7) CS3240 - Human-Computer Interaction
8) CS1231 - Discrete Structures
9) CS2103 - Software Engineering
10) MA1301 - Introductory Mathematics
11) CS4243 - Computer Vision and Pattern Recognition (A-)
12) CS3248 - Design of Interactive Media
13) MA1505 - Mathematics I
From the limited statistical analysis of the good grades, majority of the good grades are that of CS modules (10 out of 13), which indeed I placed a lot of effort into. The key to scoring in most of these modules are memory work, consistent practice, and/or learning how to trace the algorithms or do the math. Not really true talent requirement. Also, I do not really deserve the 'A' grade for the non-examinable CS4348 and NM3216. I was probably given 'A' for good effort for CS4348, but our project was poorly managed and the idea was badly executed in reality. As for NM3216, Arts modules' grading are probably skewed to the better side and most of the work was done by another student which I tried to claim partial credit for.

Modules with "normal" grades (B+ to B)
1) CS5341 - Computational Photography (B+)
2) CS2106 - Introduction to Operating Systems
3) GEK1531 - Introduction to Cybercrime
4) CS4211 - Formal Methods for Software Engineering
5) IS2104 - Software Team Dynamics
6) MA1101R - Linear Algebra
7) CS4249 - Design of Advanced User Interfaces
8) ST2334 - Probability and Statistics
9) CS4247 - Graphics Rendering (B)
10) GEM2900 - Understanding Probability and Statistics Thinking
11) CS3243 - Foundations of Artificial Intelligence
12) LSM1301 - General Biology
13) NM2101 - Theories of Communication and New Media
14) CS3241 - Computer Graphics
There are about as many "normal" grades as that of the "good" grades. From my perception, 'B+' grade is said to be that of good effort with adequate understanding while 'B' simply means adequate understanding, but otherwise plain mediocre. Many of the modules here revealed what I cannot excel in, despite my efforts: Critical thinking (CS2106, MA1101R), Problem Solving/Engineering (CS4249, ST2334), "Computer Science" minded (CS5341, CS4247, CS3243, CS3241), and Communication skills (CS4249, NM2101). For instance, I can trace a familiar algorithm effectively after practice but I usually cannot write one myself nor understand an unfamiliar one on the spot. Just the same as my dismal project performance for CS4348, at many times I am unable to come up with a good solution to solve a problem, whether technical or not.

Modules with below-average grades (B- onwards)
1) CS4248 - Natural Language Processing (B-)
2) CS2100 - Computer Organization
3) CS1105 - Computing and Society
4) SSB1204 - Labour Law In Singapore (C+)
Glaring weaknesses includes my same old communication inadequacies as in SSB1204, weak independence from a teacher and slow adapting to new concepts, like CS2100 and CS4248. Oh yeah, to think I wanted to start off my career in Computer Engineering which also happens to be my weak (If not non-existent) area of understanding.

Top 3 Easiest Computer Science Modules
1) CS1231
2) CS2103
3) CS3240
CS1231 - Discrete Structures taught by the Mathematics department are surprisingly easy, and I dare say ridiculous back then, and there's no programming assignment. The programming project for CS2103 - Software Engineering isn't that difficult back then because we did not use any tools other than Java and an IDE, and there's no algorithm to adopt. The project for CS3240 - Human-Computer Interaction was almost as easy as CS2103's. The theory concepts are actually non-technical and are about product usability and best practices, in other words, there shouldn't be any algorithms to decipher.

Top 3 Killer Computer Science Modules
1) CS2100
2) CS4247
3) CS4248
CS2100 - Computer Organization stood out only because I did not understand what the lecturer was talking about, hence I flunked ALL the theory and struggled with the practical labs as well. I could not understand the physics-related part for CS4247 - Graphics Rendering, I did not fare well for the midterm, and the programming assignments were in C/C++, which at that time I still struggled with the syntax. Toughest highlights of CS4248 - Natural Language Processing were theory questions where I need to write pseudo-code for algorithms and draw finite state machines for tricky situations on the spot. There are close contenders to the Top 3 like CS3241, CS3243, and more, but oh well, listing the 3 toughest CS modules is probably not as straightforward as listing the 3 easiest ;)

Ranking of Mathematics modules (Easiest to Most difficult)
1) GEM2900
2) MA1301
3) ST2334
4) MA1505
5) MA1101R
Despite my disappointing grade, the concepts for GEM2900 are relatively easy, which is expected since its a General Education module. MA1301 is ostensibly a year's worth of the 'A' Levels Syllabus squeezed into 13 weeks of lecture. And it is still the easiest in terms of scoring potential as compared to others... ST2334 is also easy but as a result it is very competitive. Although MA1505 concepts are more difficult, MA1101R on overall is tougher due the tests and exams that require one to be good at proving and not just blind computation.

Modules where I scored below 50% for a theory test
1) CS2100
2) CS3241
3) CS4247
4) CS4248
5) GEK1531
For CS2100's case, I most probably flunked the final exam as well. There are 2-3 tests for GEK1531, I scored below 50% for one of them. But somehow I managed to get a final grade of B+ for GEK1531. Shrug.

Very First NUS Exam: CS3241
Very Last NUS Exam: SSB1204
CS3241 - Computer Graphics, the first step to a wrong major. SSB1204 - Labour Law In Singapore, the final step before I enter the workforce. How fitting eh?

Crazy Exams squeeze: CS2100 and MA1301 on the same day
CS2100 was at 9 AM and MA1301 was at 1 PM. Luckily, I anticipated that I was pretty much screwed for CS2100 anyway, and focused on MA1301 instead.

Laughingly undoable exam: CS2100
Laughingly easy exam: CS1231
To this day I am puzzled as to why the CS1231 lecturer actually used tutorial questions for the Final Exam.

5-exam semester: 09/10 Semester 2
The exams are MA1101R, CS3103, IS2104, CS4247, and GEM2900

3-exam semester: 10/11 Semester 1 and 10/11 Semester 2
Exams for 10/11 Semester 1 are CS4248, CS4211, and CS4243.
Exams for 10/11 Semester 2 are CS3245, CS2106, and SSB1204.

Total number of NUS Modules: 32
Total number of NUS Exams: 23
I have taken 6 modules on 08/09 Semester 1, and 09/10 for both semesters.

tl;dr... Summary of overall results?
Also useful section here if you happen to tl;dr. What can I say? My results are good but on closer examination, the individual grades are rather unsatisfying. A tiny pool of skills with shallow understanding (Poor breadth and depth respectively), adding on to weaknesses like not being able to think on my own feet and lack of achievements in problem-solving, makes me truly one of those University students who are good at studying and almost nothing else.

Year 3 Semester 2 (AY 2010/11)

The final results have arrived... My graduation and end of school life is almost official.

CS5341 - Computational Photography
Credits: 4
Grade: B+
Comment: Indeed in this module we were exposed to MANY modern computer vision ideas as well as many algorithms to realize some of them. While the module topics are indeed difficult, it was non-examinable for my batch (Perhaps because Professor Michael Brown teaches) and therefore for the assignments you just need to focus on understanding the required topics. One thing I learn from NUS (Too late, too late) by now is that while passion helps you to get good grades, having good grades by itself is not indicative of passion.

CS3245 - Information Retrieval
Credits: 4
Grade: A
Comment: We were asked to incrementally build a relatively simple search engine using Python (Thank goodness its not in C). The theory was overkill - Barely edging out CS4243 - Computer Vision and Pattern Recognition! However exams was more or less manageable, assuming you understand the concepts. Amateur programmers may attempt this module to gain appreciation of the complexities in typical software systems before they decide whether the life of a Software Engineer is suitable for them.

CS2106 - Introduction to Operating Systems
Credits: 4
Grade: B+
Comment: This is the most irritating module in this semester, hands down. Guaranteed, the things I have to do are arguably optional: Tutorials, which some students wouldn't bother to attempt, and the 20+ lab assignments which you do not need to complete all to get the maximum lab marks. Still I attempted them almost everything because it is good for learning. The theory part are relatively easy to understand (After previously being exposed to crazier algorithms), but the tests and exams are far from easy. My lecturer was Razvan Voicu.

SSB1204 - Labour Law In Singapore
Credits: 4
Grade: C+
Comment: This module is surprisingly useful with regards to employment laws in Singapore - Because after all, I am going to transition from school to the actual workforce. You need to participate to get a good grade for CA (I did not). The final exam will have you writing essay questions. The final grade I got is probably justified since I did not pay as much attention to this as I did to my technical modules. S/U-ed.

GEK1531 - Introduction to Cybercrime
Credits: 4
Grade: B+
Comment: I did not pay quality attention to this module (Did not put in my strongest effort when studying or writing the report). Strangely this module is taught by the Department of Mathematics, which explains why I can treat it as my Breadth module. There are some Cryptography (Basic Discrete Maths) concepts which you need to be familiar with. I did plan to S/U it but my CAP still stays at 4.21, so there's no point doing that.

Overall Results:
MCs taken: 141 + 20 = 161
CAP: 4.21

Notes/Trivia:
  • First, only, and the last semester that I took a module that is not my core requirement AND not School of Computing module AND not a Science module - SSB1204.
  • First, only, and the last semester I took a Level 5000 module and got B+ for it.
  • First, only, and the last semester I scored a solid 'A' letter grade for a crazy algorithm module (CS3245)
  • First, only, and the last semester that I got a C+ for a module.
  • First, only, and the last semester that I used the S/U option.
  • I should have S/U-ed my B grades during the earlier semesters.
  • The only semester that I get only 4 MCs worth of Grade A.
  • Worst performing semester if not factoring in the S/U.
  • More boring school statistics to come soon.
Final remarks and advice for NUS Computing students if they bother to read:
  • I lead a sad life.
    • Majority of my semester time at NUS is spent on studies with my remaining time doodling/slacking
    • My peers probably enjoyed their NUS days, owing to their high intelligence therefore studies is easy for them, or that they simply can't be bothered
  • I know what I want to be in the near future (Software Engineer)
    • But it is still too vague a title and my area of studies are unfocused
    • You should not only explore career options through internships during school holidays (Even during your early school years), but also coming back to school to focus on the modules of areas that you really like.
I already started thinking of my career options way back in December 2010 and some of more relaxed peers did not do so. It is somewhat disheartening that they already got a job before exams started while for all my good grades, I still get no job offers even after my exam results are released.

Whatever.

Wednesday, May 18, 2011

Job search records

Guess what? Seems that the title of "Software Engineer" in my head throughout my 3 years at NUS was a bit too vague for the interviewers. It appears that I do not know what I want, which is why I still do not get what I want.

The unfamiliar environment
  • 1st 3 interviews were miserable failures
    • 1st full time job interview was DSO
    • 2nd was DSTA, and I stammered my way through (How sad I sounded eh?)
    • 3rd was OCBC, a walk-in interview
  • Began to understand the idea of selling yourself and also have a slightly more detailed idea of what I want to accomplish as a Software Engineer.
  • From the OCBC walk-in interview for Technology Associate, it appears that OCBC prefers business-oriented people which unfortunately I am not. I want to be appreciated as one who can use technical skills to contribute directly to the core business of the company. UPDATE 19th May 2011: OCBC finally called for a second interview (The first interview was more of a briefing) after more than a month of silence, but I decided to decline the interview as the position does not match my goals.
Grades does not matter in the end
  • Did my best to sell myself during CSIT interview on 20th April
  • Still not qualified - CSIT sent me a rejection e-mail today!
    • School grades was supposed to be a stepping stone for the start of my career.
    • I missed the 2nd stepping stone: Passion and the knowledge that comes from it.
  • Gives me the final wake-up to the reality that despite my good grades and all my attempts at learning, I am doomed to be equals with the unremarkable and underwhelming people out there at the workforce, and hence that makes me a greater loser than them (See Blog Title).
  • Oh well, at least for now. *Shrugs*
Assuring myself through aptitude tests
  • Or not.
  • CSIT technical test for System Analyst...
    • 1st part: Writing an essay
    • Essay-writing wasn't that difficult but I guess I might be a little vague in many of my arguments.
    • 2nd part: Technical test, all MCQs with some True/False questions.
    • Again, the basic programming questions wasn't that difficult but I do not know how to answer many of the questions that are directly testing about the specific job title I applied for
    • So much for passion eh?
  • Then from IBM...
    • 1st aptitude test was Maths (A timer for each question, I was too slow)
    • 2nd aptitude test was on programming language syntax for Java and C++
    • Apparently testing programming language syntax is the ultimate test of one's familiarity with programming.
    • Guess what? I am certainly not expecting any call from IBM after that aptitude test.
Now I even doubt of my candidacy at ST Electronics (I applied for a job which I have nearly zero experience in).

Current Job Search Status at the time of this writing

Companies applied to:
  1. DSO
  2. IHIS
  3. DSTA
  4. ST Electronics
  5. ASM
  6. CSIT
  7. OCBC
  8. NUS Computer Centre
  9. IBM
1st Interview attended: DSO, DSTA, OCBC, ST Electronics, CSIT
2nd Interview attended: ST Electronics
Technical/Aptitude tests taken: CSIT, IBM
Job offers: -

I am only waiting for a reply from ST Electronics, if any.

Whatever.

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.