In the summer of 2022, I was a proud member of the software development team at Panenco, Leuven. While studying computer science at KU Leuven, I developed a great interest in the inner workings of web applications (and networks in general), but felt a lack of practical knowledge throughout my studies. This gap was filled at Panenco, where I got to intern for four weeks as a backend developer on CleverKids: an online learning platform for children.
Software engineering internship
The internship started with an excellent course on Node.js, Typescript, MikroORM and papi. The latter is a package developed by Panenco on top of the class validator, class transformer and routing-controller packages to define endpoints in a consistent and efficient fashion. This course was a great starting point to bring newcomers like myself up to speed with good web development practices, but also acted as a refresher for colleagues with some more backend experience. The course consists of three modules, gradually increasing in complexity. In the first module, I coded a http server as I was used to: some simple routes defined with the Node.js Express API without any input validation, authorization or persistent storage (e.g. a database). By the end of the course, I realised how much better the server could have been coded, using the techniques that were taught in this course.
After finishing the course, I joined the product team of CleverKids, a learning platform for children including thousands of exercises. Firstly, I started out simple by working on isolated pieces of code. I improved the performance of specific queries, added functionalities to existing queries and examined a small bug related to input validation when users tried to log in. These tasks were an ideal way to get acquainted with the general design of Cleverkids. I also got to see and work with token based authorization, a concept only vaguely mentioned in many theoretical security courses.
Secondly, I created a new endpoint which returned the path of an exercise. The path of an exercise consists of the domain, field and grade of the exercise. For the final part, a fellow intern and myself had to implement a new functionality so that teachers are able to create new exercises and share these with other teachers. This required us to add relations and data fields to the database schema, write our own endpoints, and alter existing endpoints.
In addition to the aforementioned technical aspects of this internship, I also got immersed in the workflow of agile software development in a professional context touching upon the use of Github, automated testing and daily team meetings. For the remaining projects in my last year at KU Leuven I hope to operate in a similar manner.
The most valuable experience for me was that after several years of studying at the university, I finally got to see the bigger picture in a professional/commercial setting which combines many of the technologies that I had come across over the course of my studies: Node.js, React, Docker, PostgreSQL, Google App Engine and more.
Besides the technical aspect of the internship, Panenco is just a great place to work at. The office is filled with a productive vibe, focusing on delivering qualitative products without bloated workflows. You get to meet lots of like minded people with whom you can discuss the nerdiest of topics. To sum it up, I learned a bunch during my internship at Panenco and had a really great time doing so! I would highly recommend Panenco to anyone that is interested in building web applications and is looking for a place to sharpen their skills!