383789 С++ Developer (relocation to Berlin)
Since 2002, we produce graphics software that performs most of the painstaking work of creating data-driven slides for professional Excel and PowerPoint users. PowerPoint slide creation is one of the most popular things professionals use a computer for. Thus, it is rather surprising that while intelligent software has revolutionized many things we frequently do, such as web search in our browser, or telephone speech recognition in a call center, office productivity software has not changed much over the past decade or so.
Our focus is on business slides (as opposed to more artful applications) because they offer great potential for automation of layout tasks that are traditionally performed by PowerPoint users themselves. Challenges are plenty: from a solid understanding of what makes a good layout and which guidelines are followed by humans who do manual layout, to algorithms that produce an acceptable output fast enough for interactive slide design, to a graphical user interface that supports our new, original approach to slide layout in a way that is easy to understand yet unobtrusive, to solid technical solutions for automatic bug reporting and automatic updates, to compatibility with third-party software on the computers of half a million users.
Experience and Background
We are looking for smart, creative developers with a solid theoretical background. You should be able to look at a problem from the user's perspective, discuss abstract concepts with fellow developers, as well as produce an elegant implementation.
We like flat hierarchies. You will work largely independently and will be responsible for the whole range of activities when implementing a new feature. We expect each of our developers to do architecture, design, implementation and bug fixing, rather than splitting these activities between several people. We thus minimize communication losses and put everyone in control of their own work. Your ideas are welcome, even if they mean that we have to change a lot of code to make things better.
• We developed a new algorithm for automatic point cloud labeling that allows labels to be positioned away from the actual points.
• We developed a new algorithm for automatic column chart labeling.
• We are working with John Forrest – author of the linear solver CLP – to make his simplex code faster on our kind of problems.
• We developed quite a few generic data structures that are not in C++ or Boost, for example partitions.
• To do things that are not possible via the documented Microsoft Office API, we do lots of reverse engineering with the disassembler IDA from Hex-Rays.
• We wrote probably the best function hooking engine out there. On each start of our software, we patch the Microsoft Office executables in memory. We search for small chunks of assembly code rather than hard-coding patch addresses to be robust against minor code modifications.
• We redirect PowerPoint's and Excel's window contents into offscreen buffers and use Direct3D 9.0 to render our user interface on top.
• We fund the working group for programming languages of the German Institute for Standardization (DIN). Some of our employees are members of this committee and vote in the international standardization process of ISO/IEC C++.
• We use C++ features like lambdas and rvalue references throughout our codebase, and have switched to C++17 where our compilers support it.
• We use Boost throughout our code, e.g., Boost.Spirit for most of our parsing needs.
• We have our own range library, in the same spirit as Boost.Range or Eric Niebler’s range-v3, but going further, for example, by unifying internal and external iteration. We gave a talk about it, and most of the code is public.
• We have our own reference-counting and persistence libraries to save and restore whole object trees.
• We wrote a parser and writer for the Excel .xls format.
• We have an extensive bug reporting infrastructure. Assertions and error checks stay in the release code, and our software automatically reports bugs to our server. The server analyzes the bug, categorizes it and files it in a database that all developers can access. If an update fixes the bug, the user can download the update directly from a bug response web page.
• Programming test to show C++ abilities (usually shouldn't take more than 3-4 hours to complete);
• Telephone interview, where the candidate gets another problem/s to solve;
• Face-to-face interview at the office in Berlin.
Conditions and perks
• Competitive salary;
• Relocation package;
• Modern office is in the middle of Berlin;
• Fresh bakery, fruits, drinks and snacks available;
• If the candidate is successful in the recruitment process other benefits can be negotiated by the candidate directly with one of the co-founders.