Em Fevereiro colocamos aqui um post com algumas questões de SQL que poderiam ser colocadas numa entrevista.
Vamos tornar a abordar o problema, com a seguinte tabela:
mysql> select * from e;
+-------+-------+
| nome | valor |
+-------+-------+
| josé | 20 |
| joão | 10 |
| rui | 5 |
| pedro | 3 |
| josé | 5 |
| pedro | 10 |
| luís | 25 |
+-------+-------+
7 rows in set (0.00 sec)
Algo que costuma ser feito já depois das queries é perguntar aos candidatos quais os tipos de dados das duas colunas.
Para efeitos deste post, vamos assumir uma base de dados MySQL com uma tabela definida da seguinte forma:
create table e (
nome varchar(50),
valor int
) ENGINE=InnoDB;
INSERT INTO e (nome, valor) VALUES
('josé', 20),
('joão', 10),
('rui', 5),
('pedro', 3),
('josé', 5),
('pedro', 10),
('luís', 25)
;
Vamos analisar as queries que propusemos no nosso post anterior.
mysql> select sum(valor) from e;
+------------+
| sum(valor) |
+------------+
| 78 |
+------------+
1 row in set (0.40 sec)
É das queries mais simples e quase todos os candidatos a escrevem correctamente.
mysql> select nome, sum(valor) from e group by nome;
+-------+------------+
| nome | sum(valor) |
+-------+------------+
| joão | 10 |
| josé | 25 |
| luís | 25 |
| pedro | 13 |
| rui | 5 |
+-------+------------+
5 rows in set (0.04 sec)
Quase todas as pessoas sabem como se faz, mas já se encontra alguns candidatos que trocam a ordem de algumas cláusulas, que se esquecem do group by, etc.
mysql> select nome from e group by nome having count(1) > 1;
+-------+
| nome |
+-------+
| josé |
| pedro |
+-------+
2 rows in set (0.00 sec)
Neste ponto sim, já começamos a perder muito boa gente.
mysql> select group_concat(distinct nome) from e;
+-----------------------------+
| group_concat(distinct nome) |
+-----------------------------+
| josé,joão,rui,pedro,luís |
+-----------------------------+
1 row in set (0.00 sec)
Tipicamente já só acerta estas queries quem tem experiência intensiva com bases de dados.
Faz sentido, porque é perfeitamente viável trabalhar com bases de dados sem usar extensivamente tudo o que elas nos oferecem.
Não será de facto por não saber algo deste género que um candidato ficará pelo caminho, mas são perguntas como esta que permitem ir discernindo o tipo de uso que a pessoa dá à base de dados.
Perguntas como esta e não só: perguntas sobre as perguntas.
Numa entrevista não declaramos a base de dados, apenas a desenhamos num quadro ou numa folha de papel.
Depois de termos abordado várias queries, aí sim, abordam-se outras temáticas:
Há sempre mais qualquer coisa que a conversa traz, como por exemplo o entrevistado sugerir que o tipo de dados do valor deveria ser um INT(3)...
O Verbatim é um dos projectos nascidos num SAPO Lab.
Este projecto deverá agora receber alguma força e dinamização extra.
Com esta ideia em mente o Jorge Teixeira - um dos elementos que criou o projecto - veio passar uma semana em Lisboa, nas instalações do SAPO (mas deixámo-lo sempre sair para comer e dormir).
A semana começou com uma reunião de apresentação do projecto, por dentro e por fora.
Na sala, uma dúzia de pessoas com as mais variadas skills, incluindo as tecnologias e plataformas SAPO empregues no projecto e não só: Perl, JavaScript, MySQL, Usabilidade, Acessibilidade, Segurança, SAPO Broker, LibSAPO.js, etc.
Após esta sessão foram marcadas cinco outras reuniões com diferentes elementos desta task force.
Reunião 1: Perl e MySQL
Quatro pessoas numa sala com um único intuito: analisar o código do projecto (ou parte deste) para o conseguir optimizar.
Foram apontadas coisas simples como a diferença entre usar CGI ou FastCGI, foi feito benchmarking ao código para encontrar os bottlenecks, foram optimizadas queries de SQL (e inclusivé foi reduzido o número destas numa grande escala), etc.
O Jorge saiu da reunião com já algumas alterações no projecto e uma folha cheia de notas que ele teria que implementar mais tarde.
Reunião 2: JavaScript e Segurança
Quando a reunião começou a equipa de JavaScript já tinha realizado alguns testes à plataforma, pelo que já levavam uma lista de sugestões.
Havia código que podia ser optimizado e foram ainda apresentadas algumas soluções como o ySlow para análise do restante.
Também foram apresentadas algumas falhas de segurança que o site possuía; as mesmas foram explicadas em detalhe, bem como as medidas a tomar para as fechar.
No final da reunião havia mais uma folha com notas nas mãos do Jorge.
Reunião 3: Usabilidade e Acessibilidade
A equipa de QA do SAPO realizou uma avaliação heurística ao Verbatim e nesta reunião apresentou ao Jorge os resultados da mesma.
Saíram desta reunião uma série de sugestões e recomendações para tornar o serviço mais apelativo, usável e acessível.
Mais uma reunião, mais uma folha.
Reunião 4: Arquitectura e Serviços
Aqui foram analisadas a arquitectura actual e as possibilidades futuras da mesma.
Foi explorada em detalhe a interacção com o SAPO Broker e revistas algumas boas práticas de utilização do mesmo que poderão ajudar o projecto.
Foi analisado o que seria necessário para implementar determinadas funcionalidades que estão previstas (extracção de dados semânticos, etc).
Houve também uma discussão sobre LSP (léxico semântico do português) e no final o Jorge tinha agora quatro listas de coisas a fazer e a analisar.
Reunião 5: Web Services
Neste reunião foram abordadas as tecnologias base usadas para publicar diversos tipos de dados do Verbatim como um serviço.
Foram realçados vários aspectos importantes como a disponibilização dos dados a outros serviços e plataformas, tentando assim começar a tornar transversais a todo o SAPO alguns Web Services.
Avaliação final
No final desta semana perguntamos ao Jorge que avaliação fazia desta semana:
"A avaliação final que eu faço a esta semana de trabalho no SAPO é simplesmente excelente! Excelente por dois motivos, por um lado vim para o Porto com uma enorme lista de melhorias a implementar (é sempre bom saber que um projecto ainda tem muito por onde evoluir) e por outro por ter conhecido uma equipa de gente conhecedora e disposta a partilhar os conhecimentos e ajuda.
[…]
Para terminar, algumas das sugestões com que vim do Sapo já foram implementadas, e as melhorias foram muito boas. Só a nível de tempos de acesso, conseguimos uma diminuição da ordem dos 50% em relação aos valores anteriores."