Archive

Archive for the ‘Livros’ Category

Scrum, NoSQL e um pouco de TDD…

Um pequeno update sobre o que andei lendo ultimamente…

Essential Scrum: A Practical Guide to the Most Popular Agile Process

Nesse final de semana (finalmente?) terminei de ler o Essential Scrum: A Practical Guide to the Most Popular Agile Process. Comecei a ler esse livro (bem aos poucos), logo depois de começarmos a – tentar – implantar o scrum como metodologia ágil na Estante Virtual. Como ninguém da equipe de T.I. tinha profundos conhecimentos sobre scrum/agile, resolvi que “estudar” um pouco por conta própria seria bem útil… e até agora tenho curtido bastante trabalhar dessa forma. Apesar de já termos “errado” bastante, é bem legal ver como estamos aparando as aresta e a cada sprint vamos acertando o processo pra nossa equipe. Voltando sobre o livro: foi o primeiro livro (e/ou material razoavelmente longo) que li sobre o assunto então acho que não posso fazer uma análise comparativa com outros, mas posso dizer que gostei bastante do conteúdo.

O livro é razoavelmente grande, com ~500 páginas contém muito mais do que é necessário para uma tentativa inicial de implantação do Scrum, por isso acho que alguns dos tópicos abordados não serão tão relevantes para quem está começando, mas com certeza deve ser útil para quem já está usando o processo a mais tempo e está em um nível de refinamento/adoção maior que a gente. O material é muito bem escrito e o conteúdo bem claro, as ilustrações também ajudam bastante e são muito boas. Acredito que devo voltar para ele em alguns meses, após nosso processo interno ter amadurecido mais um pouco e reler algumas partes. No mais, só posso fazer recomendações positivas a esse livro, seja para alguém que queira um bom/sólido material inicial para aprender sobre o Scrum ou para quem já tem alguma experiência e talvez encontre algumas dicas/sugestões de como abordar problemas que sua equipe está tendo no processo.

Test Driven Development: By Example

No meio do Essential Scrum, comecei a ler também o Test Driven Development: By Example, principalmente por entender/acreditar que: (a) testes são bons, (b) preciso melhorar *minha* cultura de testes. Sobre o livro, estou agora no capítulo 26, mas não se engane em achar que isso significa que já me tornei o mestre jedi dos testes. Até o capítulo 24, o livro é basicamente 2 exemplos grandes de como realizar TDD e apesar desses exemplos serem interessantes, acho que acaba ficando meio chato/repetitivo/entediante algumas horas e devo confessar que algumas horas rolou uma leitura diagonal (apenas dando uma maior atenção no final dos capítulo onde rola um “key points” e verificando se eu entendo ou acho que entendo o que está sendo resumido ali). A partir do cap. 25 começa o que eu acho que deve ser a parte mais interessante do livro Patterns for Test-Driven Development, pois acho que é justamento o que sinto mais falta que é ter uma ideia melhor de como proceder em alguns casos.

NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence

Por fim, comecei hoje a ler o NoSQL Distilled, que parece ser de fato um “brief guide” e uma boa introdução/visão geral do assunto. Estou ainda no capítulo 6, mas estou gostando do conteúdo abordado e  da forma que a bordagem é feita, principalmente por não querer sair chutando tudo que existe de bancos relacionais hoje e substituir tudo por “NoSQL’s”, mas sim apresentar como um é uma alternativa pro outro e em quais casos você pode extrair maior vantagem deles. Para ser sincero, é por enquanto um livro que me chama a atenção em todos os capítulos que ainda não li, o que me leva a crer que ele será terminado antes do TDD: By Example ;)

PS: Para quem não sabe, eu utilizo o serviço do Safari Books Online (link não patrocinado, pode clicar sem medo ;) para minhas “leituras técnicas” e é um serviço que eu não tenho como não recomendar. O acervo é uber-gigante, tanto que minhas “listas de leitura” dentro dele são gigantes, mesmo separadas por assuntos. Tem app pra iOS e pra Android também, eu uso o do iOS e gosto bastante. Para quem não quiser pegar de cara o plano ilimitado, sugiro experimentar com o 5-slot bookshelf… apesar de achar difícil conseguir se manter em só 5 livros depois de um tempinho usando =P

As Aventuras de Sherlock Holmes

Sexta terminei o primeiro livro da coleção de histórias do Sherlock Holmes e só posso dizer que gostei bastante dele.

O livro conta com uma introdução gigante, umas 60 páginas, falando muitas coisas interessantes. Desde sobre toda a história de Holmes, até sobre seu criador Arthur Doyle (ou Sherlock não seria uma mera invenção de Doyle? :-o).

O livro mesmo é dividido em contos e contêm os 12 primeiros contos publicados. Todos os contos são narrados por seu fiel companheiro Watson e apesar de serem curtos, são bem legais.

Todos sempre apresentam e de certa forma nos fascinam com a capacidade de dedução/inferência de Holmes… As deduções são realmente geniais, ainda mais quando Holmes explica-as para Watson (e pra gente =P). Além disso, nem tudo são flores nas histórias de Holmes… existem casos onde seu cliente morra e outro onde ele mesmo é enganado!

É uma ótima leitura, super recomendado. Agora minha dúvida é se compro o segundo volume ou se releio este, lendo junto todas as trocentas anotações contidas no livro (coisa que eu fiz somente para a Introdução, desisti de fazer para o resto… pois meu tempo seek estava demorado e me cansando muito =P)

Categorias:Livros Tags:

9 mulheres em 1 mês não fazem um bebê

The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition)Se você estuda ou trabalha com computação (mesmo que seja teórica), já deve ter ouvido esta frase.

E esse é um dos pontos, sobre a complexidade inerente ao desenvolvimento – como processo criativo – de qualquer software, que o livro The Mythical Man-Month: Essays on Software Engineering aborda.

A leitura desse livro me deixou surpreso por duas coisas:

  • A maioria das coisas eu “já sabia” (quer dizer… é senso comum para quem já fez um curso sobre computação… assim como todos devemos fazer backups frequentes…)
  • Esse livro é de 1975* (!) e… as coisas já não funcionavam muito bem e aparentemente nem com o esforço de muita gente inteligente arrumou-se uma solução definitiva, então devemos acreditar que o problema é realmente difícil :)
Pessoalmente eu não recomendaria o livro para todo mundo, mas para:
  • Pessoas que não tiveram nem uma base decente no seu curso de computação (ou aquelas sem noção mesmo).
  • Chefes… chefes e gerentes no geral acho que podem se beneficiar deste livro (se eles conseguirem abstrair a parte de 1975 e assembly :P).
  • Pessoas curiosas e que gostam de livros sobe computação at all, que foi o meu caso. Li ele apenas porque ele bem conceituado por ai… por exemplo tem 155 avaliações com uma média de 4.5/5.0 na Amazon.

Agora que este se foi, o próximo na lista de leitura do meu Safari Books Online é o The Pragmatic Programmer: From Journeyman to Master e além disso tenho que terminar de ler o meu livro de Lisp (Land of Lisp) mas com as provas do mestrado nessa e na próxima semana, essa será uma semana meio lenta para leituras extra curriculares :P

* Para ser mais exato, o livro que eu li é a segunda edição, de 1995, que é uma edição comemorativa de 20 anos da primeira edição e conta com os capítulos originais da primeira edição e mais alguns no final (para avaliar o que mudou nesses 20 anos ;)

Upward, not Northward

Flatland: A Romance of Many Dimensions (Deluxe Illustrated E-Reader Edition)
Terminei de ler o livro “Flatland: A Romance of Many Dimensions” (edição do Kindle). O livro conta a história de um quadrado que vive em um reino chamado Flatland, que como o nome sugere é uma reino em “duas dimensões”, onde todos os habitantes são polígonos.

A primeira parte do livro trata de descrever este mundo e sua sociedade (bem legal essa parte ;).

Após isso, o livro conta como um habitante da Spaceland, o reino de 3 dimensões, visitou o quadrado que é o protagonista da história, e assim ele passa a saber que o mundo é mais complicado (ou incrível? ;) do que os seres de Flatland conseguem enxergar (e será que existem outras dimensões que os habitantes de Spaceland também não enxergam? ;). O problema é quando ele tenta passar esse conhecimento aos habitantes de Flatland…

O livro é pequeno e bem legalzinho de ler :)

Categorias:Livros Tags:, ,

97 Things Every Programmer Should Know

97 Things Every Programmer Should KnowO livro 97 Things Every Programmer Should Know é uma coleção de 97 “mini-textos”, cada um em seu próprio capítulo, sobre diversas coisas relacionadas a programação e engenharia de software no geral. Cada capítulo tem um autor diferente, e temos 4 autores que escreveram 3 capítulos cada e um bocado que escreveram 2 capítulos cada. O livro tem ~250 páginas e com 97 capítulos, é fácil perceber que cada capítulo é bem compacto, o que achei legal pois eu podia pegar e ler uns 3~5 capítulos e depois voltar a fazer o que eu estava fazendo antes (se bem que algumas vezes eu me empolgava e lia até 20 em uma “sessão” só :P).

O livro aborda realmente muitos tópicos, e geralmente tem mais de um capítulo sobre cada tópico. Inclusive, existem situações onde dois capítulos sobre o mesmo tópico defendem posições diferentes (contraditórias mesmo), ou seja, o livro não está preocupado em ser consistente entre todos os capítulos mas sim em apresentar os pontos de vista dos diversos autores que contribuíram para o texto.

Muito provavelmente você vai gostar mais dos textos que apresentam visões que você compartilha, mas é bem interessante ver outros pontos de vista.

Se você não quiser comprar o livro, o livro está disponível aqui (inclusive com contribuições que não entraram nas 97 escolhidas). Só não sei se esta versão online tem alguma diferença com a versão do livro finalizado/editado que foi lançado.

Bem, pare encerrar escolhi 14 dos capítulos que mais gostei para listar aqui:

Classificação: Recomendado

Categorias:Livros, Programação

Code Optimization: Effective Memory Usage

dezembro 23, 2010 Deixe um comentário

Terminei de ler o livro Code Optimization: Effective Memory Usage e a seguir um pequeno (espero) review sobre ele :)

O livro contem uma introdução e 4 capítulos (onde o segundo e o terceiro correspondem a ~70% do livro).

A introdução tem o papel de definir o bom senso das coisas:

  • Nunca tentar otimizar nada antes de estar tudo pronto e funcionando.
  • Gastar os esforços de otimização nos lugares onde o programa gasta mais tempo e não naquela função que é chamada uma vez a cada semana e gasta 0.1 segundo de tempo de processamento.
  • Otimização não é necessariamente implementação em assembly.
  • Que a otimização de código nunca fará um algoritmo exponencial virar polinomial :)
  • Etc

O primeiro capítulo fala sobre profiling em geral, mostra o que é e como se deveria fazer, demonstra também alguns problemas na medição de tempo. Após isso, um pouco sobre 2 profilers: o Intel VTune e o AMD Code Analyst e depois ele chega a conclusão que o VTune é o mais legal e o resto do capítulo é um tutorial de profiling e otimização usando o VTune.

Os capítulos 2 e 3 são estruturalmente idênticos, enquanto o primeiro fala sobre memória RAM o segundo fala sobre memória cache (e como dito antes, compõem o core do livro). Essencialmente cada capitulo começa explicando como a tecnologia em questão funciona, mais a parte de engenharia de hardware e em seguida parte para a otimização com base no que foi dito.

Enquanto as otimizações do capitulo 2 são mais relacionadas com loops (unroll, separar loops, juntar loops) e otimizar o fluxo de dados, as otimizações do capítulos 3 são mais relacionadas a otimizações com base no que cabe dentro das memórias cache (e como fazer caso não), como fazer prefetching de forma eficiente, etc.

Finalmente, o ultimo capitulo demonstra otimizações que podem (ou poderiam) ser feitas pelos compiladores avaliados (Visual C++, Borland C++ e Watson), algumas inclusive são otimizações que foram explicadas no capitulo 2, a comparação dos compiladores pode ser resumida a “Visual C++ rlz. O resto é resto”. E depois um pouco sobre “Otimização manual Vs Otimização do compilador”.

O livro é de setembro de 2003, então bem… os sistemas utilizados nas demonstrações de ganho c/ otimização são quase sempre um Pentium 3 e/ou um Athlon (não era nem o Athlon XP), com algumas referências sobre Pentium 2 e o K6 e fazendo referência ao Pentium 4 como a coisa mais moderna que existe, OMG! E isso já é uma das coisas que eu não gostei… algumas otimizações propostas melhoravam o desempenho no Athlon, mas pioravam no Pentium 3… sempre com uma explicação baseada nos processadores e chipsets utilizados (Intel para o Pentium 3 e VIA para o Athlon -_-‘ ), mas que mesmo assim torna as otimizações dependentes de plataforma. Além disso, o autor tem uma grande inclinação para com a Intel, se você puder fazer algo que melhore o desempenho em um Pentium, mas prejudique em um processador da AMD, faça… afinal quase ninguém usa AMD (ou usava em 2003, o que eu não concordo :P ).

E mesmo com a introdução, algumas vezes o autor parte para a guerra de baixar alguns clocks e mais para o final o assembly começa a rolar mais (enquanto durante grande parte do livro, é utilizado C mesmo).

 

Podemos reduzir esse tempo de execução em 15 clocks! Atacaaaaaaaaaaaarr......

 

Outro ponto que achei que podia ser melhor, é que alguns gráficos poderiam ser de fato coloridos… principalmente os que tem muitas linhas, fica confuso distinguir 4 tons de cinza.

Agora, falando da parte boa… achei um bom texto para demonstrar quais técnicas de otimização *podem* (não necessariamente devem) ser utilizadas.

Além disso, a explicação sobre memória RAM e memória cache é bem legal e poderia ser de interesse de alguém que está fazendo uma disciplina como Arquitetura de Computadores I (ou então o trabalho sobre arquitetura que existe no início de Sistemas Operacionais I na UFRJ). A parte sobre as otimizações feitas pela máquina, ou seja pelo compilador, poderia ser útil para quem estivesse fazendo Compiladores I e quisesse brincar um pouco com o que seu compilador pode fazer :)

O livro não é um espetáculo e não é um livro que recomendo para todos, mas para quem tem algum interesse em arquitetura de computadores e em otimização de performance.

Só queria destacar uma citação da página 363 (ou seja, final do livro):

Futhermore, manual optimization will become a laughing-stock if it is used inskillfully (or if knowledge gained from 10-year-old optimization manual is applied).

O livro tem 7 anos agora, será que ele não poderia ter avisado isso no início? :P

O destino do livro será a biblioteca do NCE, assim como a maioria dos livros de computação que eu acabo doando. Então caso alguem queira ler… a partir de alguma data de janeiro (quando eu for a UFRJ), o livro estará lá :)

Categorias:Livros

Farmville…

dezembro 17, 2010 Deixe um comentário

for Dummies! Sim, isso existe!

De fato...

E o título é perfeito, afinal que outro tipo de pessoa joga Farmville?! (just kidding… :P)

Destaques da capa:

  • Aprenda a baixar o programa e comece sua fazenda!
  • Crie seu avatar e interaja com seus vizinhos!
  • Faça compras no Farmville Market e utilize “Farm Cash and Coins” (desculpe, como nunca joguei não sei se isso é um nome dentro do jogo ou só uma referência a micro-transações)

Da descrição do livro:

FarmVille For Dummies is aimed at getting novices acquainted with FarmVille rules and regulations, while more savvy players can sharpen their skills and find out how to stay up to date on the latest FarmVille features.

  • Farmville serious bussiness.
  • Farmville, um jogo muito avançado.

Sério… jogar Farmville já é vergonhoso per si (:P), comprar esse livro extrapola todo o  bom senso da humanidade (eu imagino)…

E para piorar o sentimento de “vergonha alheia”, só sabendo que esse livro não é o único =X

PS: Agradecimentos ao Yanko pela notícia :)

Categorias:Games, Livros
%d blogueiros gostam disto: