Pular para conteúdo

Literatura para evoluir como DEV

Aqui vão algumas recomendações de livros que separei por grandes áreas. Além dos livros, para quem quiser, eu tentei fazer um pequeno resumo e coloquei o link para quem quiser comprar na Amazon.

Uma coisa importante: cada livro precisa ser lido de forma quase que contínua, ou seja, não vai ser na 1a leitura que você irá conseguir absorver tudo. Destes livros eu já li várias vezes alguns deles e a cada nova leitura eu aprendo um novo aspecto.

Vamos lá (todos os títulos estão com seus respectivos links)

Obs: Esta lista está sempre em constante atualização

Aqui tem uma lista mais completa com muitos livros para você escolher.

Algoritmos e Estruturas de Dados

Thomas Cormen - Algorithms

Este livro é um livro dos mais difíceis e um daqueles que você mais aprende sobre a questão teórica dos algoritmos. O Livro do Cormen já começa com uma carga algébrica muito forte logo no capítulo 1. Ele é bastante teórico e algébrico, tendo um viés muito matemático para os algoritmos. Foca muito em complexidade, notação assintótica (o famoso Big-O e como fazer estas medições), como o algoritmo é descrito como modelo matemático e apresenta os pseudocódigos (não é focado em nenhuma linguagem específica). Definitivamente não é um livro para iniciantes

Algoritmos e Estruturas de Dados Usando C- Tenembaum

Este já é um livro bem mais prático e eu particularmente gosto muito, por vários motivos. Ele começa com o conceito de Tipos Abstratos de Dados e inicia com as estruturas clássicas. Todos eles com implementação em Linguagem C o que nos dá uma visão não apenas teórica, como também prática. A parte boa de se trabalhar com C é que o gerenciamento da memória é 100% voltado para o desenvolvedor, obrigando-o a entender os modelos de alocação e liberação de recursos.

Teoria Computacional de Grafos - Jaime Luiz Szwarcfiter

Este é um livro mais focado nos algoritmos de grafos (busca em largura, busca em profundidade, Djikstra, árvore geradora mínima, etc). É um excelente livro para explorar algoritmos mais complexos. Toda implementação é feita usando Python, o que não impede de compreender a teoria por trás e toda sua importância.

Sistemas Operacionais, Sistemas Distribuídos, Redes, Arquitetura de Computadores

Sistemas Operacionais Modernos - Andrew Tanembaum

Um livro essencial para quem quiser entender toda a infra-estrutura do sistema operacional. Gerenciamento de Processos, gerenciamento de recursos, algoritmos clássicos de sincronização, memória, sistemas de arquivos, etc. É um livro que vai te permitir entender como a sua aplicação executa na sua máquina, o que ela consome, como os espaços de memória são organizados. As edições mais recentes tratam também de contêineres, dando destaque para o Docker.

Sistemas Operacionais com Java - Abraham Siberchatz

Assim como o livro do Tanembaum, o Silberchatz é um excelente livro, pois trata da mesma gama de assuntos e ainda traz vários exemplos de código em Java (principalmente os algoritmos de sincronização de processos). Vale a pena para também entender o funcionamento da JVM na visão de um Sistema Operacional (que executa sua aplicação Java).

Sistemas Distribuídos - Andrew Tanembaum

Um dos principais clássicos no assunto, iniciando pelos modelos mais simples de comunicação entre processos (cliente/servidor), passando por RPC, SOAP, REST entre outros. Além disso, aborda sistemas operacionais distribuídos, sistemas de arquivos distribuídos (Hadoop, por exemplo), Sincronização em sistemas distribuídos, tolerância a falha, segurança e transações.

**Arquitetura e Organização de Computadores - Andrew Tanembaum**

Um excelente livro para se compreender toda a estrutura interna do processador, seu ciclo de instrução, barramentos, tipos de sistema (RISC, CISC), as características da arquitetura da máquina (conjunto de instruções, vetor de interrupção, ciclo de CPU, pipeline, etc), cache, computadores vetoriais, máquinas com multiplos núcleos, etc. Organização de memória, acesso e controle a dispositivos são outros assuntos estudados em profundidade. Onde isso pode ser bom? Conhecer a arquitetura da máquina te permite entender melhor como o sistema operacional atua sobre essa arquitetura, compreender onde podem estar os gargalos de desempenho para que você escreva melhores algoritmos.

Teoria da Computação, Autômatos e Compiladores

Introdução à Teoria dos Autômatos, Linguagens e Computação - John Hopcroft

Um livro que vai te dar toda a base teórica da computação. Linguagens, gramáticas, computabilidade, autômatos finitos (e todas as suas variações), expressões regulares, máquinas de Turing. Por que um livro desses? Para que você compreenda que um computador nada mais é do que uma máquina que muda de estado a cada evento ou a cada “entrada” de dados. Isso te ajuda a entender como o computador foi concebido em termos teóricos até chegarmos aos modelos de hoje. A parte teórica pode parecer inicialmente “chata”, mas vai te dar muito subsídio para que você enxergue um algoritmo em termos

Compiladores: Princípios técnicas e Ferramentas

Talvez o livro que mais vai te exigir conhecimentos amplos, pois construir uma linguagem de programação vai exigir muito além da programação apenas. Eu costumo dizer aos meus alunos que para se construir um compilador, é necessário praticamente um curso completo de computação (claro que quando falamos de um processo que converte um programa em uma linguagem alto nível para assembly todo esse conhecimento é necessário). Mas independente disso, ter a experiência de se criar um parser já é algo que pode diferenciar você dos demais desenvolvedores, tanto pelo desafio quanto pela carga de conhecimento envolvido.

Assuntos mais específicos de Java e Arquitetura de Software

Java Effective - Joshua Block

O Java Effective conta com uma série de conceitos aplicados com linguagem Java para justamente você subir de nível em relação à linguagem, a como a JVM gerencia os recursos, como utilizar da melhor forma a concorrência, imutabilidade, a programação funcional, módulos, tratamento de exceções com recursos (o famoso try-with-resources), dentre outras técnicas. Eu gosto muito deste livro como forma de “lapidar” o conhecimento em Java para que você escreva códigos melhores.

Mastering de Java Virtual Machine - Otávio Santana

Um livro que aborda todas as “entranhas” da Java Virtual Machine escrito por uma das pessoas que mais entende disso. O Otávio é o maior contribuidor (em volume de linhas de código) da JVM e se dedica a estudá-la em profundidade. Este livro ajuda você a entender desde o momento da carga da sua aplicação Java na memória, como o Garbage Collector funciona, como os recursos são gerenciados e como sua aplicação pode se comportar na JVM. É um excelente material para quem quer ir a fundo no estudo e conhecimento da plataforma mais versátil de desenvolvimento.

Domain Driven Design - Eric Evans

Neste livro você vai entender real toda a idéia de arquitetura de software, separação de domínio, regras de negócios, serviços, armazenamento, interação com outros sistemas, e muito mais. Pra mim é um grande divisor de águas para poder entender primeiro como resolver o problema da empresa, depois como tornar isso disponível usando um framework da sua preferência.

Padrões de Projetos - Livro do Gang of Four

Este é um livro que precisa ser lido, relido, visitado, revisitado por praticamente a vida toda. Cada vez que você o lê você tem um novo insight. Com os padrões de projeto, você consegue sim subir de patamar para um novo nível, criando código muito mais fácil de ser mantido e evoluído.


https://iris-odometer-a0c.notion.site/Livros-para-Evoluir-como-DEV-39a367eebe3a49fea3f8a30f613a88d0