My Summer Experience as Software Engineering Intern
An article by Karan S. Gill, a RubyApps software engineering intern
Day 1: An Awesome Culture
I remember walking into the office for the first time on Monday morning to be greeted by a large screen showing the weather, the date, and a message welcoming me to the company. I couldn’t have asked for a more auspicious beginning.
I met the CEO Jaron, and he personally showed me where I’d be sitting and introduced me to my manager Alex. I was sent to an orientation website and started the new employee onboarding process. Most of it was pretty routine, but I do remember one video standing out to me. The video was a presentation from a recent technology conference about the importance of software engineers taking an approach where everyone is accountable and everyone is a leader, because we can all find mistakes and fix them, and we can all improve on existing products. I took this to heart, and as a result, I never felt qualms about suggesting new things to employees who were senior to me (i.e., everyone).
My favorite part of Monday, though, and an integral part of the months to come was lunch! Every day, we had a choice of two restaurants from which we could order a meal. The orders usually arrive between noon and half-past, and most of the team would head to the dining area to eat together. Eating lunch every day with the entire company is probably the best team-building exercise I’ve ever experienced. By the time I had to leave three months later, I felt like I had interacted with every person in the company enough for a personal, meaningful farewell.
The company’s mantra, Awesome Every Day, lived up to its billing from Day 1.
Day 5: Into the Deep End
RubensteinTech is a huge proponent of learning by doing, and learning by asking those more experienced than you. After completing HR formalities and briefly familiarizing with functional programming and the stack I’d be working with, my supervisor threw me right into the middle of my first project — customizing a document generator.
Calling the pace of my first few merge requests glacial might be an insult to glaciers everywhere. Every time I made a commit, my colleague, Jeffrey, would have 3 lines of comments for every line of code. The issues were endless: I wasn’t being functional, my syntax looked like C++, I wasn’t taking advantage of autovivification, I was abusing autovivification, and I’m sure if he was writing this, the list would go on quite a bit further. Despite all this, he never lost his patience with me, and made sure that even though I made the same mistakes once or twice, I didn’t keep repeating them.
As I continued my initial struggle through a new programming language, I leaned on my other colleagues. Sebastien, Stanley, and Nick were always willing to lend me an ear or point me toward implementations of things similar to whatever I was trying to do. Ed, the Director of Software Engineering, tore my code apart without remorse, but I’ve never learnt as much as quickly as I did when he tore my code apart. As I got better at avoiding larger pitfalls, Ed, Jeff, and Mihir endeavored to make me consider ever smaller aspects of my code to further improve readability and performance.
Week 4: Am I a Software Engineer Now?
The comments on my merge requests changed from being potential bugs and edge cases to performance issues and readability issues, until I finally had a branch merged without any comments — hooray! I felt that I’d finally taken my first step along the path from programmer to software engineer. I was learning not just to write software that worked, but software that was performant, robust, and could be easily modified by someone else in the future.
Of course, I still continued to make mistakes — and I still have a long way to go as an engineer — but I was finally creating solid results in a reasonable timeframe. Components that took me three or four days to complete in my second week would now take less than a day to finish. I began to gain an intuitive understanding as to how the enormous data structures that our clients use are linked, and how the different components of the document generator stack fit together.
At the same time, I was learning interesting things every Friday when the whole company had a one hour-long session called RubyLunch. Generally, RubyLunch consists of a few short demos of RubyApps features, answers to questions that people from one team had about work other teams did, and a longer presentation about a technical topic. We even had a longer evening session called RubyTuesday one week where we discussed security issues and why you should reboot your router right now. (That’s right, reader: Reboot. Right now.)
Week 8: Yes, I Am
By my eighth week, we were close to wrapping the project I’d been working on during my internship. I was versed enough to not only link data to document templates and further evolve the templates themselves, I was able to help add new features to the core document generator solution. I also gained experience performing basic quality assurance (QA) and also writing QA guidelines.
10 Days Before Leaving: Final Sprint and Reflections
While I had spent the majority of my internship working collaboratively, my last two weeks were comprised mostly of an independent project. The company’s current internal knowledge management tool needed a facelift and some functional enhancements. With 10 days remaining in my internship, I wanted to overachieve and see it through from start to end. I learned about search engines and crawlers from scratch, and also taught myself how to use React, Redux, and implement a front end. Though a seemingly impossible task, with Mihir’s mentorship it was made possible. He took huge chunks out of his day to help me and keep me moving as fast as possible — even though it meant he had to stay late to finish his own backlog of work.
My last 10 days at RubensteinTech were essentially a microcosm of my entire internship: I went from knowing almost nothing to being able to make meaningful contributions and build large systems because I had the support of team members who were willing to spend their time helping me.
Now that I’m back at school, it’s even easier for me to appreciate the awesomeness of my summer experience. Few people at school are willing or able to give you time — mostly because their number one priority is generally themselves and their grades. (I get it!) At RubensteinTech, I always felt that everyone’s first priority was helping me out if they could.
When it comes down to it, RubensteinTech wanted to help me grow as an engineer — and that’s why I loved being a software engineering intern.
+++
We’re hiring!
If you’re looking for an opportunity to work with an exceptional team of developers focused on engineering forward-looking solutions, please check out our open positions today.