Throughout my career as a software engineer, I have had the opportunity to work on a number of projects in a few different industries — including education, media, civic tech, and healthcare.
While the technical skills we, software developers, acquire over the years are quite transferable, every project is a new set of challenges — because a lot of things change. To be able to deliver maximum value, in addition to our technical expertise, we need to have some domain knowledge. …
About a year ago I got approached by a London-based recruiter asking if I would be interested in interviewing at McKinsey Digital.
I was aware that McKinsey is one of the most prestigious and recognisable brands in the field of management consulting. What I did not know, is that McKinsey Digital is their attempt to increase their footprint in the digital consulting space. With multiple offices around the world already, they were looking to hire experienced software specialists.
I have been a software developer my whole career but have always been quite interested in the consulting aspect of my work.
…
This is a seventh part of the “Functional JS” series. Go to the previous part here, or the beginning of the series here.
Now that we understand how function composition works, we will take a break from exploring foundational concepts of functional programming and how they work. Instead, we will briefly discuss point-free programming (also called: “tacit programming”) — a style of programming that is related to FP.
Even though using this style is not essential to writing code in a functional way, understanding jargon like this is useful in discussions and when trying to understand someone else’s code.
This is a sixth part of the “Functional JS” series. Go to the previous part here, or the beginning of the series here.
Up to this point in the series, we have been focusing on techniques and vocabulary connected to Functional Programming and trying to understand how these would work in JavaScript.
While discussing that, we have repeatedly alluded to function composition: how having small functions makes for easier composition, how currying affects the way we compose functions, etc.
Now, we will try to look at the full picture. We will get to the bottom of what function composition is…
This is a fifth part of the “Functional JS” series. Go to the previous part here, or the beginning of the series here.
In the previous part of this series, we have discussed closures. We have seen that they allow us to have functions return other functions that remember variables from their outer scope.
We have alluded to the fact that this will become useful as soon as we learn about partial application and currying. It is now time to delve into that.
Functional programming is all about composing functions and using generic functionality to create a more specialized one…
This is a fourth part of the “Functional JS” series. Go to the previous part here, or the beginning of the series here.
We have already covered a lot of ground when it comes to functional programming terminology.
It is time to turn our attention to another concept that is useful when trying to program in a more functional fashion. We will be talking about closures.
Some time ago, we have introduced a notion of first-class functions, as well as higher-order functions. We have seen how they can be used to compose our programs’ complex logic out of multiple small…
In one of the previous articles, I have touched on the subject of product development. We discussed the technical part of the product team — software engineers, and why it’s beneficial to have them engaged in the process.
It is commonly thought that it is Product Manager / Product Owner’s job to come up with ways to discover the product worth building. It is up to them to make decisions on which route to take to make the product successful — what to focus on, which features to include, etc.
Using the larger team’s perspective and skill set, however, can…
This is a third part of the “Functional JS” series.
Go to the previous part here, or the beginning of the series here.
Last time we discussed some more terminology related to functional programming. You now understand concepts like higher-order functions, first-class functions, as well as pure functions — and this is something we will build on today.
We will see how pure functions can help us avoid bugs related to managing state. You will also get to know (and hopefully — understand) some new vocabulary: side effects, immutability, and referential transparency.
First, let’s see what we mean by application…
In previous parts of the “Consulting for Software Developers” series, we focused on earning the client’s trust and figuring out how to give them the best technical advice.
Now, we will discuss how we, Software Developers, can have an even greater impact on the product we’re building.
Previously, the subject we were concerned with was giving advice on “how should the feature be built?”. Now, we will switch our focus to a much broader, strategic questions like “should the feature be built?”.
If this sounds daunting, it’s because software developers’ job is traditionally regarded as technical and down-to-earth, rather than…
This is a second part of the “Functional JS” series. Go to the beginning of the series here.
Now that we know why learning functional programming practices can help you become a better programmer, let’s jump into the fun stuff.
In this part, we will focus on the vocabulary and basic concepts connected with functional programming.
Sadly, there won’t be a lot of code involved. On the bright side, once we understand the terminology, we will be able to discuss more complex subjects comfortably.