What I Have Learned At Prezi
It’s been a few weeks now since I’ve been here in Budapest, so I’ve had a lot of marination time to adjust and acclimate to my new surroundings (well, re-adjust and re-acclimate, I suppose). Though so much of Budapest seems the same since my last visit, the biggest change from my time in Budapest last year is my new job at Prezi.
I joined Prezi as a software developer intern after visiting the Prezi office last year and participating in their hackathon! My first visit to the company left a good impression on me, and I really liked the company culture and atmosphere, so I applied for an internship and was really surprised that I was accepted (since this is my first real programming internship job in the industry). I’m really excited, even though I’m clearly the most inexperienced and the youngest (and for some reason the only female) current developer in the company.
Somehow, and crazily enough, I got placed on the infrastructure team. (The Prezi company is divided into teams, where each small team works as a group on one aspect of Prezi, whether it’s marketing, HR, frontend, backend, you name it.) Anyhow, for some reason, I’ve always envisioned myself as a sysadmin (no idea why, but I guess the idea of having to deal with a lot of computers really appeals to me….). That’s a lot of what the infrastructure team does. We get to be in charge of all the Prezi servers and keep track of and manage the general setup of the Prezi system. We sort of maintain the backend and keep the infrastructure running smoothly so the frontend website which the user sees is stable and reliable.
And wow, I really did get what I signed up for. The infrastructure team actually does have to deal with a lot of computers! Never in my life have I had to work with so many different servers and moving parts and subparts within the system and the code. Especially within the first few weeks, it was completely overwhelming - I had to learn about libraries to manage and synchronize servers, I had to get acquainted with a new version control and deployment system, and I had to learn the general structure of the Prezi code (also I got to see some funny Prezi hackers :p). Plus, I’ve been working with so many incredibly smart and talented people that it was a bit intimidating at first, though they are also some of the nicest and most patient people that I feel like the adjustment period to this new code base has been less intimidating with their help! :)
I was especially surprised that Prezi people even actually trusted me to … well… contribute to their code base! I committed code on the first day and deployed to production on the second! I’m still surprised that stuff I’ve done is now actually part of Prezi.
The thing that I appreciate most so far about this job, however, is simply how much I have learned. I guess I always (mistakenly) had this idea that school is the place to learn, and perhaps outside of school I’d be able to pick up some nifty tips and tricks if lucky, but since my arrival, I’ve gained so much more knowledge about the computing industry and software development and how a company is run that I’ve also acquired a whole new appreciation of computing and computer science. Here are some of the things I’ve learned and realized since coming here:
- I've learned that I really love Python! If I've ever doubted my love of Python in the past, I take it back. Okay, so I guess there were a few things about Python's syntax that annoyed me, but I've learned a lot more about proper coding "style" and Python has a really well-defined view of what good "style" is (yeah, I guess even computer langauges have good grammar too.... you can't avoid it). Also, there are a lot of people contributing a lot of neat bells and whistles that make Python really nice and easy-to-use (in particular, check out iPython, the most wonderful Python interpreter ever). At Prezi, I've been writing a lot of code - practically all my code - in Python, and I'm continually amazed at how powerful it is to run the entire backend of a website. It's such a clean and simple langauge, yet surprisingly good for running Prezi. I've learned a ton of cool Python syntactic tricks from other developers which make me appreciate Python more and more, and I've also learned about writing good, clean code. However, I must digress and say that the bane of my existence is still the Python Pep8 checker (this is basically the Strunk and White of programming style, for those of you who don't know). Our code commits get blocked unless our code passes Pep8 standards. But alas.
- I've learned a lot about testing code to make sure it is solid and working for deployment. This is when I sort of wish that Prezi's backend was in a statically-typed langauge, because I feel like a lot of the tests I write are just checks to make sure the right types are getting passed into various methods and such. However, testing code makes me more aware of what it means to write solid yet portable code so that it can be used well not only now but in the future.
- I've learned that I'm *really* glad I took Operating Systems! I've also learned to appreciate the beauty that is Operating Systems and to appreciate how huge systems of computers can synchronize and communicate with each other. By my second day here, I was already looking at threads and locks and logs and other OS-related things within the Prezi code. It's so amazing that Prezi has built a system from such a low-level upwards to something that anybody can use. I guess here is where my epiphany starts about how cool computers are and it just takes some basic processes and things weaved together to create an amazing result.
- I've learned that you don't have to stop learning once you leave college! One thing I adore about Prezi is that it seems like a particular general company vibe is one of openness to learning new things. For example, every Friday morning we have a workshop where we learn a new programming language, Haskell. The idea is that it should teach us a new way to think, and hopefully we won't get stuck in the rut of working on the same code base alldayeveryday.
- I've learned that you can bring your pets to Prezi! The dog sitting next to me this afternoon was snoring really loudly! Note to self: get a pet. Bring it to Prezi. Everyone will fawn over it.
- I've learned that I love the general culture of Prezi! I don't know what I'll be doing after college, but I do want to keep in mind the mission of Prezi, because it's something I value as well. When I was here last year, our IT Entrepreneurship class visited Prezi (since Prezi was considered a good model of a successful startup software company in Europe). One of the guys in charge was asked about how Prezi came to be one of the market leaders of presentation software, and I was really inspired by what he said - he talked about how his vision of Prezi wasn't one where the mission was to make a ton of money or dominate the market, but he just wanted everybody to try Prezi at least once, and perhaps, if it somehow enabled them to tell a better story or convey information more clearly or communicate better, then they should stick with it and use Prezi. I guess that's what I want to keep in mind as I leave college and go into the real world. It's about making people's lives better, even if it's just in a small way. I might be biased, but to me, especially since we seem to be undergoing a sort of computer "Renaissance", computers are the thing we posses that have the most potential to affect our lives most in the near future. But with that, I know I want to be able to help other people use comptuers for better, whether that is telling a better story, making scientific progress, organizing data, or communicating well. I don't know what I'll do after graduating, but I really appreciate the idea of doing a lot to make computing a really good thing, and I get that vibe from Prezi.
Whew. That was long. And technical. Sorry!