The ideal candidate will have Linux experience, lower-level software development experience (ie: Assembly Language). It is desired for the SWE to have automated testing experience, but not required.
What you will do
The Software Engineer develops, maintains, and enhances complex and diverse software systems based upon documented requirements. Works individually or as part of a team. Reviews and tests software components for adherence to the design requirements and documents test results. Resolves software problem reports. Utilizes software development and software design methodologies appropriate to the development environment. Provides specific input to the software components of system design to include hardware/software trade-offs, software reuse, use of Commercial Off-the-shelf (COTS/Government Off-the-shelf (GOTS) in place of new development, and requirements analysis and synthesis from system level to individual software components.
The Software Engineer is expected to have a strong proficiency in low-level programming languages (C/C++, Assembly) and computer architecture is required for this position. Linux, Linux Command Line Interface, Bash or Python or C++ or Java/JavaScript.. Knowledge of Rest, Mern or Mean Stack.An understanding of high-performance computing (HPC), including parallel programming (MPI,SHMEM and/or UPC variations) is a plus.
Specific Tasking:
- Infrastructure-as-Code development includes requirements analysis, design, development, coding, and unit test of capabilities that support automated administration and provisioning of a HPC Special Purpose Device:
- Designing Automated Solutions using Ansible;
- Writing ansible to perform complex SA type activities (bonding network interfaces, installing/configuring software, generating certificates, making REST Calls, etc.);
- Coordinating developed automation into Zero-Touch-Provisioning of entire system;
- Writing custom software verification suites to either evaluate the developed software or to determine if the created system is in the right state; and
- Utilizing Virtualization (VMs and maybe containers)
Focus Areas:
Information Systems: The individual assigned will be responsible for helping implement in software, integrate, and test capabilities that:
- Maintain a catalog of all hardware and software to include, location, version, assigned/unassigned, etc., (HW/SW Inventory);
- Tracking the current state of hardware and software: Status up/down of hardware; running /not-running/degraded of software; what software stack is on what hardware, etc., (HW/SW state); and
- Allocating resources to missions. Partitioning hardware, provisioning software, staging partitions for mission use, etc. (HW/SW Provisioning)
AND/OR
Continuous Integration/Continuous Deployment (CI/CD): The individual assigned will support the software integration and testing that will:
- Set up and maintain the infrastructure to support continuous integration/continuous deployment. It is both a support effort to the Information system focus area, above, and a focus area in its own right supporting other teams.
- Jenkins-based integration, checkout, and testing supports this effort.
The Software Engineer shall:
- Develop or implement algorithms to meet or exceed system performance and functional standards
- Assist with developing and executing test procedures for software components
- Write or review software and system documentation
- Serve as team lead at the level appropriate to the software development process being used on project
- Modify existing software to correct errors, to adapt to new hardware, or to improve its performance
- Design, develop and modify software systems, using scientific analysis and mathematical models to predict and measure outcome and consequences of design
- Oversee one or more software development teams and ensure the work is completed in accordance with constraints of the software development process
- Design or implement complex algorithms requiring adherence to strict timing, system resource, or interface constraints
- Perform quality control on team products
- Confer with system engineers and hardware engineers to derive software requirements and to obtain information on project limitations and capabilities, performance requirements and interfaces
- Implement recommendations for improving documentation and software development process standards
What you will need
SWE2
SWE2 Specific Tasking:
- Software Engineering focused on web development, client/server;
- Main tasking Focus Area: Building an abstract interface between Customer User Interface Development (CUID) and Metrics and Monitoring Infrastructure (M2I) products, (i.e., custom GUIs and metrics), and to other tools that interface with the CUID product;
- Recommended familiarity with the following languages and technologies, or similar:
- Django;
- Django-Rest framework;
- Gunicorn;
- NGINX;
- Bash;
- Python; and
- JavaScript ES6
- Recommended familiarity with Splunk and Elastic Stack; and
- Recommended (Desired) familiarity with React.
SWE2 Qualifications:
- Bachelor’s Degree in Computer Sciences or related discipline from an accredited college or university and
- eight (8) years or more experience in software development
- An additional four (4) years of software development experience on projects with similar software processes may be substituted for a Bachelor’s Degree
SWE3 Qualifications:
- A Bachelor’s Degree in Computer Science or related discipline from an accredited college or university
- fourteen (14) years or more experience of experience in software development is required.
- An additional four (4) years of software development experience on projects with similar software processes may be substituted for a Bachelor’s Degree.