C++ Entwickler (m/w/d)

Jetzt auch remote!

C++ Entwickler (m/w/d) gesucht
Ort: Berlin, Deutschland oder remote

Strebst Du nach struktureller Schönheit, wenn es um Programmierung geht? Hast Du ein lebhaftes Interesse an eleganten Algorithmen? Bist Du C++ gewandt? 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
  • Wettbewerbsfähiges Gehalt von Anfang an und eine Erhöhung auf 130.000 EUR jährlich nach nur einem Jahr.

Über uns

Vielen Dank, think-cell, für das Sponsoring der Standard C++ Foundation und die Bereitstellung von komplexem C++-Code an das Microsoft Compiler-Team.

Herb Sutter, Präsident der Standard C++ Foundation

think-cell ist ein schnell wachsendes Software-Unternehmen mit Sitz in Berlin, das auf die Entwicklung innovativer Grafikprodukte spezialisiert ist. Mehr als 1.000.000 Nutzer weltweit verlassen sich bei ihrer täglichen Arbeit auf unsere Software, um grafische 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 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, in der 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 zusmmengestellt.

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++.
  • Wir verfolgen die neuesten Versionen unserer Compiler, von Visual C++ und Xcode genau, damit wir immer die neuesten C++-Standardfunktionen nutzen können, sobald diese verfügbar sind.
  • 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.
  • Wir sponsern die Standard C++ Foundation und fördern so die Anwendung und das Verständnis von modernem Standard-C++ auf allen Compilern und Plattformen.

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. Wir haben dazu einen Vortrag gehalten und das meiste des Codes ist öffentlich.
  • 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 zudem 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 in den 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.

Unser CTO Arno beantwortet Dir hier die häufigsten Fragen

Arno Schödl (think-cell-Gründer & CTO) und Volker Schöch (Senior Software Developer) beantworten häufig gestellte Fragen zur Bewerbung und zur Arbeit als C++-Entwickler bei think-cell.

In diesem Video erfährst Du hierzu mehr:

Über diesen Job

Wir suchen intelligente, kreative Entwickler mit soliden theoretischen Kenntnissen. In unserem Entwicklerteam arbeiten Leute mit mehr als 15 Jahren kaufmännischer Erfahrung in verschiedenen Bereichen zusammen mit frischgebackenen Absolventen in Informatik, Physik und Mathematik. Ein Hochschulabschluss oder Berufserfahrung mit C++, zusammen mit einem frischen und kreativen Problemlösungsansatz sind eine hervorragende Kombination für diese Position. Da alle unsere Einstellungsschritte aufgabenbezogen sind, erfolgt die Auswahl auf Basis der in unseren Tests nachgewiesenen Fähigkeiten.

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 arbeiten weder nachts noch am Wochenende.

Wir zahlen ein sehr attraktives Gehalt und bieten unseren Entwicklern nach einem Jahr Betriebszugehörigkeit ein Jahreseinkommen von 130.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.

Weitere Informationen zu unseren DevOps

Welche IDE und welchen 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?

Vor Ort gehostetes Git.

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 Ausbau 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 der Agile-Methode für Software-Entwicklung?

Wir kennen die Methoden der 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.

Du möchtest mehr erfahren?

Falls Du Fragen zur Arbeit bei think-cell, unseren offenen Stellen oder Events hast, wende Dich einfach an unsere Kollegin Julia Zhachuk.

hr@think-cell.com
+49 30 6664731-81

think-cell HR-Vertreterin.


Teilen