Os Melhores Livros sobre Arquitetura e Design de Software

Neste post gostaria de fazer algumas recomendações de Livros sobre Arquitetura e Design de Software para programadores, desenvolvedores de software, arquitetos de software, e engenheiros de software que trabalham em times ágeis.

Estes Livros sobre Arquitetura e Design de Software tratam de assuntos boas práticas de programação, design, arquitetura, testes e requisitos não funcionais como performance, segurança e escalabilidade.

Para facilitar, procurei deixar links para as versões em português e inglês dos livros, muito embora, eu recomendo, sempre que possível que você leia versão original em inglês.

1) Working effectively with legacy code (Trabalho Eficaz com Código Legado)

É mais fácil escrever código novo do que dar manutenção em código legado, e quase todos os desenvolvedores que conheço preferem trabalhar num projeto novo ou em uma nova funcionalidade do que dar manutenção em código legado. Mas na vida real, boa parte do trabalho dos desenvolvedores é fazer melhorias e alterar código legado. Por isso considero esse livro é fundamental para todo desenvolvedor. O livro trata de padrões e técnicas para que você possa evoluir o código legado sem ter que reescrever tudo, e com fazendo testes de unidade para evitar quebrar alguma funcionalidades pré-existente, mesmo nos casos mais desafiadores em que o design do código não facilita a testabilidade.

Versão em Inglês http://amzn.to/2DYW4Jv ou Português: http://amzn.to/2DYbgXc

 

2) Clean Code (Código Limpo)

Por Robert C. Martin

Este livro vai te ensinar a escrever código fácil de se entender, tanto para você mesmo quando para o os demais membros do seu time. É um livro realmente transformador. Depois de ler esse livro, você vai mudar completamente a maneira que codifica, e pode ter certeza que vai gerar um grande impacto na sua própria produtividade bem como na produtividade da sua equipe com um todo.

Versão em Inglês http://amzn.to/2DXsX9n ou Português http://amzn.to/2DCvRCA

3) Patterns of Enterprise Application Architecture

Por Martin Fowler

A linha entre o que é Design de Software e Arquitetura de Software é muito tênue e difícil de se definir mesmo para os maiores estudiosos da área. Martin Fowler, sem dúvida, é uma das principais mentes no Design e Arquitetura de Software, e nesse livro ele explora uma série de padrões que vão te ajudar a construir aplicativos corporativos complexos com boas práticas para performance, escalabilidade, segurança e manutenabilidade.

Versão em Inglês http://amzn.to/2DYCIUM ou Português http://amzn.to/2DAa2DJ

 

4) Domain Driven Design

Por Eric Evans

Todo software corporativo resolve problemas de negócio. E nada melhor do que o código fonte falar a mesma linguagem dos negócios em vez de tentar reinventar a roda com jargões e termos que não serão compreendidos pelas pessoas de negócios. Este livro ensina a criar uma linguagem comum entre desenvolvedores e usuários, e a pensar no design do código de uma maneira que favoreça o entendimento e a evolução do software através de padrões que colocam em primeiro lugar o domínio de negócio.

Versão em Inglês http://amzn.to/2DYqGe6 ou Português http://amzn.to/2Ds1EmJ

5) Refactoring: Improving the Design of Existing Code

Por Martin Fowler

A Refatoração é uma das principais técnicas ágeis de engenharia de software, e fundamental para a evolução profissional de sistemas. Este livro explica detalhamento os principais conceitos e explora as melhores práticas para que você possa melhorar constantemente o código sem alterar a funcionalidade do software.

Versão em Inglês: http://amzn.to/2F3EYtd ou Português: http://amzn.to/2Dz4mKm

6) Growing Object-Oriented Software

Por Nat Pryce, Freeman Steve

Este livro vai unir alguns conceitos dos livros citados anteriormente como Refatoração, Test Driven Development (TDD), Design Patterns e Testes Unitários e te ajudar a juntar todas as peças para aplicar tudo isso em conjunto no seu dia-a-dia.

Versão em Inglês: http://amzn.to/2F4vFtc ou Português: http://amzn.to/2DCzwR6

7) The Pragmatic Programmer

Por Andy Hunt, Dave Thomas

De todas as recomendações esse livro é o menos técnico, e mais conceitual, mas de forma alguma é menos importante. Ele vai trabalhar o seu mindset para que nunca deixe se aprender, de se desafiar, e vai te trazer conceitos de muita maturidade profissional, que talvez você levaria anos para conquistar sozinho.

Versão em Inglês: http://amzn.to/2E30hfr ou Português: http://amzn.to/2DDVraJ

8) Clean Architecture

Por Robert C. Martin

Esse livro vai te ensinar conceitos importantes para entender os diferentes paradigmas de programação (programação orientada a objetos, programação funcional e programação estruturada) além de abordar princípios para um bom design como o princípio da responsabilidade única, o princípio da substituição de Liskov, e injeção de dependências.

Versão em Inglês: http://amzn.to/2DtsHhz

9) Building Evolutionary Architectures: Support Constant Change

Por Neal Ford, Rebecca Parsons, Patrick Kua

Depois de anos atuando como consultor em diferentes projetos de empresas de todos os tamanhos, Neal Ford, compartilha nesse livros as principais lições aprendidas para a construção de sistemas que nunca podem parar de evoluir.

Versão em Inglês: http://amzn.to/2DAcRoj 

10) Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation

Por Jez Humble, David Farley

O ritmo da inovação tecnológica vem aumentando cada vez mais, e por isso, fazer deploy de novas versões deve ser fácil rápido e sem perda de disponibilidade, porém, para que isso seja possível é preciso que código e arquitetura do software seja projetada para atender esses requisitos. Nesse livro você vai aprender as mais importantes técnicas, princípios e ferramentas para fazer entrega contínua em seus projetos.

Versão em Inglês: http://amzn.to/2Dznd7Z
Versão em Português: http://amzn.to/2E073T7

11) Beyond Software Architecture: Creating and Sustaining Winning Solutions

Autor Luke Hohmann

Esse livro traz uma visão interessante sobre coisas importantes a serem levadas em consideração que vão além da codificação, testes, design e arquitetura de software, coisas como licenciamento, entrega (deploy), instalação, configuração, e suporte.

Versão em Inglês: http://amzn.to/2E0ehXc

12)  97 Things Every Software Architect Should Know: Collective Wisdom from the Experts

Autor Richard Monson-Haefel

Com participação de grandes ícones do mundo da engenharia de software esse livro traz lições muitos interessantes e valiosas que podem evitar que você e sua empresa paguem por erros que outros já comeram como colocar seu currículo ou suas tecnologias de preferência na frente dos requisitos do sistema em desenvolvimento, subestimar problemas não técnicos, não desenvolver habilidades de comunicação efetivas, não dar a devida importância a interface de usuário, deixar a performance de lado na hora de desenvolver.

Versão em Inglês http://amzn.to/2G3Hdy9

13) Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions

Autores Gregor Hohpe, Bobby Woolf

Este foi o livro que deu origem ao Camel um dos principais frameworks de integração de softwares corporativos no mundo. Sabemos que quase nenhum software funciona isolado. O ERP precisa buscar dados de clientes do CRM para faturar, e integrar com o banco para consultar o saldo da conta bancária, o CRM conecta nas redes sociais para verificar o engajamento dos clientes, o software de forecasting conecta no Canal do Tempo para verificar se o Supermercado vai vender mais cerveja do que no próximo final de semana. Este livro vai te dar uma base forte sobre Integração de Software para que você construa sistemas que conversam melhor com o mundo externo de forma segura, escalável, interoperáveis e com alta disponibilidade.

Versão em Inglês: http://amzn.to/2G7BMxW

Customizar o Elastix

Pessoal,
Tenho trabalhado ultimamente com o Elastix, mas preciso fazer um customização nele.

Hoje cada usuário no Elastix eu consigo controlar o nível de acesso por tela.
Por exemplo, quando eu vou em System->User Management eu tenho as várias opções de telas, onde eu posso adicionar direito para os usuários em níveis de telas. Por exemplo:

System Info
Network
Network Parameters etc

Eu gostaria de fazer um controle de usuário mais especifico, por exemplo. Um usuário pode acessar a tela PBX Configuration, onde eu criei uma extension 200 de exemplo. Só que nesta tela, existem vários níveis dentro dessa mesma tela, por exemplo:

Edit Extension
Extension Options
Device Options
Fax Handling
Privacy
Dictation Services
Recording Options
Voicemail & Directory

elastix1

Eu criei uma nova extension que no caso é 200
Quando você entra na opção PBX->Extension-> 200 (meu exemplo)
Gostaria que o usuário X consiga acessar (conseguir visualizar) Edit Extension, Extension Options e Device Options somente. O usuário Y só Voicemail & Directory somente, e assim por diante.

Vocês sabem se isso é possível?

Kleber Rodrigo de Carvalho

O futuro para estudantes de TI é promissor

Matéria publicada pela InfoQ em inglês, e também pela InfoQ Br, fala sobre o aquecimento na area engenharia de software.

The Market For Computing Careers

Computer Software Engineer

America’s Best Careers 2010: Science and Technology

Kleber Rodrigo de carvalho

Prefeitura de Sorocaba planeja investir em TI.

A Prefeitura de Sorocaba pretende fazer um empréstimo no valor de R$ 22.336.280 junto ao Banco Nacional de Desenvolvimento Econômico e Social (BNDES), que deverá ser usado para modernização de setores da administração municipal, que inclui a aquisição de software, redes de computação e equipamentos de informática, operacionais e móveis, além de adequação de ambientes físicos e treinamento de servidores públicos. A proposta faz parte do Programa de Modernização da Administração Tributária e da Gestão dos Setores Sociais Básicos (PMAT), que é oferecido pelo BNDES, e tem por objetivo aumentar a eficiência e a velocidade dos serviços prestados à sociedade.

O anteprojeto está em fase final antes de ser enviado ao órgão, conforme antecipou o secretário de Governo e Planejamento, Rodrigo Moreno. Segundo ele será a terceira fase do PMAT. “A primeira foi durante do governo do ex-prefeito Renato Amary para implantação de iluminação”, lembrou o secretário. Já a segunda fase foi em 2006 já com o prefeito Vitor Lippi (PSDB). Nessa etapa, segundo Moreno, verba foi usada para que a Prefeitura fizesse o geoprocessamento com o mapeamento aéreo da cidade.

“Haverá uma contrapartida de R$ 8.946.512 por parte da Prefeitura”, ressaltou, ao também explicar que as propostas de valores estão em âmbito final de discussão e serão levados nos próximos dias aos secretários e também ao Núcleo de Modernização da Administração Tributária. “Tudo está previsto na peça orçamentária e também o projeto de lei autorizando a Prefeitura a contratar o financiamento junto ao BNDES precisa ser aprovado pelos vereadores.

Aplicação dos recursos

De acordo com o anteprojeto, dos R$ 26,8 milhões previstos para serem destinados à Prefeitura por meio do empréstimo, o maior valor, R$ 7.828.198, será para investimentos na área da tecnologia da informação, a partir da aquisição de hardware e de redes de computação e de comunicação, e aquisição e desenvolvimento de software e sistemas de informação, inclusive para implantação e acesso à internet. Serão comprados, por exemplo, 1.000 computadores, 100 câmeras para video-monitoramento e outros 100 aparelhos leitores ópticos e biométricos.

Valor semelhante, ainda segundo o documento, será destinado para execução de serviços para desenvolver atividades do projeto, inclusive sistemas de organização e gerência e base cadastral. A aquisição de equipamentos operacionais, de comunicação e outros bens móveis e operacionais irão consumir R$ 5.591.570. O projeto prevê ainda a adequação de ambientes físicos, através da melhoria de instalações e de programas operacionais e de atendimento ao cidadão. O valor previsto é de R$ 4.473.256. Outros R$ 5.591.570 serão destinados à capacitação de recursos humanos, o que inclui o desenvolvimento de programas de treinamento, atualização e reciclagem de pessoal, participação em cursos, seminários e visitas técnicas.

Lei municipal vai incentivar invenções

Sorocaba deverá ser um dos poucos municípios a criar, regulamentar e colocar em prática uma Lei de Inovação. O prefeito Vitor Lippi deu o primeiro passo neste sentido na última quinta-feira ao assinar decreto que criou o Comitê de Estudos para a elaboração do Projeto de Lei da Inovação do Município de Sorocaba.

A comissão tem, agora, 120 dias para apresentar uma proposta que, entre outros aspectos, poderá contemplar o estímulo, inclusive financeiro, às parcerias público-privadas, aos inventores e aos funcionários públicos da administração direta e indireta ao comissioná-los para pesquisa e desenvolvimento.

De acordo com o Secretário de Negócios Jurídicos, Luiz Angelo Verrone Quilici, a iniciativa do prefeito Vitor Lippi é precursora no País. “O Brasil possui a Lei de Inovação federal, parte dos Estados também têm um regramento deste tipo, porém, o único município a criar uma legislação própria foi Vitória, no Espírito Santo”, explica Verrone.

O Decreto nº 18.318, de 20 de maio de 2010, foi publicado no jornal ’Município de Sorocaba’, na edição de ontem, e traz a nomeação de oito integrantes para o Comitê de Estudos. São dois secretários municipais, Mário Kajuhico Tanigawa e Luís Alberto Firmino, titulares das pastas de Desenvolvimento Econômico (Sede) e de Relações do Trabalho (Sert), respectivamente; dois funcionários da Secretaria de Negócios Jurídicos, Antonia Mariete Barbe e Regina Maria Athanásio Silva Chaves; três servidores da Sede, Carlos Alberto Costa, Devanildo Damião da Silva e José Fernando Alonso; e uma funcionária ligada às secretarias de Governo e Planejamento e de Administração, Elaine Ricardo da Rocha.

Fonte: Prefeitura vai emprestar R$ 22,3 milhões do BNDES

Kleber Rodrigo de Carvalho

Engenheiro de software é aposta para 2010

Uma pesquisa feita pela CareerCast apontou que a profissão de engenheiro de software e a segunda melhor em um ranking de 200 cargos variados.

A lista é baseada em pontuações específicas baseadas em fatores como ambiente de trabalho, salário, demandas físicas e stress.

Engenheiro de software é aposta para 2010
Best and Worst Jobs 2010

Kleber Rodrigo de Carvalho

WebSphere Application Server V7 Available

The newest version of WebSphere Application Server, version 7.0, is now available.

WAS 7 is certified for Java EE 5, including EJB 3.0 and JAX-WS 2.1, and is built on Java SE V6.

For more information:

Thank you Bobby Woolf

Stop designing useless software architecture, Start coding useful software

Don’t Let Architecture Astronauts Scare You Article was written 2001, but It’s still up to date.

I disassemble two parts of that article that I’ve thought over:

These are the people I call Architecture Astronauts. It’s very hard to get them to write code or design programs, because they won’t stop thinking about Architecture. They’re astronauts because they are above the oxygen level, I don’t know how they’re breathing. They tend to work for really big companies that can afford to have lots of unproductive people with really advanced degrees that don’t contribute to the bottom line.

Remember that the architecture people are solving problems that they think they can solve, not problems which are useful to solve. Soap + WSDL may be the Hot New Thing, but it doesn’t really let you do anything you couldn’t do before using other technologies — if you had a reason to. All that Distributed Services Nirvana the architecture astronauts are blathering about was promised to us in the past, if we used DCOM, or JavaBeans, or OSF DCE, or CORBA.

Alan Braz wrote in his Sametime message: Stop Talking, Start Doing. I found the ad video that explain the main idea, clicking on “Globalization” video.

In few words, we can brief both the article and the IBM Ad Video: Stop designing useless software architecture, Starting coding useful software.

Are you learning or using new technology because It is a hype or buzzword ?
Or are you learning or using new technology because It contributes to the bottom line ?
Any thoughts ?

Kleber Rodrigo de Carvalho