README
O que?
Na Code:Nation acreditamos que a melhor forma de aprender uma nova tecnologia, linguagem ou mesmo uma nova carreira é através de desafios práticos. É o chamado challenge based learning, onde a pessoa é apresentada a desafios práticos que vão ajudá-la a aprender os principais tópicos necessários para a sua evolução.
Por que contribuir criando desafios?
Lembra quando você iniciou na carreira que está atuando hoje? A angústia de não saber o que estudar primeiro? A lista interminável e assustadora de links, livros, siglas... Tudo isso para começar a entender o básico? O quão frustrante isso pode ser? É esse sentimento que queremos mudar com a Code:Nation e você, que já passou por isso, pode nos ajudar a mudar esse cenário.
Como criar um desafio?
Uma boa forma de iniciar o processo de criação é pensando nos conteúdos que o desafio vai ensinar ao(a) desenvolvedor(a). Por exemplo:
Ao completar este desafio a pessoa terá aprendido o básico de Go, manipulação de slices e como ler um arquivo CSV.
O título
Tudo começa com um bom título. Algo que vai chamar a atenção do(a) desenvolvedor(a) e o(a) convencer a clicar no desafio. Exemplos: Média do ENEM , Melhor nota de matemática do ENEM, Os dez maiores estados do Brasil
A descrição
Aqui é onde descrevemos o desafio em si - quais são seus objetivos e resultados esperados. Exemplo:
OBS: este conteúdo vai ser salvo no arquivo test_files/README.md, então é possível usar markdown.
O teste
Um dos tópicos mais importantes que o(a) desenvolvedor(a) precisa internalizar é o conceito de TDD (Test Driven Development) - a abordagem da Code:Nation é fortemente baseada nesta crença.
Quando o(a) desenvolvedor(a) inicia o desafio utilizando o codenation-cli, recebe na sua máquina um diretório com uma estrutura similar a:
O exemplo acima mostra os arquivos de um desafio na linguagem Go, mas o mesmo conceito é aplicado a qualquer ambiente: uma suite de testes que o desenvolvedor usará para guiar seu desenvolvimento. Neste caso, o test_files/main.go é um "esqueleto" que o desenvolvedor usará para desenvolver.
Exemplo do esqueleto test_files/main.go:
Exemplo do conteúdo do arquivo de testes, o test_files/main_test.go:
O cálculo da nota
Quando o(a) desenvolvedor(a) entender que sua solução está pronta poderá submetê-la para avaliação. Para isso, executará o comando do codenation-cli e um arquivo de testes especial é executado para que a nota seja calculada. A ideia é que o(a) desenvolvedor(a) não possa ver este arquivo - ele é executado apenas no momento da submissão e possui testes mais avançados para validarmos seu conhecimento. Exemplo de um arquivo de testes para este fim, o submission_files/submit_test.go:
Enquanto o primeiro teste possui asserts mais simples (por exemplo: o resultado deve ser uma lista de strings de tamanho 10) neste caso temos asserts mais complexos (por exemplo: o resultado deve ser uma lista de strings cujo primeiro item tenha o valor Amazonas).
Caso o cálculo da nota precise ser realizado de uma maneira mais complexa do que testes unitários, como no exemplo acima, basta que o arquivo faça o processamento e imprima na saída padrão a nota no formato:
O valor do score deve ser entre 0 e 100
Os conteúdos
Um dos maiores desafios de um iniciante é conseguir fazer o filtro da enorme quantidade de conteúdo existente e identificar o que é relevante. Para resolvermos este problema sempre elencamos uma lista de posts, livros, documentações, videos, entre outros materiais, que ajudarão o(a) desenvolvedor(a) a resolver o desafio.
O template
Para facilitar o processo de criação de desafios nós criamos um repositório no Github com templates para as principais linguagens de programação. O repositório é open source, por isso você pode colaborar com novos templates.
O arquivo challenge.json
No arquivo challenge.json constam os metadados do desafio. Nele estão os detalhes como os comandos que serão executados, os arquivos que serão enviados para a API no momento da submissão e os conteúdos indicados. Exemplo:
OBS:
no campo test_cmd indicamos o comando que será executado na máquina do desenvolvedor para que ele possa validar o seu código com os testes unitários fornecidos
no campo submission_cmd é necessário que o comando gere o arquivo output.xml, conforme indicado no campo test_results_files, pois este será analisado durante o processo de avaliação, caso a nota seja calculada de acordo com os testes unitários.
no campo private_files é necessário indicar quais arquivos serão excluídos da máquina do desenvolvedor após a correção e submissão para a API. Estes arquivos geralmente são usados apenas para o cálculo da nota e depois apagados, para garantir a lisura do processo.
no campo test_results_files indicamos qual é o nome dos arquivos que armazenam o resultado dos testes, a serem processados para o cálculo da nota. Caso a nota seja calculada por outro algoritmo este campo não é necessário
Como começar?
Se você tem interesse em nos ajudar com a criação de templates basta abrir uma issue/pull request no repositório de templates.
E, caso queira criar um desafio entre em contato conosco pelo e-mail elton.minetto@codenation.com.br ou Twitter/Facebook/Linkedin.
Last updated