5 dicas para engenheiros de dados iniciantes e juniores
Engenharia de dados é uma profissão interdisciplinar que requer uma combinação de conhecimento técnico e de negócios para ter o maior impacto. Iniciando uma carreira em engenharia de dados, nem sempre está claro o que é necessário para ter sucesso. Algumas pessoas acreditam que é necessário aprender tecnologias específicas (por exemplo, Big data); outros acreditam que é um alto grau de especialização em engenharia de software; outros acreditam que o foco está nos negócios.
Existem cinco dicas principais que eu daria aos engenheiros de dados em início de carreira:
2. Não sucumba ao hype da tecnologia
3. Engenharia de dados não se trata apenas de codificação, tecnologia ou dados
4. A codificação ainda é uma parte importante do trabalho
5. Conheça seus dados e de onde eles vêm
Aprender rápido
Aprender rápido é essencial para o crescimento de sua carreira como engenheiro de dados. Há muitas áreas a cobrir — engenharia geral de dados, engenharia de dados significativa, engenharia de software, engenharia de aprendizado de máquina — conhecimento de domínio para adquirir, habilidades básicas para dominar, ferramentas diferentes para apreender ou conjuntos de dados para entender. A Engenharia de Dados também é um domínio em que as coisas evoluem rapidamente e tecnologias específicas podem se tornar desatualizadas rapidamente. É fundamental estar continuamente aprendendo coisas novas para não ser deixado de lado.
Vários fatores influenciam a velocidade de aprendizagem:
· A capacidade geral individual e a habilidade de aprender. O que não é algo facilmente controlado. Mas vale a pena considerar como pessoas diferentes podem aprender mais efetivamente de maneiras diferentes.
· A quantidade de tempo dedicado ao aprendizado. Isso é algo que pode ser influenciado de várias maneiras.
· A qualidade das experiências de aprendizagem.
A capacidade geral individual e habilidade de aprender
Dentro da engenharia de dados, existem diferentes conceitos para aprender. Alguns podem ser bastante acadêmicos, como os conceitos subjacentes de estruturas de dados probabilísticas, até bastante práticos, como otimizar um pipeline de ETL.
Cada indivíduo tem um estilo de aprendizagem particular para trabalhar melhor para eles. Para alguns que têm um problema específico e examinar documentação ou notas pode ser suficiente; alguns outros requerem mais estrutura e explicações.
Dependendo do estilo de aprendizagem preferido, diferentes empresas e organizações podem ser mais adequadas.
Treinamento estruturado
Algumas empresas oferecem programas estruturados de treinamento para graduados. Isso é bastante comum, especialmente em empresas de consultoria de dados, onde você é apresentado aos princípios básicos do processamento de dados.
As empresas de consultoria também são boas em fornecer treinamento estruturado em estágios posteriores de carreiras individuais, pressionando pela obtenção de certificados como “ Arquiteto de nuvem certificado pela AWS ”. Eles geralmente oferecem tempo, suporte e incentivos para a preparação para esses exames.
Algumas empresas de tecnologia também oferecem treinamento estruturado — embora o foco lá seja muito menos sobre ensinar os fundamentos ou conceitos centrais do que ensinar a você as ferramentas, estruturas e formas de trabalhar na empresa.
Para aprendizagens mais acadêmicas, além da possibilidade de contratação de um mestrado especializado em meio período, diversos cursos de MOOC, como o aprendizado de máquina do Coursera, oferecem o caminho certo de aprendizagem para determinadas disciplinas, com prazos específicos. Esses MOOCs às vezes oferecem grupos de cursos, como a especialização em aprendizagem profunda .
Treinamento não estruturado
Em geral, quanto mais experiência é necessária, menos mão-de-obra disponível e maior a necessidade de aprender por meio de treinamento não estruturado. Seja enfrentando problemas desafiadores e imaginando, ou mergulhando profundamente em como as pessoas abordaram os problemas antes.
Na prática inicial para um engenheiro de dados, esse tipo de aprendizado pode assumir várias formas, como passar pela documentação de alguma estrutura específica que você pretende usar, mergulhar fundo no código-fonte aberto e entender o que realmente está acontecendo por trás do de capuz.
Um dos melhores fatores para o treinamento estruturado é o treinamento prático do projeto, como tentar implementar recursos que não estão disponíveis ou ler artigos de aprendizado de máquina para descobrir como implementar um novo algoritmo.
A quantidade de tempo dedicado à aprendizagem
É um fator significativo para a taxa na qual você pode absorver e dominar novos conceitos e tecnologia. É possível aumentar o tempo dedicado ao aprendizado, mas isso impactará tanto na sua vida quanto no desempenho da empresa a partir de um certo ponto.
Cerca de oito ou mais horas do seu tempo diário são gastas no trabalho e é, portanto, uma área de grande alavancagem se você puder transformar o seu trabalho diário em uma experiência de aprendizado.
A qualidade das experiências de aprendizagem
Existem diferentes qualidades de experiência de aprendizagem. Tentar entender um livro enigmático não será tão eficaz quanto um livro bem escrito, com uma análise dos problemas e soluções. O mesmo ocorre com a aprendizagem no local de trabalho. Existem três fatores principais para a qualidade da experiência de aprendizagem: Pessoas, Projetos e Meio Ambiente.
Pessoas: para otimizar o aprendizado, é essencial encontrar lugares onde você possa aprender com pessoas que sabem mais do que você. Se você tiver a chance de ingressar em uma startup como o primeiro engenheiro ou engenheiro de dados desde o início, terá a oportunidade de tocar um pouco em tudo. Mas você também, muito provavelmente, não terá a chance de aprender ou obter o mesmo domínio sobre as tecnologias que teria em um ambiente com colegas ou gerentes com mais conhecimento.
Projetos : é vital ter um fluxo de projetos que o amplie. Se você sempre continua fazendo a mesma coisa e se especializando, digamos em uma área. Você acabará tendo um foco muito estreito. Tornar-se um especialista em uma única coisa é difícil e lento. Frequentemente, é um objetivo mais eficaz para um bom domínio dos assuntos e, quando chegar a esse nível, tente a amplitude. Isso se aplica ao componente técnico e aos componentes de negócios.
Ambiente: a velocidade da organização terá um impacto significativo na velocidade de aprendizagem. Se você trabalha em um ambiente muito burocrático, não terá tempo para fazer muito e terá um impacto considerável. Você acabará se concentrando nos aspectos organizacionais internos, em vez de perder tempo aplicando e aprendendo seu ofício.
Se, além disso, a organização possui um grande processo burocrático para implantar o código na produção, você não conseguirá aprender tão rápido com seu erro em comparação com um ambiente mais ágil. Por esse motivo, é bom evitar grandes corporações não digitais e, em vez disso, preferir ambientes mais dinâmicos, como empresas de tecnologia ou e-commerce. Startups também podem ser bons, mas às vezes vale a pena tomar cuidado para que eles não lhe dêem as “coisas” certas para aprender no início de sua carreira, especialmente se não houver o “sistema de suporte” certo lá.
Vale a pena trocar de projeto e ambiente a cada poucos anos. Há muito o que aprender de como diferentes coisas são feitas em outro departamento ou organização. Sua posição pode ser diferente, dando a você várias oportunidades e experiências e aprendendo com outras pessoas.
A revisão de código / pares é um dos caminhos mais rápidos para a aprendizagem
Além de seu propósito como um porteiro para introduzir bugs na base de código, a revisão de código / par também é uma excelente ferramenta para aprender com os outros. Ele pode ensinar quais abordagens são mais eficientes, implementar as melhores práticas em termos de design de código e novas implementações alternativas … Até certo ponto, a revisão de código / pares força e facilita o compartilhamento de conhecimento entre a equipe.
Ele também pode deixá-lo exposto a outros domínios / produtos ou recursos, ampliar seu domínio / conhecimento de negócios e deixá-lo exposto a diferentes conjuntos de dados. É uma maneira de também obter uma imagem mais holística de como a empresa funciona.
A revisão de código também ensina a escrever código legível, para que outros possam adotá-lo. Permite entender o que deve ser comentado e o que pode fluir diretamente do código e estruturar o código para que possa ser facilmente compreendido.
Não sucumba ao hype da tecnologia
Como engenheiro de dados, é necessário trabalhar com diferentes tipos de tecnologias: nuvem, infraestrutura, big data, streaming, … E como tudo em tecnologia, há muito hype. Muitas dessas tecnologias foram feitas para resolver problemas específicos e têm sido alardeadas como a cura para o problema de todos.
Big Data não significa necessariamente dados divertidos
Quando eu trabalhava no Facebook, às vezes fazer uma consulta simples demorava mais de um dia para ser executado. A falha de consulta pode ocorrer em qualquer ponto do processo, com os nós ficando sobrecarregados. Os motivos da falha às vezes estão sob o controle dos engenheiros de dados e às vezes devido a problemas de infraestrutura. Quanto maiores os dados a serem processados, quanto maior o número de nós usados, maior a chance de falha.
Trabalhar com Big Data permite que você tenha alguma perspectiva sobre como trabalhar em um ambiente distribuído. É algo a que os engenheiros de dados devem ser expostos em algum momento para serem capazes de crescer em suas carreiras. No entanto, não é a única habilidade que um engenheiro de dados moderno precisa, e sempre trabalhar com Big Data pode retardar o aprendizado em outras áreas devido a uma velocidade de iteração mais baixa.
Você não precisa usar as ferramentas mais sofisticadas.
Puro e simples, as mudanças de tecnologia e muitas vezes as ferramentas mais sofisticadas só são realmente benéficas em certas situações. Comecei a usar MySQL / Oracle, lentamente substituído pelo Redshift. Passei para Hive, Presto e Spark. E depois de ter escolhido o Spark, voltei a usar DB como Postgres e MsSQL.
Para a maioria dos propósitos, os bancos de dados tradicionais ainda podem servir para o trabalho. Foi apenas em 2014 que a Amazon, por exemplo, começou a substituir seu ‘data warehouse interno construído no oracle. Naquela época, a Amazon era um negócio digital de US $ 89 bilhões. Provavelmente, você está trabalhando com conjuntos de dados menores que a Amazon tinha naquela época. Melhorias no hardware do computador, melhoria no desempenho do banco de dados ( por exemplo, consulte as notas de versão do PostgreSQL 13 ) ou distribuição de recursos de paralelismo MPP como extensão Hyperscale (Citus) estão mantendo os bancos de dados relacionais ainda relevantes.
É importante selecionar a ferramenta certa para o trabalho, não necessariamente usar a ferramenta mais sofisticada. É importante estar / ter estado em um ambiente onde você possa aprender alguns dos princípios fundamentais para o próximo passo em sua carreira. Novas ferramentas surgirão, mas os princípios não mudarão.
Engenharia de dados não se trata apenas de codificação, tecnologia ou dados
A comunicação é subestimada
O papel de um engenheiro de dados exige que eles sejam altamente comunicativos. A função não é apenas codificar em uma área específica. Mas também sobre como reunir requisitos, entender a lógica de negócios a ser implementada e tudo isso leva tempo e muita comunicação (e para frente e para trás).
Também é importante informar diferentes usuários de dados sobre mudanças no modelo de dados ou nos relatórios criados. E na comunicação de como as diversas estruturas de dados podem ser usadas (por exemplo, consultas de amostra …).
Também é necessário haver comunicação com os engenheiros de software para obter alguns dos dados, seja por meio da instrumentação de lógica adicional, obtenção de extrações de banco de dados ou acesso direto às estruturas de dados utilizadas.
Uma boa quantidade de comunicação acontece por escrito. É usado para discutir / documentar os requisitos, detalhes de implementação ou geralmente comunicar um plano. Os engenheiros de dados precisam aprender a escrever e se comunicar por escrito.
O conhecimento do negócio é tão importante quanto a tecnologia
Conhecer o negócio e obter conhecimento de domínio é um dos fatores críticos para o sucesso como engenheiro de dados. Ele ajuda você a entender melhor o que é genuinamente necessário, antecipar melhor os requisitos e preparar suas estruturas de dados para acomodar essas mudanças.
Obter esse conhecimento de domínio também ajuda os engenheiros de dados a entender o que se espera dos dados e detectar se pode haver anomalias nos dados.
A codificação ainda é uma parte importante do trabalho
Um componente integral da função de um engenheiro de dados ainda é a codificação. A codificação ainda é uma das melhores maneiras de definir e abstrair as diferentes transformações que precisam ser calculadas em conjuntos de dados. Ele também capacita os engenheiros de dados a assumir tarefas que normalmente eram back-end ou tarefas relacionadas ao DevOps.
Desenvolva suas habilidades de programação
Os engenheiros de dados precisam saber como codificar. A Engenharia de Dados está se tornando progressivamente um subconjunto especializado de engenharia de back-end e DevOps . Hoje em dia, não se trata apenas de aproveitar as ferramentas SQL (PL-SQL) ou GUI, mas também de codificar pipelines e infraestrutura completos como códigos.
Se você estiver em uma organização que apenas pede ou permite que você aproveite as ferramentas SQL e GUI, vale a pena considerar adquirir alguma experiência em outro lugar para progredir em sua carreira.
Além de executar consultas em bancos de dados ou ambiente de big data, a engenharia de dados agora começa a abranger a necessidade de integração de API, expondo conjuntos de dados usando sua API, aproveitando o processamento de fluxo ou colocando modelos de aprendizado de máquina em produção . Hoje em dia, mais e mais estruturas de engenharia de dados requerem habilidades de programação. O Airflow requer conhecimento de python; DBT aproveita os modelos Jinja ; as consultas podem ser executadas por meio de mecanismos de processamento, como Pandas , Dask, Spark, …
Essas habilidades de programação também são necessárias para explorar melhor os recursos, como dimensionamento de infraestrutura (nuvem), scraping ou casos de uso de aprendizado de máquina.
Escrever código eficiente é importante
Além de ser capaz de apenas escrever código, um engenheiro de dados precisa escrever um código eficiente. Como engenheiro de dados, você precisa entender sua escala de vontade e como ela pode ser melhorada. Não ter essa visibilidade pode levar você a gastar recursos fazendo otimização prematura, porque você executa código não otimizado, ou acabar custando muito mais porque precisa dimensionar seus recursos de hardware.
Nessa área, há duas coisas importantes para um engenheiro de dados dominar. 1) Uma compreensão da complexidade de seu código 2) uma compreensão de qual otimização está disponível em sua plataforma de processamento.
Complexidade: ter uma noção da complexidade das diferentes operações fornece uma compreensão de como o código será dimensionado com uma quantidade maior de dados.
Em um contexto de engenharia de dados, é importante entender a complexidade do código de maneira ingênua e otimizada. Por exemplo, vamos dar o exemplo de uma consulta executando uma self-join ( a.user_id = b.user_id), ingenuamente, a junção seria considerada um loop aninhado e sua complexidade de tempo da consulta seria O(N²). Aplique um índice nele e a junção pode se tornar uma junção hash. A complexidade de fazer essa consulta agora está na leitura de O(N)linhas + na execução de O(N*1)pesquisas de hash. Como pode ser visto, pode haver diferenças significativas no desempenho com base na implementação real — um engenheiro de dados deve manter ambas as perspectivas.
Do ponto de vista da engenharia de dados, a complexidade do tempo e do espaço são importantes. No caso do Big Data, a memória costuma ser um gargalo. Saber o que pode ser feito para realizar consultas com eficiência de memória, por exemplo, aproveitando estruturas de dados probabilísticas , pode ter um impacto enorme no desempenho.
Otimização possível: há um número significativo de otimizações que um engenheiro de dados pode aplicar, tanto às transformações quanto às estruturas de dados. Pode envolver configurar partições e depósitos , configurar os índices corretos, ter os dados armazenados no formato de arquivo correto ou escrever pipelines que são distribuídos de forma eficiente entre os nós.
Estrutura de equilíbrio e flexibilidade
Há uma grande necessidade de equilibrar estrutura e flexibilidade na engenharia de dados. É importante entender as vantagens e desvantagens de especificidade versus flexibilidade que você faz como engenheiro de dados. Essas compensações afetam o desempenho geral do sistema e o esforço de implementação e manutenção. Compreender o nível certo de abstração e especificidade necessária requer bastante experiência e conhecimento de domínio, tornando-se particularmente crucial para causar o máximo impacto.
Conheça seus dados e de onde eles vêm
Como engenheiro de dados, é essencial entender seus dados e como eles são gerados. Isso permite que você estruture as diferentes transformações da maneira mais adequada e evite muitas das armadilhas que podem advir de problemas de qualidade de dados.
Existem muitas armadilhas em seus dados
Pode haver muitas armadilhas de qualidade de dados nos dados que estão sendo usados. Por exemplo, clientes que precisam ser desduplicados , tráfego vindo de bots , … Engenheiros de dados devem aprender como os dados são configurados e ajudar a encontrar um caminho pragmático para o futuro. Ter um entendimento profundo de seu conjunto de dados nos permite encontrar a maneira certa de dar sentido aos dados e transformá-los em informações.
Entenda o tipo de sistema de onde seus dados vêm
Existem muitas armadilhas que podem surgir na configuração de seus sistemas de origem. Por exemplo, a maneira como as datas são implementadas pode variar significativamente. Ao implementar um carimbo de data / hora UNIX, é bastante comum ter 1970–01–01 como data padrão (hora UNIX = 0), enquanto os sistemas que usam um servidor MsSQL como banco de dados, como Salesforce Marketing Cloud, podem configurar seu padrão como 1753–01–01 . Outros problemas com datas podem surgir de como os dados são configurados no sistema de origem e enviados, como uma data UTC em vez de um fuso horário local, exigindo alguma conversão na data.
Os sistemas distribuídos, por sua vez, trazem seu próprio conjunto de desafios. Com eles vêm alguns desafios em termos de consistência (seja eventual ou parcial ) ou lidar com eventos fora de ordem.
Resumo
Pode ser bastante complexo navegar no início da carreira de engenheiro de dados. Não se trata de aprender uma tecnologia específica, embora a exposição a big data ou sistema distribuído possa ser útil, mas sim de definir os fundamentos dos diferentes componentes que fazem a engenharia de dados.
É particularmente importante aprender a se adaptar e aprender de forma independente, pois quanto mais você progride, menos o ensino estruturado estará disponível para você.
Também é importante não esquecer que a engenharia de dados não se trata apenas de alavancar tecnologias, mas de colaborar com outras funções. Outras habilidades e experiências mais suaves podem ser incrivelmente úteis nessa área.