JavaRush /Blogue Java /Random-PT /Como um velho humanista foi para TI
PieIsLie
Nível 35
Санкт-Петербург

Como um velho humanista foi para TI

Publicado no grupo Random-PT
Fogo de artifício! Na verdade, por muito tempo pensei sobre o que exatamente escreveria neste post e se o escreveria. Acontece que em diferentes períodos dos últimos dois anos avaliei minhas chances de conseguir uma posição de desenvolvedor Java de diferentes maneiras: de “mais cedo ou mais tarde - definitivamente” a “Não tenho chance em TI”. Como um velho humanista foi para a TI - 1No entanto, quase exatamente dois anos se passaram desde que me registrei no JavaRush. Há alguns meses recebi minha primeira oferta, pouco depois recebi a segunda e comecei um novo emprego. Histórias de sucesso me ajudaram muito durante o curso, então resolvi postar as minhas. Como o curso ocorreu em 2018, algumas informações podem não estar atualizadas. Direi desde já que vai ter muito texto, porque... Tentarei falar-lhe sobre formação e procura de emprego (requisitos, respostas, especificações técnicas, entrevistas, etc.). Também escreverei algumas dicas gerais que me ajudaram pessoalmente e podem ajudar outras pessoas. Resumidamente sobre mim: 32 anos, 10 anos de experiência em gestão e vendas, formação em artes liberais e absolutamente nenhuma formação técnica. Vários anos atrás, tentei entrar em C++ e depois em Python - não tive nada além de dor de cabeça. Portanto, é difícil me chamar de desenvolvedor talentoso: muito pelo contrário.

ETAPA 1. Treinamento

Vim para o JavaRush de forma consciente: uma tabela de preços mensal adequada, uma estrutura clara do material, muita prática e a presença da minha própria comunidade. O primeiro ponto está tudo claro, mas aprender uma linguagem sem estrutura é bastante difícil, e tal treinamento certamente deixará uma pessoa com sérias lacunas no Java Core. A experiência de entrevistas e especificações técnicas mostra que perguntas sobre o “núcleo” podem ser usadas para tudo: desde mudança bit a bit e conversão de genéricos até IO e serialização. A prática é obrigatória; Ainda só consigo entender e lembrar metade das coisas se eu mesmo as tiver escrito. Bem, a comunidade: você resolveu o problema - gabe-se nos comentários; Se você ainda não decidiu, fique à vontade para fazer perguntas, mas provavelmente ninguém lhe dará uma solução pronta. E voltei aos artigos personalizados sobre temas gratuitos mesmo depois de terminar o curso, tem muita coisa boa aí para começar (principalmente a primeira experiência com frameworks usando exemplos passo a passo + perguntas para entrevistas). Em geral, sou grato a este projeto pela base que recebi, mas não confiaria apenas no JavaRush - o mesmo Shildt é o melhor de tudo, “se sobrepõe” ao tema em estudo e muitas vezes revela alguns pontos. Muito já foi dito nas análises sobre tarefas que às vezes vão além da teoria e obrigam você a ir ao Google. Para mim, isso é mais um ponto positivo do que negativo - e não é fato que agora a situação seja a mesma de quando eu estava estudando. Conselho imediato para quem, como eu, entra em Java “do zero” : em algum momento você pode ficar entediado ou difícil:
  1. É difícil para todo mundo começar do zero, Deus me livre, só 5% das pessoas chegam ao final do curso. Sua tarefa é se tornar um deles.

  2. Meu interesse apareceu depois de um ou dois meses, quando as tarefas ficaram mais difíceis e interessantes. Ser paciente.

  3. O principal é o progresso semanal. Depois de duas semanas de descanso, já é difícil voltar e nem todos conseguem escrever todos os dias durante vários meses consecutivos. Estabeleça um limite de horas por semana - por exemplo, 15. Você pode programar 1,5 horas todos os dias da semana e outras 3-4 horas em ambos os fins de semana, ou pode tirar algumas noites de folga, mas o “limite de fim de semana” irá aumentar. Dessa forma, o horário será flexível, mas regular. Claro, então será possível medir o trabalho por tarefas e projetos, mas no nível da sintaxe e do kernel, horas servirão.
Em geral, demorei cerca de 5 meses para concluir o curso (antes de acessar o estágio) , apesar de poder pagar férias e pequenas pausas; novamente, trabalhar uma semana de cinco dias deixava apenas os fins de semana e as noites livres dos dias úteis das 22h às 00h. Portanto, com um horário mais flexível ou um regime de treinamento mais rígido, você pode lidar com isso muito mais cedo. Aí planejei fazer um estágio, mas no final não deu certo.

ESTÁGIO 2. Autoeducação

Então, não consegui o estágio: deixei apenas alguns dias com os requisitos técnicos até o final do recrutamento para o grupo e não tive tempo de entender os requisitos - havia muitas palavras desconhecidas. Porque Não queria esperar mais três meses, decidi seguir em frente. Felizmente, existem guias e tutoriais em vídeo para todas as estruturas populares. Nos meses seguintes, lidei com Spring MVC, Spring Boot + Data, Spring Security, Hibernate, jUnit, Maven, Git, RDBMS, dominei SQL e tentei juntar tudo em um único todo. Seis meses depois, eu tinha projetos que dão medo de olhar agora, mas ganhei experiência prática no uso de frameworks “adultos” e um GitHub que poderia ser mostrado a pedido de um potencial empregador. Conselho :
  1. Quanto mais cedo você aprender sobre .gitignore, melhor. ;)

  2. Muitos guias incluem diversas estruturas ao mesmo tempo; use isso e adicione o seu próprio. Escrevemos uma loja online usando Maven + Spring Boot + Data - adicionamos autorização, testes de unidade e registro.

  3. Para projetos da web, você pode obter modelos de front-end gratuitos da Internet - eles são mais agradáveis ​​​​de trabalhar e ficam melhores como capturas de tela no README do Git. Ao mesmo tempo, você será capaz de se lembrar de HTML e CSS - provavelmente desejará corrigir os estilos e o layout.

A maneira mais fácil de criar esse plano de desenvolvimento para você mesmo é passar pelas vagas de HH para Junior\Middle Java Developer e ver quais tecnologias e frameworks são indicados com mais frequência. Anote-os, estabeleça especificações técnicas para eles, estabeleça prazos para implementação. Embora, talvez se eu começasse com um estágio local, não precisaria passar vários meses em projetos domésticos.

O que estava faltando (mais tarde me queimei durante uma entrevista)

  1. Algoritmos. Para evitar meus erros, recomendo imediatamente um pequeno livro em russo, “Grocking Algorithms”. Qual é a complexidade dos algoritmos, em que consistem, porque o quicksort não é suficiente, uma introdução à teoria dos grafos - está tudo aí e na linguagem mais compreensível.

  2. Coleções "sob o capô". Não me lembro se isso foi no JavaRush, mas é útil saber como HashMap.get() funciona ou por que não é garantido que um HashSet preserve a ordem dos elementos. Novamente - quais coleções são seguras para threads e por quê.

  3. SQL. Você precisa de pelo menos JOINs - o que são, como funcionam, a capacidade de escrever um SELECT em duas tabelas no papel instantaneamente. Eu recomendo www.sql-ex.ru: ele o levará ao nível desejado em um ou dois dias.

  4. Spring Core: quais anotações existem, o que é um contexto, como os beans são criados, qual Bean Scope é thread-safe e como resolver a injeção mútua - todas as questões da entrevista. Como retornar uma página, como retornar JSON, etc. Atualmente estou lendo “Primavera 5 para Profissionais” em russo, mas em geral eles recomendam “Primavera em Ação”.

ETAPA 3. Procura de emprego

Na verdade, nos primeiros meses após a conclusão dos projetos de casa, enviei cerca de 30 respostas para diversas vagas de Junior\Trainee (através de HH, LinkedIn, agências de recrutamento), com resultados quase nulos. Concentrei-me apenas em vagas sem experiência, indiquei honestamente uma pilha que conhecia e escrevi sobre minha alta capacidade de aprendizado em cartas de apresentação. O resultado foram duas ligações (uma delas encerrada imediatamente no meu inglês pré-intermediário), mais duas empresas enviaram especificações técnicas, houve apenas uma “reunião”, e aí eu fiquei sozinho resolvendo problemas de algoritmos em um pedaço de papel, depois disso, o RH simplesmente retirou os papéis e "Ligaremos para você". Tentei conseguir alguns estágios (não remunerados e remunerados condicionalmente): fiz a especificação técnica, mas não fui além da segurança social final; mas agora posso dizer que os trainees são definitivamente recrutados pela T-Systems, CFT, Andersen e EPAM (eles têm avaliações mistas, decida por si mesmo). Quanto a mim, é uma boa forma de entrar na área se você tiver a oportunidade de ficar vários meses sem renda e não morrer =) Em geral, depois dessa experiência fiquei um pouco deprimido, e coloquei toda a história com a busca em pausa por quase seis meses - continuei trabalhando no perfil anterior, escrevi alguns aplicativos apenas por diversão, mas nem os publiquei no Git. Até que conheci um conhecido, a quem contei casualmente sobre as falhas nas vagas: naquela época ele já trabalhava como desenvolvedor intermediário, mas começou da mesma forma - com auto-estudo. Um conhecido me deu algumas recomendações , que ele mesmo usou e que me ajudaram muito na minha procura de emprego no futuro. Se você os segue ou não, depende de você, porque... eles não são, de certa forma, totalmente honestos. Então, mais citações:
  • De qualquer forma, tenha em seu currículo mais de 6 meses de experiência comercial: estágios, projetos de graduação, freelancer, trabalho remoto - tanto faz. Isso ajudará muito na fase de triagem inicial dos currículos pelo RH;

  • retire a palavra Júnior e salário esperado do seu currículo; é só deixar como Desenvolvedor Java, e discutir o dinheiro individualmente com cada empresa;

  • tente fazer com que o RH nomeie o “garfo” do salário proposto antes de nomear suas expectativas. Se uma empresa oferece 80-120k e você está procurando 40k ou mais, alguns selecionadores irão tratá-lo com desdém;

  • Candidate-se a todas as vagas adequadas ao seu perfil, mesmo que exijam de 1 a 3 anos de experiência comercial.

Depois de seguir todas essas recomendações, a situação da pesquisa melhorou significativamente. Em primeiro lugar, das cerca de 12 novas respostas, metade terminou quase imediatamente numa reunião, ou Skype, ou TK (o que já era muito diferente de ter sido ignorado nos meses anteriores). Em segundo lugar, o pessoal de RH começou a escrever para mim, aos quais não respondi - em mensagens instantâneas, por correio, no LinkedIn. Em terceiro lugar, os requisitos de experiência comercial revelaram-se não muito rigorosos - muitas empresas estavam prontas para comunicar com um candidato que não se enquadrava na faixa especificada de 1 a 3 anos de prática corporativa. Como resultado - uma oferta para júnior, outra para médio com período probatório. No total, a busca durou dois meses. Conselho :
  1. Inclua em seu currículo todo o conjunto de linguagens, tecnologias e frameworks com os quais você trabalhou.

  2. Registre-se no LinkedIn - há muitas pessoas de RH de diferentes empresas lá. Preencha o seu perfil com atenção - na verdade, este também é o seu currículo. Para desenvolver sua rede de contatos, adicione LEÕES relevantes ao seu perfil; eles aceitam solicitações de todos os usuários.

  3. Experimente testes Java gratuitos - eles geralmente são aplicados em papel antes da entrevista do Junior. É melhor se preparar com antecedência.

Algumas palavras sobre entrevistas
  1. Eles sempre perguntam sobre as coleções: quais existem, como são diferentes, qual a melhor hora para usá-las.

  2. Sempre em classes e interfaces abstratas - podem ter métodos, campos, quais, podem ser herdados, etc.

  3. Quase sempre em multithreading - o que você usou em seu trabalho, palavras-chave, métodos, você está familiarizado com util.concurrent.

  4. Muitas vezes, ao trabalhar com memória - o heap, a pilha, e essas strings serão iguais, e esses objetos, por quê.

  5. Às vezes, sobre algoritmos - quais você conhece, qual a complexidade, por que, você pode escrever um algoritmo agora.

  6. Às vezes, com base em padrões - quais você conhece, quais você usa, escreva um singleton ou fábrica.

  7. Às vezes, em SQL - tipos de JOINs, o que é uma transação, como conduzi-la em JDBC, escreva uma consulta curta.

Na verdade, tudo depende muito da empresa : alguém não faz uma única pergunta sobre Java Core, mas passa 40 minutos falando sobre frameworks e SQL; Algumas pessoas nem usam frameworks populares e perguntam apenas sobre algoritmos, tipos, coleções e memória. Cerca de metade das reuniões começaram com testes - às vezes em russo, às vezes em inglês (20 a 30 perguntas por 20 a 30 minutos); Normalmente questões do tipo “aqui está o código, ele será executado ou não, e se não, então em que linha” ou “aqui estão vários objetos, eles serão iguais após N operações”. Algumas palavras sobre especificações técnicas : 70% das empresas que iniciam a comunicação me enviaram especificações técnicas antes ou depois da reunião. Normalmente, a conclusão leva de alguns dias a uma semana, mas na maioria das vezes os prazos podem ser ligeiramente alterados. Qualquer coisa pode ser usada como especificações técnicas. Aqui estão os exemplos que fiz:
  • Página de contatos comerciais do perfil do Salesforce com edição e adição de novos registros;

  • simulação de elevador em prédio de vários andares utilizando Spring State Machine com controle de console;

  • Aplicativo Android baseado na biblioteca LibGDX com saída de texto caractere por caractere quando um botão é pressionado;

  • Imitação REST de compartilhamento de carro, com adição de clientes via solicitação HTTP e retorno JSON;

  • problema de ordenação de um grafo não direcionado através de uma célula livre;

  • procure triângulos isósceles usando coordenadas de um arquivo;

  • refatoração de código finalizado usando Stream API;

  • Calculadora UI com suporte para expressões ternárias;

  • corrida de threads com gravação dos resultados em um arquivo.

Às vezes, os métodos de cálculo são solicitados a serem cobertos com testes unitários, e os métodos de consulta são solicitados a serem cobertos com testes de integração. Conselho :
  1. Tente não apenas completar a tarefa, mas também garantir que o código esteja em conformidade com os princípios OOP.

  2. Verifique a eficiência do seu código - uma vez fui rejeitado porque, entre outras coisas, usei PrintStream em vez de BufferedWriter.

  3. Planeje seu tempo de execução com uma margem de 50% - é melhor começar e terminar mais cedo do que fazer um git push às oito horas da manhã do prazo final.

Bom, tudo que eu queria, acho que escrevi. O mais importante é que a água desgasta as pedras. Você não pode escrever muito, muito em Java, depois procurar um emprego por muito, muito tempo e, no final, não encontrar nada. Se um especialista em humanidades de 30 anos conseguiu, você pode fazer ainda melhor. O principal é não ter medo dos primeiros atendimentos, trabalhos técnicos e entrevistas: a cada falha, eu tinha a garantia de aprender algo por mim mesmo e melhorar - quanto mais tempo, mais confiante você se sente. Se em algum lugar ficou caótico ou há erros - peço desculpas antecipadamente, escreva, vou corrigir. Espero que minha experiência ajude pelo menos alguém =)
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION