Recursion

Recursion is a technique that allows us to break down a problem into smaller pieces. This technique allows us to remove some local side effects that we perform while writing looping structures and also makes our code more expressive and readable. In this post we...


On Tail Call Optimisation

If you are interested in functional programming as many of our craftspeople are, you will have heard talk about tail recursion. Tail recursion refers to a recursive function call that has been made from tail position. When a function call is in tail position it...


Applicative Functors and data validation

I am currently reading Haskell Programming from first principles, also known as the Haskell book, as part of my journey to learn functional programming. The book has helped me to acquire many new intuitions and I will share two of them, Functors and Applicative Functors....


Setting up IntelliJ for Rust

This post is a part of the upcoming codurance series on different ways of setting up your Rust development environment. This time it's IntelliJ. Why IntelliJ? There are lots of good options for Rust development. The classics are perhaps CLion and vim/emacs. IntelliJ has one...


Setting up Rust development environment using VSCode on a Mac

This post is a part of the upcoming series on different ways of setting up your Rust development environment. It's time for VSCode. Completion and highlighting While on Linux VSCode with the Rust plugin seems to work more or less out of the box, on...


Falling into Machine Learning

Recently, I rediscovered my passion for Mathematics and Artificial Intelligence, which I used to hate during my degree in Computer Sciences. Lately, I’ve been focused on Software Design, Automated Testing, Microservices, and Functional Programming. I also love learning new programming languages, so I’ve been wondering...


Functional Programming and Reactive Architecture Part 2

Reactive systems As engineers we want to build systems that are valuable for the consumers; a reactive system strives to provide a correct answer in a timely manner to its users whether they are humans or other systems. For this reason a fundamental quality of...


Java Optionals For More Expressive Code

Any of us who has programmed in a language that permits null references will have experienced what happens when you try to dereference one. Whether it results in a segfault or a NullPointerException, it’s always a bug. Tony Hoare described it as his billion-dollar mistake....


Delegates as Type Aliases

In this post I will walk through how to refactor a Factory, moving from a sequence of ifs to a dictionary implementation, and using delegates as a type alias for my object creation methods. Here is a naive implementation of the Factory. You can see...


Software Design Bias

This week we had a software design night at Codurance. We spent almost three hours talking about many interesting things but there were a few things that really stuck with me: We all have software design bias. Project after project, we build our software design...


Codurance Hiring

We're hiring!

We are hiring Java and .NET Craftspeople in London and Barcelona

Enjoying this article?

Sign up to our monthly newsletter to get content like this in your inbox!

Codurance Logo

Software is our passion.

We are software craftspeople. We build well-crafted software for our clients, we help developers to get better at their craft through training, coaching and mentoring, and we help companies get better at delivering software.

Latest Blogs




Contact Us

15 Northburgh Street
London EC1V 0JR

Phone: +44 207 4902967

Carrer Aragó, 208
08011, Barcelona

Phone: +34 689 723 737

Email: hello@codurance.com