Programming isn’t that hard. Really. With enough time and determination, almost everybody could write some useful code. The Internet is full of tutorials that teach you programming from scratch, full of people who faced the same problems you do, full of people who solved those problems and shared their solutions for you to use, and finally full of free libraries that you can just use. All you need to do is learn some tools, google your problems and put together pieces of code that you find.
But if it’s not a black magic, not a secret knowledge, then why are software developers so well paid?
It all comes down to the issue of maintainability. It’s not that hard to write a script that works. But it requires a lot of experience to write something, which can be easily modified.
Programmers spend more time reading code than writing it. Seriously. Sometimes we spend the whole day digging through layers of code in search of a root cause of some bug, only to discover that all you need to fix it is to slightly modify a single line of code. (Btw, that’s one of the reasons one shouldn’t pay programmers per line of code).
When I look at some code I wrote just four years ago, I’m terrified of it. If I had to modify something non-trivial on that website, I think I would have to get drunk first. It’s a mess. No separation of concerns, no layers of abstraction, sensitive configs in PHP files, templates mixed up the the business logic – not only is it objectively ugly and unreadable, but most importantly, it takes a lot of time to understand what the code does, how it does it and how to change it best.
There is also a lot of duplication. I wrote some code to handle a post form in the admin panel. Then copy-pasted it and adjusted to handle an image form. Then the same for a comment form. And some others. Now if I had to change something regarding the form handling generally, I’d have to do it in all of those places (knowing the whole application, and trying not to forget/miss any of them). If only I had that shared logic separated into any kind of abstraction, I would only have to update that abstraction, so that every form which uses it would just switch to the new version.
That code would also cause me trouble regarding cooperation. Not only because I would be ashamed to share my shitty code with anyone. Mostly because the experience of my shitty code would be even more shitty for someone who didn’t write it. If I had written cleaner code, followed styling conventions and SOLID principles, wrote automated tests, used an MVC framework – then every experienced developer could just jump into the project without much preparation, knowing where to look without having to know the whole project. But in case of my shitty code, they would have to suffer through a lot before being able to work on it. Plus, they’d have to know Polish – for some reason I used it to name some variables and templates...
That’s why I’m distinguishing between coders and developers. When I started working as a programmer, I was just a coder – I was simply able to write my ideas down as a code, to tell the computer what I want it to do. Over the years I’ve gathered the mindset and the skillset of a developer – a person that, well, develops a product. From start to end, from the architecture design to unit tests, able to communicate efficiently with others who work on it (developers, project managers, designers etc.), writing a code that’s easy for others to co-create and maintain. Coding is more about knowing a tool, developing is more about the mindset. I’m able to switch to a different framework or a completely different language within a week or two – because those are just tools.
So to sum up: of course you can hire some intern for 10 PLN/hour – they will take a month to create something, but if they’re good, they will get shit done and working just fine. However, if you want to maintain this code later, develop your product further, add more people to your team, fix some bugs that came up – it will take a lot of time, tech debt will rise, bugs will multiply, time needed for testing will become huge. And you could also hire someone for 30 EUR/hour – who would create the same functionality in just a week, keeping the code clean, easy to maintain, up-to-date with the newest trends in the field, interoperable and easier to test.
And that’s why I get so pissed when I hear stuff like “my niece also does websites, she would do it for a lollipop, and you want money from me?” or “I had some programming in high school, looks easy, you just google stuff and copy answers from Stack Overflow, how dare you make the money you do!”.
Well, no. Sure, programming is basically just splitting complex problems into a set of simple instructions, so that even something dumb like a computer can understand and execute them – in principal it really is easy. But when it comes to doing it right – that’s where software development becomes a real challenge.