How to write multi-paradigm code

... without making a mess

Elias Mistler

Abstractions Architecture Best Practice Clean Code Functional Programming

See in schedule

Python is a powerful multi-paradigm language which combines elements of object-orientation and functional programming. Both concepts can be really powerful if used right. But what if you use them together? It can be pragmatic and very efficient, but things can also get messy really quickly.

This talk explores peaceful co-existence of oo-classes and pure functions in the same code base. The focus is on identifying the right tool for the right job and highlighting benefits and pitfalls of paradigm changes, using concrete examples of oo-constructs and functional patterns using the `toolz` library.

Some questions that will be tackled:
* Should I handle application state with a Controller class? Dependency injection? What about global variables?
* What do we organise code by? State vs. business logic? Shared functionality vs. shared context?
* How do I store data? Dicts, data classes, named tuples? Does it make a difference whether I am writing standalone software or a webservice?

Prerequisites:
There are no formal prerequisites for this course, although it is recommended that participants have a strong background in Python and its code structuring mechanisms, as well as a deep understanding of at least one of the paradigms of OOP and FP.

Type: Talk (45 mins); Python level: Intermediate; Domain level: Advanced


Elias Mistler

Previse

Elias Mistler is the Principal Machine Learning Engineer at Previse, an award-winning startup which gets suppliers paid instantly, powered by Machine Learning. Elias’ core responsibilities include integrating Machine Learning algorithms and feature extraction pipelines into a microservices production cloud handling thousands of invoices every day. In bridging between teams, systems and architectures, he has become a multi-paradigm specialist, using the power and simplicity of functional programming, as well as the API-readiness and explorability of object-oriented classes.