Education

All engineers at SYRMIA have a relevant university background. In Belgrade, most engineers come either from Faculty of Electrical Engineering or Faculty of Mathematics, both part of University of Belgrade. In Novi Sad, the strongest faculty is Faculty of Technical Science, and almost all of our engineers in Novi Sad come from it. The third largest city in Serbia is Nis where SYRMIA has a big office, and we recruit engineers from Faculty of Electronic Engineering there. In Banja Luka, where our forth office is, SYRMIA has a great history of recruiting engineers that finished Faculty of Electrical Engineering in that city. In short, our engineers come from the best faculties in the region and all have relevant software and hardware curriculums in their resumes.

Programming Languages

The languages we mostly use in our daily work are:

  • C
  • C++ (including C++14, C++17)
  • Assembly (ARM, MIPS, X86, ...)
  • Shell scripts
  • Python

C is a language of the embedded world, C++ is super relevant in all modern projects (and its latest standards are often a requirement in the latest automotive products), assembly is used everywhere (especially in optimized routines), and shell scripts are glue used in all projects. Python is also a common answer either to the machine learning projects or for different software focused on testing and verification.

Having said this, we do work in other languages such as Go, Lua or Java, but this is usually very project specific and may not be a common technology for all the employees.

Since we contribute a lot in open source, feel free to ask for some references.

Tools

We work in an agile way. We track projects on Redmine or JIRA, and depending on a project and customer, we use variety of bug tracking tools such as Bugzilla.

Code reviews are a must and internally we use Gerrit, and in the open source world we use whatever is common for a particular project. Phabricator and Rietveld have been a common answer on many places. On some projects we also used Crucible.

We also use dedicated software tools specific to a particular domain. Automotive industry has a lot of these such as Ansys Medini Analyze and others.

Version Control

Our senior engineers remember times when there where no real distributed version control, yet everyone is today familiar with at least git version control. At some customer projects, we are using also Perforce, CVS and SVN, and in rare cases, Mercurial.

Testing

Tests written in frameworks such as CUnit and Cmocka are intended to prevent potential problems early in development cycle and to ensure validation of software component’s desired behavior. On higher level of validation, software components are combined and tested as a group.

The integration testing is conducted to evaluate the compliance of a system with specified functional requirements. Pytest framework is a full-featured Python testing tool used by our engineers to validate implementation functionality through scalable, expressive and readable integration tests.