Lessons Learned from an Engineering Internship at Pivotal Labs

At some engineering internships, you are taught something during training the first week, and you are expected to continue to perform that same task again and again until your very last day. But not at Pivotal Labs: the atmosphere and work we do here is so vibrant, dynamic, and ever-changing: from new physical desks, new projects, new colleagues, new work, and a brand new experience.

This term I was exposed to a variety of perspectives, methodologies, environments and I am still learning more everything single day. I have developed in Objective-C, Java, and C++ on iOS, Android, and BB10 using various development environments and programming conventions. Each one required additional training to learn the ropes and allowed for a lot of exposure, all of which Pivotal prepared me for. My experience at Pivotal Labs has been phenomenal and I am very happy to have worked here.

Bootcamp

I commend Pivotal’s unique training system for engineering internships.The idea of Bootcamp is simple: assign the trainees a task, give some time to experiment, and see what they can do with it. With an interest in business, I thought that Bootcamp was a fantastic way of doing training for the job because it requires almost no full-time employee to train the interns.

Regardless, I must say I got more than what could have been possible from viewing slideshows and presentations and listening to others speak. Bootcamp serves as a great introduction for the position because it includes similar work to the job itself and also includes a similar working environment with lots of space and independence.

From bootcamp, I learned all about development on iOS and Android and their idiosyncrasies as well as their imperfections. By coding a similar project (http requests, parsing json from APIs, and displaying the formatted data nicely in some sort of UI list) on each platform I worked on (iOS, Android, BB10), I gained insight in how each platform accomplished the same task in a similar fashion, but were ultimately distinct in their implementation. Bootcamp taught me the valuable lessons that you can learn almost everything about programming online by yourself and that you are in charge of how much you accomplish. It also showed me the power of Stack Overflow and and the importance of taking the time to read the documentation that the platform vendor provides.

Test-Driven Development (TDD)

I was fortunate to have been exposed to a substantial amount of test-driven development. Resources were readily available to learn the system, complete with senior TDD colleagues, bookshelves of material to read, and internal projects on which to practice the methodology.

I learned that test-driven development is all about a fine balance. If you are using TDD, you must be selective in what you decide to test, what you decide not to test, and when you should test. You must also code in a different manner and be sure not to do TAD (test-after development), or else your code will not be as fitting. TDD helps not only to find gaps in your code, but it also reveals gaps in your knowledge because you cannot test something if you are unsure how you’re going to test it.

After working on several projects incorporating this mentality, I definitely support the process. It really does produce cleaner code and it significantly helps with the maintainability of software in the long-term because you can refactor code and build on top of previously written code with confidence. Even if you do not write actual tests, TDD shows you the power of programming slowly and carefully in small reversible steps so bugs are not introduced in the process.

iOS Development

I learned a lot of what goes on behind iOS applications from being on a client project. My pair, Tomasz, was very informative, kind, accommodating, and was a pleasure to pair with. As the first billable project I was placed on, I learned a lot from watching my pair and listening to him tell me about everything every step of the way. My pair really pushed me to learn more about the language and platform on my own time so I would know what goes on in the development process. He gave me a list of books to read and links to Apple Developer content that he thought was relevant. He was amazing to work with because he truly cared and wanted to ensure that I understood what I was doing.

More specific on iOS than on any other platform, I learned about the importance of reading the documentation that the platform manufacturers provide. Apple maintains the very best documentation in my own opinion. There is a lot of very useful information embedded in the documentation that you should know before you write a single line of code. If you do not know it, you are doing more work than is required. You are also missing out on a lot of power. You should not only refer to the manual when you are in need. You should read it all beforehand.

While on iOS TDD Rampup, I worked more independently with another intern on another client app. We programmed with TDD and I applied the skills that I learned from my prior placement on the first billable project.

Android Development

I learned the most about TDD principles and Android development and conventions while I was working with a third client project team. I learned a lot about Java and various frameworks such as Mockito, Maven, JUnit and Google Map APIs.

One subtle thing that I learned while on this project was the importance of shortcuts in the integrated development environment you are using. There are a lot of shortcuts that make the coding process a lot quicker.

Blackberry 10 Development

The largest portion of my engineering internship and the most recent platform I have been working on has been BB10. During this time, I was not only able to see an entire internal project begin and finish, but I had the opportunity to drive the project as the only member on the team who was on the project from the start. It has allowed me to see the entire process and do a substantial amount of coding. The project originally started off as a BB10 TDD Rampup project for those on the beach to learn TDD and afterwards support BB10 after they ramped up. However, it turned into a project of its own over time.

Developing on BB10 is all about choosing a fine balance between QML and C++ code. QML is very powerful since it allows you to build custom UI elements to make your app look the way you want it to look with powers similar to XML in Android, but it allows you to write code at the same time using JavaScript in json-syntax. However, you need to be careful that you do not perform too much business logic within it. This showed me the importance of the design pattern MVC (model-view-controller). You can do everything in C++ or you can split the work and delegate some work to the QML when it is best suited. There is no objective way of doing this and working on BB10 has fine-tuned my intuition to deciding when to do what. When you do it optimally, everything just seems clean and natural.

The Value of Lessons Learned During My Engineering Internship

My work term has taught me many important lessons to apply both on the job and in life: how to be flexible, work with others, take initiative to learn for myself, and think projects through before starting on them. I’m very happy to have worked at Pivotal Labs with such great people.