Job title: Robotics Engineer (C++)
Employer: Gideon Brothers
Year of graduation: 2019
Supervisor: Associate Professor Igor Čavrak, Ph.D.
Study profile: Computer Engineering
What are your responsibilities at your current workplace?
Gideon Brothers is developing autonomous mobile robots for warehouse automation, and I’m developing a diagnostic and control engine for these vehicles. This engine is designed to perform tasks such as transporting pallets or tracking a person, coordinating the operation of all system components, and ensuring that they’re robust and can recover from unforeseen situations. Hence the name of the engine itself – Brain Engine, and our team is named after it. In addition, the Brain team also takes care of security, system configuration and versioning, development and maintenance of our servers, and some other DevOps activities.
What does your typical workday look like?
I always start the day with a coffee and a conversation with my colleagues. Each time it’s about something different: sports, politics, a book I’ve read, a new blog post on ModernesCpp or FluentCpp, and someone always makes a joke. It’s a good way to get “food for thought” for the workday. After that, I start with the work plan for the day, which I create the day before. It consists mainly of programming, but also other tasks, such as meetings with colleagues when new features are planned and coordinating the schedule with other teams.
What’re the challenges you face in the workplace?
I think the challenges are very different depending on how much time you’ve spent working somewhere. In the beginning, my biggest challenge was understanding the existing code and writing new code, learning more about other system components and what they do, gaining expertise, and learning to collaborate with other teams in developing a new feature. As I became more familiar with all of this, I found it much easier to code and plan because I could anticipate what might be a problem as I was developing the code. But now that I’m also responsible for two younger colleagues, new challenges have arisen. I need to know how to plan well, how to assign and explain tasks to colleagues so that they’re neither too easy nor too difficult, how to guide them, and – no less important – how to teach younger colleagues but also learn from them.
What did your professional career look like? How did you change jobs and employers?
My first student job was in administration at Etranet Group, where I worked for three summers after each academic year of my undergraduate study. After my first year of graduate study, when I got more knowledge in computing, I took a summer job at CS Computer Systems. There, I learned more about developing code for iOS and techniques for more efficient database management. Since I received a scholarship from the Krško Nuclear Power Plant, I didn’t have enough time for student work because I was focused on getting as good a grade point average as possible. After graduation, I was faced with the dilemma of whether to continue my career as a PhD student at the Ruđer Bošković Institute with Mr Šmuc, Ph.D. and Mr Lipić, Ph.D., or to work in the industry. In the end, I chose to work at Gideon Brothers because the work is very challenging, we use cutting-edge technologies, the projects are very interesting and you have the opportunity to learn from about 10 PhDs and about 50 engineers. I think it’s the perfect environment for a young computer engineer.
When did you develop an interest in the field you’re currently working in?
I’d say that this interest developed indirectly right from the beginning of my study. I chose the Computer Engineering profile, which deals with many different things – from embedded computer programming to learning shape patterns and object modelling, to real-time working systems, neurocomputing, developing support for web applications, and many other areas. So I was interested in a wide range of things. During my undergraduate study, I was mostly involved with coordination algorithms and distributed systems, later I developed an interest in programming for the iOS platform, and towards the end of my studies, I became more involved with Deep Learning, particularly with data structured in the form of graphs. This versatility came in handy in this job – robotics involves knowledge from electrical engineering and different areas of computing, and to develop a good integration engine for robots you need to have a good understanding of a very broad field, and robotics is exactly that.
Which skills and knowledge do you utilise? Which of them have you acquired during studies and which ones did you learn extracurricularly or additionally?
I use the programming language C++ almost exclusively, and Python to a lesser extent, to write the best possible code that’s safe and allows recovery from errors. You need a good knowledge of computational theory and how real-time systems work to understand how all the system components work, from localisation, navigation and semantics to robot drivers. As in any job that involves programming, knowledge of design patterns and code architecture design is essential. No less important is knowledge of the Linux operating system and some DevOps skills that greatly facilitate system configuration and the process of code creation and deployment. The degree gave me an excellent grounding in mathematics and an understanding of different areas of computer science, the main problems in these areas, and the basic methods to solve them. I think this is the most important thing you can learn at university. It’s not about explaining the specific frameworks to students. You do that independently of your studies, just like a more detailed exploration of programming languages and other methods that you don’t learn at a university. Everything else comes with work and experience.
What advice would you give to students who’re looking for a job?
The most important piece of advice is that you’ve nothing to fear. Companies that hire students and juniors don’t expect you to know everything right away. Your work ethic and desire to learn are much more important. For example, when I got a job at Gideon Brothers, I knew neither ROS nor Gazebo and had used C++ only very little, in my final thesis and a few projects. For an employer hiring you as a junior, it’s important that you’ve got a good attitude, that you’re really interested in what you want to do, and that you’re willing to learn something new every day and work on yourself as an engineer. Finally, it’s a great blessing to have the opportunity to do a job that you love, so enjoy it!