Capacitação em ASP.NET e SQL Server na FAQI

Boa noite à meia-dúzia de leitores do blog (sim, acabei de conferir no Analytics e são só 6 mesmo). Já há algum tempo que ando migrando meus esforços e dedicação para a área de docência, seja como coach interno na empresa, mentor de alguns colegas mais inexperientes (não necessariamente mais jovens) e como uma espécie de “porta-voz” da empresa com relação às instituições de ensino na região metropolitana. Minha própria formação está sendo direcionada aos poucos para a docência, com interesse em programas de Mestrado e por aí vai, mas não é disso que venho falar hoje. Venho falar de capacitação em ASP.NET com SQL Server.

Sei que já tratei do assunto em outro post, mas como fazia tempo que queria fazer um jabá dos meus treinamentos neste espaço, o faço agora. Já ha algum tempo deixei de ser um mero desenvolvedor e passei a me dedicar mais em ajudar no crescimento técnico e profissional de meus colegas. Isso me levou à idéia de montar uma capacitação que ajudasse estudantes de nível técnico e superior a se tornarem desenvolvedores. Ok, não formei nenhum Mark Zuckerberg, mas já saíram de meus cursos algumas boas contratações para a empresa, cujos nomes não citarei para evitar represálias, hehehehehe. O projeto surgiu com a idéia de realizar parcerias entre instituições de ensino gravataienses e a RedeHost. Criei um cronograma, organizei o conteúdo a ser lecionado, vesti minha melhor camisa e saí a buscar contatos entre os coordenadores das instituições, isso em Outubro do ano passado (2010).

Case FAQI – Outubro de 2010

Ok, a FAQI (a faculdade da rede de escolas QI em Gravataí, para quem não conhece) não foi o primeiro local onde lecionei. Dentro da própria RedeHost eu iniciei as atividades da capacitação, com colegas que tinham interesse de a) trocar de setor ou b) conhecer ASP.NET. O mesmo conteúdo que seria ministrado semanas mais tarde na FAQI pôde ser testado com meus colegas e ajustado, para que fosse o mais interessante e didático possível. Então, quando dei o start na parceria com a FAQI eu já estava com um conteúdo mais amadurecido.

Para quem não conhece o projeto (motivo central do post), ele inicia com uma visita à instituição, onde conheço o coordenador do curso para o qual quero apresentar a capacitação, neste caso a prof. Aline Riva, que coordena o curso Tecnólogo em Desenvolvimento de Sistemas. Acertada a parceria, onde a instituição fornece a infraestrutura e os alunos, e a RedeHost fornece…eu, marcamos um dia para irmos apresentar a empresa e o projeto aos alunos, para ver se há interesse (como se alguém não quisesse um curso de graça de programação, hsuahusuhas). Este primeiro contato funciona como um “termômetro” da instituição, conseguimos medir várias coisas: a quantidade de alunos, a organização da instituição e por aí vai. Obviamente a FAQI estava de parabéns e fomos muito bem recebidos. Sim, eu não estava sozinho. Geralmente consigo levar nosso CEO, Flávio Eduardo para me acompanhar, afinal, quem melhor para falar de RedeHost do que o diretor-presdidente-dono-manda-chuva da empresa?

Após esse contato inicial com os alunos, a próxima etapa (e que ainda se mantém como crucial neste projeto) é a prova de seleção. Poucos alunos tem a oportunidade ímpar de poder participar desse curso (que moral hein!), selecionados através de uma prova de raciocínio lógico. Para quem ainda está iniciando com computação e ainda não se tocou que lógica é tudo nesse ramo, ainda dá tempo de correr! Os selecionados pode finalmente participar do treinamento que dura pouco mais de um mês, com uma aula por semana de 3h. A cada aula, um novo conteúdo é apresentado ainda mais instigante que o anterior, e entre uma aula e outra os alunos são desafiados a desenvolverem aplicações utilizando os conhecimentos vistos na aula. Tudo muito prático e em um ritmo muito intenso, afinal, eu queria ver até onde os alunos podiam chegar e se eram capazes de se tornarem bons desenvolvedores, o que é tarefa para poucos.

Turma FAQI

Resultado

E não é que deu certo? Tive ótimos alunos (se é que posso me considerar um professor) na FAQI e mesmo os que não se tornaram meus colegas de serviço (cada um com seus motivos) se tornaram bons amigos. Criamos um laço interessante com a instituição e provavelmente repetiremos a dose o futuro. Ao que parece, há interesse da unidade de Porto Alegre em levar o curso para lá, e eu com certeza não recusarei se essa oportunidade aparecer. Acima coloquei uma foto dos sobreviventes, a galera que permaneceu realizando o curso do início ao fim e que espero que se tornem bons programadores (clique para ampliar). Não fosse o bastante ainda consegui alguns colaboradores para o time do Atendimento Ninja da RedeHost, que não se tornaram programadores mas colaboradores do Suporte.

Conclusão

Este post não é apenas para lembrar de como foi a capacitação em ASP.NET na FAQI, mas para criar uma linearidade nos posts dos meus treinamentos, para que em breve eu possa contar aos meus 6 leitores (talvez 7 agora, demorei pra escrever isso) a quantas anda o projeto e até mesmo para divulgá-lo. A RedeHost, e principalmente eu, estamos sempre interessados em novas parcerias com instituições de ensino técnico e superior em informática, se você é diretor/coordenador de uma instituição, entre em contato (pode ser pelo blog mesmo) que nós marcamos uma visita à sua instituição (na verdade eu marco, hehehehe). Mantendo a ordem, o próximo post vai ser sobre o treinamento feito na Facensa, em janeiro deste ano.

Resenha – O Monge e o Executivo

Pra espanar um pouco a poeira do blog pensei em fazer essa recomendação de livro que li há poucos dias. Ok, o livro já não é novidade e mesmo eu tendo lido há pouco tempo eu já o conhecia há anos.

Quem me conhece sabe que sou um pouco cético quanto a esse tipo de livro que intitulo de “auto-ajuda profissional”, mas decidi largar o ceticismo de lado e comprá-lo por uma bagatela. Depois da leitura admito que valeu cada centavo. O intuito deste post é, além de resumir a obra sem estragar a diversão, falar um pouco da minha experiência com o mesmo.

O Livro

O Monge e o Executivo (The Servant nos EUA) é um livro pequeno, com 140 páginas aproximadamente. Sua fonte é mediana e o mesmo é organizado em capítulos, o que facilita a leitura para pessoas super atarefadas que não dispõem de longas horas para leitura. Eu particularmente lia um capítulo ou dois antes de deitar todas as noites. A leitura é agradável, em vez de nos descer goela abaixo centenas de teorias de liderança e administração, o autor nos conta uma “historinha” fictícia e que nos ajuda a compreender melhor os conceitos e até mesmo nos identificarmos mais com o livro. Em 12 anos o livro vendeu 200 mil exemplares nos EUA. Já no Brasil passou da marca 2,4 milhões de exemplares, se tornando o maior sucesso da história da Editora Sextante.

A História

O livro narra a história de John Daily, um executivo estadunidense que possui um cargo de liderança em uma grande empresa que fatura milhões. Ele é marido de um psicóloga e pai de dois filhos. O que aparentemente seria uma vida perfeita, profissional e pessoal, está em colapso.

John começa a notar que sua vida está ruindo, como líder, como marido e como pai. Aceitando a sugestão de sua esposa e do pastor local, John vai para um mosteiro em Michigan ficar uma semana com um grupo de monges para espairecer e para colocar sua vida em ordem. Na verdade o que chama a atenção do executivo (e que dá nome à versão portuguesa) é um monge do mosteiro chamado Simeão (nome este que tem um significado místico para John) que na verdade é Leonard Hoffman, um ex-empresário de sucesso que largou tudo e se dedicou ao mosteiro integralmente por ter encontrado a paz e a felicidade.

Simeão se torna o mentor de John e outros líderes que vieram para o “curso”, ensinando-os as virtudes de um líder verdadeiro, como amor, empatia, humildade e autoridade. Com diálogos cheios de referências históricas e frases de grandes pensadores, a narrativa é rica em detalhes e nos faz refletir sobre o nosso próprio comportamento, seja como líderes, maridos, etc.

Os Personagens

Além do personagem principal, John Daily, e do monge Simeão, existem outros colegas de retiro de John, entre eles um pastor, uma treinadora de baseball, uma enfermeira e um militar (acho que tem outros, mas já esqueci, hehehe). Embora os mais leigos acabem odiando o sargento (Greg) ele acaba se tornando um dos elementos principais da história, fazendo o papel de “do contra” e questionador da aplicabilidade das técnicas de liderança ensinadas por Simeão.

Quem realmente entende a história percebe que todos nós temos um pouco de “Greg”. Sinceramente se não existisse o personagem do militar no livro a leitura não seria tão proveitosa.

Fica aí a dica para quem não leu. Obviamente eu não sou o primeiro a indicar este livro e com certeza não serei o último.

Benchmark de Expressões Regulares

regexRecentemente eu li o fantástico Expressões Regulares – Uma Abordagem Divertida de Aurélio Marinho Jargas (@oreio e http://www.aurelio.net), buscando mais informações a respeito do uso de Regular Expressions em parsers HTML (como os que uso para criar mecanismos de busca). Não posso dar mais detalhes sobre o projeto, mas o que originou este post foi a dúvida que o livro me deixou: até que ponto vale a pena utilizar expressões regulares em um sistema para realizar parsing de HTML ao invés dos métodos existentes na classe string, como Replace, IndexOf, Split etc?

Este post relata algumas experiências que tive durante os testes, informações estas que não encontrei na net e tive de fazer por mim mesmo!

O que são Expressões Regulares?

Para quem não sabe do que se trata, segue um trecho retirado do próprio livro, que a meu ver, é uma excelente definição:

Bem resumido, uma expressão regular é um método formal de se especificar um padrão de texto.

Mais detalhadamente, é uma composição de símbolos, caracteres com funções especiais, que, agrupados entre e si e com caracteres literais, formam uma sequência, uma expressão. Essa expressão é interpretada como uma regra, que indicará sucesso se uma entrada de dados qualquer casar (match) com essa regra, ou seja, obedecer exatamente a todas suas condições.

O que é um benchmark?

Este é o primeiro de muitos benchmarks que pretendo fazer. Sempre gostei do assunto de desempenho computacional e gosto de criar códigos que realmente utilizem todo o poder de uma linguagem e de uma máquina. Benchmarks nada mais são do que testes de performance entre soluções concorrentes.

Benchmarks de peças de hardware existem aos montes pela Internet, incluindo o fantástico site Tom’s Hardware que é fonte recomendadíssima de consulta para quem quer comprar uma nova placa de vídeo ou processador. Porém benchmarks de código são mais difíceis de achar, principalmente em língua portuguesa. Espero agregar valor aos visitantes do blog com conteúdo exclusivo do que eu chamo de C# Tuning!

Let’s do it!

Todos os testes foram feitos sobre um arquivo HTML contendo 206KB em 2073 linhas. A máquina onde rodaram os testes é meu PC comum, um Athlon X2 2.2GHz com 2GB RAM. O projeto era um Console Application utilizando o .NET Framework 4.0.

Vamos ao que interessa, os testes realizados foram:

  1. Busca por palavras
  2. Troca de palavras
  3. Quebra de palavras

1º Cenário: Busca por Palavras

No primeiro embate da noite tivemos uma busca por uma determinada palavra dentro do HTML. Esta palavra estava na (teoricamente) pior posição do arquivo: na última linha, última coluna. Foi feito um código utilizando os métodos tradicionais de busca por string, Substring e IndexOf. O IndexOf me dava a posição daquela palavra para poder retirá-la de dentro do HTML usando o substring. Ou seja, você tem a palavra e quer encontrá-la no texto (igual aos que os editores de texto fazem). Já o Regex usa apenas seu comando Match passando por parâmetro a entrada (o HTML) e o padrão (a expressão regular). Vitória esmagadora da Regex: 24.316 Ticks no método tradicional contra 3.278 Ticks da Regex. Quase 10x mais rápido.

Segue o código:

2º Cenário: Troca de Palavras

No 2º round temos um desafio um pouco maior: o usuário quer encontrar determinada palavra no texto e trocá-la por outra palavra. Mais uma vez, a palavra que se busca estará no final do HTML, para forçar os dois métodos a usarem o máximo de seu potencial, enfrentando o pior caso possível. No método tradicional temos o uso do método String.Replace, e no córner azul temos o Regex.Replace. Tim-tim! Empate técnico: o Replace tradicional obteve um tempo de 7753 Ticks, contra 7859 Ticks do seu rival mais elaborado.

Segue o código:

3º Cenário: Quebra de Palavras

No último embate da noite, temos o duelo de Splits. Quem sairá melhor: String.Split ou Regex.Split? Dessa vez a palavra que será usada como padrão para a “quebra” estará uma linha antes da última linha do HTML, para exigir ao máximo dos métodos. Ready…Go! Nocaute da Regex: o comando Split da Regex conseguiu a façanha de quebrar o texto em três pedaços (sim, a Regex inclui a palavra buscada dentro do array de retorno) em apenas 5.354 Ticks, contra 13.351 Ticks do Split tradicional, que traz apenas 2 posições no array.

Segue o código:

Ok, você pode achar que o método Split da Regex não corresponde de forma idêntica ao Split da String, porém, note que o Split da Regex te dá outros incríveis recursos como delimitar o número máximo de posições no array, iniciar a quebra do texto a partir de uma posição específica, iniciar da direita para a esquerda, entre outras. Sem contar que a versatilidade de descrever o seu separador usando um expressão regular ao invés d euma palavra literal não tem preço.

Conclusões

Regex na veia!

Ok, se escreve mais linhas e os ganhos são imperceptíveis em aplicações tradicionais, mas não se esqueça de usar Regex caso suas aplicações processem texto pesado (como parsers), mesmo que você não esteja buscado uma palavra que atenda a uma regra elaborada, mas uma simples palavra literal como utilizada nos exemplos.

Você fez um código mais otimizado para tentar provar que os métodos tradicionais são mais rápidos que a Regex? Mande pra mim!

Você tem outra idéia de embate entre String vs Regex que gostaria de ver publicado aqui? Mande pra mim também!