A Software Crafter's Gamble

March 8, 2017

As software engineers we are working in a rapidly changing field that challenges us to keep up with the newest methods and technologies. We cannot master all of them. But how do we pick those we want to learn next? And how will this choice impact our careers?

We usually absorb the technologies used in the projects we join. Some things we learn just for fun, not with an intention to use them productively. Fact is, as software engineers, we love to learn new things. Why else would we have chosen a career that commits us to a life of continuous learning?

Read on →

Functional Programming and Software Design

February 18, 2017

So I read John Hughes' paper "Why Functional Programming Matters" and his argument really resonated with me.

In my view, software developers are problem solvers. When I design a solution, I first try to understand the problem as best as possible. I then attempt to split it into smaller subproblems, which I can solve independently, then put the partial solutions back together to form a complete one. Often I do not get it right the first time, so I may have to do several rounds of adjustment.

Read on →

Property-based Tests for Coin Changer

November 27, 2016

While trying to better understand property-based testing, I was looking with a colleague for an example small enough to demonstrate the technique. The problem was that most small examples were too trivial, so that the property-based tests degenerated into simple reimplementations of the code under test. We eventually found a good example in the Coin Changer kata.

A coin changer should, for a given amount and a set of coin denominations, return the smallest number of coins that represents the given amount. For example, an amount of 42 cents in Euro denominations of #{200 100 50 20 10 5 2 1} should return '(20 20 2).

Read on →