The sorry state of the programming world as of the end of 2016 AD
I know that I might bore the general population with this topic, but here it comes – another post on why the past was glorious and the present sucks. Before I start, a necessary clarification: I know that „the young generation of programmers is incredibly talented, inventive, productive” and everyone expects to hear that from me. Reality is somewhat different – and you’ll see below why.
We have the most sophisticated tools ever, in the history of man-kind. In 2017 the tools will be even more sophisticated. 2018 will make no exception – I am sure that I cannot even foresee the tools we’ll have by 2020, so awesome and so advanced. There is a catch though. There are very few tools that create breakthroughs in the way things are designed, created, fixed, improved. Most of them reinvent the wheels that were already spinning.
I look at the trend. People switch from things like Eclipse and Visual Studio to Atom or Visual Studio Code, because they are too complicated. People switch from virtual machines to Docker, and now „containers” is the buzz-word that will keep our heads spinning for the next months. Things still happen in the Cloud, although it is no longer that important to have „Cloud” skills, but, instead, hire a system administrator to do the cloud part. It’s no different from 15 years ago when you hired a new administrator when you had more than 20 new servers you just bought to watch. Reality is that, containers or not, nothing changed.
People do feel the need to simplify things. Therefore, more sophisticated tools are created, tools that can hide the complexity of things. Because, I’m sorry to say it to everyone, software does very complex things today. However, since the tools sophistication cannot allow them to be aimed at your problem alone, the tools tend to solve a million problems you don’t have. The result? Disaster. Today’s programming world. Let’s look at a few of the problems we have.
Frameworks and frameworkitis
It’s easy to bash Javascript for being silly – bashing Javascript is useless, and all the retards in the world will jump at you to explain how wrong you are. At the same time nobody actually uses Javascript; it’s hard to find sites in 2016 that don’t include jQuery, for example. For goodness’ sake, my blog uses jQuery and I have no idea why. This blog used to be an input box where I typed my words and they went online. My site definitely should feel like it is a place where someone types a text and that text appears online. But it includes a Javascript framework that is served at each page load.
Why? Well, it’s simple. Javascript sucks, even Javascript developers agree whenever they load up their favorite framework. It sucks so badly that they completely changed it (in a breaking, incompatible way) with the new standard, a version that sucks less, but is still Javascript at heart, so still terribly unfit for the web-work it does.
What do these frameworks do? Things that shouldn’t be done by a framework, to put things plain and simple. They put order in a language that is disorderly by lack of design. They do that badly, because they make some things impossible, which is why people move from framework to framework to solve particularly pressing issues that nobody cares about or knows how to mitigate because they moved already to the newer, shinier framework. A disease that I call frameworkitis, which affects even the most intelligent web-developers out there.
I do understand the problem. I always dreamed of programming video games, and I always felt uneasy with the programming environment I was working with. The thing that I have always done was to start creating my own framework that will allow me to do amazing things later on, at which point I was getting bored with it and abandoned it.
The same goes with Javascript – everyone finds the development environment unsatisfying, and they add their own framework to use it; however, only the most stubborn manage to push their solution to the whole wide world, making the new, probably bad wrapper the new standard. It keeps on for 6 months to 2-3 years, after which everyone will look at you cross and ask you why do you even use that name? We all use Angular 3.1 now!
Gazillion of useless tools
Ah, did you know that Angular 2 is the latest way to do things? It’s completely incompatible with Angular, so you have to throw your code to the garbage bin, but here it is, Angular 2. And we’ll change the version number every few months so you can’t really count on a stable ground for too long. If you’re working on a stable ground you can only make boring stuff. And we don’t want „boring”.
So we have these tools. They all do what „make” used to do, but we have new names for them. It’s gulp, grunt, grump, gash, vomit, throwup, whatever. You will not use this tool two years from now, because in two years we’ll move from letter g, that will totally be uncool, and we’ll use klamp, kulp, krunt, etc. Which will totally be a totally new and awesome new tech and totally rule the totally completely new world of web development. Because everything is on the web now, even if it doesn’t have to be or shouldn’t.
And it’s not like those tools aren’t needed. You need that, because you must handle things that you cannot verify before running. People laughed at leftpad, but truth be told you cannot really trust a programmer to write code, because that code might only be run on the client’s premises, you are not sure that the programmer didn’t just enter a typo that will break execution at any point of time. So you make the programmer use these tools, these dependencies, and everyone is happy. Except, of course, for the case in which the leftpad function will scan for credit card numbers, but yeah, that will NEVER happen, right? The tools safeguard us!
I understand why the tools are needed, but they are really addressing the real problem. And the real problem is not Javascript, is not, really. The problem is the HTTP + HTML model. It no longer works. And we work around it the wrong way.
Reinventing the wrong wheel
When it comes to the web, everyone looks at the wrong problem. Instead of attacking the real issue, they try to create a friendlier interface for Javascript. Two reasons: it’s faster to solve, and it’s easier to understand – basically, the bike shed problem repeated. However, every framework fails to cover all cases, and developers forget that frameworks are not made (as they should’ve been) with the target application in mind, but nowadays applications are built around those frameworks.
Because, yes, kids, frameworks are built to support a range of your particular applications, they shouldn’t be there to solve all your web problems. You should build your frameworks, not use the public frameworks that cover the same thing. But this is a lie that people like Microsoft used to sell things like .NET – you only need our framework!!! And when you want to do something outside this framework you’ll go back to basis and implement it in C++, and link the code like this and that, but really, you only need our framework!!!
From time to time a new language springs up. A new set of technologies, and they all do the same thing: „we will be the better C, we’ll be your perfect web solution and you’ll only need us”. They fail slowly, with a very large response time. You recognize them by what they do. They make mandatory syntax choices like „amount of whitespace”. I know people appreciate python for the inability to understand code flow because you’re not sure how many spaces a TAB has. So they invest in mandatory formatting tools that you have to use with their mandatory toolset that you have to install in a very particular way to work with only ONE project at a time because who in their right mind could work on two separate projects? Soon enough, they will transform your code editor into Eclipse, with worse integration and less features.
Nobody really spends time to really fix the most important, broken element of the web. The thing that doesn’t work. The HTTP/HTML+CSS/JS/jQuery/YourFavoriteFramework stack (because, yes, a lot of frameworks either use or reimplement jQuery) is badly defined, and needs to re-arrange itself. What is HTTP, what is content, what is presentation layer, what is application layer and how the application layer should manipulate the content and the presentation. Currently, it’s a mess, because nobody agrees to use the technologies at hand properly.
Programmers are overwhelmed (and Stack Overflow makes them mindless)
I have quite a lot of programmer acquaintances and I see them caught in this race. Searching for the best framework, choosing the best technology (Typescript! No, Pure JavaScript!) then obsessively searching for how to fix their own choice over the internet. It’s probably impossible to write a web application without Stack Overflow. And remember that Stack Overflow is not a documentation site, is an index of issues. Basically, every framework writer doesn’t give a damn about documentation, and wait until silly users use it, then let other people find a solution for them.
Stack Overflow is a good intention gone incredibly bad. There is no longer any need to think about a solution. People suggested to me that not using Stack Overflow is a liability for a project, because they invest in something that already exists. The only problem? Not only Stack Overflow doesn’t have all the proper answers, they are offered by people that don’t know your problem and don’t understand your product. Maybe the problem is elsewhere. Maybe you need to analyze a bit more the problem you’re trying to solve, or to learn more about the framework you’re using before using it.
While Stack Overflow solves the technical problem, it doesn’t solve the moral issue. Stack Overflow is like the dude gives you instructions on building a noose when you ask for advice on how not to fall on the floor from a chair. Very helpful and technically sound detail, but perhaps not your intention. However, Stack Overflow, like Javascript, is pushed automatically, as THE SOLUTION. I know places where people are systematically disallowed to think and forced to use Stack Overflow instead. Almost every web-development course starts with „the way people solve problems: they search for them on Stack Overflow”.
Agile is eating the souls of developers
For technical problems there’s always Stack Overflow. For everything else there’s Agile. Your brand of Agile development methodologies has answers, and those answers will make sure that your team will be able to deliver a mediocre product in a financially justified long time.
I was looking at one point of time over articles raving about how Facebook refused to hire the guy that went on to create Whatsapp. „They threw off the window X billion dollars” the articles said, because they really think that 1+1 really makes two. It doesn’t. If whats-his-name((I really don’t care, I care so little that I even enjoy writing this note here instead of searching on Google his name, or even on my blog for the article I’m referring to)) would’ve been hired by Facebook he would’ve been one of the tens of thousands of developers that are so brain-dead that they can’t even fix the number of notifications the system sends you for the same event. He wouldn’t have been trepanned, no, but instead he would’ve been integrated in a system that wouldn’t allow a single bit of creativity despite clamoring that it strives for every bit of creativity possible.
Agile is a word one starts to hate quite early unless they go into management. Agile makes all things management related easier while, at the same time, it makes the productive herd predictable. Never more productive, mind you, but predictable, the way communism makes people equal by cutting everyone an arm and a leg. It is said that socialism has been conceived to be the first step towards the ideal, communism. I think that capitalism does it better, with Agile being the name of several methodologies that prepare the move to communism (most IT enterprises operating today as oppressive communist outlets, the differentiator being the amount of oppression coming from the higher tiers).
Programmers will jump on the Agile bandwagon quite fast, especially if they have little to no experience whatsoever. Agile allows two very important things: to never answer for your failures and to eat and justify all the resources that the client can invest into the product. It’s perfect for management, and since failure is imminent in the programming world, programmers will also embrace it happily.
Agile methods, however, make sure that the programmer is not allowed to do programming or think too much about how to design or change a technical solution. Everything must be done fast, with only the next two weeks in mind, and you are not allowed to think about a solution, you must delegate thinking to other people. And you have a chain of people that delegate stuff from one to another in a complete mess in which hopefully nobody will ever take responsibility fully for anything.
Everything, of course, justifiable on the timesheet. And it’s important, because the free time of the programmer is important as well.
Mindfulness and new-age bullshit is eating programmers’ lives
When you’re not doing the agile thing at work your practicing mindfulness, you’re reading about mortality and you’re being pounced with fake news on how vaccines kill or how rednecks hate you and want you to die.
The programmers’ caste is full of intelligent, therefore gullible people. And before you laugh at my phrasing, you have to remember that I know what I’m talking about here. Intelligent overworked people are terribly gullible for a simple reason called „Occam’s razor”.
Programmers’ intelect is overloaded with technical requests and very abstract thought. That makes us make some fast decisions, not the brightest, but locally optimized. We don’t remember much information – IT engineers are prone to having a bad memory for things because they have to change technologies and routines often – after 10-15 years of doing that your memory will fail consistently. Therefore, you tend to „optimize locally” and use the information at hand.
That’s why it’s easy to fool programmers into believing anything that they didn’t work with directly. Sure, you can’t lie to them about things they work with or they can verify easy. But, say, throw them a 40 years study on how eating a certain type of food kills you automatically, and they will not be able to combat that – they will automatically become the best defenders for it, even if it’s flawed and full of false data and their own experience tells otherwise.
So programmers are a gullible lot, and they eat any new-age bullshit that comes around, especially if it’s combined with ideals like „being more productive” or „improving their livelihood”. So you will find technical people deeply involved into sects that combine Agile with Mindfulness for a full bag of horse manure to eat.
This is definitely a personal look at the programming world today – coming from a Romanian developer working in Romania. I am not sure how this applies to India or China or Japan. I’m not sure if this applies to the US, UK, Germany, or France. Perhaps it doesn’t. I am just commenting from my direct experience and from the experience of people I know and of people that they know.
But I want to get back to a thing from my first paragraph. The new generation of developers is amazing and other bla-bla like that. It’s not. They have incredibly powerful tools and they use them badly – they misuse them because they generally don’t understand them. Creativity is seen when they reinvent the wheel because they wanted it red, and when they do the same wheel square again, maybe it will work again – and if it doesn’t it’s an artistic statement or something. The new generation of developers is not better nor worse than those before them, but it’s definitely more numerous. That is a statement I can get behind.