
Software Engineer (Formal Methods)
CertiK
Job description
-
Extend the scope and depth of our automated program verification tools and brainstorm, design, and implement new tools
-
Adapt and improve algorithms for symbolic software model checking. Examples include bounded model checking (BMC), counterexample-guided abstraction refinement (CEGAR), and property directed reachability (IC3/PDR)
-
Build and extend translators from different input languages into intermediate representations, optimizing the generated models for automated analysis
-
Identify new classes of security properties of smart contracts and formalize properties for use in our automated verification tools
-
Closely collaborate with other software engineers in developing tools and set technical direction for solving problems in consultation with your team and management
-
Work on all aspects of delivering working software that meets customer needs, including analysis, design, automated testing, operations, CI/CD, measuring results, incorporating customer feedback, and support
Benefits
-
401(k) plan with company matching
-
Flexible paid time off and holidays
-
HSA (with high deductible plan) & FSA
-
Life and accidental death and dismemberment insurance
-
Medical, vision, and dental insurance- Minimum of 4 years of software development experience (includes internships, software developed during research, and open-source development)
-
Master’s Degree in Computer Science or a related field or 5 years of equivalent experience
-
Demonstrated knowledge of fundamental computer science concepts such as data structures, algorithms, mathematical logic, and automata theory
-
Minimum of 2 years of experience with one or more of the following: model checking, formal verification, SAT/SMT solving (Z3, CVC4, Yices, MathSAT, SMTInterpol), abstract interpretation, or closely related disciplines
-
PhD in the broader field of automated reasoning
-
Publication record in conferences like POPL, CAV, TACAS, FMCAD, FM, etc
-
Experience in functional programming (OCaml or Haskell)
-
Strong and creative problem-solving skills; always willing to learn and embrace new technologies and to collaborate
-
Prior experience in a professional software development environment