Desenvolvedor de C++

Trabalhe conosco como desenvolvedor de C++
Local: Berlim, Alemanha

Você acredita em beleza quando se trata de programação? Você tem grande interesse em algoritmos elegantes? Você é fluente em C++? Em caso afirmativo, gostaríamos de conhecê-lo. Em resumo, aqui está o que oferecemos:

  • Uma ampla gama de tarefas de desenvolvimento C++ extremamente desafiadoras
  • Uma equipe internacional de mentes brilhantes
  • Um ambiente de trabalho que faz essa equipe permanecer e crescer
  • Tempo suficiente para assegurar que cada detalhe da sua solução seja perfeito
  • Uma organização horizontal e cheia de espaço para as suas ideias
  • Sem reuniões programadas
  • Horários de trabalho compatíveis com a vida familiar, sem prazos e sem hora extra
  • Suporte em caso de transferência de local
  • Salário competitivo desde o início e aumento para 120.000 euros anuais após somente um ano
Candidate-se agora por e-mail

Sobre nós

A think-cell é uma empresa de software de rápido crescimento com sede em Berlim, na Alemanha, com foco no desenvolvimento de produtos gráficos que se sobressaiam aos demais. Mais de 550.000 usuários no mundo todo contam com o nosso software para seu negócio diariamente, uma vez que ele torna a criação de apresentações gráficas muito mais fácil, rápida e agradável. Entre nossos clientes estão muitas empresas renomadas de consultoria e grandes corporações internacionais.

Não temos que fazer concessões em matéria de qualidade e beleza de código, pois a think-cell é rentável e não tem investidores externos. Estamos dispostos a ir um pouco além no desenvolvimento de algoritmos sofisticados e no aprimoramento da nossa interface do usuário e sentimos orgulho dos nossos muitos clientes satisfeitos. O fato de que a empresa pertence e é gerenciada por cientistas de computação experientes certamente contribui para um ambiente de trabalho que faz com que desenvolvedores excepcionais cheguem e permaneçam.

Sobre o nosso software

Nosso foco é em slides empresariais (em oposição a aplicativos mais especializados) porque eles oferecem maior potencial de automação das tarefas de layout que são tradicionalmente executadas pelos próprios usuários do PowerPoint. Os desafios são muitos e vão desde o entendimento sólido do que faz um bom layout e quais diretrizes são seguidas pelas pessoas que fazem o layout manual até os algoritmos que produzem um resultado aceitável rápido o suficiente para o design do slide interativo; a interface gráfica do usuário que suporta nosso novo enfoque original; o layout de slide de modo que seja fácil de entender, ainda que discreto, e as soluções técnicas sólidas para relatório automático de bugs e atualizações automáticas para compatibilidade com softwares de terceiros nos computadores de meio milhão de usuários.

Veja a seguir alguns destaques do que fizemos:

Idioma

  • Tudo o que fazemos é C++. Mesmo o nosso portal do cliente é escrito em C++. Há um pouco de código cola Assembler quando é necessário, e os nossos scripts de criação são escritos em Python, mas, fora isso, a think-cell é toda em C++.
  • Naturalmente, usamos recursos C++11, como referências lambdas e rvalue em toda a nossa base de código e mudamos para C++14 onde nossos compiladores suportam.
  • Nós financiamos o grupo de trabalho de linguagens de programação do Instituto Alemão para Normatização (DIN). Alguns de nossos funcionários são membros desse comitê e votam nos processos internacionais de padronização do C++ ISO/IEC.

Biblioteca

  • Usamos o Boost em todo o nosso código, como, por exemplo, Boost.Spirit para análise.
  • Nós temos nossa própria biblioteca de intervalos, com o mesmo espírito do Boost.Range ou do range-v3 de Eric Niebler, mas vamos além, por exemplo, com a unificação interna e iteração externa. Nós demos uma palestra sobre para falar sobre isso, e a maior parte do código é pública.
  • Desenvolvemos a nossa biblioteca multiplataformas para ser compatível com Mac e Windows em uma única base de códigos.
  • Temos nossas próprias bibliotecas de contagem de referência e persistência para salvar e recuperar árvores inteiras de objetos.
  • Contamos com uma infraestrutura abrangente de relatório de erros. As verificações de erro e asserções são mantidas no código publicado e nossos programas informam automaticamente nossos servidores sobre erros. O servidor analisa o erro, define sua categoria e o armazena em um banco de dados, onde todos os desenvolvedores têm acesso. Se uma atualização corrigir o erro, o usuário poderá baixar a atualização diretamente de uma página de respostas a erros.

Algoritmos

  • A think-cell foi fundada a partir de uma ideia para um algoritmo para layout de slide automático e ainda estamos nessa jornada excitante em direção a uma visão ambiciosa. Você pode ver a nossa versão mais recente em ação!
  • Desenvolvemos um novo algoritmo para rotulagem automática de nuvem de pontos que permite que os rótulos sejam posicionados afastados dos pontos propriamente ditos.
  • Desenvolvemos um novo algoritmo para rotulagem automática de gráficos de colunas.
  • Estamos trabalhando com John Forrest (autor do solucionador linear CLP) para tornar o código simplex mais veloz com os tipos de problemas com que trabalhamos.
  • Desenvolvemos muitas estruturas genéricas de dados que não foram criadas com C++ ou Boost, como, por exemplo, partições.
  • Nosso software não apenas produz gráficos, ele também os lê do papel. Para nossa ferramenta de reconhecimento de gráfico, confiamos no OpenCV e na Biblioteca de Processamento de Imagens Leptônica.

Engenharia reversa

  • Empregamos muita engenharia reversa com o desmontador IDA da Hex-Rays para realizar tarefas que não são possíveis através da API do Microsoft Office documentada.
  • Criamos o que é provavelmente o melhor sistema de ganchos de funções que existe. Sempre que nosso software é executado, corrigimos os arquivos executáveis do Microsoft Office em memória. Em vez de inserirmos endereços de correção fixos, procuramos pequenos trechos de código de montagem para que seja robusto contra pequenas modificações nos executáveis.

Sobre o emprego

Estamos procurando desenvolvedores inteligentes e criativos, com sólida formação teórica. Os desenvolvedores que contratamos no passado contavam com mestrado ou mesmo doutorado em ciências da computação. Em grande parte, você vai trabalhar de forma independente e será responsável por uma grande variedade de atividades ao implementar um novo recurso. Você deve ser capaz de analisar um problema a partir da perspectiva do usuário e discutir conceitos abstratos com outros desenvolvedores. Esperamos que todos os nossos desenvolvedores façam a arquitetura, o design, a implementação, o feedback do cliente e a correção de erros, em vez de dividirem essas atividades entre diversas pessoas. Assim, colocamos todos no controle do próprio trabalho.

Na think-cell, não há prazos nem reuniões programadas. Um recurso está pronto para ser publicado quando você estiver convencido de que implementou a melhor solução possível. As reuniões são realizadas conforme a necessidade, somente com as pessoas que realmente estão envolvidas presentes. A qualquer momento no processo, ideias, sugestões e críticas de qualquer pessoa na hierarquia são bem-vindas e levadas seriamente em consideração. Suas ideias são bem-vindas, mesmo que impliquem mudança de grande parte do nosso código para melhorar o conjunto.

Publicamos diversos artigos científicos nas áreas de inteligência artificial e computação gráfica e o incentivamos a fazer o mesmo. Patrocinamos visitas a conferências e temos contatos próximos com universidades e institutos de pesquisa nos EUA e na Alemanha.

A think-cell incentiva o equilíbrio saudável entre trabalho e vida pessoal. Não trabalhamos à noite ou nos fins de semana e ajudamos as famílias da nossa equipe com uma babá na empresa em tempo integral. Ela é disponibilizada gratuitamente quando as crianças ficam doentes ou se você quiser passar uma noite fora.

Pagamos salários muito competitivos e oferecemos aos nossos desenvolvedores 120.000 euros anuais após um ano de trabalho na empresa. Caso necessário, nós o ajudaremos a se mudar para Berlim e faremos o possível para ajudá-lo a obter uma autorização de trabalho. Em contrapartida, você deva ser capaz de se comunicar de modo eficiente em inglês, o conhecimento de alemão não é obrigatório. Cursos do idioma alemão podem ser arranjados, se desejado.

Candidate-se agora por e-mail

Mais detalhes em nosso DevOps

Qual IDE e compilador vocês estão usando?

Usamos o Visual Studio com o compilador MSVC no Windows e Xcode com Clang no Mac. Conforme mencionado acima, compilamos do mesmo código fonte para as duas plataformas.

Qual kit de ferramentas vocês usam para UI?

Usamos OpenGL no Mac e DirectX no Windows para renderizar a nossa própria interface do usuário no topo do conteúdo da janela do PowerPoint e do Excel.

O que vocês usam para o rastreamento de problemas?

Usamos o Request Tracker (RT) há muitos anos, mas estamos buscando alternativas.

Qual sistema de controle de versão vocês usam?

Contamos com um Subversão para o controle de versão porque, além do código simples, temos muitos arquivos binários para trabalhar. Isso dá aos desenvolvedores liberdade para escolher o svn ou git client, o que ele preferir.

Vocês fazem testes de unidade?

Implementamos um kit de ferramentas que permite uma definição fácil dos testes de unidade diretamente em nossa base de códigos. Os testes de unidade são executados como parte de cada execução de compilação.

Vocês têm um servidor de build?

Uma máquina dedicada executa Jenkins para construir continuamente o projeto e, em caso de falha, envia automaticamente um e-mail aos desenvolvedores que tenham enviado código desde a última construção bem-sucedida.

Vocês têm convenções de código?

Temos um conjunto de convenções de códigos escrita com argumentos muito sólidos para cada um deles. Não hesitamos em atualizar as nossas convenções de códigos quando encontramos argumentos novos e melhores.

O que vocês pensam a respeito da análise de códigos estática?

Experimentamos algumas ferramentas, mas elas não ofereceram nenhum insight valioso. Aparentemente, somos bem-sucedidos em evitar as armadilhas típicas por meio das nossas convenções de códigos e revisões de código. Problemas mais complexos que escapam das nossas revisões de código tendem a não ser notados também durante a análise de código estática. Empregar uma equipe de teste bem preparada e uma equipe de suporte vigilante com acesso direto aos desenvolvedores se comprovou muito mais útil na identificação de bugs furtivos do que a análise de código estática. Isso posto, continuamos procurando ferramentas que ajudem os testadores e desenvolvedores a encontrar mais bugs com mais rapidez.

Qual é a sua opinião sobre o Agile como metodologia para o desenvolvimento de software?

Estamos cientes das metodologias de desenvolvimento de software modernas que evoluíram ao redor do movimento Agile e empregamos tudo o que for útil para o nosso projeto sem interferência. Isso inclui revisões pelos pares, um alto grau de organização e responsabilidade, testes de uso de entrada, testes mais formais com usuários reais; estando prontos para levar em conta novas exigências ou descobertas em qualquer estágio do processo de desenvolvimento; atualizações frequentes e automáticas; um feedback estreito com os usuários, baseado no feedback dos usuários, bem como relatórios automáticos do software; uso das melhores ferramentas que o dinheiro pode comprar como, por exemplo, SSD RAIDs e enormes quantidades de RAM para cada desenvolvedor; dedicando tempo para assegurar que cada detalhe da nossa implementação tenha a atenção que ele merece; demorando o tempo necessário a fim de não escrever códigos desnecessários.

Isso parece bom para você?

Se você é a pessoa que falta em nossa equipe, envie-nos sua candidatura eletrônica.

Candidate-se agora por e-mail

Quer saber mais?

Em caso de dúvidas sobre o trabalho na think-cell, nossas vagas de trabalho ou eventos, entre em contato com nossa colega Annika Mehr.

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