I remember my old days, when I was programming 3D engines in C++. Working with complex structures, memory management, vector math and obscure algorithms. Trying to squeeze every computing bit available, to keep the frame-rate at a sane level.
I remember staying awake at night, lost in my thoughts on how to get the rendering speed of a complex 3D scene from 25FPS to 30FPS or more.
I remember staying awake at night, lost in my thoughts on how to get the rendering speed of a complex 3D scene from 25FPS to 30FPS or more.
A decade later, transitioning into the web development space, I can only feel the awe, thinking how all this craftsmanship has changed since then.
You can so easily find a job as a web developer these days, and I have seen (and hired) many engineers, that are self taught, or have pivoted from a total unrelated background. With zero prior knowledge or studies in computer informatics. Shallow knowledge, that gets the job done.
What’s changed?
The answer is pretty simple. It’s the internet. And the transformation of programming, from solo thinking to hive knowledge. A technology garden, flourishing with thousands of building blocks to help you make literally ANYTHING.
So, what does the “average” web developer do these days?
It’s so darn simple:
- Pick a framework or technology (there are plenty).
- Select a few libraries that implement the requirements.
- Write some code to glue things up.
- Head over to StackOverflow and copy paste algorithms when things start to get tough.
And why blame this habit?
- For JavaScript developers, NPM has over 350K libraries to choose from.
- For Python developers, PyPI has again over 300K libraries available.
- For Ruby developers, RubyGems is boasting more than 100K libraries.
- Docker Hub has more than 1M container images, ready to be deployed.
- AWS has more than 200 services, ready to plug and play: cloud services, image recognition, text analysis, and so many other out of the box “solutions”.
- StackOverflow, has millions of questions answered. And the SEO around them is nuts.
Things are so ridiculously easy, that, even if you want to find that very specific regular expression to match some patterns in your code, you can just Google It. StackOverflow, Reddit, Quora and so many other websites have the answer ready for a copy-paste. Even if you have no idea (like me) how regular expressions work, you get the job done, in a few minutes, after some shallow digging on the internet.
Lazy programming
I am all-in for not “re-inventing the wheel”. The competition is so fierce around speed of delivery, that makes zero sense to do the same things over and over again, just for the shake of personal achievement.
On the other side, we tend to become so lazy, that we rely on libraries for simple things like left-pad (a few lines function to just pad a string with some characters, duh!), which eventually broke a big part of the internet, when the left-pad crysis happened back on 2016. And it is rather worrying on how programming as a craft has been so much disseminated by the great majority, using shortcuts like this.
All in all, we as developers, are becoming more and more “users” of the global knowledge, digesting “solutions” and “answers” from the community.
Programmers of complexity
On the other hand, craftsmanship has transformed from writing articulated and difficult code, to managing complexity. The products we build today, can do amazing things. And the big challenge is not building the product itself, but finding a good idea and creating a market around it.
This is where the challenge stands. On the “what” and not the “how”. And this is where fierce competition begins. On the next big idea. Not on the next big technical leap. This happens for the very few, like Tesla and Apple.
This is where the challenge stands. On the “what” and not the “how”. And this is where fierce competition begins. On the next big idea. Not on the next big technical leap. This happens for the very few, like Tesla and Apple.
And we, as developers, need to glue, manage and scale the complexity of the components that technically compose our idea or product:
- Microservices
- APIs
- Micro-frontends
- DevOps and CI/CD
- Autoscaling of resources and uptime
- Disaster recovery and global distribution
- Cybercrime and security
This is where the shift of the next big challenge stands. Not in the code itself. On managing complexity.
Unless... you are on the minority working on exotic projects: machine learning libraries, database code, language compilers… things that the majority of programmers will just “use” for free, having no idea how these things actually work.
Unless... you are on the minority working on exotic projects: machine learning libraries, database code, language compilers… things that the majority of programmers will just “use” for free, having no idea how these things actually work.
Programming will become a commodity. Software craftsmanship will grow in the hands of the very few. Programmers of complexity are already building the future. Which type of programmer do you choose to be?
—
Nikos Vasileiou
—
Nikos Vasileiou