Introduction to Functional Programming
Software development is hard. Really hard. Projects collapse under their own weight, enhancements and new features take orders of magnitude longer than we think they should. Faced with stiff competition we need every advantage we can get as developers and a slightly better version of framework X is not going to cut it anymore. We need radically different ways of constructing our software, techniques that give us a different set of tradeoffs than the traditional object-oriented methodology offers. We need simplicity at every layer of our stack, and to get there we’re going to have to challenge some basic assumptions. Functional programming gives us the foundation to build on that ensures no matter how large we build our applications, they will always retain the simplicity we need to stay agile.
Through this course you will be introduced to a number of techniques that are applicable to any language, as well as getting experience in a purely functional language. Through this paradigm shift you’ll gain many valuable skills including:
- How to make your code radically more testable
- How to have certainty that changes to one area of your app won’t affect another
- How to express your intent with way more signal and a lot less noise
- How to drive down the possibility of runtime errors and even eliminate them altogether
- How to refactor the scary parts of your app into something anyone on the team feels confident jumping into
- How to decipher those mysterious Haskell-style types you’ve seen in functional programming talks
Concepts & Skills
Learning functional programming can sometimes feel like starting over. There are lots of new concepts to discover! We’ll start at the basics with pure functions, higher order functions, composition, immutability, and partial application which are fundamental building blocks of functional programming. Next we’ll move on to techniques for dealing with failure and building pipelines for data transformation which allow you to work with larger more complex problems. Finally we’ll cover an architecture for state management in a functional world. Along the way we'll discuss type signatures and introduce a static type system that is common in functional languages.
- A tiny bit of JS review
- It all starts with pure functions
- Say goodbye to the for loop
- Better living through composition
- Saving the best for last with partial application
- Fearless sharing with immutability
- Banishing null (and undefined too)
- Abstraction is about precision, not obfuscation
- What do they mean when they say “Structure”?
- Utilizing side effects in an ocean of pure functions
- Meet Elm, a functional language that doesn’t bite
- Type signatures
- Elm’s effect system
- Demo project
David has been teaching software engineering off and on for the last decade and has a strong passion for education no matter his job title. David has taught at all ages, from senior elementary through adult’s embarking upon a second career. Always a pragmatist, David has overseen a transformation from imperative OO to functional at several companies and is certain he can help you on your functional journey. David hosts the functional programming podcast LambdaCast where he discusses functional programming in the context of being an regular working developer.