Introduction history computers used to execute a single program beginning to end before operating systems Os evolved to allow more than one program to run at once (individual processes) motivated by resource utilization, fairness, convenience threads allow multiple streams of program control to coexist within a process sharing process-wide resources benefits exploiting multiple processors simpler… Continue reading Java: Concurrency In Practice
Category: Coding
Effective Java
Introduction most of the rules derive from a few fundamental principles clarity and simplicity are of paramount importance user should not be surprised by component behavior code should be reused rather than copied dependencies between components should be kept to a minimum errors should be detected as soon as possible for the most part, this… Continue reading Effective Java
Clean Architecture
What is Design and Architecture? no difference between design and architecture low-level details and high-level structures are all part of the same whole The goal of software architecture is to minimize the human resources required to build and maintain the required system Bad architecture can result in increasing costs per new feature making a mess… Continue reading Clean Architecture
Java: A Beginner’s Guide (8th Edition)
Java Fundamentals The History and Philosophy of Java created at Sun Microsystems to be a platform-independent language originally targeted for embedded consumer electronics blew up due to the world wide web internet populated with many types of computers, operating systems, and CPUs adopted syntax from C and object model from C++ Java simplified internet programming… Continue reading Java: A Beginner’s Guide (8th Edition)
A Philosophy of Software Design
Introduction If you can visualize a system, you can probably implement it Means greatest limitation is theĀ ability to understand the system we are creating Over time, complexity accumulates, leading to bugs which slows development two general approaches to fight complexity making code simpler and more obvious encapsulate complexity software design continual process, waterfall rarely… Continue reading A Philosophy of Software Design
97 Things Every Programmer Should Know
Act with Prudence take extra care to avoid tech debt if you must accrue it, track cost appropriately Apply Functional Programming Principles learn to apply functional principles to make your code simpler and easier to debug Ask, “What Would the User Do?” (You Are Not the User) the user may not think like you best… Continue reading 97 Things Every Programmer Should Know
Designing Data-Intensive Applications
Reliable, Scalable, and Maintainable Applications Intro applications today more data-intensive than compute intensive need to store data (dbs), remember expensive operations (cache), allow users to search (indexes), send a message to another process async (stream processing), periodically crunch a large amount of data (batch) Thinking About Data Systems wide-ranging requirements handled by stitching different tools… Continue reading Designing Data-Intensive Applications
Working Effectively with Legacy Code
Changing Software Four reasons to change software adding a feature fixing a bug improving design optimizing resource usage Adding features and fixing bugs some argue whether something is a bug fix vs feature more important distinction is behavior i.e. adding or changing Improving Design (Refactoring) keep behavior intact programmers avoid because easy to lose behavior… Continue reading Working Effectively with Legacy Code
Programming in Scala
A Scalable Language Intro “scalable language” mix of oop and fp flexible: good for scripts or complex systems A language that grows on you feel of modern scripting language can extend and adapt library abstractions like bazaar: designed and extended by users can define classes that look like built-in types e.g. BigInt can build customized… Continue reading Programming in Scala
The Pragmatic Programmer
A Pragmatic Philosophy Intro think about big picture context lets you know how good software needs to be you work with people so communicate! The cat ate my source code Don’t be afraid to admit ignorance or error Must actively agree to responsibility but will be held accountable Should nota agree if impossible or extremely… Continue reading The Pragmatic Programmer