Do you ever ask yourself: how is my computer doing what it’s doing?

I mean most of the time, I don’t really know the answer to that question. I know enough to have a good sense of what I don’t know. I know there are a lot of layers of abstraction so that I can actually do what I need to get done (or, ya know, procrastinate).

It’s insane, the power at our fingertips. Most of us probably still take for granted what Microsoft and Apple have done with the Graphical User Interface. We click with a mouse and type with a keyboard, while a whole bunch of complicated things are happening behind the scenes.

It’s inevitable that the same sort of progress happens when it comes to creating software [applications].

We should stop resisting next generation programming languages like Bubble that strive to abstract away more code from the end user. These are steps in the right direction towards simplifying software creation. In today’s day and age, building apps should begin to look more like putting together a powerpoint presentation than coding.

Let’s Abstract Further!

I’m breaking the “know your audience” rule a bit here by trying to address both non-technical and technical entrepreneurs. But I believe those of us who are “non-technical” should feel empowered to innovate online, and I want engineers and developers to lead the way to better code and better abstraction.

It’s worth noting that template website-builders like Squarespace and Weebly already make it possible to create a website or start an online business with minimal technical resources. And I don’t know anyone who would look down on turning to Medium or Ghost for a blogging platform. So the real need for engineers, the current argument goes, is for building more complicated applications — because there’s a big difference between launching your blog and building AirBnB or Twitter.

That’s true, yes. We need engineers to continue developing better and more particular software. But what we don’t need them to do is continue to reinvent the wheel for people who don’t have the skill set to code their own solutions. Because what’s happening in Silicon Valley is engineers are becoming an elite class — they are in control over which apps are built and what they look like.

I’d like to believe that the majority of engineers would be happy to work on new problems; and would be happy to integrate their code into Platforms-as-a-Service like Bubble that empower more people to visually build their own solutions.

[A certain level of skepticism is warranted. Past attempts to abstract code for broad use cases have failed. But we know it’s possible. We need more engineers getting onboard.]

The Law Of Leaky Abstractions

The main counter-argument to platforms like Bubble is what Joel Spolsky calls “leaky abstractions”. If you’re not super technical, let me try and break down the main argument:

Abstractions are attempting to “hide” all the problems underneath, but they never fully do. This is why it’s necessary to understand how everything is actually working.

Great! We agree. When the abstraction doesn’t work (i.e. leaky abstraction), someone needs to know what’s wrong. Where we disagree is who needs to know. Not everyone creating things on the internet needs to know — this should be the role of engineers.

No one is saying that abstractions are always perfect. But Spolsky’s claim that you’d be better off learning everything from the ground up, because someone will inevitably have to understand how things work “underneath the hood” when something breaks, is a problematic one. Yet we see this argument everywhere.

Bubble currently abstracts: Where the code runs | Where data lives and how to efficiently search for it | How pages are drawn and refreshed | How to talk to other services e.g. Facebook, LinkedIn | etc.

Steve Blank, listed as one of the 30 most influential people in tech by Forbes, titled a piece Why Founders Should Know How To Code and goes on to write, “A startup is not just about the idea, it’s about testing and then implementing the idea. A founding team without these skills is likely dead on arrival.”

It’s only in the world of internets that this argument makes sense and is such a widely held belief (I challenge you to read the story of Tara Reed, non-technical founder of Kollecto, and claim she didn’t test and iterate on her ideas). Yes, if you want to be a great engineer, you need to know how to code. But not everyone who wants to innovate online should have to be an engineer! That’s the point.

Engineers Should Be “Code Mechanics”

In spite of Spolsky’s claim that people should learn software from the bottom-up, many of us learn better top-down. For example, the only reason I know how to fix anything on my car is because at some point a light went off telling me something was wrong, so then I researched how to fix it. And if I can’t figure it out myself, I hire a professional (i.e. mechanic).

That process is actually pretty standard.

When it comes to programming the app, understanding the code underneath mostly won’t be necessary in the near future. Just like you don’t have to be a mechanic in order to commute to work, visit a friend, take a road trip, etc.

If you take away one thing about the future of software development from this post, then let it be this: it’s inevitable and necessary that in the near future practically everyone will be able do it.

Power to the People

Software is infiltrating and disrupting every market, and the popular response to this — from concerned mothers all the way up to the POTUS — is to put in place more initiatives that teach people how to code. And that’s great. Computer science should be part of school curriculum just like Math, Literature, Music and other sciences.

But being extremely proficient in coding is simply not for everyone. So these same people should also be champions for platforms like Bubble (that’s including you, Barack!) because it puts the power of software creation in more people’s hands. It allow people to focus on their ideas and their passions more than the code itself.