Era uma vez, desenvolvemos uma plataforma de alto nível para o desenvolvimento de aplicativos de negócios
lsFusion . A única coisa que restava era encontrar quem escrevesse nele. Decidiu-se publicar um trabalho em sites de busca de emprego. Mas surgiu a questão: o que indicar como posição ou profissão.
Em termos de complexidade, a linguagem da plataforma não difere muito do SQL, que foi originalmente criado não para programadores, mas para usuários de negócios. Portanto, também decidimos indicar "Analista de Negócios" como a posição.
Propusemos aos candidatos resolver uma tarefa de teste relativamente simples, na qual era necessário refinar um exemplo simples um pouco. Algumas pessoas fizeram isso, mas cartas raivosas vieram de muitas com indignação, como: "Você está procurando um programador ou analista de negócios?"
Como resultado, encontramos as pessoas de que precisávamos, mas, analisando essa experiência, involuntariamente me perguntei: onde termina a análise de negócios e começa a programação?
Quando acabei de me formar na universidade, eu tinha um amigo que já trabalhava como programador em uma grande empresa de terceirização. Tudo era adulto - além dos programadores, havia analistas de negócios e testadores. Então fiquei muito interessado em como eles construíram tudo lá, em particular, o que os analistas de negócios fazem. Para a questão de como ele interagiu com eles, a seguinte resposta foi recebida aproximadamente: “Eles me enviam alguns diagramas para lá, todos os tipos de documentos. Eu não os leio de qualquer maneira e os apago imediatamente. " É claro que ele era um pouco falso e estava olhando alguma coisa.
Agora, lendo um grande número de várias tarefas e especificações técnicas, entendo o principal problema dessa “análise de negócios”: o papel suportará tudo. Essa é a principal diferença entre análise e programação. No papel, você pode escrever condições completamente contraditórias, indicar requisitos absolutamente abstratos como "Eu quero que seja bom", torná-los bonitos e assumir que o trabalho está feito. Na programação, esse truque não funciona - tudo deve ficar claro. Por esse motivo, o desenvolvedor geralmente pode impedir a implementação de qualquer funcionalidade do cliente, simplesmente apontando constantemente contradições e exigindo esclarecimentos sobre os requisitos. E o cliente só pode fazer isso se ele, de fato, faz o trabalho de um programador.
Os programadores parecem ter que escrever programas. O que pode ser considerado um programa? Um dos formalismos usados na teoria é a Máquina de Turing. Este é o computador mais simples com o qual você pode descrever os algoritmos. Isso, por sua vez, sugere que uma das propriedades de um programa é imperativa. O programa possui um estado e um processo de execução. Um dos principais recursos do SQL era sua natureza declarativa. Supunha-se que pessoas comuns o usariam, uma vez que não precisariam escrever um “programa”, mas descrevessem no SQL o que desejam obter.
Quando criança, tive a chance de jogar xadrez. Agora entendo que absolutamente não entendi os princípios básicos do jogo posicional. No entanto, consegui calcular bem a posição de muitos movimentos para a frente. Eu sempre tentei "abrir" o jogo e ganhei ainda mais devido a várias combinações, nas quais o oponente me considerava pior. Na verdade, eu tinha um depurador trabalhando na minha cabeça que podia fazer movimentos e representar nos relógios a posição atual no quadro. Na realidade, joguei como um computador simples. No entanto, no primeiro ano de aulas, consegui completar o primeiro posto de adultos e entre os três primeiros no Campeonato da Bielorrússia na minha idade. É engraçado, mas o xadrez usa as mesmas habilidades que a programação. Um jogo posicional é o design da arquitetura. Jogo tático - depurando o programa.
Ensinando as pessoas a programar no lsFusion, cheguei à conclusão de que a lógica imperativa é mais difícil para uma pessoa comum perceber do que a declarativa. Calcular a situação de muitos movimentos à frente não é uma habilidade básica usada por uma pessoa na vida cotidiana. Ele deve ter em mente um estado e ser capaz de alterá-lo a cada passo. Ao mesmo tempo, cada pessoa deve formular regularmente o que deseja, que é uma espécie de "programação declarativa".
Declarativo está presente em outras ferramentas. Por exemplo, no Excel, você pode criar certa lógica usando fórmulas. Tive ocasião de ver sistemas de informações quase inteiros escritos na forma de fórmulas do Excel, levemente aromatizadas com o código imperativo do Visual Basic. Essas pessoas são programadoras ou são avançadas de business intelligence?
Se considerarmos a pilha de linguagens e tecnologias atualmente usadas no desenvolvimento, ela poderá ser dividida em vários níveis (assim como a pilha do protocolo de rede). Em cada um deles, algo novo foi adicionado:
- Montador. Linguagem orientada a máquinas.
- C. Linguagem processual.
- C ++. Programação Orientada a Objetos.
- Java / C # / Python e outros. Máquinas virtuais e memória gerenciada.
- 1C / Access / SAP NetWeaver, etc. Aqui do aborrecimento do desenvolvedor removeu o gerenciamento de memória, disco, rede e outros detalhes. Você precisa pensar exclusivamente na lógica de negócios. É em algum lugar nesse nível que o lsFusion está localizado como uma plataforma.
Cada próxima tecnologia é escrita com base na tecnologia de um nível inferior. Teoricamente, segue-se que aqueles que escrevem em um nível inferior poderão escrever em um nível superior. Obviamente, isso não significa que eles farão isso da maneira mais eficiente possível. Os engenheiros que criam carros não serão os melhores pilotos do mundo, mas devem ser capazes de montá-los de alguma forma. Na direção oposta, isso não funciona.
Em grande parte por esse motivo, como regra, os desenvolvedores sempre respeitam aqueles que usam tecnologias de nível inferior e desprezam aqueles que escrevem nas de nível superior. Eu não sou tão velho a ponto de pegar aqueles momentos em que os desenvolvedores de assembler odiavam abridores. Mas também me lembro de sishnikov, que acreditava que C ++ é do maligno. Alguns desenvolvedores de C ++ ainda consideram os desenvolvedores de Java subprogramadores, já que eles realmente não gerenciam memória, e os programas Java exigem muita memória extra por causa disso. Bem, todos os desenvolvedores dos quatro primeiros níveis, é claro, desprezam os programadores 1C, o que se reflete melhor na anedota barbada:

No entanto, isso pode ser devido ao fato de que as tecnologias de quinto nível, diferentemente das quatro primeiras e da lsFusion, são fechadas e pagas. Eles são usados em uma empresa sangrenta, onde está na ordem das coisas. Portanto, eles não gostam de todo o ecossistema, mas ao mesmo tempo dos desenvolvedores nele.
Vale ressaltar que é no quinto nível que existem linguagens declarativas e de alto nível, como SQL e HTML + CSS. A propósito, os desenvolvedores de SQL são muito mais leais aos desenvolvedores de SQL. Provavelmente, devido ao fato de trabalharem com eles em conjunto, resolvendo um bloco de tarefas separado, diferentemente dos mesmos programadores 1C que lidam com o banco de dados, o back-end e o front-end ao mesmo tempo.
Para ser justo, uma situação semelhante existe não apenas na programação. Por exemplo, existem várias pessoas que dirigem exclusivamente em uma caixa de câmbio mecânica, extremamente negativamente em relação a uma transmissão automática. Eles acreditam que a máquina não muda de marcha de maneira eficiente e, manualmente, podem fazer melhor (o que geralmente é verdade). Outra coisa é que a maioria ainda está disposta a sacrificar a eficiência, a confiabilidade e o aumento do consumo de combustível em prol da conveniência comum. E, assim como na programação, existem pessoas que não conseguem dirigir mecânica, porque não têm coordenação suficiente para trocar rapidamente de marcha e pressionar os pedais necessários.
É verdade que o motorista com uma transmissão automática pode mudar para o modo manual. Da mesma forma, você pode incorporar o código de montagem em C ou descer um nível no lsFusion e escrever o código Java.
Quanto maior o nível de tecnologia, mais declarativo e menos imperativo. Você pode considerar esses níveis como uma escala, onde "máquina" estará na parte inferior e "usuário" ou "empresa" na parte superior. À medida que você avança de baixo para cima, acredita-se que a programação está se tornando cada vez menos. E talvez em algum lugar nesta linha haja um momento em que a programação se torne uma análise de negócios.
Por que não procuramos programadores já concluídos? Existem pelo menos algumas razões para isso.
Primeiro, eles já têm algum tipo de pilha de tecnologia com a qual trabalham. Apesar da indústria relativamente inovadora, a maioria dos programadores é conservadora (embora certamente nem todos). Eles não aprenderão tecnologia desconhecida sem exageros, para os quais não há demanda (mesmo que temporariamente). Quando qualquer pessoa muda a esfera em que trabalha, ela automaticamente "perde valor". Portanto, é psicologicamente difícil desistir do que você sabe e começar a aprender algo novo.
Em segundo lugar, o desenvolvimento na plataforma lsFusion, bem como o desenvolvimento no 1C, é realmente mais próximo da análise de negócios do que o desenvolvimento em plataformas de nível inferior, como Java, .Net e Python. Existem outras tarefas, problemas e abordagens.
Mas uma das principais razões é econômica. Na Bielorrússia, as pessoas não procuram se tornar oficiais e agentes de segurança. Aqui você não pode, trabalhando como ministro, transportar cães em seu avião pessoal para qualquer exibição ou ficar bêbado na direção oposta. As cortinas das janelas estão longe de ser bem-vindas, e muitas autoridades são presas ocasionalmente e depois liberadas para liderar fazendas coletivas. Também não temos empresas que vivem de recursos naturais, portanto nossos sonhos de se tornar um petroleiro também não estão destinados a se tornar realidade. Quase todo mercado é pequeno o suficiente e já está, via de regra, dividido. Portanto, também há pouco espaço para novos empresários.
Nesse contexto, a esfera da TI se destaca. Isso é melhor visto na figura a seguir:

Se excluirmos as áreas muito pequenas de pilotos e alguns consultores financeiros, acontece que, em média, os programadores ganham três vezes e meia mais do que os funcionários de outras áreas mais bem pagas. Se compararmos com funcionários do estado, a diferença será sete vezes.
Outra vantagem do trabalho de um programador na Bielorrússia é a estabilidade. Como o mercado local é muito pequeno, a maioria das empresas opera no mercado ocidental. Portanto, como regra, todos os salários dos programadores são denominados em moeda estrangeira. É por isso que em junho há uma queda em relação à primeira metade do ano - o rublo apreciado. Em um país em que a moeda local é constantemente desvalorizada em relação à moeda mundial, os salários em dólares e euros são considerados a chave para a estabilidade e a tranquilidade. As pessoas no país são consideradas por muitos como "mestres da vida". Eles são os principais consumidores do segmento caro na maioria dos mercados. Muitos pais enviam seus filhos para os círculos de programação e a maior competição para os departamentos relevantes.
Não é de surpreender que a tendência "Enter IT" esteja florescendo na Bielorrússia. Decidimos tirar vantagem disso e tentar contratar pessoas de outras profissões, ensinando-as a desenvolver no lsFusion. A propósito, agora temos desenvolvedores da lsFusion trabalhando para ex-gerentes de vendas, administradores de sistemas, economistas, consultores de sistemas ERP e assim por diante.
Colocamos um anúncio pago na página principal do maior recurso de informação da Bielorrússia. Ele levou em conta o erro do local de trabalho e indicou que não estamos procurando inteligência de negócios, mas um desenvolvedor sem experiência de trabalho. Para obter a melhor motivação, eles indicaram explicitamente um potencial pagamento correspondente ao setor de TI.
Como precisávamos de um número muito pequeno de pessoas e haveria muitos que desejavam, entendemos que os candidatos precisariam ser filtrados de alguma forma. Escolhemos o esquema mais simples: você precisa pegar um exemplo da
Classificação e refinar para que para uma partida a pontuação não seja determinada manualmente, mas com base nos objetivos marcados que o usuário deve inserir. Para não incomodar cada candidato individualmente e não perder tempo, indicamos diretamente no anúncio que era necessária uma solução para esse problema.
Para resolver o problema, foi necessário fazer o download e instalar a plataforma (o instalador estava no site), conectar o código do exemplo e corrigir no IDE. Levará cerca de 15 minutos para qualquer um dos desenvolvedores do lsFusion.Um programador comum levaria no máximo 3 horas para entender o exemplo, fazer o download, executar e resolver, já que a solução não requer conhecimento adicional da plataforma. Tudo foi feito lá por analogia com a lógica existente.
Segundo as estatísticas, o anúncio foi aberto e lido por várias dezenas de milhares de pessoas. A tarefa de teste em si (estava em um link separado) foi lida por vários milhares. Cerca de 400 pessoas baixaram a plataforma (e havia um arquivo de 1,5 GB, que incluía IDEA, Java e PostgreSQL). Quarenta pessoas enviaram algo. Destas, cerca de dez pessoas tiveram uma solução adequada. Dessas pessoas, escolhemos aqueles a quem contrataremos.
O que eu não conseguia entender nessa história era o que as pessoas não tinham: motivação ou habilidade. Afinal, se alguém trabalha em um emprego mal remunerado, o que não lhe agrada, o que o impede de passar algumas horas para entender o problema e resolvê-lo. Desde o início, oferecemos um salário alto, que está longe de ser pago a todos os desenvolvedores juniores em outros idiomas. Talvez muitas pessoas ajam com o princípio "eu iria para programadores, deixe-me ensinar a você". Na verdade, em nosso país, já temos muitos tipos de cursos pagos que muitas pessoas fazem, sem entender a importância da auto-educação na programação.
Mas talvez o problema esteja nas habilidades. Para iniciar a programação, é necessária uma habilidade básica: pensamento analítico. Com isso, quero dizer a capacidade de distinguir do privado o geral (indução) e vice-versa (dedução). Essa capacidade é desenvolvida em um número relativamente pequeno de pessoas, mas sem ela, infelizmente, não é um bom programador. Além disso, se você mede de alguma forma o pensamento analítico e constrói um gráfico de dependência do número de pessoas com essa habilidade, obtém uma hipérbole. Ou seja, quanto menor o limiar de entrada na tecnologia, significativamente mais pessoas podem superá-la.
O problema com o pensamento analítico é que ele não pode ser aprendido. É formado em algum lugar desde tenra idade, e um adulto não é mais capaz de mudar alguma coisa. Nós passamos por um candidato a período experimental de ciências técnicas. No entanto, ele não conseguiu implementar uma lógica de domínio simples. O homem tentava, trabalhava em casa à noite, mas toda vez que recebia uma tarefa na qual ele simplesmente precisava ser realizado por analogia, ele não podia lidar com isso. Como ele foi capaz de defender o candidato, não está claro. No entanto, mostra que o pensamento analítico não é necessário na vida cotidiana. E há várias profissões nas quais essa habilidade não é particularmente necessária.
Quando eles me perguntam com qual tecnologia iniciar o caminho da programação, respondo: comece com SQL. De qualquer forma, seu conhecimento não será prejudicial e não será necessário mais de um dia para aprender a funcionalidade básica (SELECT / JOIN / UNION). Em seguida, você precisa tentar resolver problemas da Internet. Não dá certo - então você não deve começar com a programação. Se algo puder ser resolvido, pelo menos 1C ou lsFusion pode se tornar um programador. E então, como vai.
Conclusão
Obviamente, a pergunta do título do artigo é retórica. O conceito de programação é subjetivo e depende da visão de uma pessoa em particular. Todas as pessoas, em um grau ou outro, estão envolvidas em programação. Por exemplo, quando eles simplesmente definem as configurações no termostato de um piso quente ou criam tabelas com fórmulas no Google Docs. No entanto, a tecnologia em diferentes níveis tem um limite de entrada diferente. Quanto maior o nível de tecnologia, mais pessoas eu posso programar. A verdadeira programação nesse processo está realmente ficando menor. Eu só queria que isso não se tornasse um assunto de desprezo para alguns desenvolvedores por outros.