The whole point is, there is no reason to require a programmer to know them. That is an arbitrary choice we have made.
We could make a different choice, and not require a programmer to know these things. They could do everything just as well without knowing this, if we let them.
When I was travelling through Italy, I learnt a phrase from programmers there, "If my mother had wheels, she would have been a bike" - and it's a criticism of hypothetical situations like your answer above.
Saying "This is arbitrary if we made a different choice things would be different" is a total meaningless statement because you just move the bar and then say if the bar is moved things are different.
My argument is that eventually all implementations are embedded in reality, if not /usr/local/bin and $PATH then some other abstraction that is equally arbitrary - but in the real world, the one we live in, we have /usr/local/bin, $PATH and a bunch of other "arbitrary" lines that have to be somewhere because without these lines (or some lines) there is nothing. And you havetoknowthem, whatever they are.
Because you know what happens if you don't know them? You end up with people writing blog posts about how difficult programming is, ranting they cant install ruby or pip or node.js, like the article above. You have to learn the underlying system, whatever it is. In this case, it's /usr/local/bin and $PATH.
I think you're not arguing that you shouldn't know the underlying system (correct me if I'm wrong) but you're more saying that these particular abstractions are inconsistent or distasteful - if that's the case, let me assure you that no implementation is perfect, and programmers for nearly 100 years now have been trying to come up with the perfect abstraction that requires no knowledge below, but in reality, it never works, because theres always exceptions, or the abstraction is not flexible enough to apply generally enough to be useful, thats like the two forces that push and pull the argument both ways.
I've come to learn that you must just learn the underlying system, because you'll be able to diagnose better. To that end, you must learn sysadmin, you must know $PATH and you must know the underlying system. Go and have a look at the programmer competency matrix - this stuff is in there
What I am saying is, as soon as someone new to programming points out, entirely correctly, that the tools we use are weird, obscure and difficult to use for no apparent reason, programmers will scream in rage that no, they are not, and by the way, you are stupid for saying it, you clearly have no idea what you are doing and you will never be a programmer.
As is happening everywhere in this very thread.
I am saying that this is weird, toxic and must stop. We must be able to admit that yes, the tools we use are kind of bad. We must admit that we could do better. Otherwise nothing will ever change, and we will keep using stupidly broken tools until the end of days, while patting ourselves on the back for being clever enough to use them.
> programmers will scream in rage that no, they are not, and by the way, you are stupid for saying it, you clearly have no idea what you are doing and you will never be a programmer.
Nobody has said this to you in this thread, and the fact that you're acting like it is the only toxic thing here. This is called a straw-man logical fallacy, you misrepresent my argument so it makes it easier for you to attack. Nobody has said this to you, that part is all in your head.
I'm saying the tools are not weird if you understand them, and how they fit as a cohesive whole. I'm saying they just look weird to you, because you don't yet understand them. Can we do better? Absolutely, I'm all for better tools. But if the original poster wants to install pip and ruby and nodejs then knowledge of system paths is mandatory - because this is what they are trying to do.
In my answers above, I have named several programming languages, several operating systems, discussed my commercial experience and then talked about the rationale behind my logic.
You have done nothing but turn these into personal attacks against yourself, not discussing systems or operating systems, (not even naming one!) but always complaining about people calling you stupid or how you're the victim. The only person that has used the word stupid in this thread is you. You are a toxic narcissist, and I chose not to engage with you.
> I'm saying the tools are not weird if you understand them
No, they are still weird. They are only not weird if you've become accustomed to the weirdness.
I primarily develop on Windows, and when I come to Linux to work on things I am astonished to find that Linux developers think nothing of using upwards of half a dozen different languages to build one thing. CMake, autoconf, shell, and python all being used to build a single C++ program is weird and unnecessary. If you don't think so I submit you've merely become accustomed to doing things in this incredibly weird way!
PS: Windows has its own developer tendencies that are weird and unnecessary, but I will at least readily admit that about them.
I think a lot of this thread is people’s biases from what they are used to. I’m one of those guys who started on the command line and lived on the command line most of his life. I couldn’t imagine a more productive environment! I consider a bunch of xterms running vi to be the pinnacle of IDEs. But I did two brief stints at Windows shops and just couldn’t get really productive. The guy next to me who was scared of the command line and never went outside Visual Studio? He wasn’t stupid, he just had a different lineage and got accustomed to a different environment and workflow. One is not inherently better than the other.
That said, if you are a modern web developer, you just have to understand the command line. You have to know what /usr/local/bin is. You have to know how to install your toolchain. It’s inconvenient, but it’s table stakes. I don’t think it’s reasonable to say “Hey! I’m used to GUIs so people programming on the command line are wrong and I shouldn’t need to know about /usr/local/bin“
“Just” to program stuff for the web? Web development is a complicated and amazing feat of engineering! The fact that you can write some code on your machine to make any pretty graphic and maze of pages you want and it will run in this thing we call a browser that pretty much anyone in the world can also run even if they are on Linux, windows, android, iOS, or any other number operating systems not to mention hardware! Think of all the layers of abstraction and code that is necessary to have millions of combinations of hardware + software all show the same thing! It’s amazing how simple it is to do web development! The fact that it is doable to set up a website in an afternoon that is accessible all over the world is ASTONISHING.
This delusion that the web is an amazing feat of engineering is frankly astonishing to me. It is constantly broken and basically entirely relies on a single browser engine controlled entirely by one of the largest organizations on the planet. It has well known security footguns at every turn.
It isn't even unprecedented. Way back in the 90s Another World used a bytecode VM for portability between hardware platforms. It ran on a whole lot of them and had input, graphics, and sound. Before that Infocom used a VM for its text adventures that was ported to many platforms. P-Code existed before that. The modern web browser, and web code, is a jankier, significantly more complicated, design-by-intertia/committee/def-facto-monopoly hybrid monstrosity. It's a document viewer with incoherent bits glued on until it kinda almost works like an application platform.
> Think of all the layers of abstraction and code that is necessary to have millions of combinations of hardware + software all show the same thing!
Not that f'ing many if you didn't engineer your VM like a blind monkey! Cross platform VMs are not a new idea, at all, and that's essentially what the modern web is, only it's the most Frankenstein version of that idea ever conceived.
I think davorak is right, malux85 never says lack of understanding implies stupidity. I'd go even further. I don't read malux85's comment as an attack on your understanding personally. I read it as referring to people like the blog post author, who clearly don't understand the basics of the tools they're complaining about.
No one is screaming in rage about anything here. We do tend to get frustrated hearing complaints from people that are unwilling to take even the smallest amount of time to learn before complaining about the state of things.
I'd like to put one of your comments in a different but maybe enlightening context:
What I am saying is, as soon as someone new to gardening points out, entirely correctly, that the tools we use are weird, obscure and difficult to use for no apparent reason, gardeners will scream in rage that no, they are not, and by the way, you are stupid for saying it, you clearly have no idea what you are doing and you will never be a gardener.
Now imagine that gardeners all use chainsaws. They are very proud of how skilled they are at their chainsaw usage.
A new person comes in, and asks, why on earth do you all use chainsaws for this? Wouldn't it be easier to use more appropriate tools?
And the gardeners immediately call him clueless, make fun of him for not being able to handle a chainsaw, and tell him he will never be a gardener if he can't even figure out how to use a chainsaw.
A new person has no grasp on what constitutes a "more appropriate tool." People with zero experience don't get to dictate what tools people who know what they're doing should use.
Can you imagine if a layman walked into a mechanic's shop off the street and started trying to tell the workers there the same thing? Or a bakery?
And they'd be right to, because actually the situation is inverted. Saying a useful tool is unnecessary and a symptom of the fact that all tools are broken is the sort of thing the person holding the chainsaw would say, not the people who understand why a whole range of tools exist.
Except the person you're talking to is a gardener, who uses a chainsaw frequently, and is saying that indeed the beginner is right to point out that we should definitely be using a better tool than a chainsaw.
And then people shout them down because they've apparently become so accustomed to using a chainsaw that they honestly can't imagine a better way.
Except the Gardener is completely and totally wrong in this case. This assumes that no one else has tried something different. There have been an massive number of attempts at something better. The result? They have all failed and developers continue to use the command line. You can write a ton of type of apps with visual tools but almost universally it's sucked or only valuable for toy apps.
Examples that I have personal experience with:
* VB6
* Frontpage
* Delphi
* Access
* Excel
* Hell even storyboards in iOS based Dev
* Blueprints in Unreal Engine
* etc...
The same results, they work for non-programmers/non-professional programmers. Almost without question we have seen that text based programming on a more or less standard *nix based OS or text based programming on a Windows OS are the two ways that are the most effective for engineering of software. The programmers complaining about the tooling we use? Sure we should continue to improve that tooling but that doesn't mean scrapping the basic fundamentals. The installer should ask to modify the $PATH and then do that. There that solves that issue and doesn't throw out 50+ years of science and research and experience on the best way to engineer software.
> What I am saying is, as soon as someone new to programming points out, entirely correctly, that the tools we use are weird, obscure and difficult to use for no apparent reason, programmers will scream in rage that no, they are not, and by the way, you are stupid for saying it, you clearly have no idea what you are doing and you will never be a programmer.
If you are a beginner in some topic (any topic), and encounter a group of people who are proficient in that thing, and you disagree with them about some aspect of it, the options are broadly that 1. you've hit some great insight, or 2. you don't understand, but the odds favor option 2. If, however, you're confident that you've hit onto something better than everyone else, let me echo others and suggest that you should try to implement it; either you will succeed and show the industry the error of their ways, or you'll find out why things are the way they are, and both of those are good outcomes.
Except that many programmers, including parent, happen to agree that with what the beginner is saying. That it is so obviously true that even a beginner can see it is evidence that the people who can't see it have conflated the way things are with the way things need to be.
"absolutely nothing whatsoever to do with programming. Nothing. Zero. Zilch. It is completely superfluous knowledge"
Were indeed critical components to all of these systems, and organisations, and that it's not a big ask to require a programmer to know them.
Also, on what authority do you decide what is programming and what isn't?