Tech Stack
Distributed SystemsHaskell
About the role
- IOG: technology company focused on Blockchain research and development
- Develop formal artifacts early in development and iteratively refine specifications, properties, and proofs
- Form part of day-to-day quality assurance of production system development
- Test critical steps against formal models or prove them using formal frameworks and tools
- Model expected performance of resulting systems to assess impact of design decisions
- Provide feedback to developers and project management
- Participate in knowledge sharing and continuous learning with Formal Methods Engineers, researchers, and engineers
- Build formal artifacts from R&D, architectural guidance, and business and engineering requirements
- Model the performance of formally specified systems
- Produce prototypes and simulations
- Refine specifications using performance models and simulations
- Discover and prove properties of specifications and correctness of refinement steps
- Communicate with product, R&D, and developers; assist developers in turning specifications into production code
- Report on work via blog posts, technical reports, presentations, workshops, conferences, and academic papers
- Participate in code reviews
- Contribute property-based tests for executable specifications and production code verification
- Contribute to implementation, extension, and maintenance of custom formal analysis tooling
- Work in an international team across multiple time zones
- Break down large complex tasks into workable items and work independently
- Share specialized knowledge with other team members
Requirements
- A higher degree in Computer Science or a related field
- A minimum of 2-3 years of experience in a functional language, preferably Haskell
- Experience working and collaborating with Git
- Experience with one or more formal methods
- Experience in one or more of the domains we are working in -- networking, consensus, distributed systems, programming language design, blockchain applications -- would be a bonus.
- Demonstrated ability to work on difficult problems in a self-driven way
- Deep thinking, problem solving
- Ability to understand and translate complex ideas and break them down simply for yourself and others
- General Software engineering skills, and an understanding of Software Engineering processes: requirements capture, specification, testing, verification, validation.
- Apply research concepts in an engineering setting.
- Translate and reshape information for the software engineers to understand properly
- Telling researchers and developers when there is a discrepancy - presenting formal concepts in context.
- Be able to receive input from researchers about formal models, thoroughly understand and translate that information and its impact on the production code.
- Continuously brings fresh ideas to the mix
- Be versatile and enjoy a fast-paced, ever-changing environment
- Ability to explain complex concepts in documents and presentations for a technical but not specialist audience.