Executando verificação de segurança...
4

Prova prática do concurso do Serpro

Olá, não sou dev(ainda) mas já tenho alguma experiência com Ciência de Dados. Minha linguagem principal é o Python mas irei fazer uma prova prática que pode ser em Java, Javascript ou Python (a maioria está apostando em Java). Daí gostaria de saber se alguém aqui tem dicas de como eu poderia me preparar da melhor maneira considerando que sei o básico do básico de Java e Javascript. Um trecho do edital:

9.6 O candidato deverá estar apto a realizar as seguintes ações na mesma prova, podendo ser questões dis􏰀tintas, contendo apenas uma dessas solicitações, ou mesmo todas elas em uma mesma questão:
a) desenvolver um programa a par􏰀tir de uma especificação, com ou sem acesso a banco de dados;
b) desenvolver um programa que apresente os dados solicitados e(ou) calculados, a par􏰀tir de entrada de dados;
c) desenvolver um programa que execute uma ou mais ro􏰀tinas a parti􏰀r de uma especificação de so􏰂ftware;
d) encontrar erros no código-fonte em uma solução de so􏰂ftware previamente disponibilizada e solucioná-los, detalhando cada erro encontrado e apresentando para cada erro a(s) solução(ções) necessária(s);
e) refatorar um código-fonte disponibilizado com obje􏰀vo de melhorá-lo sem que haja mudança na sua funcionalidade;
f) elaborar o teste unitário de um código-fonte disponibilizado.

9.7 Na prova de conhecimentos aplicados serão avaliados, no mínimo:
a) sintaxe do código-fonte;
b) avaliação do resultado (saída do so􏰂ftware);
c) correta execução do so􏰂ftware a parti􏰀r dos requisitos descritos, incluindo, dados de entrada e resultado esperado.

É isso. Esse é meu primeiro post no tabnews e acabei de entrar no curso.dev. Espero que não esteja muito fora dos propósitos do espaço. Valeu!

Carregando publicação patrocinada...
4

Olá! Espero que esteja bem. Sou Rafael Barbosa, funcionário de técnologia do Banco do Brasil. Espero que eu possa te ajudar.

Os conselhos que vou dar aqui servem para qualquer um que precise aprender uma lignuagem de programação em pouco tempo. Se fosse uma postagem por si só eu daria o título:

Como aprender a programar em um mês

Meio clickbait, mas é real: dá pra aprender o básico de uma linguagem em um mês.

Enfim, vamos para as dicas (que são, na verdade, um roteiro, um caminho para adquirir as habilidades que o edital te exige):


Mapa do caminho: as habilidades a desenvolver

As habilidades que você deve buscar desenvolver, de acordo com esse trecho do edital que postou, são: 1. escrita de códigos de processamento dados (inclusive, acessando um banco de dados); 2. leitura e análise de códigos; 3. refatoração de códigos; 4. criação de testes unitários.

Como o tempo é curto, o meu conselho é focar nas habilidades que dão mais fruto em pouco tempo: leitura e análise de códigos, escrita básica (focando no que o edital pede); se der tempo, refatoração e testes unitários.

1. Leitura e análise: o 'core' do que um programador faz

Assim como ao aprender uma língua estrangeira, você pode focar em 20% do vocabulário e entender 80% das sentenças, da mesma forma é com a programação. Escolhe um ou dois tutoriais de cada linguagem que será cobrada, começando das que você sabe menos, leita, memorize. Depois foque em aplicar o que você leu, analisando o código, ou seja,tentando entender o que cada trecho faz. Links com tutoriais para cada linguagem mencionada: tutorial de Python, tutorial de Java, tutorial de JavaScript.

2. Escrita, ou 'gugu dádá'

Voltando à analogia da língua estrageira: a escrita/conversa é fundamental para fixar o que se aprendeu e para verificar se realmente aprendeu. Como uma criança aprendendo a linguagem humana, é mais fácil começar imitando o pouco que já aprendemos; assim, temos meio que um loop que se retro-alimenta: testamos o que aprendemos, aprendemos mais, testamos novamente... e cada vez ficamos melhores. Para evoluir essa habilidade de escrita você pode treinar com esses sites de resolução ed problemas, como URI Online Judge (ICPC), ou Leetcode. Esse tipo de site funciona da seguinte forma: te é dado um problema, por exemplo, recebendo dois números inteiros, retornar o resultado da soma deste; você escreve o código em alguma linguagem que o site aceite (normalmente tem Java, JavaScript e Python); submete o código e o próprio site julga se o seu código resolve o rpoblema proposto. Você pode começar com os problemas mais simples, fazendo em todas as três linguagens que precisa aprender.

3. Repetição e refinamento

Então, primeiro você aprende o básico para ler aquela língua, depois vai retro-alimentando a habilidade de leitura-análise com a habilidade de escrita -- repetindo o processo, aumentando o level dessas duas skills até ser bom o suficiente para entrar uma guilda de aventureiros e partir pro mundo real (ou enfrentar um boss, como o seu caso, a prova). Nesse ponto, você deve notar que te faltam algumas habilidades mais fundamentais; alguns conceitos preliminares que podem te ajudar muito nesse aprendizado²: o que é um algoritmo, como funcionam os computadores exatamente, por que meu código demora tanto a executar etc. Você pode sanar essas dúvidas com essa playlist do Hallison Paz: Playlist de Estrutura de Dados.

4. e 5. Refinamento da escrita: refatoração e testes

As duas últimas habilidades, da reescrita e da criação de testes unitários, estão relacionadas com a qualidade do software.

Refatorar um código é como pegar um texto antigo que você escreveu e reescrever, mantendo a mesma idéia, porém tentando escolher melhor as palavras para dizer melhor o que se quer dizer. Sobre refatoração, você pode ver esse vídeo aqui. Uma boa ideia é refatorar os códigos que você fez para resolver os problemas simples, no ponto dois.

Já os testes unitários servem para que você teste cada pequena parte do código, de modo que o computador possa verificar se você está realmente fazendo o que se propôs. Você vai ter que aprender a fazer testes unitários em cada uma das linguagens, deixo aqui um início: testes em java, testes em Python, testes em Javascript.


Esse é um progrma para início dos estudos. Como eu não sei qual a sua rotina, quanto tempo você tem por dia, como você organiza os seus estudos, não posso te dar dicas mais específicas. Resumindo:

  1. Aprender o básico da linguagem com tutoriais (ou na documentação mesmo);
  2. Programar códigos que resolvem problemas simples, usando como guias sites como este
  3. Repetir os dois últimos passos até cobrir o mínimo do edital (neste caso, operações básicas da linguagem de programação, soma, subtração, multiplicação, divisão, potenciação, funções já construídas na linguagem; acesso a um banco de dados)¹
  4. Aprender o básico sobre qualidade de software, o que é uma refatoração, quando e como efetuar uma refatoração
  5. Aprender a fazer testes unitários

Seguir esses passos para cada linguagem que você queira aprender.


É isso, essas são as minhas dicas (é mais um roteiro de estudo).
Qualquer dúvida pode mandar um e-mail: [email protected] [quem mandar spam será amaldiçoado até a 8ª geração 👹].


¹ Esse critério de "quando será estou bom o suficiente numa determinada habilidade" é algo difícil de ser ter. Tenho planos de fazer uma lista de 'chekpoints' definitiva, que se possa consultar e verificar a senioridade em cada tema; por enquanto, ainda estou mapeando as habilidades atômicas do programador.
² Mais ou menos como a gente nota, lá pros dez anos de idade, que precisa aprender um pouco de gramática -- na analogia da escrita

1

Muito obrigado, Rafael! Muito gentil da sua parte ser tão detalhista, espero que seja útil para mais pessoas por aqui! Vou olhar todas as referências com calma e retorno em breve.

1

A diferença entre estudar para concursos de TI, em relação a outros concursos, é que o "decoreba" não funciona. É necessario entender e praticar o que você está aprendendo. Pois até mesmo na resolução de um problema em uma prova escrita, o que você estará colocando em pratica para gabaritar é o conhecimento prático, ou seja, como aplicar a "teoria". Ainda mais em um concurso com etapas práticas, como o da Serpro.

Muito interessante isso.

Boa sorte nos estudos!

2

Pois é, Bruno. Não adianta: pra você dizer que está preparado tem que entender o assunto realmente. Só decorar não ajuda em absolutamente nada, não num concurso de TI. Num concurso administrativo, por exemplo, dá pra decorar as Leis e os normativos; como seu cérebro já entende a linguagem, só o fato de ter aquilo na memória já ajuda. Na TI não: como você não entende o fundamento do assunto, tem que cavar, compreender mesmo. Não é somente decorar, mas decorar os conceitos, os modos de aplicar o conceito, os vários efeitos possíveis que dependem da forma de aplicação que você escolheu, as hierarquias dessas aplicações (qual é melhor num determinado contexto)...

Um comentário, ainda sobre provas de TI. Muita gente reclama da dificuldade e da especificidade das questões. E realmente, às vezes o examinador alopra. Mas, na grande maioria dos concursos, essa distribuição de questões fáceis e difíceis, gerais e específicas é calculado.

Muitas vezes o que é cobrado nas provas é algo muito específico, e aí só alguém com especialização no assunto responde certo; outras vezes é um assunto mais 'inicial', seja Algotimos, seja Estruturas de Dados simples, seja um 'Hello World' da linguagem da questão. Pela minha pequena experiência em concursos de TI, a distribuição dessas questões +específicas, -específicas, gerais, e introdutórias depende muito do perfil que o órgão está buscando.

O concurseiro de TI tem que ter uma noção precisa do que sabe o do que não sabe; tem que sr estratégico na hora de escolher os assuntos para estudar; tem que saber ler e analisar um editar, comparar o que vai ser cobrado e como vai ser cobrado com o que sabe, montar uma estratégia de estudos condizente com a sua realidade... É muita coisa.

Caso você precise de ajuda para montar o plano de estudos, ou para analisar um edital, ou, ainda, para saber qual o seu nível em cada uma das habilidades, manda um email. Aproveitem que eu ainda não estou cobrando. 😁😝