Presentations
Establishing a SOLID Foundation – An Intro to Software Design
Are you tired of opening classes that have hundreds or thousands of lines of code? Do you feel that you spend too much time trying to understand how something (that should be simple) in your application works? Are you frustrated with following spaghetti-like logic through your code’s core?
In this presentation, we’re going to examine a set of design principles that yield easy-to-read, decoupled code referred to as SOLID. To start, we’ll explore the history of SOLID and establish the problems it solves. From there, we’ll dive into the different principles, defining what each principle means, how to spot violations, and how to resolve them.
Resources
- Presentations
- Books
- Working Effectively With Legacy Code by Michael Feathers
- Refactoring: Improving the Design of Existing Code by Martin Fowler
- Articles
- Role Interfaces by Martin Fowler
- Header Interfaces by Martin Fowler
- Videos
- SOLID Principles of Object Oriented Design by Steve Smith (Pluralsight)
Making the Unstable Stable – An Introduction to Testing
Does it always seem like bugs you’ve fixed keep coming back? Does it seem like when you fix one bug, two more crop up? What if I were to tell you there’s a better way?
In this presentation, we’re going to explore how to make a code base more stable by using automated testing. To start, we’ll explore the business case of why you should be writing tests by looking at industry studies and personal experience. From there, we’ll look at the fundamentals of testing by talking about the pros/cons of unit, integration, and UI testing. Finally, we’ll look at some resources to learn how to write tests.
Resources
- Presentations
- Slides (SlideShare)
- Unit Testing Makes Me Faster by Jeremy Clark
- Books
- Starting to Unit Test: Not as Hard as You Think by Erik Dietrich
- The Art of Unit Testing: with Examples in C# by Roy Osherove
- Working Effectively With Legacy Code by Michael Feathers
- Refactoring: Improving the Design of Existing Code by Martin Fowler
- Code Complete: A Practical Handbook of Software Construction (2nd Edition) by Steve McConnell
- Articles
Taking a Gamble on F#: Implementing Blackjack
Have you heard a lot about about functional programming, and aren’t sure how to get started? Have you tried learning the concepts, but still having a hard time applying them to a real problem? Then this talk is for you! In this presentation I’ll walk you through how to model the classic card game, Blackjack, using F#.
Resources
- Presentation
- Slides (SlideShare)
- Code
- Books
- Videos
- F# Jumpstart by Kit Eason
How To Have Code Reviews Developers Actually Want
This phrase can stir up a lot of emotions for people. For some, it’s aggravation because they’re a waste of time, for others, it’s stressful because it feels like you’re getting personally attacked. However, for some, it’s a great learning experience that leads to the team improving. Do you want to be in the latter group? Then this talk is for you!
In this presentation, I’ll first show you the benefits of code review and the business case for why they should happen. Next, I’ll show some of the most common mistakes that teams make during the review process and how to mitigate them. After talking about the bad, we’ll talk about what to look for in your code review process. Finally, I’ll wrap things up by showing the game plan I use for code reviews.
Resources
- Presentations
- Slides (SlideShare)
- Books
- Code Complete: A Practical Handbook of Software Construction (2nd Edition) by Steve McConnell
- Peer Reviews In Software: A Practical Guide by Karl E. Wiegers
- Articles
How Functional Programming Made Me a Better Developer
With the rise in popularity recently, functional programming has become "The Next Big Thing". As of today, there are tons of frameworks and tools that can be used for front-end, back-end, desktop, and mobile development. With that being said, the majority of us are still using object-oriented languages for our day jobs and don’t need to learn functional programming, right?
In this talk, I’ll walk you through my experiences learning functional programming over the last year, how my style of programming has changed, and how I now think about programming with regards to both functional and object-oriented paradigms.
Resources
- Presentations
- Slides (Google Slides)
- Books
- Haskell Programming from First Principles (Haskell Book) by Christopher Allen and Julie Moronuki
- Domain Modeling Made Functional by Scott Wlaschin
- Functional-Light JavaScript by Kyle Simpson
- Articles
- Thinking Functionally (series) by Scott Wlaschin
- SOLID: The Next Step is Functional by Mark Seemann
- Podcasts
- Code
Learning Functional Programming Through Construction: First Principles
In the past five years, functional programming has increased dramatically in popularity which has lead to an explosion of resources in learning these concepts. But, between languages (Haskell, Elm, PureScript, F#), libraries (Ramda, fp-ts), and concepts (Monads, Monoids, Functors), it can be overwhelming in determining where to start and how to begin.
In this talk, I’m going to show you three fundamental concepts of functional programming: pure functions, immutability, and composition by not only explanation but we will walk through building these concepts into your code and applications. As we explore each concept, I’ll show you the advantages of following these principles, how they will improve your development experience, and how they will set the stage for more advanced ideas.
Intended for those who have experience with TypeScript or C#, by the end of this presentation, you will understand how pure functions lead to easier to test code, how immutability makes debugging easier, and how the power of compositions allows us to build bigger applications by combining smaller applications.
Resources
- Presentation
- Slides(Google Slides)
- Videos
- Articles
- Thinking Functionally (Series) by Scott Wlaschin
- Books
- Domain Modeling Made Functional by Scott Wlaschin
- Professor Frisby’s Mostly Adequate Guide to Functional Programming by Brian Lonsdorf
- Functional Light JavaScript by Kyle Simpson
- Code
Level Up on Functional Programming By Rebuilding LINQ
When taking your first steps into functional programming, you’ll quickly run into blog posts talking about how to simplify complex loops by using the trinity of list operations: map, filter, and reduce. But what are these methods actually doing under the hood to help simplify your code?
If you’re familiar with the .NET landscape, then you already have experience with an implementation of the trinity within LINQ (Language Integrated Query).However, what if I told you that by learning how LINQ implements map (Select), filter (Where), and reduce (Aggregate), you actually know how other languages implement the same constructs?
Intended for C# developers who have some experience with LINQ and an interest in learning functional programming, by the end of this session, you will have learned how to work with the Func type, generics, and extension methods!
Resources
- Presentation
- Slides (Google Drive)
- Articles
- Code
Taking a Gamble With Functional Domain Modeling
Over the past few years, Functional Programming has entered the mainstream when it comes to libraries and frameworks for various kinds of technologies and there are plenty of tutorials and resources to learn the basics.
With that being said, when it comes to building something non-trivial, there’s a gap between what tutorials cover and real-world situations. For example, how do we model a system that makes illegal states unrepresentable? How do we handle operations that can fail? How do we combine business rules with application rules?
In this talk, I’m going to show you how to tackle these concerns as we model the game of Blackjack. By doubling down on concepts like algebraic data types, Options, and Results, you’ll learn how to build applications that work in the real world.
Resources
- Presentations
- Domain Modeling Made Functional by Scott Wlaschin (YouTube)
- Slides
- Articles
- Thinking Functionally (series) by Scott Wlaschin
- Functional Architecture : a definition by Mark Seemann
- Functional Architecture Is Ports and Adapters by Mark Seemann
- Algebraic Data Types Aren’t Numbers on Steroids by Mark Seemann
- Books
- Domain Modeling Made Functional by Scott Wlaschin
- Code
- Source Code (on GitHub)
Having a Whale Of a Good Time With Docker
Docker and other containerization technologies have been around for a while now but it’s not always obvious what the advantages of this new technology and why we should be using it. Over the past year, I’ve found myself utilizing Docker more and more and it has completely changed the way I do work. In this presentation, we’ll take a 10,000 foot view of Docker, what it is and how to use it. From there, we’ll explore use standard use cases and examine how to create your own images. By the end of this session, you’ll be able to explain Docker to your fellow engineers and will hopefully be inspired to start applying these principles and practices to your own work!
Resources
- Presentations
- Code
- Source Code (on GitHub)
The Engineer’s Playbook: Starting a New Role
Starting a new role is never easy. There are a ton of ideas, new processes, people, and new technology to pick up. In addition, you may have also changed problem domains, which means you’re having to learn about the problem we’re trying to solve. That’s a lot to take in, “drinking from the firehose”, if you will. That being said, how do we control the flow? How do we optimize our learning to be effective in the short term and not need six months of ramp-up time?
In this session, I’m going to walk you through my playbook for starting a new role by exploring the four pillars of knowledge (product, people, process, and technology) and how they relate to each other. From there, we’ll explore each of the pillars more in-depth, looking at what questions are urgent and important and which ones are just important. Finally, we’ll wrap up on exploring timelines of what information you need to know by the end of your first week, your first sprint, first month, and first quarter.
Intended for engineers of all experience levels, you will have an example playbook that you can use when you start a new role by the end of this session.
Resources
- Slides (via SlideShare)
- Trello Board
- Question(s) of the Day
Removing Repetition By Building Your Own Automation Framework
As engineers, we don't like repetition and we want to automate as much as possible. Sometimes, this can be with our tasks, but other times, it's by improving the processes for our team or department. We could have our automation run locally on our box, but how do we share this with others? How can we build out patterns for others to follow so that they can be successful?
In this session, I'm going to walk you through three different problems I needed to solve and my approach for building out an automation framework using TypeScript, Deno, and GitHub Actions, however, this approach is general enough that it could be done with other technology choices.
Intended for engineers who are interested in building out their own workflows that can be shared with others, by the end of this session, you will know how to approach designing and building out your own automation framework.