O sistema está quebrado

Screenshot 2020 06 27 at 6.46.26 PM

Vindo de um engenheiro do Google, você pode entender o sistema aqui. Aqui está outro exemplo de Hen-Wen:

Screenshot 2020 06 27 at 6.52.17 PM

Existem muitos exemplos por aí que consigo pensar. Criador do homebrew – um gerenciador de pacotes usado por quase todos os que executam o macOS? – rejeitado. Criador do WhatsApp? – Rejeitado pelo Facebook e Twitter. Então o que está acontecendo aqui? Essas pessoas não são qualificadas o suficiente para trabalhar nessas multinacionais?

Não, a resposta é que esses caras podem desenvolver ferramentas úteis e escrever ótimos softwares com qualidade de código de primeira, mas provavelmente não conseguem (re) inventar um algoritmo para inverter uma árvore binária em um prazo de 30 minutos. Alguns dos melhores códigos escritos já não foram escritos em 30 minutos. Alguns dos melhores algoritmos escritos no kernel Linux usados ​​ainda hoje não foram escritos em 30 minutos por Linus. Algumas das melhores UIs como a da faixa não foram projetadas em 30 minutos. Então, como alguém de RH aleatório em uma empresa aleatória pode decidir o seu valor em 30 minutos?

É assim que as empresas julgam sua “viabilidade” – verificando se é possível resolver um problema de brinquedo completamente não relacionado a qualquer trabalho que você possa ter feito no passado ou no futuro.

Isso pode ser corrigido?

Eu não sei. Posso reclamar e gritar tudo o que quero, mas sinceramente não sei como as empresas podem avaliar uma pessoa que se candidata a um emprego de maneira rápida e correta. Se você quer ser rápido, perderá muitos bons candidatos, como acima, se não quiser perder bons candidatos, a entrevista pode durar muito tempo – muito mais tempo do que a empresa pode pagar.

Programação competitiva! == Programação no mundo real

Entrevistas para empresas agora são mais um exame estúpido, no qual você precisa memorizar e aprender sobre coisas que não usará depois de conseguir esse emprego. Você acha que talvez precise aprender que o algoritmo Dijkstra funcionará no Google Maps depois de entrar no Google, mas, sério, você acha que o Google entregará seus principais produtos a um novo colaborador na empresa? Você acha que não teria nenhuma ajuda de seus colegas?

Você provavelmente estaria trabalhando na interface do produto ou nos sistemas distribuídos para o Google do que trabalhando nos algoritmos principais – o que significa que todo o seu conhecimento em “programação competitiva” não tem utilidade.

Você quase não usaria programação competitiva no mundo real. Nenhum algoritmo em execução na produção nos servidores da Microsoft é escrito com práticas de código ilegíveis, nomes curtos e sem sentido de variáveis, não documentados e otimizados apenas para velocidade e não para legibilidade e manutenção. A redução e o aprimoramento do desempenho ocorrem mais tarde, com ferramentas automatizadas várias vezes. Provavelmente, se você é um codificador competitivo, tem o mau hábito de escrever códigos feios, qualquer um pode escrever códigos para máquinas. A questão é: você pode escrever código para humanos?

Mas há esperança

Sentar em entrevistas como essa e esperar que você possa resolver uma questão de brinquedo que você preparou por 3-4-5 meses aprendendo apenas o DSA e a programação competitiva para veiculações é uma maneira. Há uma outra maneira – ele funcionaria com menos empresas e pessoas, mas você gostará de seguir isso, aprenderá muitas coisas do mundo real ao longo do caminho – e será mais útil do que aquelas pessoas que aprendem apenas “codificação competitiva” pelo bem. disso.

Construa algo. Qualquer coisa. E depois construa mais sobre isso, além disso. Tenha um portfólio forte. Tenha um conjunto completo de habilidades útil para as empresas. Domine com uma pilha de tecnologia – seja o dono. Tenha projetos, blogs, experiência para mostrar que você é o que está em seu currículo. Estabeleça conexões, interaja com pessoas, peça sua recomendação na empresa. Em muitos lugares, a codificação competitiva não é a única maneira de concluir uma entrevista – existem todos os tipos de pessoas executando todos os tipos de empresas. Uma pessoa que concorda com meu ponto de vista e está administrando uma empresa não contrataria pessoas apenas com seu conhecimento “competitivo”.

Seu trabalho levaria você a lugares que você não poderia imaginar. A maneira mais fácil é sempre seguir a multidão, mas nada de bom vem da maneira mais fácil, pelo menos se você for ambicioso o suficiente. Misturar a quantidade certa de ambição com coragem pode fazer maravilhas. O mundo precisa de grandes programadores para progredir, para avançar a humanidade, não para pessoas que possam ser colocadas.

Não confunda DSA com programação competitiva

Eu não queria escrever esta seção inicialmente, mas sabia que muitas pessoas confundiriam isso. DSA – Estruturas de dados e algoritmos é algo diferente. Heap, Mapas, Matrizes, Vetores, Listas Vinculadas, etc. todos esses são super úteis também na programação do mundo real.

A parte divertida é que você também pode desenvolver esse entendimento com a experiência. Eu nunca aprendi explicitamente sobre “heap” usando um grande curso DSA de 50 horas. E se você está aprendendo a programar, também não precisa de um entendimento muito profundo disso. O DSA em profundidade é necessário quando você deseja aprender Ciência da Computação, não programação. Entenda a diferença, ciência da computação é a teoria – a programação é prática.

Estar consciente de coisas que existem, algoritmos que existem e estruturas de dados que existem. Você não precisa aprender ou memorizar todos eles. Parece-me incrivelmente estúpido memorizar ou aprender algo que raramente é usado, e posso obtê-lo com um pouco de ajuda de colegas e da Internet.

Minha história

Eu estou não codificador competitivo, provavelmente o único graduado em ciências da computação da minha universidade que nunca tocou em codificação competitiva em Faculdade. Por quê? Porque eu fiz isso há 4-5 anos e odiei. Por quê? Porque eu me via passando 3-4-5 horas do meu dia, todos os dias, resolvendo problemas que me levavam a nada. Eu sabia uma coisa ou duas mais sobre como abordar a próxima pergunta, mas isso foi suficiente para causar um impacto? Isso foi suficiente para se destacar da multidão?

Que bem eu estava fazendo? Parecia perder tempo com perguntas que já estavam resolvidas. Pode ser diferente para todos, mas fico feliz quando vejo outras pessoas usando as coisas que eu programei (iniciei o desenvolvedor da Web até então), mas não aguentava o fato de estar perdendo meu tempo aprendendo algo que não posso usar no mundo real. Eu costumava participar do código do Google e do Facebook hackear antigamente, mas logo fiquei entediado e frustrado, pela falta de uma palavra melhor, e nunca mais voltei a fazê-lo. Conseguir um emprego ou estágio não me preocupava, nunca.

Sentei-me nas entrevistas do Google uma vez no campus. Eles tinham um currículo com a lista de finalistas como a primeira, ao contrário de todas as outras empresas em que a primeira era, espere, rodada de codificação competitiva. Bem, aqui vão os 7 anos da minha experiência em desenvolvimento web e sistemas pelo ralo. De qualquer forma, para o Google, eu era a única pessoa a ser selecionada com um GPA de 7,5 (temos o GPA mais alto entre 10 na Índia). O resto das 10-15 estava acima de 8,5 ou 9. Eu não superei a rodada competitiva novamente, mas isso me deu uma lição de que era possível entrar pelo menos na primeira rodada de uma empresa da escala do Google somente com o seu currículo também. Portanto, é importante trabalhar nisso.

Conclusão

TL; DR – Você não precisa aprender códigos competitivos para ter sucesso na vida, precisa aprender algo de que gosta tanto, que domina e é imbatível em seu campo. Isso é tudo. Tem pontos de vista e opiniões? Conecte-se comigo no Twitter e Instagram e vamos discutir mais!