We Are Hiring a Haskell + Rust Software Developer
Become a part of an international, fully remote community! We are searching for a “middle-level” polyglot developer who is comfortable with programming in both Rust and Haskell. If you are passionate about using expressive languages to write effective code, we might be a perfect fit for each other.
As a developer working at Serokell, you will contribute to the performance-critical subsystems of our customers’ systems. Problem domains include, but are not limited to fintech and IoT.
Beyond just flexing your performance-engineering muscles, you’ll be able to enjoy internal product development hackathons where small teams develop fresh new products over a short period of time.
- Solid knowledge of Rust 2018 features. You are expected not to use obsolete features (be neat with extern, etc.), be able to use lifetimes tightly, understand lifetime elision rules, know how to write and implement custom traits, etc.
- Familiarity with the Rust toolchain. Cargo, crates.io. Familiarity with the self-profiler of Rust’s compiler is a bonus.
- Async programming with Rust. You should be comfortable with writing multi-threaded code and are expected to be familiar with the concepts of tokio, even though working experience with it is not a requirement.
- Application-level integration. You should be able to integrate your code with a wide variety of other systems, know how to write optimal queries, and, conversely, how to serve data optimally. Have working experience with serde. Familiarity with rust-postgres and rust-rocksdb is a plus.
- Unit and property testing. You are expected to ship tested code, finding invariants and testing those with proptest. Being able to write unit tests is required. Working experience of writing integration tests and functionality (black-box) tests is appreciated.
- Logging and tracing. You must know how to organize logging, tracing, and monitoring. You are expected to be familiar with tracing and slog libraries, familiarity with prometheus is a bonus.
- Performance engineering. You are expected to be able to write performant code. This implies knowing how to benchmark (e.g. criterion) it and profile (e.g. cargo-profile). Familiarity with valgrind, working experience with perf, and being comfortable around disassembled snippets are a bonus.
- Solid knowledge of Haskell 98 features. You can write your own typeclasses, are comfortable with applicative functors, are comfortable using monad transformers, and know the ins and outs of the most important library ones like ReaderT, StateT, etc.
- Familiarity with the modern Haskell ecosystem. You should be able to use text, mtl, basic lenses, Stack/Cabal, type families, Template Haskell (use existing TH generators, not write your own), QuickCheck/Hedgehog. (If an item is missing, it’s not critical.)
- Knowledge of the fundamental algorithms and data structures like binary search tree, DFS, hashtable, quicksort, etc.
- Knowledge of computer networks: HTTP, TCP/IP stack, understanding of poll- and push-based data synchronization models and their usage in modern service APIs.
- Good coding culture (code structuring and decoupling, patch management with git, code review practices).
- Good level of self-organization.
Serokell is fully remote — our diverse background and fast-moving environment make everyday communication and workflow creative and fun. Our international team consists of talent from various spheres: software engineers, computer scientists, mathematicians, and many more inventive individuals. We work flexible hours in small, friendly teams and abide by certain principles: as little bureaucracy as possible (no unnecessary meetings, super detailed reports, etc.), proper management, healthy work/life balance, and continuous improvement.
If you’re interested, contact us via email: email@example.com.