Junior Software Engineer

We are looking for a Junior Software Developer with hardware experience who needs to be able to contribute to the design, development, and maintenance of software applications that interact with hardware systems that will be onboard in vehicles. The developer must work closely with senior developers, engineers, and cross-functional teams to develop reliable and efficient software solutions. This role is an on-site role in Columbia, Maryland.

Key Responsibilities:

Assist in designing, developing, testing, and debugging software applications, particularly those that interface with hardware components.

Write clean, efficient, and maintainable C, C++, and Python code.

Collaborate with hardware engineers to understand hardware specifications and ensure seamless software and hardware systems integration.

Participate in code reviews to ensure code quality and adherence to best practices.

Contribute to developing technical documentation, including design specifications and user manuals.

Support the testing and validation of software to ensure it meets performance and reliability standards.

Troubleshoot and resolve issues related to software-hardware interaction.

Continuously learn and apply new technologies, tools, and methodologies to improve development processes.

Qualifications:

Bachelor’s degree in Computer Science, Electrical Engineering, a related field, or equivalent practical experience.

Experience with C, C++, and Python programming languages.

Basic understanding of hardware components, embedded systems, and microcontrollers.

Familiarity with software development life cycle (SDLC) and version control systems like Git.

Strong problem-solving skills and attention to detail.

Ability to work independently as well as in a team environment.

Strong communication skills, both written and verbal.

Desired Skillset:

Understanding of low-level programming, including device drivers and hardware abstraction layers.

Experience with communication protocols such as I2C, SPI, UART, etc.

Knowledge of software-hardware integration and interfacing techniques.

Experience with development tools such as Eclipse, Visual Studio, or similar IDEs.

Understanding of Agile development methodologies.

Basic knowledge of networking protocols and concepts.

Familiarity with Windows and Unix operating systems.