Okay so even though nearly every post was lost from my last blog incarnation, unless I can miraculously recover them, I am going to write this from the perspective of picking up where I left off. My last post was on July 30, 2012 in which I discussed the fact that we moved down from San Francisco to Redwood City. Interestingly I managed to recover that post and will put it up here pretty soon when I get a chance.
So we moved to the suburbs, although in Silicon Valley because of where many of the companies are, there is a bit of an inverted city/suburb dynamic so the suburbs here are a bit different than in some other places, while at the same time they are really very similar. For one, many people live in the city and commute out for work, so often people live in the suburbs to avoid a commute which is a non-traditional trade off. On the other hand, it is boring and there are lots of family friendly things to do, so it is very traditional in that sense. We live in Redwood Shores which is closer to San Carlos than Redwood City, but that is my address so whatever.
Last you heard from me I was working as a Data Scientist at Facebook. I was working on problems with Site Integrity mainly around fake accounts, spam, and general account access (i.e. login, password recover, etc.). I have a lot to say about Data Science or more accurately Analytics at Facebook, but I would prefer not to say them until after I no longer work there. I don't really care too much about how people there would react to what I have to say, I just don't think it is right for me to say certain things in full because they are not all that positive. I will write down my thoughts somewhere and save it so that I don't have to look back and try to remember, but I won't publish anything until after I leave. Anywho, I decided that I was not happy with the direction I was headed nor with the overall work that I was involved in, but I still liked working at Facebook a lot. I wanted to get back into purely writing code and building things rather than analyzing what other people were building. I wasn't positive that I would be able to find what I was looking for at Facebook, but I had only been there a few months and I was pretty convinced that my general malaise had to do with the work I was doing (or lack thereof) rather than the place itself. So even though I did talk to a few other places and look around a little, I decided to focus on finding something internally. I had played around with Android through a Big Nerd Ranch course at work and some hackathon projects, which really turned me on to mobile development, but I really don't like Java and the Android ecosystem did not excite me that much. So I started to look into Objective-C and iOS. Eventually I sent an email to someone I was in bootcamp with who directed me to the manager of our iOS core team.
We have a think called a hackamonth where you can go work on a team for a month to try it out and possibly switch or possibly just go back to what you were working on. You can only do this after working for a year and you can only do it so frequently, so I knew I had to wait until after February of 2013 to make a switch. Therefore, I tried to wrap up what I was working on as best as I could and started planning to move over to iOS. I met with the manager of the core team and a couple of the guys on the team, and it seemed like exactly what I was looking for. The only downside was that I had zero iOS experience, and I hadn't written any serious C/C++ in a couple years. In addition to zero iOS experience, I had zero Objective-C experience. I bought two books, one on iOS and another on the language itself, and worked through them on nights and weekends. I may have embellished a little bit to the people I spoke to about my background in these areas only because I know I can learn extrememly quickly and I have found that because most people cannot they assume that it is not possible to go from nothing to productive as fast as I know I can. So I worked out the logistics and had the hackamonth as my extended interview for iOS and started on April 1 of 2013.
I had a few projects during the month which I was able to accomplish to everyone's satisfaction which made it easy for me to stay on the team and become a full time iOS software engineer. Over the past 9 months working on iOS, I have learned an absolute shit ton about the platform and the language. I have also had to grow my bag of software engineering tricks especially in the areas of design patterns and concurrency. Over the past 3 or 4 months I have been focusing exclusively on mobile networking which has been an entirely new set of things for me to learn. I don't mean it in a bragging way, but I do learn very quickly, so I would say that I am now quite productive on the team, not quite at the level of the guys who have been doing this for years, but I would feel comfortable in any iOS codebase or taking on nearly any size project in Objective-C at this point. I have been immensely happy with this new role, so much so that although I have considered what I might do elsewhere, I have a lot that I can envision doing at Facebook that I don't really see myself leaving soon.
That is the short version of my work life for the past 18 months. As I am still not the best at understanding properitary from public I am going to defer saying too much more in detail. Nonetheless, I see a ton of exciting opportunities in iOS over the next year or so that I am glad to be working on. In the longer term, I am thrilled to be developing some good engineering skills by working on infrastructure. Oh I forgot to mention that, what used to be known as the core team, is now known as iOS Product Infrastructure, to more closely align with sister teams on Android and the web which do similar cross cutting engineering. We write code as if the product engineers at Facebook are our clients, so we build abtractions and systems that make them more productive as well as solve problems in the general rather than having each group have to solve the same things over and over. It is a really great place to learn a lot about the practical design of software because if you fuck up an API it becomes evident very quickly because of the pain it causes hundreds of other engineers.