O que estamos procurando desenvolvedores para desenvolver a plataforma 1C: Enterprise

Nosso sonho é criar o melhor kit de ferramentas para o desenvolvimento de aplicativos de negócios no mundo. Temos muitas ideias excelentes, cuja implementação nos permite realizar esse sonho, desenvolver nossas ferramentas para permanecermos as melhores. Bem, para implementar essas idéias no nível adequado, precisamos de programadores legais.

Em suma, estamos procurando aqueles que:

  • gosta (ou está pronto para amar) criando estruturas replicadas
  • quer fazer um produto que milhões de pessoas usam

Para mostrar com mais detalhes quais desenvolvedores estamos procurando e como, fizemos pequenas entrevistas com os gerentes de contratação de nossa empresa. Foram feitas perguntas durante a entrevista:

  • Que tipo de desenvolvedores você precisa?
  • O que você pede para uma entrevista?
  • Que perguntas você prefere na entrevista - teórica ou prática?
  • Um programador deve escrever testes?
  • Você faz perguntas não da esfera profissional de atividade?
  • Você define tarefas lógicas para raciocínio rápido que não estão diretamente relacionadas à programação? Tipo de tarefa sobre uma bola com hélio em um carro :


Em que áreas os programadores podem trabalhar no desenvolvimento de nossa plataforma? Bem, por exemplo:


imagem

Grupo de Desenvolvimento da Internet


imagem

O grupo cria serviços on-line que provavelmente são usados ​​por milhões de usuários finais dos produtos 1C. Os serviços, por exemplo, permitem obter informações sobre a contraparte pelo TIN, verificar a confiabilidade da contraparte, etc. A área de atividade é muito responsável, os serviços operam sob carga pesada, o tempo de inatividade é extremamente indesejável, por isso tentamos criar o produto mais confiável. Também fabricamos um produto chamado Sistema de Interação . Este é um mecanismo que transfere informações entre aplicativos clientes e 1C: servidores corporativos; com sua ajuda, em particular, o messenger embutido nos aplicativos 1C é implementado.

Do desenvolvedor, quero que ele desenvolva o produto como um todo - analise as necessidades dos usuários, pense sobre a arquitetura, escreva código. Como as pessoas costumam vir para entrevistas e dizem que não é interessante para mim analisar a área de assunto, quero que o analista me escreva um TOR, segundo o qual programarei a funcionalidade. Ou seja, uma pessoa está interessada apenas em aspectos técnicos da programação. Tentamos não contratar essas pessoas, porque temos uma equipe pequena, temos que lidar com um grande número de áreas relacionadas. Portanto, os principais requisitos que não estão relacionados às habilidades profissionais são a capacidade de formular requisitos de produto de maneira bonita e precisa, pensar na implementação, desenvolver um produto e ser responsável pelo resultado final. O interesse pessoal da pessoa na qualidade do produto final é importante, para que a pessoa crie um produto do qual gostaria de se orgulhar.

No livro de Eric Evans, "Design Orientado a Objetos", uma das principais idéias é que o desenvolvedor também deve ser um analista, ter um bom entendimento da área de assunto que ele automatiza, entender o que é valioso para os negócios e, se ele não entende isso, então ele será capaz de desenvolver um bom sistema que satisfaça todos os requisitos do usuário. Se o desenvolvedor abstrair da área de assunto, ele não tomará decisões importantes sobre a arquitetura do produto, mas terá que implementá-las e, nesse caso, há um risco de implementação de baixa qualidade. O mesmo Evans recomenda distinguir duas partes na área de domínio - a parte que é fundamentalmente importante para os negócios, aquela que torna seu produto realmente seu produto e a segunda parte, que não é muito importante, responsável pelo agrupamento de infraestrutura. E os melhores desenvolvedores devem receber a implementação da primeira parte importante.

Como está indo a entrevista? Temos um questionário, cerca de 10 perguntas que fazemos aos candidatos. As perguntas no questionário não são teóricas, mas práticas, por exemplo - o código levantou uma exceção com esse rastreamento de pilha, explica o que você fará. Ou - você tem uma consulta no banco de dados que está sendo executada lentamente (o texto da consulta é fornecido), há um plano de consulta, avalie - que o plano de consulta é ruim, é necessário explicar como acelerar a consulta. Não faz sentido perguntar a uma pessoa quais são os tipos de JOINs - é claro, ele conhece esses tipos se estiver um pouco preparado para uma entrevista. A experiência prática de usar esses JOINs é interessante. Se uma pessoa tiver experiência na análise de planos de consulta, não será difícil falar sobre maneiras de resolver o problema; se não houver essa experiência, o livro não ajudará aqui. É aqui que a linha que distingue o desenvolvedor que acabou de ler sobre a funcionalidade do desenvolvedor que realmente usou essa funcionalidade passa. Estamos mais interessados ​​em lidar com o segundo tipo de desenvolvedor, queremos que a pessoa "se envolva imediatamente no jogo".

Algumas das perguntas do questionário já pararam de funcionar e as substituímos por novas. Por exemplo, há algum tempo, durante entrevistas, eles frequentemente pediam para implementar o padrão Singleton e, quando o candidato fazia isso, eles disseram - agora o tornam preguiçoso. Desde então, vários artigos apareceram em Habré, que descreviam detalhadamente como escrever essas coisas, as pessoas simplesmente aprendiam essa tarefa de cor, e ela deixou de ser um teste de adequação profissional.

Também queremos que os desenvolvedores escrevam testes com competência; por exemplo, que a assinatura do contrato que o sistema deve atender está descrita na assinatura do teste. Isso pode ser feito, por exemplo, em Java no estilo recomendado por Roy Osher , quando o nome do método de contrato é dividido em três partes - “dado”, “o que esperamos”, “qual é o resultado”. E você pode fazer isso no Groovy usando Spock . É importante que o candidato entenda exatamente o que precisa ser testado, se é necessário testar os valores-limite, se ele conhece a pirâmide de teste etc.

Também perguntamos sobre os projetos nos quais a pessoa esteve envolvida, especialmente se ela usou tecnologias que são relevantes para nós. Por exemplo, usamos o Hazelcast , até agora poucas pessoas o utilizam na produção (de recentes implementações grandes - no Yandex.Money ) e estamos muito interessados ​​em pessoas com experiência no uso do Hazelcast. Além disso, o candidato pode nos revelar aspectos inesperados e úteis da nova tecnologia, sobre os quais ainda não sabemos.

Um tópico importante para nós é como escrever código para funcionar em um ambiente multithread. Por exemplo, existem vários nós de aplicativos em um ambiente altamente carregado e pedimos ao candidato que lhe diga como tornar o sistema viável e confiável, minimizando o bloqueio.

Um programador deve escrever testes? Um imperativo, mas não todos. O programador deve escrever testes de unidade incondicionalmente. A propósito, nós da equipe não insistimos no uso obrigatório de nenhum método, por exemplo, TDD ; alguns desenvolvedores usam o TDD por sua própria iniciativa, eles gostam muito. Também escrevemos testes de integração. Os desenvolvedores também fazem testes de carga, escrevem planos de teste para o JMeter.

Equipe de desenvolvimento de clientes da Web


imagem

Embora estejamos desenvolvendo um cliente da Web em JavaScript, preferimos que o candidato, além da experiência em desenvolvimento da Web em JavaScript, tenha experiência no desenvolvimento de linguagens OOP “clássicas” - C ++ ou Java ou C #. Isto é devido às especificidades do projeto; 1C Web client, escrito em JavaScript, mas mais ideologicamente se assemelha a um aplicativo escrito na linguagem OOP. Cobrimos o código JavaScript com anotações JSDoc , para que a verificação de tipo estático ocorra durante a montagem. Essa abordagem foi escolhida porque usamos o Google Closure Compiler , que nos ajuda, em particular, a aumentar a velocidade do nosso código e reduzir a quantidade de memória consumida por ele. Assim, a experiência em POO será de grande ajuda para o candidato.

Na entrevista, perguntamos quais tarefas o candidato e sua equipe tiveram que resolver em trabalhos anteriores, discutimos a arquitetura das soluções implementadas por ele. Pedimos às tarefas candidatas, algumas delas - com raciocínio rápido e pensamento algorítmico. Por exemplo, existem tarefas que são "resolvidas" por uma quantidade bastante grande de código e, se você pensar sobre isso, em uma linha.

Há um conjunto de tarefas para conhecimento específico de layout, em JavaScript. Por exemplo, desenhamos uma estrutura de página HTML em um pedaço de papel (a estrutura pode ser dinâmica, mudar no tempo de acordo com um determinado algoritmo) e pedir para escrever um código que crie essa estrutura e a implemente na dinâmica.

Também tentamos avaliar a predisposição do candidato à atividade analítica; não gostaríamos de ter um codificador “limpo” na equipe, mesmo que ele escreva um código de alta qualidade, mas funcione estritamente de acordo com uma especificação técnica fixa. Gostaria que o desenvolvedor se envolvesse nas tarefas, entendesse profundamente o que está sendo feito no produto e por que, idealmente, ele também foi o impulsionador da nova funcionalidade.

Se o candidato é aluno ou aluno de ontem, podemos fazer perguntas puramente teóricas, por exemplo, fazer os princípios básicos da OOP ou outra coisa. Se uma pessoa com experiência, essas perguntas podem não ter sentido, provavelmente o candidato conhece esses princípios e os usa em seu trabalho, um pedido para formulá-los pode levá-lo a um beco sem saída, porque ele brega esqueceu a redação do livro.

Cada entrevista é única. É interessante conversar com uma pessoa sobre alguns tópicos, com outra sobre outros. No final da entrevista, falamos sobre nosso produto, sobre a extensão de seu uso (e eles são impressionantes - nosso sistema possui milhões de usuários finais), analisamos como as pessoas estão interessadas.

Equipe de escalabilidade de aplicativos


imagem

Quem somos


Nossa equipe é especialista na construção de sistemas altamente carregados na plataforma 1C: Enterprise. Esses engenheiros lidam com os desafios de confiabilidade e escalabilidade. Tais tarefas estão frequentemente na encruzilhada da administração e do desenvolvimento. O resultado da solução de tais problemas é um sistema muito legal. Exemplos de tais tarefas:

  • Implante uma infraestrutura tolerante a falhas em dois data centers e simule falhas
  • garanta a degradação do desempenho do sistema com um aumento no número de usuários em 10 vezes, acelere o cálculo de custo de muitas horas em 3 vezes,
  • investigar e eliminar os impasses resultantes
  • garantir recuperação coordenada de mais de uma dúzia de bancos de dados de informações distribuídos em um determinado momento, levando em consideração as trocas entre esses bancos de dados.

E esta não é uma lista completa de tarefas. É especialmente agradável que muitas das tarefas cheguem até nós com a seguinte redação: "É possível fazer isso?" I.e. as pessoas não acreditam no começo. Nós não discutimos e sempre tentamos convencer a tentar verificar na prática, a fazer. Para isso, precisamos acrescentar a disposição de nos conectar no meio da noite a um grande sistema de clientes, porque os engenheiros locais quebraram algo e ninguém sabe o que fazer. Mais de uma vez foi necessário restaurar a base destruída na ausência de backups ou descobrir por que a carga no sistema aumentou em 5%. Se desejar, você pode até ler resenhas sobre nosso trabalho.

Quem procuramos


Estamos à procura de engenheiros que desejam apaixonadamente fazer o impossível. Um dos requisitos mais importantes para um candidato é olhos ardentes, desejo e capacidade de entender rapidamente o que ele não havia encontrado antes, usando o conhecimento existente. Estes são engenheiros e desenvolvedores de confiabilidade, todos reunidos em um. Imagine que um cliente esteja em contato com milhares de usuários e diga que ele está tentando colocar em operação um mecanismo complexo que seus engenheiros desenvolveram ao longo de um ano. E, a propósito:

  • ainda não conseguiram concluir o desenvolvimento em face das constantes mudanças nos requisitos dos negócios do cliente;
  • enquanto o desenvolvimento dos principais mecanismos de implementação está em pleno andamento, os engenheiros ainda não alcançaram o mecanismo de teste com milhares de usuários;
  • mesmo agora, ninguém tem idéia do porquê, com um aumento no número de usuários nessa implementação, exatamente nesse mecanismo, a produtividade cai drasticamente;
  • o desenvolvimento foi realizado no Windows com o MS SQL Server DBMS e, na fase final, foi tomada uma decisão política para implementar o PostgreSQL no CentOS e no DBMS, a fim de estar no centro da tendência de substituição de importações;
  • e você descobre acidentalmente que há tempos limite quando até 10 usuários trabalham;
  • Você precisa calcular o equipamento para esse mecanismo, porque o cliente precisou comprá-lo no mês passado;
  • você entende que precisa elaborar uma implementação paralela dos algoritmos nesse mecanismo, coordená-los com seus colegas e decidir juntos como será o tempo a tempo sem introduzir novos erros.

Sim, e novamente: nem todo mundo está pronto para ajudar a identificar erros e antipadrões em suas decisões; portanto, você precisa se comunicar muito diplomaticamente com os engenheiros que trabalham em estresse contínuo nos últimos meses.

Como estamos


A entrevista pode ser estressante para o candidato. Mas esse estresse nem mesmo pode ser comparado ao estresse que você terá em uma situação real se não pensar e usar toda a sua experiência existente.

O problema de muitos candidatos é que eles não sabem aplicar seus conhecimentos e não conseguem explicar o filho de seis anos. É por isso que, durante a entrevista, periodicamente pedimos que você nos ensine algo em que o candidato é mais versado. Naturalmente, quero muito recrutar pessoas com quem possamos aprender muito. Nessas discussões, a profundidade do conhecimento e um entendimento muito bom são muito importantes. Houve uma experiência em que, às sete da manhã, entrevistamos o candidato, discutimos os componentes de gerenciamento de memória no MS SQL Server e finalmente decidimos entender as páginas e extensões. Então, RH interveio, dizendo: “Com o que estamos atormentando ele ?! Quem sabe isso!? “, E saímos da sala para conversar. Um colega sonolento e bocejando acidentalmente passou pelo corredor na direção do café. Ao colega foram feitas as mesmas perguntas, ele respondeu claramente, corretamente, essencialmente, sem abrir um olho e continuar bocejando.

Naturalmente, tentamos testar conhecimentos de matemática, algoritmos. Pelo contrário, eles se relacionam com o conhecimento básico. Mas o conhecimento de algoritmos distribuídos e a capacidade de aplicar esse algoritmo em uma tarefa serão uma vantagem garantida para o candidato.

Outra maneira é pedir ao candidato que se apresente no lugar do desenvolvedor 1C e pedir que ele implemente algum tipo de tarefa aplicada. Sob as condições da entrevista e do estresse do candidato, essa tarefa permite que você veja como o candidato pensa. Examinamos a solução do candidato, ajudamos o candidato a ver um problema tecnológico significativo em sua solução e, em seguida, analisamos como o candidato alterará a solução, não permitindo outro problema tecnológico. Às vezes, fazemos 6-7 iterações, procuramos e avaliamos os pontos fracos da solução. Ao mesmo tempo, torna-se imediatamente possível não apenas discutir e entender o que uma pessoa sabe, por exemplo, sobre impasses, mas se também entende como reduzir a probabilidade de sua ocorrência a zero em seu código.

O conhecimento de uma linguagem de programação específica não é um fator super importante. É mais importante quando uma pessoa pensa em termos de programação usando uma linguagem e não se limita a construções de linguagem.

O que é usado no trabalho


A primeira e mais usada ferramenta é a plataforma de tecnologia 1C: Enterprise. O conhecimento da plataforma é necessário no nível de administrador e desenvolvedor. I.e. você precisa entender como implementar uma solução específica e executá-la no sistema para milhares de usuários.

Muitas vezes é necessário analisar a operação dos DBMSs do MS SQL Server e do PostgreSQL, para que o uso de ferramentas de criação de perfil, visualizações dinâmicas e revistas seja incluído na bagagem de habilidades ativas. E aqui a capacidade de trabalhar com grandes volumes é importante. Um bloco de notas padrão do Windows não é muito conveniente ao trabalhar com 1 TB de logs de texto com consultas geradas por máquina e seus planos. Imediatamente, é necessário o conhecimento de expressões regulares, bem como todo um conjunto de ferramentas e linguagens que as suportam. Para analisar os planos de consulta, você precisa entender o que são índices e como a junção de mesclagem difere da junção de hash.

Os sistemas no mercado corporativo geralmente são executados no Linux. Não há ambiente gráfico nos servidores. As habilidades do console são muito importantes.

Imagine o que você precisa para descobrir por que a carga da CPU nos servidores PostgreSQL nos processos do CentOS by Postgre aumentou em 5%. Tente escrever em um pedaço de papel o algoritmo de sua investigação. E imediatamente há uma compreensão do que é necessário

  • poder aplicar não apenas tempo de atividade , vmstat , sar , no topo , perf ,
  • saber usar pgbadger , psql e configurar o log no postgresql.conf,
  • conseguir encontrar uma consulta desejada,
  • usar analisar, analisar seu plano,
  • reescreva a solicitação e verifique se a carga diminuiu.

O que é importante para nós


É muito importante que uma pessoa pense em larga escala e sempre tente ver o quadro geral. Por exemplo, a maioria dos candidatos, resolvendo a tarefa de classificar um arquivo de texto, oferece um algoritmo adequado para classificar um arquivo de 10 MB. Mas o quanto a compreensão e o ponto de vista deles mudam quando eles enfrentam a classificação de um arquivo de 10 TB em condições de memória e espaço em disco limitados. E você precisa se lembrar que o custo de acessar o disco é mais alto que o custo de acessar a memória. Eu realmente quero que o candidato pense "em escala" em todas as tarefas.

1C: Grupo de Desenvolvimento da Plataforma Corporativa


imagem

A principal coisa que é exigida da nossa equipe aos candidatos é a capacidade de pensar analiticamente, analisar minuciosamente o problema e a capacidade de pesar soluções. A plataforma 1C: Enterprise possui um ciclo de desenvolvimento bastante longo (meses), portanto, é impossível, como no desenvolvimento da Web, implementar a funcionalidade em partes, passo a passo. Isso requer a capacidade de pensar profundamente ao considerar os detalhes da implementação, você precisa tentar "de uma só vez". I.e. não usar o primeiro método disponível sobre o qual li ontem na Habr para resolver o problema, mas pesar cuidadosamente todos os prós e contras de várias soluções.

Entender na entrevista se o candidato tem essas qualidades não é tão simples. A maneira mais relevante é falar sobre a experiência anterior do candidato. Quando uma pessoa diz que solução legal encontrou, perguntamos - e que problema, de fato, foi resolvido? Por que essa solução específica foi escolhida e não outra? E se as condições do problema mudassem um pouco, como a solução mudaria? Ao fazer várias perguntas semelhantes, você pode entender o quão profundamente a pessoa estava imersa no tópico.

Há outro aspecto ilustrado pela frase: "Contratamos aqueles que sabem trabalhar e, por algum motivo, queremos que eles queiram trabalhar". Portanto, na entrevista, quero entender o que é trabalho para uma pessoa. Se, para ele, este é um passatempo agradável que permite ganhar dinheiro, então com um alto grau de probabilidade nada de bom sairá com o candidato.Para a maioria dos desenvolvedores profissionais, o trabalho deles é a coisa mais interessante que eles já fizeram, a pesquisa, o desejo e a capacidade de criar algo novo. Uma pessoa que vem até nós deve estar pronta para estudar, estudar e estudar. Não precisamos apenas de artistas, precisamos de pessoas que nunca se cansem de estudar, temos que estudar muito e constantemente em nosso trabalho.

O que mais você gostaria de ver com o candidato são habilidades de engenharia, isto é, figurativamente falando, a capacidade de montar uma solução elegante a partir de cubos.

, . – ++ Java, - – JavaScript C++, 1, . 1, , , , , 1. , 1cFresh , , 1 ( 1 , ). , (bash, Python, Perl), .

– , . , , .

– , , Linux. – , , , . , , – , , . , .

. , .

? , . , , . – . , , , . . , , , . – , . , – . – .

- – 3-5 ? , , , .

. – , , . – . , , , , . , , , --. . , , .

1: –


– , ? , , .

, , .

, , , – , ?

Java – ; , - , , , .

- – , . ́ – . , , .

, . , , , . , .

, , – 1:. , , , .

. , , , .

. , C++, C# , C++ . , . , – .

, , stackoverflow, , . .


imagem

C++. , – , .

– , . STL , , , . , , map, . , .

. , . , , , .

, , - – . , . , .

– . 1: – , 10 , , .

, , – , « - ». , - , ; – . , , . . , – , , , , , . , , - , . «» , – , .

? ! , – , , . , , (Windows, Linux, macOS, - ), . , . , .

1C:Enterprise Development Tools


imagem

1C:Enterprise Development Tools Java, Java. , , . Java , , ; , , , . , ( EMF , Xtext , GEF , Lucene , Handly , …) — . , – , .

– , , . – , . , , . – . , , . – .

, . , , . , , , – . – . , – , , . – , , ( , ) , . – , . , , – -, . – ?

! , : , 2 , 0 , 999999999 , –8 , qwertyuip , – ? – ( ) ; , , .

Conclusão


:)

job@1c.ru .

Source: https://habr.com/ru/post/pt432672/


All Articles