Sign in

Yoda. The great mentor. Photo by <a href=”https://unsplash.com/@nadir_syzygy?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Nadir sYzYgY</a> on <a href=”https://unsplash.com/s/photos/mentor?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>

A crisis of experience is coming. More people than ever are getting into software development, but the need for software engineers is growing even faster. This is going to create an imbalance where senior software engineers are going to be in short supply. If you’ve been in this game for a while, congratulations. Your tenure alone is going to ensure a long and lucrative career. If you’re just getting started. I have good news and bad news.

The good news is that it’s going to be easier for you to get your first dev job. The bad news is that…


Model of a human head with the brain exposed
Photo by David Matos on Unsplash

“Knowledge is power” it is said. It is also said that “power tends to corrupt”. These axioms are true in our code as much as they are true in life. Let me explain.

When we work in our code bases, we tend to hold varying degrees of the application logic in our head at once. It helps us to understand the relevant parts of the system we are working in. This is a good thing. It is important for us to understand how a change in feature A might have an affect on feature B. …


Photo of Deiter Rams

Dieter Rams is arguably the most celebrated and influential product designers of the last century. His ten principles of “good design” influenced product design the world over. Part of what made Ram’s ten principles so compelling is their ability to be adapted to virtually anything that is created, from socks to software.

And that is exactly what we shall set out to do. We are going to apply Dieter Ram’s ten principles of Good Design to software. Not the end user product — much can be found about that — but to the source code.


Rube Goldberg machines are overly complicated devices for simple tasks (Image source)

The whole job of a class is to ultimately create an object. But JavaScript has one of the simplest, most clear and succinct ways of creating an object, and a familiar dead simple way to do it over and over again in a particular way:

{} // an object() => ({}) // a function that returns the same object shape every time.

So how far can we reasonably take this? Well, to paraphrase a sports references, it could go all the way!

// Why do all of this
class SubClass extends BaseClass {
#state = {}…


It’s been a minute since I’ve last seen a “considered harmful” story. I’d say it’s about time for a new one.

To be honest though, I do consider the string concatenation operator (+) in JavaScript problematic. For one thing, it’s overloaded with the numerical add operator (also +). In strongly typed languages this is less of a problem, but I don’t know that it helps with human readability. In a dynamically typed language like JavaScript though, it can be down right dangerous.

The problem

What does this even mean?

2 + 'Hello'

I know what it does, but what does it mean…


Let’s cut to the chase. There have been several high profile folks in the JS community that have laid out some pretty strict limitations on when they think arrow functions are appropriate. Many words have been spent talking about readability, variability, etc. For what little it is actually worth, I’m here to add to the din with a reasoned defense of straight up replacing the function keyword with the arrow function (=>).

I’m normally a pretty nuanced person. There is usually no “right” way to do something. Just various ways with different trade offs. Really, that’s all I want to…


Disclaimer: This is not a dig at either of the fantastic underscore or lodash libraries, nor any other utility library. It is not a call to stop using any of them. Nor is a pitch for some replacement library. Rather this is a suggestion to stop and think. Is using a utility library improving the end user experience on a given project, or are we just falling into habit from previous projects?

As discussed in part I, there may be many reason to reach for a utility library. …


A recent article popped up in my inbox touting an alternative to the overly complicated world of client-side apps. Modern Rails! was the rallying cry. To be fair, modern Ruby on Rails is a cool piece of technology. So are many other backend frameworks. I’m not here to suggest otherwise. What I am here to do is to have yet another go at putting this idea that front-end engineering is unnecessarily complex to bed, or at least that the reasons given for it’s unnecessary complexity are misinformed. …


Category theory…

Wait! before you take off for the hills, give me just one minute to explain.

Category Theory is like the theoretical physics of math. Well, I guess theoretical physics is the theoretical physics of math, but my point is, much of what category theory is concerned with seems either beyond the grasp of mere mortals such as you and I, or so abstract as to be practically useless when writing “real” software — unless of course you write Haskell.

But this is about JavaScript, we (probably) don’t write Haskell. So what does category theory have to offer us?


Disclaimer: This is not a dig at either of the fantastic underscore or lodash libraries, nor any other utility library out there. It is not a call to stop using these or any other library. Nor is a pitch for some replacement. Rather this is a suggestion to stop and think. Is using a utility library improving the end user experience on a given project, or are we just falling into habit from previous projects?

Every added dependency has a cost, especially when it comes to browser-side JavaScript. Much of the time this cost is completely justified — even required…

Cory

Front End Engineer with deep technical expertise in JS, CSS, React, Frontend Architecture, and lots more. I lean functional, but I focus on maintainability.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store