| The University of Washington (UW) is proud to be one of the nation's premier educational and research institutions. Our people are the most important asset in our pursuit of achieving excellence in education, research, and community service. Our staff not only enjoys outstanding benefits and professional growth opportunities, but also an environment noted for diversity, community involvement, intellectual excitement, artistic pursuits, and natural beauty. |
The PLSE (Programming Languages and Software Engineering) group has an outstanding opportunity for a Software Engineer.
You enjoy the energetic, exciting, and flexible environment of a cutting-edge university research group. You are capable of thinking abstractly, architecting new designs, and building, testing and deploying systems, and you also find it rewarding to improve existing systems. You are a logical thinker and a clear communicator. You are capable of devising and implementing complex algorithms, but you prefer to discover simple ones. You are an energetic self-starter who is a good team player. You can work both with faculty and students on their research projects, and with the end users of those systems. You have a bachelor's degree in computer science, or the equivalent. Research experience, or a higher degree, is desired but not required. Pay will be commensurate with abilities.
The PLSE (Programming Languages and Software Engineering) group at the University of Washington does groundbreaking research in the theory and practice of programming languages, program analysis, and software engineering. We build systems, perform experimental evaluation, and transition our work into use in both research and industry. We distribute our tools as open source. Our innovations have been the basis of start-up companies, our tools have discovered thousands of bugs and have prevented even more, and our ideas have changed research paradigms.
A few specific funded projects for which we need help include the following. You will assist with one or more of these projects, but will also be involved with new projects as they come up; we start many each year.
Verification games: We aim to make formal verification as fun as playing Angry Birds. We are building a tool that converts any program into a game that requires no knowledge of computing. The game board state at the end of a game can be converted into a proof of correctness for the program.
Secure phone apps: We are building a toolset to verify the security of mobile phone applications, so that users installing an app can be confident it does not contain malware.
Pluggable type-checking: Run-time errors are the bane of programmers. We have a system, the Checker Framework, that catches such errors at compile time, before the program is run. Oracle plans to include this technology in their Java 8 compiler, so it will have very high impact.
Test generation: To free programmers of the burden of writing tests, we have built the Randoop tool that automatically generates tests for you, and finds plenty of bugs in the process. Its user community (including Microsoft, Google, etc.) continues to generate many suggestions for improvement, particularly in creating more sophisticated tests.
Specifications: Most programmers don't enjoy writing specifications, so our Daikon system generates them automatically. This is useful for program understanding, test generation, formal verification, and other uses
Duties may include some or all of the following, or related tasks.
Software development of research prototypes of program analysis tools:
Design, build, test, and debug new and existing complex software programs
Resolve complex system software problems
Devise and implement algorithms
Deploy systems to both local and cloud computer networks
Give presentations and demos, within and outside the University
Conduct experiments to evaluate efficacy of new techniques and tools:
Conduct case studies, observe users and generalize results
Conduct controlled experiments, perform analysis of data
Create variants of software systems to isolate effects during experiments
Store and analyze data
Support colleagues and external users:
Answer questions on discussion boards
Triage and reproduce bug reports
Write tutorials, usage examples, and user manuals
Generalize systems to enable customization by external users
Write internal design documentation
Prepare documentation and technical papers:
Develop documentation on systems specifications and operating instructions.
Participate in writing and submission of technical papers to journals, conferences
Revise papers to address reviewer comments
Prepare demo materials
| Bachelor's Degree in computer science or related field or equivalent experience AND three years software development and/or research experience. |
Strong interpersonal skills.
Ability to work and communicate with faculty, students, and end users.
Experience with Unix.
Experience with at least two of: C, Java, C#, Scala.
Ability to write clear technical documentation and/or papers.
Ability to give clear and engaging verbal presentations.
Software design experience, including knowledge of object-oriented programming.
Ability to work with substantial existing codebases.
Equivalent education/experience will substitute for all minimum qualifications except when there are legal requirements, such as a license/certification/registration.
Appointment to this position is contingent upon obtaining satisfactory results from a criminal background check
The application process for UW positions may include completion of a variety of online assessments to obtain additional information that will be used in the evaluation process. These assessments may include Work Authorization, Criminal Conviction History, Cover Letter and/or others. Any assessments that you need to complete will appear on your screen as soon as you select Apply to this position. Once you begin an assessment, it must be completed at that time; if you do not complete the assessment you will be prompted to do so the next time you access your My Jobs page. If you select to take it later, it will appear on your "My Jobs" page to take when you are ready. Please note that your application will not be reviewed, and you will not be considered for this position until all required assessments have been completed.