Skip to content

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

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

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

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

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

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

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

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

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

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