4 ms·
We also worship simplicity. I like to think of things as quadrants. Imagine a 2x2 matrix with columns and rows titled as such: [simple, complex] [easy, complica
by GorgeRonde 8y ago
We also worship simplicity. I like to think of things as quadrants. Imagine a 2x2 matrix with columns and rows titled as such: [simple, complex] [easy, complicated].
They are quite not the same since one dimension denotes the complexity of the thing whereas the other denotes the complexity of the act of building, maintaining and evolving the thing in question.
We should always strive for easiness, however complexity shouldn't always be avoided. Quite to the contrary, staying away from complexity locally often leads to that complexity being sprayed on a global level, and that's when it turns into something complicated.
I have too often seen "complex" code, i.e. code that works on "complicated" datastructures such as trees and graphs be discarded in favor of solving the problem "simply" and directly, which means by disseminating the problem's logic accross the codebase and with multiple, gradual bugfixes because the problem being intrasequely complex is underspecified and cannot be tested in isolation of the system.
Of course the same people that are baffled by "complex code" and think simplicity sums up to looking away and not anticipating future needs, are the same who advocate it. Actually, they like good design and typography, focus more on indentation than datastructures and generally have a taste for nitpicking with as many subtle details as they can come up with, not seeing past the filter of their own opinion about what simplicity and complexity entail, and of course that makes the social process of building code a slow nightmare that does not converge.
I sound harsh I know. What I want to point out here is that by denigrating complexity in favor of simplicy, we may get rid of medieval savants, but we open the door to plain idiots disguised as zen masters.
- pdimitar 8y agoYou actually sound diplomatic. Wanna hear something harsh? Most programmers I ever worked with for 17 years of career do not deserve the right to touch a keyboard; they should work on farms. That would be [somewhat] harsh. You are on point with everything you said. Ego, strong opinion enabled by a secure job position where no amount of professional failure will ever get you booted (because you are isolated from the business outcomes), echo chambers of fellow bros who think like you, and plain old fear of change is what drives most humans -- and programmers aren't an exception. IMO it's high time some formal certification and legal liability to be introduced to our profession. Also, pick 5 imperative and 5 functional languages and make them "official". People love their religious language wars but it has to stop at some point because billions of bucks are being wasted on 25-year old egos.
- GorgeRonde 8y agoKeeping on being diplomatic, I don't think it's an ego problem per se: instead, the egos fight over pointless things such as coding style. Don't get me wrong, I've nothing against adopting a coding style nor being told I misindented code by mistake. I'm fine with this, this is teamwork. But when the coding style keeps evolving, is not the same depending on the code base, when you have to take into account who your reviewer is in order to know which style to adopt, and when in addition you have very "diplomatic" ways (or, to put it more bluntly, when you have a dominated and introverted personality) you just end up being a punching ball for the whole team and serve as an indirection layer so that the biggest egos in the team can fight each other through proxy wars. As for a formal certification, here in France "engineer" is a state-certified status. There is no legal liability I can think of (there might be some when you're engineering bridges, but I have not heard of something similar concerning software). To be frank, this status is bullshit. At work I'm using a payment API from a local shop. The CTO comes from a top rated school (the french Calltech), yet their API does not ensure the reception of async notifications like if communication failures wasn't the crucial characteristic of a computer network. In addition to that, they are unable to provide a dedicated infrastructure to their big customers and ended up implementing a rate-limiting system on top of their absolutely business critical payment API (and boasting about it in blog posts). Last time I checked my company experienced a 80% drop rate in payments due to errors or the rate-limit being exceeded. I say "last time" because I haven't been to work in months, my sick leave being extend month after month by my psychiatrist. I worked a lot these past couple years. In 2017, I think I averaged 70h per week. Actually, I have no idea. I just know I worked a lot of 80/90h long weeks that year. What's certain is that my hourly pay rate dropped under the legal minimum, which isn't surprising since I have the lowest salary in the team (a little less than 40k€/y). Everybody comes to me to fix their shitty problems, and when I push PRs to avoid them code aesthetics and "simplification" takes over in the code review and it takes foreeeever, and I'm never guarded against bug i may have introduced, only indentation and inessential shit like that, so I have to review my code on my own, and these PR never see the light of day and then I'm suddenly considered the master of unfinished work, almost in a self-satisfied tone by people who work almost twice as less as I do and earn almost twice as much. Also I'm not allowed to work remotely (but everybody else in the team is) and I have to be at work before everybody else, and the fact I sometimes come two hours earlier is never taken into account. Oh and my sleep and medication is monitored and I have been subject to very condescending and just borderline illegal remarks about it. I'm just insanely butthurt to be honest. I could just as well start complaining about being "talked to like a dog" (these are not my words, but what two persons independently told me about the way I was being treated in the team). And you know what, they are all very concerned about keeping the project's complexity low. Coming from a Clojure background I exactly know what this means and what's wrong with their approach, i.e. they see complexity as opposed to simplicity, but what's pertinent is to actually oppose it to easiness. See Rich Hickey (Clojure's inventor) "Simple made Easy" seminal talk for an in-depth overview of software engineering from this perspective. To give a concrete example of what this misunderstanding leads to, let me compare the simplicity of markdown, praised by many minimalism hipsters and whose main force is to make us forget its limitations, fascinated as we are by its fixed-width typographical beauty, VS the simplicity of acknowledging that mixing text with control characters (the old-fashioned unix way) is not a sound way to build complex things at a large scale. Anyway, since then, I've become extremely wary of those who advocate simplicity just like an early or "private" christian would dislike Church (or what it has become). I'm now getting back to working on extending Clojure's compiler to experiment with the idea of integrating the notion of IDE and editor directly at the language level, but deep down I'm not sure I can continue with this kind of bullshit career, where ability to handle complexity is not just disregarded, but is punished.