Internship report Christian
“I had an amazing experience at PDF Tools AG – the company considers it extremely important to train and support young, motivated interns and integrate them into its business processes right from the start. ”
Anyone looking to learn more about software development and expand and improve their programming skills should certainly do an internship at PDF Tools AG.
With professional guidance, I learned the fundamentals and concepts of programming in a practical setting, which made me a better programmer overall.
I also gained an insight into the fascinating world of PDFs, on which PDF Tools AG has built its success. The atmosphere at PDF Tools AG is social and helpful, which stands all interns in good stead for when they start their careers in the information technology sector.
Who am I and why did I want to do an internship?
I am a 21-year-old computer science student from Wädenswil in the canton of Zurich. I completed my Bachelor in computer science at ETH Zurich in summer 2014 and am planning to continue with my Master's degree in summer 2015.
During my Bachelor's degree, several people urged me to do an internship. Although it is not a mandatory part of our course, it was strongly encouraged anyway due to the simple fact that we had no practical skills. As ETH is known for focusing on theory – and after three years of studying there I can confirm this – the decision was an easy one to make.
I wanted to gain some practical experience and be well prepared for when I embarked on my future career. The end of my Bachelor's degree was the perfect time to look for an internship.
How did I find PDF Tools AG? Why did I choose PDF Tools AG?
VIS (the association of computer science students) at ETH Zurich has a straightforward job portal on its home page, with a filter to enable searches by internships. This inspired me to start clicking through the positions. However, I lost enthusiasm after just a couple of minutes. The problem was that many internships had numerous requirements with regard to programming languages that I only knew the basics for or had never encountered before.
One company took a more open approach. PDF Tools AG described itself in a relaxed and inviting manner, and stated the main character traits that the company was looking for in the candidate profile section: personal, team-oriented, committed and with a love of software. The company's offer that I could bring my own ideas to the table and gain experience met my expectations and appealed to me straight away.
How did I secure the internship?
I sent a short cover letter to Dr Hans Bärfuss, the founder and CEO of PDF Tools AG. I immediately received a friendly answer proposing that I go for an interview. In the subsequent meeting, I told Dr Bärfuss about my previous experience in programming and computer science.
PDF Tools AG works with many programming languages and offers support for various platforms. Dr Bärfuss was convinced that he could find a project that would suit my preferences. The atmosphere during the interview was relaxed, and I got on well with him straight away. I jumped at the chance to do an internship.
What does a day in the life of an intern look like?
To all intents and purposes, an intern's day is not much different to that of any other colleague at PDF Tools AG. I was allowed great flexibility when it came to organizing my tasks. We were also free to decide when to go for lunch. I ate together with my colleagues and got to know everybody quickly. The atmosphere was good and we laughed and joked a lot. I was well integrated into the team from the beginning, and enjoyed myself immediately.
I was entrusted with a larger project, which I worked on for the majority of my internship. In weekly meetings with the boss, Dr Bärfuss, and my personal mentor, Christoph Reller – who looked after me and introduced me to the world of PDF Tools AG – we discussed the goals that we wanted to achieve next. This meant that I could work on the project independently every day by following a series of small and manageable work units. I could go to my mentor, the boss or any other colleague for advice at any time. Team spirit is high and everybody helps each other out. The working environment was extremely friendly and informal.
What did I learn during my internship?
My internship gave me a great insight into the day-to-day workings of the company, corporate life and the world of PDFs. I learned a lot about programming, structures, and above all PDFs. I enjoyed many new experiences during my time as an intern; these are experiences that you can only really gain through hands-on experience in the working world.
I was aware of various concepts of architecture and programming style from my theory courses at ETH. However, I quickly realized that theory alone is not enough. In my project, we placed great emphasis on architecture, an aspect that is sadly lacking at ETH. My courses were mainly given to presenting cool algorithms, and programming tasks were geared towards programs coughing out the right results. Little or no attention was given to the program's actual architecture. Practically all tasks are "disposable products". Once a project has been submitted and evaluated, the entire code is never seen again.
In practice, of course, this is never the case. Every class written might need to be used and maintained for several years. Furthermore, there is a good chance that you will have to maintain and upgrade program code that you have never written yourself before. That makes it all the more important to have a good architecture and clear structure. This is one of the most important things that I learned in this internship – how to write programs and classes in a way that enables them to be well maintained and expanded over the course of several years.
The code review meetings with Dr Bärfuss were the highlight of my internship. We had discussed systems architecture details in previous meetings, but the verbal explanations were a little difficult for me to understand. Dr Bärfuss therefore took the time to show me the concepts in practice in the code. We went through and examined everything together class by class, method by method, member variable by member variable. As an expert in his field, he used his extensive experience to explain to me why one line of code was good and another was bad.
He was able to show me many of the discussed concepts one-to-one in the code and correct the lines with me. This was a huge help, as I finally understood many different things: what a correctly utilized interface looks like, why methods are in the wrong class, how a class can be structured, why the delegation principle makes the architecture much clearer overall, and so on.
After every meeting, I had time to go through the code once more and fix the issues discussed. In time, I was able to automatically find bad sections of code. With my new knowledge, I was able to rectify the errors myself. This put me in high spirits, and I realized that I had made a huge leap forward in my programming abilities.