Modern software development is cancer(dedoimedo.com)
dedoimedo.com
Modern software development is cancer
http://www.dedoimedo.com/computers/software-development-cancer.html
33 comments
That supposed block diagram of systemd is taken from the Wikipedia article on systemd, where for the past two and a bit years there has been an explanation that it is not a block diagram of systemd.
Calling out some obvious real world issues there, but also kinda shitting all over some good ideas and innovations that have improved things, like containers.
A better title would be "The Mother Of All Moans"
Zzzzz
A better title would be "The Mother Of All Moans"
Zzzzz
Does anyone else find it ironic that the author finishes with "I'm paying, I'm the boss" when all of his examples apart from Windows are free?
Why is he ripping on tabs on top? Seems like a bizarre point to make in an otherwise sound argument.
Yeah would've been better to at least understand why these are supposed to be so awful.
Any other opinions on the systems debacle?
Yes.
Why we do web?
Because lazy sysadmins blocked all but http.
But we still need to communicate.
Let's do udp like streams on top of tcp.
And may be we need to open firewalls still to make A&B communicate without going through a Central stuff C to have no SPOF.
Let's invent STUN a way to trick firewalls into opening an incoming transmission behing a FW.
Our security seems broken.
Indeed.
What do we do?
We put more broken stuff on the web like JWT/OAUTH.
And the STUN bite into your security?
Either ignore it or use a «DPI» proxy.
But it breaks the purpose of secured communications and still does not solves the problem, and breaks TLS.
Wait we have IPSEC in IPv6, no matter that cryptographically it is considered weak, it is by default in windows, PS4, and we have open source server... that are buggy as hell with root rights.
Maybe PGP, SSH, roll your won crypto?
Good idea, no users know how to use them correctly, devops included...
And what about the multiplication of passwords and credentials?
Let's use broken application with root rights and bugs to serve as a wallet that has a good UI, or an good enough application no one can use because of the restrictions?
Money is based on trust. The real harm that can happen to IT is to lose the trust of the customers, hence its value.
Why we do web?
Because lazy sysadmins blocked all but http.
But we still need to communicate.
Let's do udp like streams on top of tcp.
And may be we need to open firewalls still to make A&B communicate without going through a Central stuff C to have no SPOF.
Let's invent STUN a way to trick firewalls into opening an incoming transmission behing a FW.
Our security seems broken.
Indeed.
What do we do?
We put more broken stuff on the web like JWT/OAUTH.
And the STUN bite into your security?
Either ignore it or use a «DPI» proxy.
But it breaks the purpose of secured communications and still does not solves the problem, and breaks TLS.
Wait we have IPSEC in IPv6, no matter that cryptographically it is considered weak, it is by default in windows, PS4, and we have open source server... that are buggy as hell with root rights.
Maybe PGP, SSH, roll your won crypto?
Good idea, no users know how to use them correctly, devops included...
And what about the multiplication of passwords and credentials?
Let's use broken application with root rights and bugs to serve as a wallet that has a good UI, or an good enough application no one can use because of the restrictions?
Money is based on trust. The real harm that can happen to IT is to lose the trust of the customers, hence its value.
[deleted]
Here is what i think is a more balanced view - software devs now have more say/power because they are valuable/rare. More people are working on more complex software, which means a dev background becomes more important to effectively plan/manage it. They are using the power to direct resources to things they care about that were neglected in the past - one of them is surely software quality, because in a "product-driven" company, managers don't care about technical debt and will whip you to work on a shitty codebase regardless of how demotivating it is.
In many cases being more dev-driven has saved time and money for the business in the long run. Even if that didnt happen sometimes, you know what, devs are people too and given the chance to improve their working conditions, they did. I'm personally pretty fucking happy about that.
In many cases being more dev-driven has saved time and money for the business in the long run. Even if that didnt happen sometimes, you know what, devs are people too and given the chance to improve their working conditions, they did. I'm personally pretty fucking happy about that.
i agree with you, but in the fact that fedora uses a experimental software(wayland) is not user friendly
Wayland works pretty well now, it's just lacking software support. And even that's not much of a problem, because you can run X clients inside it with XWayland.
It is not strictly "experimental software" at this point.
Also, Fedora is the "bleeding edge" distribution of Red Hat and is purposefully usen as testing bed for new features, like in this case Wayland.
So if you're using Fedora and don't like Wayland, systemd and other such "experimental software", maybe you should stop using Fedora.
(That's not to say I like Red Hat or what it is doing to the Linux community by forcefully pushing whatever they want to be the default on every Linux distro out there.)
It is not strictly "experimental software" at this point.
Also, Fedora is the "bleeding edge" distribution of Red Hat and is purposefully usen as testing bed for new features, like in this case Wayland.
So if you're using Fedora and don't like Wayland, systemd and other such "experimental software", maybe you should stop using Fedora.
(That's not to say I like Red Hat or what it is doing to the Linux community by forcefully pushing whatever they want to be the default on every Linux distro out there.)
Does Red Hat force Arch or Ubuntu to use systemd or Wayland?
Regarding systemd: I guess I like the systemctl commandline interface, I wasnt around for the alternatives. (if there were any?)
I like that part of systemd. I like the fairly easy to write service files.
I'm not sure how it relates to booting an OS though.
Regarding programming languages: I think we absolutely need better programming languages, they are all still a joke to me. Rust sounded like the perfect language but then we all know what happened, same as c++. Personally I'm always surprised when somebody makes a new language and doesn't include a debugger or intellisense. It must be only me but it just shows a general disrespect or unawareness for me, the user you want to attract. You actually expect me to be productive with your language without them? C'mon.
> Essentially, people who write code are just glorified digital welders
Yep, that's actually what I think as well. Most programmers just don't think about the higher end goal, usability in the greater context of the OS or interaction design, simplicity, or even whether alternatives exist. They just see a job to do and they do it - often badly actually.
Honestly, it's not just about software development though but that's what I know best. E.g the first Apple iPhone comes to mind: Finally a product that was truly just good. In basically every single way, designed for the user. It was beautiful. Github comes to mind, it just worked. Immediately and it solved a need. Before we had sourceforge. Facebook was similar in my opinion, although the situation is more complex there.
> What should have been done - whip the developers into submission, force them to create a backward-compatible framework that supports everything, and make backend changes that do not affect the user in any way. That's how product-driven development is done
Haha, somebody speaks from experience. Yeah that's actually how it is done in enterprise development in my limited experience. You just have to be backwards compatible, end of story. Don't care how it's done, just do it.
> Why did smartphones succeed? Because they allowed a common person to do the same things they did on the PC cheaper and faster
Yep, and also because it allowed the common person to be connected while not having to sit hunched over at a PC. The internet and the PC are clearly great things but people want to live their lives and be connected. With smartphones they get to have both. Personally I will never agree with these weird "wow look at how sad all those people are, staring at their smartphones". I remind myself of the pictures of people in the 1900s where everyone at the train station was hunched over their newspapers.
Regarding programming languages: I think we absolutely need better programming languages, they are all still a joke to me. Rust sounded like the perfect language but then we all know what happened, same as c++. Personally I'm always surprised when somebody makes a new language and doesn't include a debugger or intellisense. It must be only me but it just shows a general disrespect or unawareness for me, the user you want to attract. You actually expect me to be productive with your language without them? C'mon.
> Essentially, people who write code are just glorified digital welders
Yep, that's actually what I think as well. Most programmers just don't think about the higher end goal, usability in the greater context of the OS or interaction design, simplicity, or even whether alternatives exist. They just see a job to do and they do it - often badly actually.
Honestly, it's not just about software development though but that's what I know best. E.g the first Apple iPhone comes to mind: Finally a product that was truly just good. In basically every single way, designed for the user. It was beautiful. Github comes to mind, it just worked. Immediately and it solved a need. Before we had sourceforge. Facebook was similar in my opinion, although the situation is more complex there.
> What should have been done - whip the developers into submission, force them to create a backward-compatible framework that supports everything, and make backend changes that do not affect the user in any way. That's how product-driven development is done
Haha, somebody speaks from experience. Yeah that's actually how it is done in enterprise development in my limited experience. You just have to be backwards compatible, end of story. Don't care how it's done, just do it.
> Why did smartphones succeed? Because they allowed a common person to do the same things they did on the PC cheaper and faster
Yep, and also because it allowed the common person to be connected while not having to sit hunched over at a PC. The internet and the PC are clearly great things but people want to live their lives and be connected. With smartphones they get to have both. Personally I will never agree with these weird "wow look at how sad all those people are, staring at their smartphones". I remind myself of the pictures of people in the 1900s where everyone at the train station was hunched over their newspapers.
> They will destroy the old framework, put in place a new and undefined one, 99% of all extensions will die, and even more people will abandon the browser, because add-ons are the chief reason why people stick with Firefox.
The WebExtension API is "undefined"?
1. https://developer.mozilla.org/en-US/Add-ons/WebExtensions 2. https://developer.chrome.com/extensions/api_index 3. https://arewewebextensionsyet.com/
To name a few sources.
The WebExtension API is "undefined"?
1. https://developer.mozilla.org/en-US/Add-ons/WebExtensions 2. https://developer.chrome.com/extensions/api_index 3. https://arewewebextensionsyet.com/
To name a few sources.
I'm going to give the benefit of the doubt and say this article is designed to be from the point of view of the user and to imply that you simply shouldn't get carried away with new systems, because they don't provide inherant value.
However, the author doesn't write that clearly (except maybe right at the end), and instead comes across as "I don't get the value of this, so I'm going to claim it has none." PulseAudio gave me a ton - individual volument control for aplications, routing different devices to different applications easily, routing audio over a network, etc... Likewise, most of the examples provide some value. Everyone just has hatred for it because Ubuntu rolled it out too early when it was still not very stable, and people still remember it as this buggy problematic thing, even though it's been rock-solid for years, in my experience.
The Firefox example is the most stupid - they are moving to a shared standard with other browers precicely to get away from the issue of every browser having their own standard.
To me, this just reads as another "Wah, things are changing and I want everything to stay the same". Suck it up. Yes, often developers make or use new things just because we like learning and exploring. That doesn't mean new things can't do something it would be excessively hard to do in the old thing. It's about weighing up the cost/reward.
Again, I'm probably being too hard on the article - it does kind of make this point at the end, but in my opinion ends up making the point of "fear new!" instead of the more nuanced point of "address the cost to your user of using something new before using it" that I think it's actually trying to make.
However, the author doesn't write that clearly (except maybe right at the end), and instead comes across as "I don't get the value of this, so I'm going to claim it has none." PulseAudio gave me a ton - individual volument control for aplications, routing different devices to different applications easily, routing audio over a network, etc... Likewise, most of the examples provide some value. Everyone just has hatred for it because Ubuntu rolled it out too early when it was still not very stable, and people still remember it as this buggy problematic thing, even though it's been rock-solid for years, in my experience.
The Firefox example is the most stupid - they are moving to a shared standard with other browers precicely to get away from the issue of every browser having their own standard.
To me, this just reads as another "Wah, things are changing and I want everything to stay the same". Suck it up. Yes, often developers make or use new things just because we like learning and exploring. That doesn't mean new things can't do something it would be excessively hard to do in the old thing. It's about weighing up the cost/reward.
Again, I'm probably being too hard on the article - it does kind of make this point at the end, but in my opinion ends up making the point of "fear new!" instead of the more nuanced point of "address the cost to your user of using something new before using it" that I think it's actually trying to make.
You're not being too hard on the article. The hatred for Wayland is especially pointless. The author claims that Wayland "has nothing to do with the vast industry out there" because servers don't run graphically, completely ignorant of the embedded Linux market (where the "monitor + keyboard + mouse" X paradigm is most broken) and other major driving forces behind Wayland.
Yes modern software libraries are inconvenient because they change a lot and constantly break. But that's not a new thing, it's been a problem as long as software libraries have existed.
Yes modern software libraries are inconvenient because they change a lot and constantly break. But that's not a new thing, it's been a problem as long as software libraries have existed.
Off topic but I'm really not sure what wayland is supposed to give me that I don't already have? Do you have some insights here?
Personally, my Linux laptop is finally rock solid graphically after a decade of pain and the idea of replacing a stack that took so long to mature is unappealing to me in the extreme.
Personally, my Linux laptop is finally rock solid graphically after a decade of pain and the idea of replacing a stack that took so long to mature is unappealing to me in the extreme.
From what I gather (and I'm no expert) the value of Wayland is that it is a model that matches what we are actually doing with our systems now.
X is a giant system that we abuse a tiny portion of to use in a way no one planned for it to get used - X was designed when the assumption was that you'd be a thin client on the end of a mainframe, which clearly doesn't map well to modern usage.
X, for example, allows any window to look at the contents of other windows. Useful for you screenshot program, security flaw for most applications.
Backwards compatibility has obvious benefits, but at the same time, there comes a point at which you are dragging around so much cruft no one is really using any more it's better to throw it away. The author seems to think X isn't beyond that line (or, as the article paints it - anything he uses is), but from what I've seen, Wayland seems like a smart idea.
Also, there is a compatability layer which means that most things should just work (except, as hinted at above, things like screenshot applications, which is an intentional break as that should require more privilages).
X is a giant system that we abuse a tiny portion of to use in a way no one planned for it to get used - X was designed when the assumption was that you'd be a thin client on the end of a mainframe, which clearly doesn't map well to modern usage.
X, for example, allows any window to look at the contents of other windows. Useful for you screenshot program, security flaw for most applications.
Backwards compatibility has obvious benefits, but at the same time, there comes a point at which you are dragging around so much cruft no one is really using any more it's better to throw it away. The author seems to think X isn't beyond that line (or, as the article paints it - anything he uses is), but from what I've seen, Wayland seems like a smart idea.
Also, there is a compatability layer which means that most things should just work (except, as hinted at above, things like screenshot applications, which is an intentional break as that should require more privilages).
Well, I still don't get it... How I'm using my system now works perfectly, finally, and I'm sure I probably fit into the 'modern usage' bracket (hidpi, multiple monitors, USB-c projectors etc)...
That security improvement would be good, surely we can add this to X though?
Adding that bit of security isn't enough to sell me on replacing such an entrenched bit of our daily lives -- for me at least..
We are stable and it's pretty and fast enough. Progress is always good, but it has to bring something to the table other than a transparent replacement of what we already have with new code. How many million hours has X run this month?
I sound so uncool to myself here, I really like shiny new tech but fucking with something so important for reasons that no one really seems to agree on seems like a bad move to me.
Maybe someone else has some justification for is that we're missing and can enlighten us?
That security improvement would be good, surely we can add this to X though?
Adding that bit of security isn't enough to sell me on replacing such an entrenched bit of our daily lives -- for me at least..
We are stable and it's pretty and fast enough. Progress is always good, but it has to bring something to the table other than a transparent replacement of what we already have with new code. How many million hours has X run this month?
I sound so uncool to myself here, I really like shiny new tech but fucking with something so important for reasons that no one really seems to agree on seems like a bad move to me.
Maybe someone else has some justification for is that we're missing and can enlighten us?
Sure, but there is cost to maintaining X. If Wayland is smaller and can achieve the same thing more effectively (more secure, faster, better features for contained applications, etc...), then that is preferable.
Yes, there is a cost to you, as a user, in switching. The benefits of Wayland don't really filter to you as a user in a perceivable way, but if it means that the applications you use are developed more quickly and end up being more efficient and secure, that's a benefit. The reality is that Wayland will be something you use, eventually, because people will support it (because it's better for them to target than X), and so eventually you will need it for something you want to use.
That's why I call it a trade off. Right now, would I develop an application only on Wayland? Probably not. In the future, that'll shift and eventually tip - at some point the cost of developing on X will simply be that much higher it won't be worth it.
I understand users being risk-adverse and not wanting to change, but the argument of "if it ain't broke, don't fix it" has historically always lost in the end. It's rare for a system to have no room for improvement, and X is definitely not such a system.
As to, why not do it in X - because X does want to be backwards compatible and stable for it's users. Secuity that breaks fundamental capabilities applications expect can't maintain that. Ripping out the cruft breaks existing stuff. Wayland aims to replace or remove 99% of X, so why work from a basis you are going to use essentially none of?
Yes, there is a cost to you, as a user, in switching. The benefits of Wayland don't really filter to you as a user in a perceivable way, but if it means that the applications you use are developed more quickly and end up being more efficient and secure, that's a benefit. The reality is that Wayland will be something you use, eventually, because people will support it (because it's better for them to target than X), and so eventually you will need it for something you want to use.
That's why I call it a trade off. Right now, would I develop an application only on Wayland? Probably not. In the future, that'll shift and eventually tip - at some point the cost of developing on X will simply be that much higher it won't be worth it.
I understand users being risk-adverse and not wanting to change, but the argument of "if it ain't broke, don't fix it" has historically always lost in the end. It's rare for a system to have no room for improvement, and X is definitely not such a system.
As to, why not do it in X - because X does want to be backwards compatible and stable for it's users. Secuity that breaks fundamental capabilities applications expect can't maintain that. Ripping out the cruft breaks existing stuff. Wayland aims to replace or remove 99% of X, so why work from a basis you are going to use essentially none of?
Alain Ducasse recommends allowing a hot take fresh off the pan to cool for half as long as it's been cooked, so I guess I'll open this back up in about two and a half minutes.
Not a fan of the "X is cancer" framing.
The valid point buried in all this is that software seems to have a shark-like nature; it's either moving forward or "dead". There is a lot of change for the sake of change, and everyone who's got comfortable in a niche really hates forced change.
This is understandable in paid software when you only get paid for new features. It's less obvious in Free software unless you really do consider reputation-as-currency.
The valid point buried in all this is that software seems to have a shark-like nature; it's either moving forward or "dead". There is a lot of change for the sake of change, and everyone who's got comfortable in a niche really hates forced change.
This is understandable in paid software when you only get paid for new features. It's less obvious in Free software unless you really do consider reputation-as-currency.
This articulates a lot of what I've felt in recent years.
Here's this syntactically ugly new feature that allows you to save a few lines of code and obfuscates meaning from lesser mortals!
Hey let's dispense with those tired old curly brackets and use indentation instead!
Let's make a simple scripting language, and then extend it so that it becomes as complex and indecipherable as C++!
Hey wouldn't it be a great idea to have a server that runs JavaScript!
Try staying up to date when you have to work with a complex suite that tries to run everywhere and jumps on every passing bandwagon. You will then understand why the 'stuff changes, suck it up' argument isn't always valid. At times these days I try to get something done and discover the tools I have at my disposal are just poorly written crap on top of incompatible crap on top of indecipherable crap.
No I don't want to use your stupid Jupyter notebook! Just give me the frigging source and a readme!
So much stupid and unnecessary complication. I wish I'd just learnt C.
Here's this syntactically ugly new feature that allows you to save a few lines of code and obfuscates meaning from lesser mortals!
Hey let's dispense with those tired old curly brackets and use indentation instead!
Let's make a simple scripting language, and then extend it so that it becomes as complex and indecipherable as C++!
Hey wouldn't it be a great idea to have a server that runs JavaScript!
Try staying up to date when you have to work with a complex suite that tries to run everywhere and jumps on every passing bandwagon. You will then understand why the 'stuff changes, suck it up' argument isn't always valid. At times these days I try to get something done and discover the tools I have at my disposal are just poorly written crap on top of incompatible crap on top of indecipherable crap.
No I don't want to use your stupid Jupyter notebook! Just give me the frigging source and a readme!
So much stupid and unnecessary complication. I wish I'd just learnt C.
I don't understand your point at all. Python has been around since the early 90s, and it's purpose was to make development faster. That has a tangible benefit to consumers: Applications get developed significantly faster. C is powerful, it's also incredibly slow to prototype with.
> Hey wouldn't it be a great idea to have a server that runs JavaScript!
Who cares?
> So much stupid and unnecessary complication. I wish I'd just learnt C.
Oh the irony...
> Hey wouldn't it be a great idea to have a server that runs JavaScript!
Who cares?
> So much stupid and unnecessary complication. I wish I'd just learnt C.
Oh the irony...
Change for changes' sake is partly what frustrates me. Indents are such a stupid idea IMHO. What was wrong with curly braces?! Certainly Python sticks out in this regard. I also think Python has evolved beyond its initial premise to the point where it has acquired many of the features it was trying to escape from at its inception. When I see all the ugly cruft in the average large Python app/library I start to question.
As a developer I care about these things when they pollute my work with their crappiness.. Be that in concept or execution.
I'm well aware of C's limitations. My point is that the types of environments in which C prevails are perhaps a little less prone to the latest trendy fad.
As a developer I care about these things when they pollute my work with their crappiness.. Be that in concept or execution.
I'm well aware of C's limitations. My point is that the types of environments in which C prevails are perhaps a little less prone to the latest trendy fad.
Do you indent your code when you use braces?
I don't find Python all that difficult to read - and I primarily deal with Javascript and C#.
this {
foo: bar;
}
If so - how is scanning for {} any different than scanning for indentation level? this
foo: bar;
You'd have a valid point if you wrote code as thus: this {
foo: bar;
}
or this
{
foo: bar;
}
If you're using indentation and curly braces - one of the two isn't necessary. In my opinion, indentation alone is more scannable for code blocks than curly braces alone. If I were to drop one - it would be curly braces.I don't find Python all that difficult to read - and I primarily deal with Javascript and C#.
I prefer the last.
Partly it's not being able to just drop a brace in the right place to make something compile when hacking that bothers me - ohh no, in Python you have to make sure every damn block is aligned correctly.. For a quick and dirty scripting language it sure is pedantic!
Partly it's not being able to just drop a brace in the right place to make something compile when hacking that bothers me - ohh no, in Python you have to make sure every damn block is aligned correctly.. For a quick and dirty scripting language it sure is pedantic!
> This articulates a lot of what I've felt in recent years.
> Certainly Python sticks out in this regard. I also think Python has evolved beyond its initial premise.
So with recent years you meant 1991. Got it, I got confused for a moment.
That aside, I agree with you, but your own words give ample evidence that this trend is, by no imaginable means, "recent". It's inherent to software.
BTW, my favorite language is Python.
> Certainly Python sticks out in this regard. I also think Python has evolved beyond its initial premise.
So with recent years you meant 1991. Got it, I got confused for a moment.
That aside, I agree with you, but your own words give ample evidence that this trend is, by no imaginable means, "recent". It's inherent to software.
BTW, my favorite language is Python.
Sorry, but how would C solve your problems? If that's the only thing holding you back, go for it, you can learn it in a few weeks.
You won't be able to magically write a data analysis engine or high-concurrency server better than the tools you are complaining about though, in any reasonable amount of time. I think you, like the author, are severely underestimating the gigantic clusterfuck that is writing programs today, and how that would not be solved by merely avoiding writing new code.
You won't be able to magically write a data analysis engine or high-concurrency server better than the tools you are complaining about though, in any reasonable amount of time. I think you, like the author, are severely underestimating the gigantic clusterfuck that is writing programs today, and how that would not be solved by merely avoiding writing new code.
I have done bits of C/C++ and enjoyed it. Thing is I'm more than a decade invested now in geo so a few weeks isn't really enough to reach a similar level. If I were to start all over again I might think about embedded/EE hence C.
My post was only half serious really, but I do get frustrated that there seems to be a 'because we can' attitude prevalent, and you just end up with more complexity. I used to thrive on geeking out but these days I just want to get stuff built. More and more I'm finding the tech working against me.
My post was only half serious really, but I do get frustrated that there seems to be a 'because we can' attitude prevalent, and you just end up with more complexity. I used to thrive on geeking out but these days I just want to get stuff built. More and more I'm finding the tech working against me.
In a similar vein to "focus on one db and truly exploid its features" (vs an orm); I think targeting a systemd-aimed architecture/deployment can actually be quite neat and powerful.
(I don't use it on desktop, but server based it can be quite neat (imo/ime) :-) )
Being that, for some situations, I truly do believe systemd is better than old school init (I think similar for s6/runit/etc too (ie they're better than sysvinit))
(I don't use it on desktop, but server based it can be quite neat (imo/ime) :-) )
Being that, for some situations, I truly do believe systemd is better than old school init (I think similar for s6/runit/etc too (ie they're better than sysvinit))