0% found this document useful (0 votes)
42 views3 pages

Software Engineering Library Overview

Uploaded by

Ramses Vidor
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
42 views3 pages

Software Engineering Library Overview

Uploaded by

Ramses Vidor
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Software Engineering Library

Landing a job in Silicon Valley and building a successful career

Foundations
A Programmer's Introduction to Mathematics
Dr. Jeremy Kun

A Programmer's Guide to Computer Science: A virtual degree for the self-taught developer
Dr. William M Springer II

Concrete Mathematics: A Foundation for Computer Science


Ronald L. Graham, Donald E. Knuth

The Art of Computer Programming, Volumes 1


Donald E. Knuth

The Art of Computer Programming, Volumes 2


Donald E. Knuth

The Art of Computer Programming, Volumes 3


Donald E. Knuth

The Art of Computer Programming, Volumes 4A


Donald E. Knuth

Introduction to Graph Theory


Richard J. Trudeau

A Book of Abstract Algebra


Charles C Pinter

Basic Category Theory for Computer Scientists (Foundations of Computing)


Benjamin C. Pierce

The Little Schemer


Daniel P. Friedman

The Little Prover


Daniel P. Friedman

From Mathematics to Generic Programming


Alexander Stepanov

Programming
Introduction to Algorithms
Cormen, Thomas H.

The Algorithm Design Manual


Steven S Skiena

JavaScript: The Definitive Guide: Activate Your Web Pages


Flanagan, David

Head First Java


Kathy Sierra, Bart Bates

An Introduction to Functional Programming Through Lambda Calculus


Greg Michaelson
Scala Cookbook: Recipes for Object-Oriented and Functional Programming
Alvin Alexander

Functional Programming, Simplified


Alvin Alexander

Functional Programming in Scala


Paul Chiusano

Programming in Scala
Martin Odersky

Building Microservices: Designing Fine-Grained Systems


Sam Newman

Introduction to Artificial Intelligence


Philip C. Jackson Jr.

Patterns
Design Patterns: Elements of Reusable Object-Oriented Software
Erich Gamma, John Vlissides, Richard Helm, Ralph Johnson (the Gang of Four – GoF)

Head First Design Patterns


Eric Freeman

Patterns of Enterprise Application Architecture


Martin Fowler

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


Gregor Hohpe

Implementation Patterns
Kent Beck

Domain-Driven Design: Tackling Complexity in the Heart of Software


Eric Evans

Implementing Domain-Driven Design


Vaughn Vernon

Domain-Driven Design Distilled


Vaughn Vernon

Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F#
Scott Wlaschin

Functional and Reactive Domain Modeling


Debasish Ghosh

Reactive Messaging Patterns with the Actor Model: Applications and Integration in Scala and Akka
Vaughn Vernon

Scala Functional Programming Patterns


Atul S. Khot

Scala Design Patterns: Design modular, clean, and scalable applications by applying proven design patterns in Scala
Ivan Nikolov

Advanced Analytics with Spark: Patterns for Learning from Data at Scale
Sandy Ryza
Best Practices
The Pragmatic Programmer: From Journeyman to Master
Andrew Hunt

Code Complete: A Practical Handbook of Software Construction


Steve McConnell

Refactoring: Improving the Design of Existing Code


Martin Fowler

Refactoring to Patterns
Joshua Kerievsky

Clean Code: A Handbook of Agile Software Craftsmanship


Robert C. Martin

Clean Architecture: A Craftsman's Guide to Software Structure and Design


Robert C. Martin

Test Driven Development: By Example


Kent Beck

Processes
Head First Software Development
Dan Pilone

Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation
Jez Humble

The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations
Jez Humble

Implementing Lean Software Development: From Concept to Cash


Mary Poppendieck

Career
Programming Interviews Exposed: Coding Your Way Through the Interview
John Mongan

Cracking the Coding Interview: 189 Programming Questions and Solutions


Gayle Laakmann McDowell

Cracking the Tech Career: Insider Advice on Landing a Job at Google, Microsoft, Apple, or any Top Tech Company
Gayle Laakmann McDowell

Business
Blockchain Revolution: How the Technology Behind Bitcoin Is Changing Money, Business, and the World
Don Tapscott

Lean Enterprise: How High Performance Organizations Innovate at Scale


Jez Humble

Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations
Ph.D. Nicole Forsgren

Zero to One: Notes on Startups, or How to Build the Future


Peter Thiel

Common questions

Powered by AI

Microservices architecture breaks down a system into smaller, independent services that communicate over a network, allowing flexibility and scalability. In contrast, monolithic architecture consolidates all functionality into a single, unified codebase. Sam Newman's "Building Microservices" discusses how microservices offer the advantage of deploying, scaling, and maintaining parts of an application independently, reducing the likelihood of single points of failure and enabling faster iterations and deployments .

Algorithms are crucial because they define step-by-step procedures for solving problems efficiently and effectively. They form the foundation of computer science, enabling the development of programs that can process data efficiently across diverse applications. "The Art of Computer Programming" by Donald Knuth emphasizes their mathematical rigor and systematic approach, while "Introduction to Algorithms" provides comprehensive insights into algorithm design and analysis, highlighting concepts like complexity, correctness, and optimization .

DevOps practices integrate automated deployment, continuous integration, and continuous delivery to streamline and accelerate the software development lifecycle. By fostering a collaborative environment between development and operations teams, DevOps practices reduce friction and improve code quality. Books like "Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation" by Jez Humble highlight how automation and efficient processes lead to faster and more reliable software delivery .

Both "Refactoring" by Martin Fowler and "Refactoring to Patterns" suggest that improving existing code involves restructuring the code for better readability and performance without altering its external behavior. This process eliminates code smells, thereby reducing complexity and improving maintainability. Refactoring helps in catching defects early, simplifying the application of patches or updates, and ensuring the software remains adaptable to future changes .

The Actor Model provides a methodology that treats "actors" as the fundamental units of computation. Each actor can process messages asynchronously and maintain its state, making it ideal for building applications that require scalability and resilience. Applications can be naturally decomposed into independent actors that interact with one another, thereby simplifying the design of distributed systems and alleviating many concurrency issues inherent in shared-state systems. This approach is described in "Reactive Messaging Patterns with the Actor Model" which explores Scala and Akka’s implementations .

Object-oriented programming (OOP) focuses on using objects that encapsulate data and behavior, promoting the principles of encapsulation, inheritance, and polymorphism. Functional programming, on the other hand, emphasizes the use of pure functions and immutable data structures, aiming to avoid side effects. This paradigm supports higher-order functions and recursion as primary constructs. According to "Programming in Scala" and "Functional Programming in Scala," Scala embodies a hybrid approach allowing the use of both paradigms within the same program .

Test-Driven Development (TDD) is a software development approach where tests are written before the code itself. This ensures that the functionality is defined precisely and helps in maintaining high code quality by encouraging smaller and more manageable code units. According to Kent Beck in "Test Driven Development: By Example," TDD leads to simpler designs and faster debugging, as tests act as a constant verification of code correctness .

Functional programming patterns emphasize immutability and pure functions, which help manage side-effects that can lead to unpredictable behavior. By ensuring that functions have no side-effects and do not alter external state, these patterns enable safer and more predictable code, especially in concurrent environments. "Functional Programming, Simplified" highlights how these patterns contribute to improved reliability and maintainability in software design .

Deploying large-scale applications involves challenges such as ensuring consistent environments, handling configuration at scale, ensuring reliability, and maintaining security. According to "Deployment Automation" and "The DevOps Handbook," successful deployment relies on automating build, test, and deployment processes to minimize human errors, using continuous integration and continuous delivery pipelines to ensure quick rollouts, and applying infrastructure as code to manage deployments efficiently. These practices are critical for managing the complexity and scale of modern applications .

Domain-Driven Design (DDD) focuses on using a domain-centric approach in software development to manage complexity. It involves creating a shared language between developers and business experts to ensure that the software's architecture aligns closely with the underlying business model. DDD stresses the importance of building a model that evolves with the domain's complexities, thus making the software more flexible and easier to maintain. Eric Evans's "Domain-Driven Design: Tackling Complexity in the Heart of Software" extensively discusses how this approach leads to more meaningful software architectures .

You might also like