About
Software Engineer based in Atlanta, GA. Currently at Salesforce (Pardot). Computer Engineering degree from Georgia Tech. Passionate about building resilient streaming systems, modernizing legacy software, and deep diving to solve cost-to-serve and performance problems. Most comfortable working in Java, PHP, Python, and AWS.
In my free time I can be found riding my bike, lifting weights, and attending a metal show or two.
All opinions on this site are my own.
Tech Stack Link to heading
Current: Java, PHP, MySQL, Redis, Apache Storm, Apache Flink, Apache Kafka, Victoria Metrics, Kubernetes, Terraform, Symfony Framework, Grafana, Spring Framework, Splunk, AWS
Previous: Ember.js, AngularJS, Postgres
Favorite Books Link to heading
I love to read technical books, but like most I struggle to find the time between work and personal life. Here are some of my favorites over the years:
Designing Data-Intensive Applications (Martin Kleppman): An absolute must read for any software engineer. I read the first edition and plan to come back and read the second (uhh, eventually). This book helped me understand databases and the fundamentals that underpin them at a low level (concurrency, indexes, etc). Martin has a deep understanding of distributed systems and excels at communicating technically dense concepts clearly. If you’re a Senior Engineer with a desire to grow your technical skills, you seriously need to read this book.
Grokking Algorithms (Aditya Y. Bhargava): I never knew algorithms could be fun. This book was an absolute page turner and help me realize how much of a visual learner I am. Algorithms are hard, but the author’s unique visual explanation of them really made some of these fundamentals click for me. It will mostly benefit early Computer Science or Computer Engineering students, but has quite a lot to offer even for seasoned software devs in the industry.
Pragmatic Unit Testing in Java 8 with JUnit (Andy Hunt, Dave Thomas, Jeff Langr): This book shaped my philosophy on code earlier on in my career. It helped me understand how seemingly unimportant things (e.g. properly naming functions) have the ability to self-document and communicate intent to reviewers of your code. It also gives you a framework for what you should test. While the examples focus on Java and JUnit, the concepts carry over to the language of your choice.
The Pragmatic Programmer (Andy Hunt, Dave Thomas): Another classic book that I read earlier on in my career, and what launched The Pragmatic Bookshelf series. This is a book that deserves a re-read every few years to keep yourself grounded in the fundamentals.
Effective Java (Joshua Block, 2nd Edition): One of the first Java books I read around 10 years ago. Got me up to speed from a mostly PHP background. Teaches you foundational patterns for writing…effective Java.
Storm Applied (Sean T. Allen, Matthew Jankowski, Peter Pathirana): Back when I first started working in the world of stream processing and distributed systems, this book was the practical guide for understanding how to create data processing pipelines in Apache Storm. These days, Storm may have lost some share to frameworks like Flink, Spark, and Kafka Streams as stream processing has evolved. If your company is still on Storm, this book will teach you everything you need to know.
On the shelf Link to heading
- Java Concurrency in Practice
- Designing Data Intensive Applications (2nd Edition)
- A Philosophy of Software Design
- Effective Java (3rd Edition)