Se a validação for apenas para ver se o campo está preenchido ou não, o "required" pode ser mais prático, mas, com o JS você tem uma maior controle.
Imagine um exemplo diferente da aula, por exemplo, um formulário com um campo nome e CPF, onde você tem que validar se o formato (algoritmo) do CPF é válido. Neste exemplo, teria que usar o JS
Ampliando o assunto para uma visão mais avançada, a validação dos campos precisa ser feita em duas etapas. A primeira é esta que você está aprendendo, que é no frontend (no seu formulário, com javascript). O ideal, por razões de segurança, é repetir a programação no backend (ou seja, no endereço que vai receber os dados)