Final year of uni (Part II) recap

2012-2013 was my final academic year at university, and as such, I wanted to do the best that I could. I had learned from my mistakes from previous years, and here’s a summary.

The dissertation, a.k.a. the Part II project

This last year involved doing an individual project (usually a piece of software) with a write-up in form of a dissertation. At the time when I was selecting the topic, I was working with JavaScript in my internship, a language I started to really like. After some searching on Google Scholar, I found Jacob’s Ph.D. dissertation. He worked on designing a syntax and semantics to combine two different languages, ML and Scheme. This idea sounded interesting, and I had some experience with ML from previous courses at university. This sounded promising.

I then found that the F# authority Tomáš Petříček was a Ph.D. student at Cambridge and had some project proposals. It turns out that he had experience with JavaScript, too. So away I went and contacted him to see if he was interested in my idea: implement Jacob’s ideas for F# and JavaScript.

After a few discussions and some panicking emails from my part, we made the project idea clear. I would use Google V8 JavaScript engine to form the bridge between JavaScript and F# via PInvoke. I spent many hours coming up with ideas, disheartened because there were some problems that seemed impossible to solve. Believe it or not, hard work pays off. I managed to solve the problems (with Tomáš’ help of course), and produced a working DLL that allows you to write code like the following:

F# — Sample interoperability between F# and JavaScript — We are embedding the F# function “List.append” into JavaScript
> List.append;;
val it : (a list -> a list -> a list) = <fun:clo@21>
> let jappend = embed_poly_fun <@List.append@>;;
val jappend : JSValue
> register_values ["jappend", jappend];; valit:unit=()
JavaScript — Sample interoperability between F# and JavaScript — We are using the embedded function in JavaScript
> jappend ([213, 42]) ([271, 1492])
> jappend (["hello", "world"]) (["how", "are", "you?"])

It seems that Apple had a similar project with Objective-C and JavaScript. There are others in the wild, but that’s up to you to find if you are curious.

Edit: more detailed explanation in this blog post.


At Cambridge, there is only one set of exams per year, which is taken in May-June. For us in our final year at the Computer Lab, we had 3 exams with questions from several different courses. This accounted for ¾ of our results, the remaining quarter being the evaluation of our dissertation. I’m not a fan of this grading system “all or nothing”, but one had to follow the rules.

I think I spent at least 2 days deciding which courses to prepare for the exams, and it paid off. When the goal at the end of the academic year is to obtain good results (and not necessarily focus on learning interesting topics), the best strategy is to go for the courses that:

  1. Have a comprehensible set of lecture notes, and/or an associated book which you can use in case the lecturer’s explanation is not clear.

  2. Get “unsurprising” questions in the exams. Some lecturers like to test students on topics that are not covered in lectures, so I would avoid those.

  3. Can be “practiced”. A course like Hoare logic can be practiced by doing many proofs, whereas Principles of Communications cannot.

I was very pleased with my final results, because I managed to play the game.

Next year plans

Of course, my time at university was ending, so I had to decide what I wanted to do next. I interviewed with several companies for software developer positions, and in the end I accepted an offer from Microsoft to work in their Redmond campus. However, after the visa mess that happened this year for H1Bs, I wasn’t able to secure one.

U.S. Citizenship and Immigration Services (USCIS) reached the statutory H-1B cap of 65,000 for fiscal year (FY) 2014 within the first week of the filing period, which ended on April 5, 2013.

Fortunately, Microsoft has offices all around the world, so I was told they would “relocate” my offer. It looked like I was going to be able to start working this year after all, and so it happened that I am now employed in the Dublin office (“European Development Center”).

And here I am, I moved to Dublin just over a week ago and I finished my first week working at Microsoft. It has been tough, there are many new things to learn, but I am up for the challenge.

Dogs are cool.