Description
Job Description- A Senior Software Engineer (SE) is a skilled and experienced software developer responsible for the detailed design, implementation, and testing of subsystems and system components.
- A Senior SE is able to build a wide variety of software subsystems and components efficiently and effectively, given only a requirements specification and constraints.
- A Senior SE is able to develop and sustain these subsystems and software components in complex, multi-vendor, multi-platform environments.
- Take initiative in performance, working independently and with groups to effectively accomplish project objectives.
- Interact with software systems engineer or other technical leader to understand subsystem and component specifications and recommend changes to facilitate efficient and effective development.
- Design and document subsystems and system components consisting of (in OO terms) several objects working together to execute an encapsulated function of the larger system.
- Implement and debug subsystems and components.
- Write and execute tests for subsystems and components.
- Participate in integrated test sessions of components and subsystems on test and production Servers
- Determine and communicate the implications of system-level decisions on subsystems and components, and help determine how best to mitigate or take advantage of these implications.
- Determine and communicate the requirements and capabilities of components within the context of the larger system, project, and team.
- Support management of the team's technical infrastructure (eg, repository, build system, testing system) under guidance from the systems engineer or other project leader.
- Participate in efforts to share SE technology and expertise within the company; mentor junior and aspiring SE engineers.
- Perform tasks efficiently and work together with team to ensure project success.
- Perform other duties as assigned.
Required
- Three - five years of experience independently designing and implementing small or medium-sized software systems and components.
- Successful design and implementation of multiple software components and subsystems.
- Ability to communicate the design and implementation of software systems including relevant strengths/weaknesses and reasons for implementation decisions.
- In-depth knowledge of C++; ability to use one or more IDEs (eg, Eclipse) and interactive debuggers effectively.
- Knowledge of Linux operating system
- Proven experience in solving challenging technical problems.
- Good task estimation and prioritization skills.
- Proven ability to support multiple projects and objectives simultaneously and efficiently.
- BS or MS in engineering, computer science, or a related discipline or equivalent experience.
- Working knowledge of C++
- Experience with Linux and Windows software development environments
- Experience with Embedded programming a plus
- Experience with application of object-oriented design a plus
- Demonstrated experience in design and debugging of asynchronous (eg multi-threaded) systems.