The Software Engineer creates applications, configures operating systems, and tests his/her 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. The Software Engineering supports several projects, and will develop intuitive GUIs and associated applications to enable non-technical users to control a wide range of scientific systems, from analytical instruments, distributed sensor networks and perform automated analysis of complex datasets to provide actionable information to end users.
Perform development efforts and work with teammates on various projects. To include working with customers to understand requirements, leading technical development, collaborating with designers to translate wireframes into applications, and integrate 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, to include touchscreen drivers, high-speed digitizers, and calibration tools.
Writes programs according to specifications, which may be provided by Senior Software Engineers, Systems Engineers, or other computer scientists.
Formulates and designs software system, using scientific analysis and mathematical models to predict and measure outcome and consequences of design.
Converts project specifications, using flowcharts and diagrams, into sequence of detailed instructions and logical steps; and codes language that can be processed by computer, applying knowledge of computer programming techniques and computer languages.
Confers with IPT lead and customer concerned with program to resolve questions of program intent, data input, output requirements, and inclusion of internal checks and controls.
Corrects program errors using methods such as modifying program or altering sequence of program steps.
Identifies and suggests optimizations and features to improve hardware/software capabilities.
Recreates steps taken by user to locate source of problem and rewrites program to correct errors.
Analyzes, reviews, and rewrites programs to increase operating efficiency or to adapt program to new requirements.
Compiles and writes documentation of program development and subsequent revisions.
Writes manual for users to describe installation and operating procedures.
Assists users to solve operating problems.
BS in Computer Science, Electrical Engineering with programming focus, or equivalent.
3 to 5 years of experience.
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 required for integrating applications, systems, and hardware.
Strong programming experience with C/C++ and Java.
Ability to obtain a U.S. DoD SECRET Security Clearance.
Knowledge of Qt framework and development environment.
Knowledge of Linux kernel and device driver development.
Experience with database technologies (SQL etc.).
Experience in Debian-based Linux, specifically tailoring OS for custom boards.
Experience with common development and repository tools (i.e. GIT, JIRA, etc.)
Experience cross compiling of C/C++ code and Java.
Knowledge of fundamentals of Chemistry, Analytical Chemisty, and Data science.