Software Engineer Job Responsibilities: The Software Engineer (SWE) develops, maintains, and enhances software systems based upon requirements, design documentation, and guidance. The SWE works individually or as a part of a team as necessary. Additionally, the SWE reviews and tests software components validating adherence to the design requirements, software standards, and software practices, and generates resultant documentation. The SWE resolves software defects as well as utilizes software development and design methodologies appropriate to the development environment. Where appropriate, the SWE provides input into the design of software components and data flows and assists in software requirements derivation, specification, and documentation. Software Engineer Job Duties: Analyze user requirements to derive software design and performance requirements Design and code new software or modify existing software to add new features Debug existing software and correct defects Integrate existing software into new or modified systems or operating environments Develop simple data queries for existing or proposed databases or data repositories Provide recommendations for improving documentation and software development process standards Assist with developing and executing test procedures for software components Write or review software and system documentation Modify existing software to correct errors, to adapt to new hardware, or to improve its performance Software Engineer Skills and Qualifications: A Bachelor’s degree from an accredited college or university in Computer Science or Computer Engineering Understanding of the need for software requirements specification and derivation as they apply to the software development process The ability to analyze a problem space via decomposition and subsequently contribute to the creation of a properly abstracted solution Understanding of software life cycle, management, and development processes Understanding of good software development practices and concepts Experience with software development on Unix / Linux platforms Experience developing software in C, C++, and Java. Additional experience with Python, TCL, and shell scripting are desirable Understanding of software concepts such as memory management, threading, IPC, OOP, build systems, and configuration management Basic understanding of System Administration concepts on Unix / Linux The ability to work in a team environment to understand and solve software problems, collaborating to create systems and components that are integrated into an overall solution An understanding of the role of software test as it relates to software development and of the relationship between software developers and testers