Desarrollador de C++

Únase a nosotros como desarrollador de C++
Lugar: Berlín (Alemania)

¿Cree en la belleza en el campo de la programación? ¿Tiene un interés especial en los algoritmos elegantes? ¿Domina el lenguaje C++? Si es así, nos gustaría conocerle. En resumen, esto es lo que ofrecemos:

  • Una amplia variedad de tareas de desarrollo de C++ extremadamente atractivas
  • Un equipo internacional formado por mentes brillantes
  • Un entorno de trabajo que hace que este equipo permanezca con nosotros y crezca
  • Tiempo suficiente para asegurarnos de que cada detalle de su solución sea perfecto
  • Una organización horizontal con amplia cabida para sus ideas
  • Sin reuniones semanales programadas
  • Sin plazos de entrega, sin horas extra y con un horario laboral flexible que permite la conciliación con la vida familiar
  • Asistencia para la reubicación
  • Un salario competitivo desde el principio y aumento hasta 120 000 euros anuales después de solo un año
Enviar solicitud por correo electrónico

Acerca de nosotros

think-cell es una empresa de software imparable con sede en Berlín (Alemania) centrada en desarrollar productos para gráficos que destaquen en el mercado. Más de 550 000 usuarios en todo el mundo confían en nuestro software para su actividad diaria, puesto que, gracias a él, crear presentaciones con gráficos es mucho más sencillo, rápido y ameno. Entre nuestros clientes, se encuentran muchas empresas de renombre del mundo de la consultoría y grandes empresas multinacionales.

No realizamos concesiones respecto a la calidad y la belleza del código, ya que think-cell es una empresa rentable y no tiene inversores externos. Estamos dispuestos a llevar a cabo el esfuerzo que haga falta para desarrollar algoritmos sofisticados y perfeccionar nuestra interfaz de usuario. Además, podemos estar orgullosos de contar con un gran número de clientes satisfechos. El hecho de que la empresa sea propiedad de expertos ingenieros informáticos, que también se encargan de dirigirla, contribuye a un entorno de trabajo en el que desarrolladores excelentes vienen para quedarse.

Acerca de nuestro software

Nos centramos en diapositivas empresariales (en lugar de en aplicaciones de carácter más artístico) porque ofrecen grandes posibilidades de automatización de las tareas de diseño que normalmente llevan a cabo los propios usuarios de PowerPoint. Los desafíos son numerosos: desde una concepción sólida sobre qué hace que un diseño sea de calidad y qué directrices siguen las personas que se encargan del diseño de forma manual, hasta algoritmos que producen un resultado aceptable con una rapidez suficiente para un diseño de diapositivas interactivo, pasando por una interfaz de usuario gráfica compatible con nuestro enfoque original y novedoso del diseño de diapositivas, de forma que resulte fácil de entender a la par que discreta, por soluciones técnicas robustas para la creación automatizada de informes de errores y actualizaciones automáticas, y por la compatibilidad con software de terceros en los ordenadores de medio millón de usuarios.

Estos son algunos de los pasos que ya hemos dado.

Idioma

  • Todo lo que hacemos se basa en el lenguaje C++. Incluso nuestro portal de clientes está escrito en C++. Hay cierto código de adherencia ensamblador donde es necesario y nuestras secuencias de comandos de compilación están escritas en Python pero, salvo esas excepciones, think-cell se basa completamente en C++.
  • Evidentemente, utilizamos características C++11 como referencias lambda y rvalue a través de nuestro código base, y hemos cambiado a C++14 donde nuestros compiladores cuentan con compatibilidad.
  • Financiamos el grupo de trabajo de lenguajes de programación del Instituto Alemán de Normalización (DIN). Algunos de nuestros empleados son miembros de este comité y votan en el proceso de normalización internacional de ISO/IEC C++.

Biblioteca

  • Utilizamos Boost en nuestro código, p. ej., Boost.Spirit para los análisis.
  • Contamos con una biblioteca de rangos propia, en la misma línea que la Boost.Range y la Range-V3 de Eric Niebler, pero hemos dado un paso más y, por ejemplo, hemos unificado la iteración interna y externa. Dimos una charla acerca de ello, y la mayor parte del código es público.
  • Desarrollamos nuestra propia biblioteca multiplataforma compatible con Mac y Windows con una sola base de código.
  • Contamos con nuestras propias bibliotecas de persistencia y recuento de referencias para guardar y restaurar árboles completos de objetos.
  • Tenemos una amplia infraestructura de creación de informes de errores. Las afirmaciones y las comprobaciones de errores permanecen en el código de liberación y nuestro software notifica automáticamente los errores a nuestro servidor. El servidor analiza el error, lo clasifica y lo archiva en una base de datos a la que pueden acceder todos los desarrolladores. Si el error se repara mediante una actualización, el usuario puede descargar la actualización directamente de una página web de respuesta a errores.

Algoritmos

  • think-cell se fundó en torno a la idea de un algoritmo para el diseño automático de diapositivas, visión ambiciosa que aún perseguimos con gran entusiasmo. Puede ver nuestra versión más reciente en acción aquí.
  • Hemos desarrollado un nuevo algoritmo para el etiquetado automático de nube de puntos que permite colocar las etiquetas fuera de los puntos reales.
  • Hemos desarrollado un nuevo algoritmo para el etiquetado automático de gráfico de columnas.
  • Estamos trabajando con John Forrest —autor del solucionador lineal CLP— para que su código simplex sea más rápido en nuestro tipo de problemas.
  • Hemos desarrollado numerosas estructuras de datos genéricos que no están ni en C++ ni en Boost, por ejemplo, particiones.
  • Nuestro software no solo crea gráficos: también es capaz de leerlos desde el papel. Como herramienta de reconocimiento de gráficos, confiamos en OpenCV y en la biblioteca de procesamiento de imágenes de Leptonica.

Ingeniería inversa

  • Llevamos a cabo muchos procesos de ingeniería inversa con el desensamblador IDA de Hex-Rays para realizar tareas que no son posibles mediante la API de Microsoft Office documentada.
  • Hemos escrito el que es probablemente el mejor motor de enlace de funciones del mercado. Cada vez que se inicia nuestro software, parcheamos los ejecutables de Microsoft Office en la memoria. En lugar de aplicar parches a las direcciones mediante codificación, buscamos pequeños trozos de código ensamblador para que sean estables frente a leves modificaciones de los ejecutables.

Acerca de este trabajo

Buscamos desarrolladores hábiles y creativos con una sólida formación teórica. Los desarrolladores que contratamos habitualmente tienen un máster en informática excepcional o incluso un doctorado. Trabajará principalmente de manera independiente y será responsable de toda la serie de actividades relacionadas con la implementación de una nueva característica. Se debe poder analizar un problema desde la perspectiva del usuario y analizar conceptos abstractos con otros desarrolladores. Esperamos que todos nuestros desarrolladores se encarguen de la arquitectura, el diseño, la implementación, los comentarios de los clientes y la corrección de errores, en lugar de dividir estas actividades entre varias personas. De este modo, hacemos que cada cual controle su propio trabajo.

En think-cell, no hay plazos de entrega ni reuniones diarias o semanales programadas. Una característica está lista para publicarse cuando está convencido de que ha implementado la mejor solución posible. Las reuniones tienen lugar cuando son necesarias y a ellas solo asisten las personas realmente implicadas y que tienen que estar presentes. En cualquier momento a lo largo del proceso, son bienvenidas y tenemos muy en cuenta las ideas, las sugerencias y las críticas de cualquier persona, independientemente de su posición en la jerarquía. Las ideas son bienvenidas, incluso si significa que hay que cambiar una cantidad considerable de código para realizar mejoras.

Hemos publicado varios artículos científicos en las áreas de inteligencia artificial y gráficos por ordenador, y le animamos a que haga lo mismo. Patrocinamos visitas a congresos y tenemos una estrecha relación con universidades e institutos de investigación en Estados Unidos y Alemania.

think-cell fomenta la conciliación entre la vida personal y laboral. No trabajamos por la noche ni los fines de semana, y ayudamos a las familias de nuestros empleados con una niñera de empresa a jornada completa. Está disponible de forma gratuita cuando los niños enferman y también si los empleados desean salir una noche.

Pagamos salarios muy competitivos y ofrecemos a nuestros desarrolladores 120 000 euros anuales tras el primer año con nosotros. En caso necesario, dejaremos nuestros quehaceres para ayudarles con la mudanza a Berlín y haremos todo lo posible por ayudarles a obtener un permiso de trabajo. Saber alemán no es obligatorio, aunque debe poder comunicarse en inglés de forma fluida. Si lo desea, puede asistir a cursos de alemán.

Enviar solicitud por correo electrónico

Más detalles de nuestro sistema DevOps

¿Qué IDE y qué compilador utilizan?

Utilizamos Visual Studio con el compilador MSVC en Windows y Xcode con Clang en Mac. Como ya hemos indicado antes, realizamos las compilaciones para las dos plataformas a partir del mismo código fuente.

¿Qué kit de herramientas utilizan para la interfaz de usuario?

Empleamos OpenGL en Mac y DirectX en Windows para representar nuestra propia interfaz de usuario sobre los contenidos de la ventana de PowerPoint y Excel.

¿Qué utilizan para realizar el seguimiento de problemas?

Llevamos utilizando Request Tracker (RT) muchos años, pero estamos buscando alternativas.

¿Qué sistema de control de versiones utilizan?

Utilizamos una versión secundaria para el control de versiones porque, además del código sencillo, tenemos que tratar con muchos archivos binarios. De esta manera, nuestros desarrolladores tienen la libertad de elegir el cliente svn o git, según lo prefieran.

¿Llevan a cabo pruebas unitarias?

Hemos implementado un kit de herramientas que permite una definición sencilla de las pruebas unitarias en nuestra base de código. Las pruebas unitarias se ejecutan como parte de la ejecución de cada compilación.

¿Cuentan con un servidor de compilación?

Un equipo específico ejecuta Jenkins para compilar de forma continua el proyecto y, en caso de fallo, enviar automáticamente un mensaje de correo electrónico a los desarrolladores que hayan añadido código desde la última compilación correcta.

¿Cuentan con principios de codificación?

Hemos redactado una serie de principios de codificación con unos sólidos argumentos sobre los que se sustenta cada uno de ellos. Además, no dudamos en actualizar nuestros principios de codificación cuando se nos plantean nuevos o mejores argumentos.

¿Qué opinan del análisis de código estático?

Hemos probado algunas herramientas, pero a penas ofrecían una información valiosa. Parece ser que nos las ingeniamos bastante bien para evitar los típicos fallos con nuestros principios de codificación y las revisiones de código que llevamos a cabo. Los problemas más complejos que pasan inadvertidos en nuestras revisiones de código no suelen detectarse tampoco en los análisis de código estáticos. Contar con un buen equipo de control de calidad y un equipo de soporte técnico con ojo avizor que cuenten con un acceso directo a los desarrolladores resulta mucho más útil a la hora de identificar errores engañosos que el análisis de código estático. Dicho esto, siempre estamos buscando herramientas que sirvan de ayuda a los desarrolladores para detectar más errores de forma más rápida.

¿Qué opinan de Agile como metodología de desarrollo de software?

Conocemos las metodologías modernas de desarrollo de software que han surgido en torno al movimiento de Agile y empleamos todo aquello que sea útil para nuestro proyecto sin que resulte un obstáculo. Esto incluye revisiones realizadas por homólogos; un grado elevado de autoorganización y responsabilidad; pruebas espontáneas e informales de usabilidad; pruebas más formales con usuarios reales; la capacidad de tener en cuenta nuevos requisitos o hallazgos en cualquier fase del proceso de desarrollo; actualizaciones automáticas frecuentes; un estrecho ciclo de retroalimentación basado en los comentarios de usuarios activos así como en informes automatizados del software; el uso de las mejores herramientas que se puedan adquirir, como RAID de SSD y cantidades colosales de memoria RAM para cada desarrollador; invertir el tiempo necesario para asegurarse de que a cada detalle de nuestra implementación se le dedica la atención que merece; y dedicar el tiempo necesario para evitar escribir código innecesario.

¿Le parece atractivo?

Si es la persona que falta en nuestro equipo, envíenos su solicitud electrónica.

Enviar solicitud por correo electrónico

¿Desea más información?

Si tiene alguna pregunta sobre cómo es trabajar en think-cell, las vacantes que están disponibles o los eventos que tenemos previsto realizar, póngase en contacto con nuestra compañera Claudia Roman.

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