Blog sobre desenvolvimento de software (Java, muito Java!), inovação tecnológica e cotidiano do Universo de TI. Acesse notícias, tutoriais, material de cursos e eventos, código, desafios, soluções, opiniões, pensamentos, divagações, balbuciações e abobrinhas diversas. Deixe seu comentário!

quinta-feira, 13 de agosto de 2015

Life's too short not to be Irish! E um pouco de bruxaria com Emmet

Pessoal, sei que o blog anda meio (muito) encostado, mas vou fazer o possível para publicar um post de vez em quando. O motivo da minha ausência prolongada? Me mudei para a cidadezinha de Athlone no centro da Irlanda. A vida é boa aqui na terra do Bono Vox, mas tudo que é novo demanda uma certa dose de energia, tempo e dedicação. Em breve pretendo escrever um pouco sobre como funciona o processo de imigração e as vantagens e desafios de viver no exterior.

Enquanto não tenho mais como dar aulas presenciais em São Paulo, continuo disponível para dar aulas remotas. Para aqueles que necessitam de aulas presenciais tenho boas indicações de instrutores.  A melhor maneira de falar comigo continua sendo o formulário de contato

Para não escrever um post sem nenhum conteúdo técnico, segue um pouco de bruxaria com o Emmet

O que é o Emmet você me pergunta? É mais fácil mostrar do que explicar!

Abra o bom e velho JSFiddle, clique no quadro para HTML, digite o conteúdo abaixo e aperte TAB.
table.minhaClasse>tr#linha_$*3>td{Coluna 1 - $}+td{Coluna 2 - $}
Mágico não? Perfeito para HTML e CSS; flexível o suficiente para rodar no seu navegador, no seu editor de texto e no seu IDE. 

Eu tenho me divido entre Java e Python no dia a dia. Independentemente da linguagem server side, o Emmet vem me ajudado muito no front end. Tanto o IntelliJ IDEA quanto o PyCharm possuem suporte nativo para Emmet. Existem também plugins para Netbeans e Eclipse. Até o pessoal do Visual Studio pode usufruir da funcionalidade com o Web Essentials. Você torce o nariz para IDES? Sem problemas, existem plugins para vim, Sublime, Emacs e até mesmo para o Notepad++.

Eu uso o Emmet em tantas janelas diferentes que chego a me esquecer que o suporte não é nativo do SO. 

O Emmet na verdade é escrito em JavaScript. O fato de boa parte desses plugins estarem levantando engines de JavaScript como o V8 dá nó na cabeça desse dinossauro que vos fala. Com a morte do NPAPI (pelas mãos da Google), podemos dar por encerrada a era dos moribundos Java Applets. Enquanto isso JavaScript nunca esteve mais vivo... JavaScript is everywhere!


Software development: Private classes and onsite training - get in touch.

quinta-feira, 25 de setembro de 2014

O que é Data Science? Por onde começar?

Essa é uma era de revoluções: Computação em nuvem; popularização do acesso a Internet com conexões de dezenas (ou mesmo centenas) de megabits; data sets históricos com petabytes (ou mesmo exabytes) de informações; milhões de dados "quentes" sendo produzidos e consumidos por sistemas de sistemas a cada piscar de olhos; computação ubíqua e infinitas possibilidades.

Todos esses avanço vêm alavancando novas tendências de mercado. Estão se popularizando tecnologias e técnicas antes dominadas por poucos, restritas principalmente aos meios acadêmico, governamental, militar e financeiro; utilizadas apenas por instituições que possuíam os recursos e expertise necessários para operar nessa escala.

Buzzwords como Big Data e Fast Data estão na boca dos profissionais de TI, analistas de negócios e empreendedores. Esses tópicos andam sendo discutidos abertamente em todo tipo de conferência de mercado. Livros (inclusive romances) foram escritos sobre o obscuro mundo dos Quants: Nerds com seus PhDs em estatística, física e matemática aplicada. Figuras curiosas que deixaram (ou foram rejeitados) pela academia e ganharam o mercado... Gênios renegados com seus modelos para troca automatizada de títulos, com seus portfólios para gestão de riscos e com suas gordas contas bancárias.

Mas afinal o que é Data Science? De acordo com a Wikipedia, Data Science é o estudo da extração de conhecimento a partir de dados. Uma ciência que incorpora técnicas e teorias das mais diversas áreas de conhecimento (computação, engenharia, matemática, estatística, economia, etc).

A demanda por profissionais especializados em Data Science cresce em ritmo acelerado. Aos poucos isso tudo está despertando o nosso interesse. Nós "programadores comuns", escritores de "Software commodity" que mantém o mundo girando. Assuntos como aprendizado de máquina, inferência estatística e modelos de regressão deixam de ser exclusividade de dissertações e artigos acadêmicos, perdem a aura de superioridade e caem no gosto das abelhas e zangões trabalhadores. Há muito a aprender; um passo de cada vez. A hora de soprar o pó da capa daquele velho livro de estatística básica encostado na prateleira finalmente chegou.

E se você é como eu, há muito a aprender. Já fui um aluno muito orgulhoso do meu desempenho, sempre ostentando meu parco conhecimento sobre estatística com um livro do Bussab em mãos. Fui uma das três ovelhas da minha turma que conseguiu passar direto em estatística na primeira oferta da disciplina da USP Leste (com uma "excelente" nota 7.2, a melhor nota da turma... Considerando a dificuldade da disciplina na época 7 valia mais do que 10). Passei a dar aulas particulares de estatística para alunos com as mais diversas origens (meus colegas, alunos de administração e economia da FGV e Mackenzie, alunos de outros cursos e departamentos da USP, etc). Eis uma época em que eu "conhecia" distribuições como a normal, binomial, hipergeométrica, Poisson, t de Student, etc; também "sabia" fazer testes de hipóteses, calcular erros e taxas de confiança de cabeça e até mesmo ousava me aventurar um pouquinho com inferência e o básico de Estatística Bayesiana.

O problema é que tudo isso está para Data Science como um curso de lógica de programação está para desenvolvimento de software (ou ainda como o Ping Pong está para o Tênis de Mesa) . O que aprendi naquela época é importante, porém esses são apenas fundamentos. O básico do básico em um nível de abstração bem distante daquele que está sendo utilizado para resolver problemas na prática.

Na verdade Data Science possui três grandes pilares muito bem ilustrados nesse Diagrama de Venn do site do Drew Conway:

Diagrama de Venn do Drew Conway

Em resumo, você pode ser um hacker excepcional, aprender sobre ferramentas e técnicas de ponta, conhecer muito sobre determinado assunto, porém não ter conhecimento matemático suficiente para entender o que está fazendo (muito menos interpretar resultados). Essa é a frente "perigosa" que mais comete erros do tipo tomar uma correlação por causa e efeito sem investigar variáveis de confusão.

Na outra ponta não é muito difícil você esbarrar com acadêmicos que possuem grande conhecimento tecnológico e estatístico, porém com pouco conhecimento sobre o assunto no qual estão trabalhando. Geralmente o conhecimento desse grupo sobre o problema que estão tentando resolver é de natureza teórica (e muitas vezes extremamente desatualizado); sabe aquele grupo que faz complexos experimentos de laboratório sem nunca ter realmente vivenciado ou entendido o problema que está tentando resolver? Esse tipo de profissional pode produzir estudos bem interessantes, distorcer categorizar dados e chegar a conclusões insignificantes únicas. Podem até mesmo propor soluções "geniais" para problemas em aberto (que geralmente são inviáveis ou de aplicação muito limitada por esbarrarem em alguma constraint básica desconhecida pelo autor). Enquanto penso que esse grupo é menos perigoso do que o primeiro, a quantidade de estudos do tipo Seinfeld (sobre o nada) gerando ruído na comunidade científica também é bastante preocupante. 

Finalmente a pesquisa tradicional continuará existindo e continuará sendo relevante. Porém, sem o componente hacker pesquisa não é Data Science. Muitos autores criticam Data Science como um termo mercadológico para descrever estatística. Enquanto essa critica não é totalmente injusta, acredito que há uma distinção válida. Conhecer a distribuição normal não me faz um estatístico; saber criar um modelo e rodar uma simulação no MATLAB não faz do estatístico um Data Scientist.

O aspecto hacker da coisa rapidamente me encantou. Tenho que admitir que passei muito tempo engatinhando, brincando com diversas ferramentas e possibilidades, lendo livros e tutorais puramente focados em tecnologia. Eu poderia passar horas falando de HPC e HTC. Poderia falar de BICEP e DW. Poderia falar de soluções analíticas na nuvem como BigQuery e Redshift. Ainda vou escrever um artigo dedicado ao ecossistema Hadoop. Enfim, há muita coisa a ser aprendida nessa frente.

Apesar disso tenho que reconhecer minha pequenez. Quanto mais explorava esse Universo mais me deparava com papers descrevendo soluções altamente sofisticadas para problemas que eu desconhecia (geralmente usando abstrações matemáticas que eu também desconheço). Foi nesse momento que resolvi desmanchar o castelo de cartas que construí e começar do zero. E não é que a vida fica mais fácil quando procuramos conhecimento de base?

Sou um grande fã da Coursera, e acabei me deparando com a especialização gratuita sobre Data Science. Uma verdadeira "pós-graduação" com nove cursos (e um projeto final). A espacialização aborta o básico sobre métodos estatísticos e ferramentas computacionais, passa por técnicas de tratamento e visualização de dados, inferência, modelos de regressão, aprendizado de máquina e finalmente produtos baseados em dados. Essa especialização é um verdadeiro Data Science tour de force elaborado por três professores do Departamento de Bioestatística da Johns Hopkins University.

Achei muito interessante como os primeiros cursos da especialização conseguem ensinar cientistas a utilizarem ferramentas com Git e um IDE enquanto ensinam nerds da computação sobre métodos estatísticos e afins. Apear do material denso, os cursos não são difíceis ou massantes. A abordagem é bastante prática, focada em R e seu enorme ecossistema (incluindo pacotes e tecnologias correlatas). Você vai aprender sim sobre métodos estatísticos, experimentando na prática com data sets reais.

R é uma tecnologia "simples", porém o caminho para se tornar um especialista é longo e pode ser desafiador até para programadores experientes. A linguagem é extremamente expressiva, própria para tratamento estatístico e visualização de dados em memória (ainda que essa não seja toda a verdade, veja minha resposta no Stack Overflow sobre como utilizar R com data sets grandes demais para serem tratados inteiramente em memória), utilizando uma combinação de elementos que podem parecer estranhos para programadores de linguagens C-Like. Para mencionar alguns pontos: A linguagem adota algumas características da programação funcional (o curso de Programação Funcional em Scala me ajudou muito nessa frente), também conta com a expressividade da vetorização, escopo léxico e diversas tentativas de implementar orientação a objetos (que coexistem na linguagem).

100% Open source e parte do Projeto GNU, o ambiente R se tornou a base de um fortíssimo ecossistema para aplicações científicas. Esqueça suas experiências traumatizantes com código da plataforma Weka, esqueça aquelas implementações de LVQ e SOM caseiras feitas em C, Python e Java (sim, eu também fiz isso na faculdade). Tome a pílula vermelha e venha brincar com os pacotes do CRAN (bem como pacotes mais especializados de fontes como o Biocondutor). Use o que há de mais moderno em termos no mercado; use implementações extremamente robustas de algoritmos clássicos; brinque com código instável recém saído do forno (da acadêmia e da indústria). Há soluções para todos os gosto.

Ainda não cheguei na parte mais avançada do curso (atualmente estou cursando o terceiro módulo - Getting and Cleaning Data - pela terceira vez, por pura falta de tempo). Mas o que já aprendi sobre métodos e variáveis estatísticas, tratamento de dados, etc, compensou. Com certeza a especialização já me tornou um programador melhor... Mas o mais importante de toda essa experiência foi que, com os cursos, percebi toda a enormidade teórica e a base matemática sustentando as Buzzwords de mercado. Não há o que temer nessas frentes (com paciência, bons livros e bons instrutores você consegue dominar qualquer assunto).


P.S. Pelo preço simbólico de $49 você pode obter um certificado verificado para o curso (obviamente isso também requer que você passe no curso com um score mínimo). Enquanto o certificado atualmente não tem muito valor (seja no mercado seja na acadêmia), não é de todo ruim possuir um certificado com o logo da Johns Hopkins. Enquanto não coloco esses certificados no meu currículo oficial, já os incluí no meu perfil do LinkedIn (e, contrariando minhas expectativas, isso está chamando a atenção de empresas dentro e fora do país).

segunda-feira, 22 de setembro de 2014

Média POSCOMP 2014

Pessoal, peço desculpas pelo longo intervalo sem postar aqui no Blog. Além das atividades da 7RTC (agradeço quem puder dar um jóinha no Facebook), estou com algumas coisas novas acontecendo, incluindo:

  • Um novo emprego em uma empresa especializada em conciliação chamada Ainstec (estamos contratando Programadores Java, Programadores APEX, Programadores PL/SQL e Analistas de Negócios; interessados por favor entrem em contato).
  • Algumas atividades de treinamento e desenvolvimento para uma empresa parceira da Zimbra.
  • Dois projetos freelancer para empresas no exterior. 

Com tudo isso acontecendo ao mesmo tempo fiquei com pouco tempo livre. Quando consigo uma folguinha venho tentado contribuir com o Stack Overflow Em Português; responder perguntas por lá é uma maneira bem interessante de "devolver" para a comunidade (aguardem um post sobre minhas "melhores contribuições" para o SOpt).

Bom, vamos ao que interessa. A pedido dos leitores do blog  estou repetindo a dose de 2013 e compartilhando uma planilha para estimativa da média do POSCOMP 2014 (exame unificado para ingresso na Pós-Graduação em Computação). Também relanço aqui a planilha para correção da prova conforme gabarito provisório de 2014. Seguem os links:

Sintam-se livres para divulgar os links como bem entenderem (as visões da planilha aqui no site podem estar defasadas em relação ao conteúdo no Google Spreadsheet; recomendo acompanhar os resultados diretamente pelo link).

Ajuda para administrar e melhorar a planilha é sempre bem vinda (interessados por favor entrem em contato).

Quem quiser mais informações sobre o exame podem encontrá-las nesse post de 2013 e no post anterior de 2010.


UPDATES

  • 25/09 14:30 - A planilha já conta com aproximadamente 200 entradas, a média estimada está em 26.1 pontos. Obrigado ao Iago do Grupo de Facebook POSCOMP 2014 por ter colocado a planilha no ar e divulgado para a galera. Por sugestão do pessoal do grupo foram incluídos colunas opcionais para o nome e a instituição de origem. 
  • 18/10 14:00 - No dia 16 foi divulgado o gabarito definitivo do POSCOMP 2014. As questões 24, 32 e 33 foram anuladas. A planilha para correção da prova já foi atualizada. A planilha para estimativa da média permitirá, temporariamente, a edição dos resultados (por favor evitem duplicar entradas).
  • 31/10 11:30 - O resultado oficial foi divulgado. Média oficial 24,1 - Desvio Padrão 6,5. Esse ano tivemos uma participação menor (276 vs 445 pessoas do ano passado). A média oficial ficou um pouco abaixo da média amostral. Infelizmente a média oficial ficou também fora do intervalo de confiança por exatamente 1 ponto (que bom que eu não trabalho no Datafolha :). De qualquer maneira agradeço a todos que participaram!

terça-feira, 8 de outubro de 2013

Java IDES - One shortcut to rule them all

"Three IDES for the Java-kings under the sky,
Seven were once famous in their halls of stone,
Plenty of others for Mortal Men doomed to die,
One shortcut to the Productivity Lord on his dark throne
In the Land of Java where the Shadows lie.
One shortcut to rule them all, One shortcut to find them,
One setting to bring them all and in the darkness bind them
In the Land of Java where the Shadows lie."
- J. R. R. Tolkien, The Lord of the Rings (slightly hacked)

I've been a polyglot programmer and multi-IDE user for several years... And as any all-arounder, I am not the most productive expert on any of them. IDES are huge beasts! It takes time to learn and to allow all of its functionality to sink in and it takes even more time to learn how to do things efficiently. 

Memorizing highly specific keyboards shortcuts of each IDE is one of the many actives that can become tedious or even completely unachievable if you switch between IDES frequently. Still, all in all I do prefer this road, since every IDE has its unique qualities. I'm a huge believer of the motto "Use the right tool for the job." Quoting Abraham H. Maslow's Psychology of Science: "I suppose it is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail." Please avoid temptation!

So let's check out how to cheat and increase productivity by learning "Tool tamer" shortcuts for the most popular IDES in Javaland.


The idea behind this article is that if you can learn how to find desired functionality in the sea of options that one IDE has to offer, then you can teach yourself to be more productive with it. If you can configure all of your IDES to use the same shortcut to access the desired functionality then congratulations, you have just created a shortcut to rule them all.

Eclipse


If you make a living out of Java, chances are that you have spent some time with Eclipse, either because you love it or because that's what everyone else in your company uses! Eclipse is the only IDE that an entire army of (not that enthusiastic) Java Developers have ever learned how to use: it often offers the only best third-party plugins for a certain software stack. Eclipse is the most popular IDE in Javaland. Developed by an impressive foundation - backed by a giant group of technology companies and fueled by a vibrant community - the extremely customizable SWT-based IDE conceived by IBM isn't going away anytime soon.

If you don't know how to do something in Eclipse, just resort to the handy Quick Access functionality (Ctrl+3) and type the desired action (say, "Extract Variable").


If you don't like Ctrl+3 just bind the Quick Access command to some other key combination. In order to do this follow these steps:
  1. Navigate to Windows Preferences
  2. In the right menu open General → Keys
  3. Locate and select Quick Access
  4. Change its binding to the desired key combination
  5. Click on Apply and OK
 


Netbeans


"The only IDE you need" was the Netbeans motto back when Sun shined. It is intriguing to observe how a lot of my colleagues dismiss this very crafty IDE as "slow"... This might have been true once upon a time when Netbeans hadn't yet reached its fourth release, the VMs were not optimized for Swing Applications, and computers were shipped with way less memory and very poor graphic cards. Nowadays Netbeans is a very responsive IDE with amazing UI Design Tools (JavaFX anyone?), a great out-of the-box experience for Java SE and Java EE, out-of-the-box support for a variety of Java tools and frameworks, plus a surprisingly competent out-of-the-box support for other programming languages (such as PHP, Groovy and C/C++). Netbeans surely lives up to its motto, and does this with a clean, hassle-free philosophy which makes it the perfect IDE to use in classroom.

Much in the same fashion of Eclipse, Netbeans exposes a Quick Find command which can be triggered with Ctrl+l. Although unlike Eclipse, Netbeans tries to find a lot of things by default (Types, Symbols, Help references, Maven artifacts and so on). So if your goal is to find an IDE functionality it is advisable to narrow the search category (accessible with Shift+F10 when the cursor is on the search bar) to Action.


I have never really liked Ctrl+l as a shortcut to Quick Find. So Thanks Sun for shortcut customization. To change your keymap, do the following:
  1. Navigate to Tools Options
  2. Click twice on the Keymap button located at the top Toolbar
  3. Look for "Quick search"
  4. Click in the Shortcut cell (or on the small ellipsis button) to edit
  5. Type your new key combination
  6. Click on OK



IntelliJ IDEA


How does a company make money out of a Java IDE when programmers can just download very good IDES such as Eclipse and Netbeans for free? Easy, you make the best tool on the market! And that's exactly what JetBrains did with IntellliJ IDEA. But don't take my word for it: just read what Martin Fowler has to say about IntelliJ (in its way, Martin Fowler is the IT version of Tom Hanks, we can always borrow his credibility). While there is a free Community Edition (which is good enough to run the amazing Scala Plugin, light years ahead of the competition) the good stuff comes with a price tag.
Is it worth it? Sure! I think that IntelliJ is indeed the Best Java and Polyglot IDE there is. I feel that developing with IntelliJ is a pleasure. Yes, I think that it can read my mind. And yes, I'm sold. But no, I'm not on commission, although if someone at Jetbrains ever reads this article and feel like donating a lifetime IntelliJ license, I'm all for it!

God is in the details! And IntelliJ Find Actions command has a very different (and, in my option, way better) approach for searching actions than Eclipse and Netbeans top right corner search boxes... Ctrl+Shift+a makes IntelliJ pop up a contextual menu right in the middle of your code. Easy, fast and to the point.


If Ctrl+Shift+a stresses your fingers (or your brain), no problem - here is the receipt to change it:
  1. Navigate to File → Settings
  2. At the left menu click on Keymap
  3. Look for "Find action"
  4. Click twice on it to customize the shortcuts
  5. Click on Apply and OK

And that's all: you've learned how to find your actions and teach yourself new shortcuts using three of the most popular Java IDES. Plus you have mastered how to customize key bindings according to your desires. Now come on, don't be a Hobbit (or eight Hobbits, also know as a Hobbyte)! Use the precious shortcut... Rule them all!

terça-feira, 1 de outubro de 2013

POSCOMP 2013

PARA POSCOMP 2014 CLIQUE AQUI

Quem leu meu artigo "POSCOMP 2010" sabe que o POSCOMP é um exame de múltipla escolha com 70 questões, exigido pelos melhores programas de pós-graduação em Ciências da Computação / Engenharia da Computação / Engenharia de Sistemas / Sistemas de Informação / Informática e áreas correlatas no Brasil.

Se você pretende entrar em programas de mestrado / doutorado em computação na USP, UNICAMP, UFSCar, UNIFESP, PUC-Rio, UFRJ, UFMG, UNB, UFPE, UFPR, IME–RJ, UFRGS, UFSC, etc é recomendável prestar o exame. Esses programas geralmente usam o POSCOMP tanto na seleção de mestrandos e doutorandos quanto como critério para distribuição de bolsas.

O exame é divido em três grandes áreas: Matemática, Fundamentos da Computação (que contém a maior parte das questões) e Tecnologia da Computação.

O objetivo dos candidatos buscando vagas em programas de excelência é ficar acima da média geral. Essa é historicamente baixa. A média de acertos entre 2002 e 2011 foi de aproximadamente 25 questões (~35%). Isso mostra o nível de exigência do exame.

Eu prestei o exame em 2010. Com os resultados do exame garanti vagas em bons programas de pós-graduação, incluindo o Programa de Engenharia de Sistemas e Computação na COPPE / UFRJ e no Departamento de Informática da PUC-Rio, ambos conhecidos pela excelente produção científica e pelo conceito máximo na avaliação da CAPES.

É claro que esses programas levam em consideração muitas outras coisas além do POSCOMP. Dentre elas: histórico acadêmico, cartas de recomendação, envolvimento com atividades de pesquisa (Iniciação Científica e publicações), currículo, etc. Um fator importante é buscar uma área de pesquisa de seu interesse e, dentro dessa área, orientadores que possam guiá-lo em suas atividades de pesquisa (é costumeiro que alunos de pós-graduação sigam a linha de pesquisa de seus orientadores).

Nesse domingo (29/09/2013) voltei ao IME-USP para prestar o POSCOMP pela segunda vez. Segue a prova com gabarito oficial



Para candidatos interessados em prestar o POSCOMP em 2014, tomei a liberdade de fazer upload dos 4 últimos exames para o Scribd (extraídos do site da SBC). 


Boa sorte a todos que estão aguardando os resultados oficiais!

PS: Se você prestou o POSCOMP por favor deixe um comentário com suas impressões sobre o exame.


UPDATES

  1. Criei uma planilha no Google para estimarmos a média de 2013.
    Link: Média POSCOMP 2013
  2. Gabarito provisório substituído pelo definitivo.
  3. Planilha para correção da prova conforme gabarito definitivo.
    Link: Correção POSCOMP 2013

sábado, 21 de setembro de 2013

MOOC - Princípios de Programação Funcional em Scala

Gostaria de aproveitar esse post para divulgar um excelente curso online gratuito na Coursera.

Trata-se do curso Princípios de Programação Funcional em Scala (Functional Programming Principles in Scala). Segue link: https://www.coursera.org/course/progfun.

O instrutor do curso é ninguém menos do que Martin Odersky, criador da linguagem Scala, fundador da empresa Typesafe e Pesquisador na  École Polytechnique Fédérale de Lausanne

Eu acompanhei a segunda versão do curso fora de época e posso atestar a qualidade em primeira mão. De fato o curso da Coursera é utilizado como parte das atividades na EPFL, ou seja, alunos do Professor Odersky se matriculam normalmente na Coursera junto a outros milhares de candidatos ao redor do mundo; na primeira versão do curso mais de 50.000 pessoas se inscreveram (veja as estatísticas).

O tom do curso é bastante acadêmico, entrando em detalhes sobre modelo de substituição logo na primeira aula e navegando no mundo de funções de alta ordem, currying, covariância, contravariância, pattern matching, tuplas, parâmetros implícitos, monoides, streams, etc. Mas acredito ele seja também de grande valia para a indústria. Meus colegas de trabalho sempre me escutam tagarelando sobre Scala... Principalmente quando esbarro em pedaços de código longos e difíceis de ler em Java com contrapartidas intuitivas e sucintas em Scala. Além disso, cada vez mais linguagens Orientadas a Objetos vem adotando construções típicas de linguagens Funcionais como genéricos (introduzidos no Java 5) e expressões lambda (suportadas em C# desde a versão 3.0 e e pelo Java 8 previsto para Março de 2014). 

Nada como adicionar uma linguagem "híbrida", concebida com expressividade e escalabilidade em mente, 100% interoperável com Java (e seu enorme ecossistema) e altamente performática ao seu conjunto de skills. Além do que, aprender a mentalidade da programação funcional te faz um programador melhor em geral... Após minha experiência com Scala acabei descobrindo jóias do Apache Commons e Google Guava que possibilitam escrever código Java muito mais limpo. Também reforcei meu padrão de pensar mais / escrever menos código (os exercícios do curso realmente te fazem quebrar a cabeça, e no fim das contas as soluções são sempre simples).

O curso tem duração de sete semanas. A cada semana o aluno recebe o material de estudo (incluindo vídeos do Martin Odersky) e uma atividade de programação (com data de entrega para a próxima semana). O aluno pode submeter os exercícios através de um plugin do sbt (ferramenta de build popular entre desenvolvedores Scala). A correção dos exercícios é feita automaticamente em servidores (no Amazon EC2) que rodam testes unitários e analisadores estáticos de código contra a solução submetida. O aluno recebe uma nota de 0 a 10 e feedback sobre seu exercício  de maneira quasi-instantânea. A correção leva em consideração:
  • Testes unitários
  • Estilo (indentação, espaços em branco, etc) 
  • Boas práticas da programação funcional em Scala (evitar casts, variáveis locais mutáveis, uso de return, etc) 
  • Prazo de entrega (cada dia de atraso desconta 20% da nota)
O aluno pode submeter respostas para o mesmo exercício até cinco vezes com o objetivo de refinar sua implementação. São aprovados no curso (com direito a certificado oficial) alunos que obtiverem média acima de 60%.

Além do arsenal para correção automática de exercícios, o curso conta com um rico fórum de discussão em que alunos podem interagir, formar grupos de estudo e submeter / responder questões. Os fóruns são moderados por assistentes voluntários (comunidade) e staff oficial do curso para garantir a qualidade das discussões (bem como evitar que os alunos "colem").

A experiência do curso é muito enriquecedora, definitivamente vale a pena.

E ainda dá tempo de se matricular! A data de entrega para o primeiro exercício é dia 25/09/2013... No pior caso, se você perder essa data é possível passar no curso sem entregar o primeiro exercício (obtendo boas notas nos demais exercícios).

Então o que está esperando? Venha participar!

terça-feira, 17 de setembro de 2013

Slides- Escalabilidade Web / DevOps e PaaS

Slides da palestra "Escalabilidade Web: Sharding, Indexação, CDN, NoSQL, DevOps, Cloud, PaaS e a Vida Real" na EACH - USP Leste.

Agradeço ao Professor Eler e a todos que participaram!