Desarrollador de C++ (m/f/d)

¡Ahora también de forma remota!

Únase a nosotros como desarrollador de C++
Ubicación: Berlín, Alemania o de forma remota

¿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 130 000 euros anuales después de solo un año

Acerca de nosotros

Gracias, think-cell, por patrocinar la Fundación Standard C++ y por desafiar a nuestro equipo de compilador de Microsoft con un código complejo en C++.

Herb Sutter, presidente de la Fundación Standard C++

think-cell es una dinámica empresa de software con sede en Berlín (Alemania) que se centra en desarrollar productos para gráficos que destaquen en el mercado. Más de 1 000 000 usuarios de 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 hacemos concesiones respecto a la calidad y la belleza del código, ya que think-cell es una empresa rentable. 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++.
  • Hacemos un seguimiento pormenorizado de las últimas versiones de nuestros compiladores, Visual C++ y Xcode. Así, en todo momento podremos utilizar las últimas funciones estándar de C++ tan pronto como se publiquen.
  • 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++.
  • Somos patrocinadores de Standard C++ Foundation, ayudándole a fomentar la comprensión y utilización de la norma moderna Standard C++ en todos los compiladores y plataformas.

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 sobre este tema, 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.

Vea a nuestro CTO Arno respondiendo a las preguntas más frecuentes

Arno Schoedl (fundador y CTO de think-cell) y Volker Schöch (desarrollador de software sénior) responden a las preguntas más frecuentes sobre cómo optar a un puesto y trabajar en think-cell como desarrollador de C++.

En este vídeo puede aprender sobre:

Acerca de este trabajo

Buscamos desarrolladores hábiles y creativos con una sólida formación teórica. Nuestro equipo de desarrolladores lo integran personas con más de 15 años de experiencia comercial en diversos campos y recién licenciados en Informática, Física y Matemáticas. La combinación ideal para este puesto es un tener título de grado universitario o experiencia laboral en C++ y, además, mostrar una actitud de resolución de problemas innovadora y creativa. Todas las fases en que se divide nuestros proceso de selección de personal se basan en la ejecución de tareas, por lo que el resultado final depende de las destrezas exhibidas en las pruebas.

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 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 un equilibrio de vida laboral saludable. No trabajamos por la noche ni los fines de semana.

Pagamos salarios muy competitivos y ofrecemos a nuestros desarrolladores 130 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.

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?

Git, cuyo alojamiento se encuentra en nuestras instalaciones.

¿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.

¿Desea más información?

Si tiene alguna pregunta relativa al trabajo en think-cell, las vacantes que haya en la empresa o los eventos que tengamos previsto organizar, póngase en contacto con nuestra colega Julia Zhachuk.

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

representante de RR. HH. de think-cell.


Compartir