I learned a lot this summer at Facebook. Here’s a list of things that I never really used before:
- Mac OS X. I managed the learning curve by staying mostly in the terminal and getting help from my friend Wei, an engineer at Apple
- iPhone: Admittedly there isn’t much to “Learn” but it was a valuable experience using so the device so much
- Vim: Brian Harvey (Berkeley professor) pushed Emacs really hard, but Vim has many more features at our disposal. I’m still not very good at it–I don’t use any advanced features–but I have become fairly productive in it. It’s useful for development over ssh/shell, but I miss Visual Studio’s IntelliSense or Eclipse’s context-sensitive auto-complete.
- Git: I’ve been using exclusively SVN before this summer. I must admit that I have had many blunders with Git this summer–some of which took a good part of a day to figure out and recover from–but I am able to do enough to do basic tasks like branch, deal with conflicts, check in commits, etc.
- C++: I’ve written a lot of C before, but mostly for small independent programs. I have never worked with C or C++ on such a large scale before–and I wrote several hundred lines of C++, tested them, and deployed them. I now have lots of practice with the standard library, managing pointers, dealing with dependencies, etc.
- PHP: I’ve been doing PHP since 7th grade, but I admit that I’ve learned a lot of PHP in the summer. Some advanced (for PHP) features like interfaces and inheritance I have used only to the basic degree. I have never had to ask myself–which method does this call actually invoke? This class or its parent’s?
- Javascript: I have become better at writing Javascript too, despite already having years of experience in it
- Thrift: I’ve only played with thrift before this summer through the Simon Says Facebook puzzle. I have learned so much more about it–how it ensures backward compatibility
- Tons of internal libraries, tools and technologies we have at Facebook. Some of the public ones include XHP. And there are tons of internal ones that I probably can’t mention, such as our dependency-management system, our own javascript library, tools that allow us to get javascript functionality without having to write javascript, our deployment system, and many more
- Many non-work things: I have become better at chess and bughouse. I have learned backgammon, go, chinese chess (sort of), coloretto, and many other things.
The list is bigger if I include the technologies, tools or libraries that I have used or modified during my summer. In light of all I’ve learned and experienced, I believe that this summer was very successful.