Software Engineer / Programmer
Creates applications, configures operating systems, and tests code to verify adherence to established specifications and requirements. Develops, researches, designs, implements, tests, and evaluates software and systems—in conjunction with hardware product development—that enable hardware and instrumentation to perform their applications, applying principles and techniques of computer science, engineering, and mathematical analysis. Supports several projects, developing intuitive GUIs and associated applications to enable non-technical users to control a wide range of scientific systems, from analytical instruments and distributed sensor networks to automated analysis of complex datasets, providing actionable information to end users.
Responsibilities
- Perform development efforts and work with teammates on various projects, including collaborating with customers to understand requirements, leading technical development, and integrating with back-end layers/hardware interfaces.
- Develop intuitive Graphical User Interfaces (GUIs) using Qt/C++.
- Configure applications on Linux variants implemented on x64-based architectures to support custom boards designed for unique applications and markets.
- Test device drivers and tools, including touchscreen drivers, high-speed digitizers, and calibration tools.
- Write programs according to specifications provided by senior engineers or other stakeholders.
- Formulate and design software systems using scientific analysis and mathematical models to predict outcomes and consequences of design.
- Convert project specifications into detailed instructions and logical steps using flowcharts and diagrams, then code in appropriate languages.
- Collaborate with IPT leads and customers to resolve questions about program intent, data input/output requirements, and internal checks.
- Correct program errors by modifying code or altering program steps.
- Identify and suggest optimizations and features to improve hardware/software capabilities.
- Recreate user steps to locate and fix source of problems.
- Analyze, review, and rewrite programs to increase operating efficiency or adapt to new requirements.
- Compile and write documentation of program development and subsequent revisions, including user manuals for installation and operating procedures.
- Assist users in solving operating problems.
Requirements
- Understanding of the development process and testing cycle, including bug tracking and formal code documentation and releases.
- Analytical, diagnostic, debugging, troubleshooting, and problem-solving skills for integrating applications, systems, and hardware.
- Strong programming experience with C/C++ and Java.
- Knowledge of Qt framework and development environment.
- Knowledge of Linux kernel and device driver development.
- Experience with database technologies (e.g., SQL).
- Experience with Debian-based Linux, specifically tailoring OS for custom boards.
- Experience with common development and repository tools (e.g., Git, JIRA).
- Experience cross-compiling C/C++ code and Java.
- Knowledge of fundamentals of Chemistry, Analytical Chemistry, and Data Science.
Qualifications
- BS in Computer Science, Electrical Engineering with a programming focus, or equivalent.
- 3 to 5 years of experience.
Ability to obtain a U.S. DoD SECRET Security Clearance.
Working Conditions
- Ability to sit at a computer for long periods of time.
- Travel up to 25% may be necessary.