C++ Developer (m/w)

C++ Developer (m/w) gesucht
Ort: Berlin

Strebst Du nach struktureller Schönheit, wenn es um Programmierung geht? Hast Du ein lebhaftes Interesse an eleganten Algorithmen? Beherrschst Du C++? Falls ja, würden wir Dich gerne kennenlernen. Hier unser Angebot in aller Kürze:

  • Ein breites Spektrum an besonders spannenden Aufgaben in der C++-Entwicklung
  • Ein internationales Team brillanter Köpfe
  • Eine Arbeitsumgebung, in der das Team sich wohlfühlt und beständig wächst
  • Genug Zeit, um sicherzugehen, dass Deine Lösung bis ins kleinste Detail stimmt
  • Flache Hierarchien und genug Raum für Deine Ideen
  • Keine angesetzten Meetings
  • Familienfreundliche Arbeitszeiten, keine Deadlines, keine Überstunden
  • Unterstützung beim Umzug
  • Von Beginn an eine wettbewerbsfähige Vergütung und eine Gehaltserhöhung auf 120.000 EUR Jahresgehalt nach nur einem Jahr
Jetzt per E-Mail bewerben

Über uns

think-cell ist ein schnell wachsendes Software-Unternehmen mit Sitz in Berlin, das auf die Entwicklung innovativer Grafikprodukte spezialisiert ist. Mehr als 550.000 Anwender weltweit verlassen sich bei ihrer täglichen Arbeit auf unsere Software, um PowerPoint-Präsentationen einfacher, schneller und effizienter zu erstellen. Zu unseren Kunden zählen viele renommierte Beratungsunternehmen sowie große internationale Firmen.

Wir müssen hinsichtlich der Codequalität und -ästhetik keine Kompromisse eingehen, da think-cell ein hochprofitables und von externen Investoren unabhängiges Unternehmen ist. In der Entwicklung fortschrittlicher Algorithmen und bei der Verbesserung unserer Benutzeroberfläche scheuen wir keinen Mehraufwand und können stolz auf eine Vielzahl zufriedener Kunden blicken. Unser Unternehmen wird von erfahrenen Informatikern geführt und das trägt mit Sicherheit dazu bei, dass sich außergewöhnliche Entwickler in dieser Arbeitsumgebung wohlfühlen.

Über unsere Software

Unser Schwerpunkt liegt auf kaufmännischen Präsentationen (im Gegensatz zu eher künstlerischen Anwendungsbereichen), da diese ein größeres Potenzial zur Automatisierung von Aufgaben bieten, die bislang in der Regel von PowerPoint-Anwendern selbst durchgeführt werden. Die Herausforderungen sind dabei zahlreich: von einem eingehenden Verständnis dazu, was ein gutes Layout ausmacht und welche Richtlinien bei der Erstellung eines Layouts beachten werden müssen, über Algorithmen, die akzeptable Ergebnisse liefern, die schnell genug für ein interaktives Foliendesign sind, und einer neuen grafischen Benutzeroberfläche, die unseren neuen, originellen Ansatz bezüglich des Folienlayouts leicht verständlich und reibungslos gestaltet, bis hin zu soliden technischen Lösungen für die automatisierte Fehlerberichterstattung und automatische Updates sowie der Kompatibilität mit Software von Drittanbietern auf den Computern von über einer halben Million Benutzern.

Nachfolgend haben wir einige Highlights unserer Arbeit zusammengestellt.

Sprache

  • Wir programmieren alles in C++. Selbst unser Kundenportal ist in C++ geschrieben. Der Glue Code wird gegebenenfalls in Assembler erstellt und unsere Build-Scripts sind in Python geschrieben, aber davon abgesehen geht es bei think-cell nur um C++.
  • Selbstverständlich verwenden wir C++11-Funktionen wie Lambdas und R-Wert-Referenzen in unserer gesamten Codebasis. Und wir sind auf C++14 umgestiegen, wo unsere Compiler dies unterstützen.
  • Wir finanzieren die Arbeitsgemeinschaft für Programmiersprachen des Deutschen Instituts für Normung (DIN). Einige unserer Mitarbeiter sind Mitglied dieses Ausschusses und im internationalen Standardisierungsprozess von ISO/IEC C++ wahlberechtigt.

Bibliothek

  • Wir verwenden Boost in unserem gesamten Code, zum Beispiel Boost.Spirit für das Parsing.
  • Wir haben eine eigene Range-Bibliothek, die mit Boost.Range oder range-v3 von Eric Niebler vergleichbar ist, aber weiter geht als diese, indem z. B. externe und interne Iterationen vereinheitlicht werden. Zu diesem Thema haben wir einen Vortrag gehalten und der Großteil des Codes ist verfügbar.
  • Wir entwickeln unsere eigene plattformunabhängige Bibliothek zur Unterstützung von Windows und Mac auf einer gemeinsamen Codebasis.
  • Wir haben unsere eigenen Reference-Counting- und Persistenzbibliotheken, um ganze Objektstrukturen zu speichern und wiederherzustellen.
  • Wir besitzen eine umfangreiche Infrastruktur für Fehlerberichte. Assertions- und Fehlerprüfungen bleiben im freigegebenen Code und unsere Software meldet Fehler automatisch an unseren Server. Der Server analysiert den Fehler, kategorisiert ihn und speichert ihn in einer Datenbank, auf die alle Entwickler Zugriff haben. Wird der Fehler durch ein Update behoben, kann der Benutzer dieses Update direkt von einer Fehlerantwortseite herunterladen.

Algorithmen

  • think-cell wurde mit dem Ziel gegründet, einen Algorithmus für ein automatisches Folienlayout zu entwickeln, und bis zum heutigen Tag befinden wir uns auf einer aufregenden Reise, um diese ambitionierte Vision zu erreichen. Hier siehst Du unsere neueste Version in Aktion!
  • Wir haben einen neuen Algorithmus für die automatische Beschriftung von Punktwolken entwickelt, der es ermöglicht, die Beschriftungen entfernt von den Punkten zu positionieren.
  • Wir haben einen neuen Algorithmus für die automatische Beschriftung von Säulendiagrammen entwickelt.
  • Wir arbeiten mit John Forrest, dem Verfasser des Linearen Solvers CLP, zusammen, um seinen Simplex-Code für unsere gegenwärtigen Probleme schneller zu machen.
  • Wir haben mehrere allgemeine Datenstrukturen entwickelt, die nicht in C++ oder Boost zu finden sind, zum Beispiel Partitionen.
  • Unsere Software erstellt nicht nur Diagramme, sie ist auch in der Lage, diese vom Blatt zu lesen. Für unser Tool zur Diagrammerkennung verwenden wir OpenCV und die Leptonica Image Processing Library.

Reverse Engineering

  • Wir nutzen häufig das Reverse Engineering mit dem Disassember IDA von Hex-Rays um Dinge zu erreichen, die über die dokumentierte API von Microsoft Office nicht möglich sind.
  • Wir haben das wahrscheinlich beste Modul für das Function Hooking geschrieben. Bei jedem Start unserer Software patchen wir die ausführbaren Dateien von Microsoft Office im Speicher. Anstelle von fest codierten Patch-Adressen suchen wir nach kurzen Abschnitten von Assembler-Code, um robust gegenüber kleinen Code-Änderungen in den Binärdateien zu sein.

Über diesen Job

Wir suchen intelligente, kreative Entwickler mit soliden theoretischen Kenntnissen. Fast alle unsere Entwickler haben einen überdurchschnittlich guten Master-Abschluss oder eine Promotion im Fach Informatik. Du wirst größtenteils selbständig arbeiten und bist bei der Implementierung einer neuen Funktion für den gesamten Prozess zuständig. Du solltest Probleme aus der Benutzerperspektive sehen und abstrakte Konzepte mit anderen Entwicklern erörtern können. Wir erwarten von allen unseren Entwicklern, dass sie selbstständig in den Bereichen Architektur, Design, Implementierung, Kundenfeedback und Fehlerbehebung arbeiten, anstatt diese Tätigkeiten auf mehrere Mitarbeiter aufzuteilen. Daher überlassen wir jedem die volle Kontrolle über seine Arbeit.

Bei think-cell gibt es weder Deadlines noch anberaumte Meetings. Eine Funktion ist zur Veröffentlichung bereit, wenn Du überzeugt bist, die bestmögliche Lösung implementiert zu haben. Meetings finden nach Bedarf statt und nur diejenigen, die tatsächlich involviert sind, müssen daran teilnehmen. Ideen, Vorschläge und Kritik sind jederzeit während des Prozesses von jedem einzelnen willkommen und jedes Feedback wird ernsthaft berücksichtigt. Wir schätzen Deine Ideen, auch wenn diese bedeuten, dass umfangreiche Code-Änderungen vorgenommen werden müssen, um Deine Vorschläge zu implementieren.

Wir haben einige wissenschaftliche Artikel in den Bereichen Künstliche Intelligenz und Computergrafik veröffentlicht, wozu wir auch Dich ermutigen werden. Wir finanzieren Konferenzbesuche und haben enge Beziehungen zu Universitäten und Forschungseinrichtungen in den USA und Deutschland.

think-cell fördert eine gesunde Work-Life-Balance. Wir erwarten keine Abend- oder Wochenendarbeit und unterstützen die Familien unserer Mitarbeiter mit einer vom Unternehmen gestellten Vollzeit-Kinderbetreuung. Die Betreuungsperson steht kostenlos zur Verfügung, wenn Deine Kinder krank sind oder Du gerne einfach mal abends ausgehen möchtest.

Wir zahlen ein sehr attraktives Gehalt und bieten unseren Entwicklern nach einem Jahr Betriebszugehörigkeit ein Jahreseinkommen von 120.000 Euro. Bei einem Umzug nach Berlin oder falls eine Arbeitserlaubnis erforderlich sein sollte, werden wir natürlich unser Möglichstes tun. Du solltest über sehr gute Englischkenntnisse verfügen. Sprachkenntnisse in Deutsch werden nicht vorausgesetzt. Falls gewünscht, können Sprachkurse für Deutsch angeboten werden.

Jetzt per E-Mail bewerben

Weitere Informationen zu unseren DevOps

Welche IDE und welche Compiler werden verwendet?

Unter Windows verwenden wir Visual Studio mit dem MSVC-Compiler und auf dem Mac Xcode mit Clang. Wie bereits erwähnt, kompilieren wir für beide Plattformen den gleichen Quellcode.

Welches Toolkit wird für das UI verwendet?

Wir verwenden OpenGL auf dem Mac und DirectX unter Windows, um unsere eigene Benutzeroberfläche über den Fensterinhalten von PowerPoint und Excel zu rendern.

Welches Tool wird für die Problemverfolgung verwendet?

Wir verwenden seit vielen Jahren Request Tracker (RT), sind aber mittlerweile auf der Suche nach Alternativen.

Welches System zur Versionskontrolle wird verwendet?

Für die Versionskontrolle setzen wir auf Subversion, da wir neben dem Klartext auch mit vielen Binärdateien zu tun haben. Dies gibt unseren Entwicklern die Freiheit, zwischen dem svn oder dem git Client zu wählen, je nachdem, welchen sie bevorzugen.

Werden Komponententests durchgeführt?

Wir setzen ein Toolkit ein, das einfache Komponententests direkt in unserer Codebasis ermöglicht. Komponententests werden als Teil jedes Compiler-Laufs durchgeführt.

Gibt es einen eigenen Build-Server?

Auf einer dezidierten Maschine läuft Jenkins zum kontinuierlichen Bauen des Projekts. Im Falle einer Störung werden automatisch E-Mails an alle Entwickler versendet, die seit dem letzten erfolgreichen Build Code hochgeladen haben.

Gibt es Vorgaben zum Coding?

Wir haben eine Reihe schriftlich dokumentierter Vorgaben zum Coding mit sehr starken Argumenten für jede einzelne Vorgabe. Wenn neue oder bessere Argumente gefunden werden, passen wir unsere Coding-Vorgaben gerne an.

Wie sieht es mit statischer Code-Analyse aus?

Wir haben einige Tools ausprobiert, aber keines davon bot wertvolle Einblicke. Offenbar sind wir dank unserer Coding-Vorgaben und unserer Code-Revision sehr erfolgreich darin, die typischen Fallstricke zu umgehen. Komplexere Probleme, die bei der Code-Revision unbemerkt bleiben, werden in der Regel auch nicht bei einer statischen Code-Analyse entdeckt. Ein gut ausgebildetes Test-Team und ein wachsames Support-Team mit direktem Zugang zu den Entwicklern haben sich als weitaus hilfreicher bei der Auffindung von Fehlern erwiesen als eine statische Code-Analyse. Daher sind wir auf der Suche nach Tools, die unseren Testern und Entwicklern helfen, mehr Fehler in kürzerer Zeit zu finden.

Wie lautet der Ansatz bezüglich agiler Methoden für Software-Entwicklung?

Wir kennen die Methoden der modernen Software-Entwicklung, die um die Agile-Bewegung herum entstanden sind, und verwenden diese immer dann, wenn sie für unser Projekt hilfreich sind und kein Hindernis darstellen. Dazu zählen Peer Reviews, ein hohes Maß an Selbstorganisation und Verantwortlichkeit, umfassende Usability-Tests, formalere Tests mit tatsächlichen Benutzern, die Bereitschaft, neue Anforderungen und Erkenntnisse in jedem Stadium des Entwicklungsprozesses zu berücksichtigen, häufige automatische Updates, ein enger Bezug zum Feedback der Benutzer sowohl auf Grundlage aktiven Benutzer-Feedbacks wie auch automatischer Berichte durch die Software, die Verwendung der besten Tools, die man für Geld kaufen kann, wie zum Beispiel SSD-RAIDs und gewaltige Mengen RAM für jeden Entwickler, die Zeit, die erforderlich ist, um sicherzustellen, dass jedes Detail unserer Implementierung die Aufmerksamkeit erhält, die es verdient, und sich die Zeit zu nehmen, keinen überflüssigen Code zu schreiben.

Klingt das gut?

Wenn Du unser Team bereichern möchtest, sende uns bitte Deine Bewerbung per E-Mail.

Jetzt per E-Mail bewerben

Du möchtest mehr erfahren?

Falls Du Fragen zur Arbeit bei think-cell, unseren Stellenangeboten oder Events hast, wende Dich bitte an unsere Kollegin Annika Mehr.

hr@think-cell.com
+49 30 666473-10