TOPJOB for C++ Developer

at one of the best Employers in Berlin

That's what you can expect

Do you believe in beauty when it comes to programming? Do you have a vivid interest in elegant algorithms? Are you fluent in C++? If so, we would like to meet you. Here is what we offer in a nutshell:

  • A wide array of extremely challenging C++ development tasks
  • An international team of brilliant minds
  • A working environment that makes this team stay and grow
  • Enough time to make sure that every detail of your solution is perfect
  • A flat organization and plenty of room for your ideas
  • No scheduled meetings
  • Family-friendly working hours, no deadlines, no overtime
  • Support for relocation
  • A competitive salary from the start and a raise up to EUR 120,000 annually after only one year

About the Software

The employer says about his software:

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.

Here are some highlights of what we have done.

Language

  • Everything we do is C++. Even our customer portal is written in C++. There is some Assembler glue code where it is necessary, and our build scripts are written in Python, but other than that think-cell is all about C++.
  • Naturally, we use C++11 features like lambdas and rvalue references throughout our codebase, and have switched to C++14 where our compilers support it.
  • 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++.

Library

  • We use Boost throughout our code, e.g., Boost.Spirit for parsing.
  • 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 develop our own cross-platform library to support Mac and Windows with a single code base.
  • We have our own reference-counting and persistence libraries to save and restore whole object trees.
  • 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.

Algorithms

  • We are founded on the idea for an algorithm for automatic slide layout, and we are still on an exciting journey towards that ambitious vision.
  • 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 many generic data structures that are not in C++ or Boost, for example partitions.
  • Our software not only produces charts, it is also able read them back from paper. For our chart recognition tool, we rely on OpenCV and the Leptonica Image Processing Library.

Reverse Engineering

  • We do lots of reverse engineering with the disassembler IDA from Hex-Rays, in order to achieve things that are not possible via the documented Microsoft Office API.
  • We wrote probably the best function hooking engine out there. On each start of our software, we patch the Microsoft Office executables in memory. Rather than hard-coding patch addresses, we search for small chunks of assembly code to be robust against minor changes in the executables.

The hiring process

  • you apply at Brainfinder LTD with a CV which shows you strength in C++
  • we review your application
    • maybe we come back to you with suggestions
  • we hand over your CV to the employer
  • you have to take a programming test to show your abilities as C++ developers
  • Your skills (instead of your background in experience or education) is what sends you to the next step in the recruitment process
  • The task has to be completed from a location of your choice within a 9 hour timeframe
  • You will receive a link to your personal recruiting website, where you will be able to start the test manually whenever you choose
  • All relevant information concerning the task itself or the technical equipment needed to solve it will be communicated on the recruiting website and/or within the test itself
  • The test is about a problem the developers have encountered in the past before and has many solutions, not only one
  • It allows the employer to compare the candidate’s abilities to others in a fair way
  • If you manage to create a working solution for the programming task you will be invited for a telephone interview
  • If you pass that stage, you will be invited for a face-to-face interview at the employers office, with the travel costs covered
  • the employer will decide if they would like to hire you shortly after the interview and they will inform you and us via email
  • It is important that you understand that you will never get personal feedback to the test if you didn’t pass it the employer will simply thank you and let you know about the outcome!

————————————————-

Here is how to apply at Brainfinder:

Please email to hiring@brainfinder.eu

  • Write your full name and “C++” in the the subject line
  • Attach your most recent CV
  • Tell us your availability / notice period
  • Tell us your salary expectations
  • Tell us if you think you are a junior, midlevel or senior

If you are interested in other interesting opportunities as well,
please download the
skill matrix here
please fill the matrix, save it as word97 and attach it

About the employer

The employer is a fast-paced software company in Berlin, Germany, with a focus on developing graphics products that stand out from the crowd. More than 550,000 users world-wide rely on our software for their daily business as it makes creating graphical presentations so much easier, faster and more enjoyable. Among our customers are many renowned consulting companies and large international corporations.

They do not have to make compromises with regard to code quality and beauty, because think-cell is profitable and has no outside investors. They are willing to go the extra mile of developing sophisticated algorithms and refining our user interface, and they are proud of our many happy customers. The fact that the company is owned and managed by seasoned computer scientists certainly contributes to a working environment that makes exceptional developers come and stay.

About this job

We are looking for smart, creative developers with a solid theoretical background. Developers we have hired in the past mostly hold an exceptional master's degree in computer science or even a doctorate. You will work largely independently and will be responsible for the whole range of activities when implementing a new feature. You should be able to look at a problem from the user's perspective and discuss abstract concepts with fellow developers. We expect each of our developers to do architecture, design, implementation, customer feedback and bug fixing, rather than splitting these activities between several people. We thus put everyone in control of their own work.

At this employer, there are no deadlines, and no scheduled meetings. A feature is ready to be released when you are convinced that you have implemented the best possible solution. Meetings take place as needed, with only the people that are actually involved being required to be present. At any time in the process, ideas, suggestions and criticism from anybody in the hierarchy is welcome and is seriously considered. Your ideas are welcome, even if they mean that we have to change a lot of code to make things better.

They have published several scientific articles in the areas of Artificial Intelligence and Computer Graphics and we will encourage you to do the same. We sponsor visits to conferences and have close relationships with universities and research institutes in the U.S. and Germany.

The employer encourages a healthy work-life balance. They do not work at night or on weekends, and support their staff's families with a full-time company nanny. She is available for free when children are sick, or when you just feel like spending an evening out.

They pay very competitive salaries and offer their developers up to EUR 120,000 annually following one year of employment. If necessary, they will go out of their way to help you relocate to Berlin, and they will do what they can to help you acquire a work permit. While you should be able to communicate effectively in English, knowing German is not required. German language courses can be arranged, if desired.

Even more details on their DevOps

Thats how the employer explains his DevOps:

Which IDE and compiler are you using?

We use Visual Studio with the MSVC compiler on Windows and Xcode with Clang on the Mac. As mentioned above, we compile from the same source code for both platforms.

Which toolkit do you use for UI?

We employ OpenGL on the Mac and DirectX on Windows to render our own user interface on top of PowerPoint's and Excel's window contents.

What do you use for issue tracking?

We have been using Request Tracker (RT) for many years now, but we are looking into alternatives.

Which version control system do you use?

We rely on a Subversion for version control because, in addition to plain code, we have many binary files to deal with. This gives our developers the freedom to choose the svn or git client, whichever they prefer.

Do you do unit tests?

We have implemented a toolkit that allows for an easy definition of unit tests directly in our code base. Unit tests are executed as part of every compile run.

Do you have a build server?

A dedicated machine runs Jenkins to continuously build the project and, in case of failure, automatically send email to developers that have committed code since the last successful build.

Do you have coding conventions?

We have a written set of coding conventions with very solid arguments for every single one of them. We do not hesitate to update our coding conventions when we find new or better arguments.

What do you think about static code analysis?

We tried a few tools but they hardly offered any valuable insights. Apparently, we are quite successful in avoiding the typical pitfalls by way of our coding conventions, and code reviews. More complex problems that escape our code reviews tend to go unnoticed during static code analysis as well. Employing a well-staffed test team and a vigilant support team with direct access to the developers has proven far more helpful in identifying sneaky bugs than static code analysis. That said, we keep looking for tools that help testers and developers to find more bugs more quickly.

What is your take on Agile as a methodology for software development?

We are aware of the modern software development methodologies that have evolved around the Agile movement and employ whatever is helpful for our project without getting into the way. This includes peer reviews; a high degree of self-organization and accountability; hallway usability tests; more formal tests with actual users; being ready to take new requirements or findings into account at any stage of the development process; frequent, automatic updates; a tight feedback loop with users, based on active user feedback as well as automatic reports from the software; using the best tools money can buy, like SSD RAIDs and gargantuan amounts of RAM for every developer; taking the time to ensure that every detail of our implementation gets the attention it deserves; taking the time to not write unnecessary code.