Why can't I write code inside my browser?
tomcritchlow.com
tomcritchlow.com
He even goes on to quote himself (sigh) as a proof of what he proposes.
Look, maybe someone just explained it badly to you, and you should look it up for yourself. However, if the command line looks scary to you... wait until you read bad documentation :)
My point is: yes, programming is awesome. But just like it's hard to become a good musician if you shy away from sheet music, programming is hard if you shy away from command line and a little web searching to know what $PATH is.
If that is your mindset, then maybe it's just not for you. There's still plenty of awesome things you can do in IT without ever touching code, though. Machine learning is accessible from nice UIs now. I used that, it's great.
As pointed out by others, there's also plenty of websites where you can either try things, or build complete projects. AWS, for one, has a fully browser-based editor for Lambda. Look it up, it might be the solution for you.
What they don't understand is that tools which aim to make coding easy or automatic don't add any value if the person using the tool doesn't understand all the nuances in the underlying logic which is being produced. Fully understanding the distinction between client and server is one such nuance.
When it comes to coding, the bottleneck is essentially never the tool, it's almost always the person.
I don't think I've ever met anyone who was naturally good at thinking logically. Working close to the hardware and then working your way up the stack is one of the best ways to develop the required level of nuanced logical thinking.
The problem with no-code, low-code or tools which try to move away from the underlying reality is that they don't train your logical thinking skills.
In my view, tools should help people develop into better programmers, not give an illusion of ease and mastery when it is not deserved.
I've heard, though, that declarative programming (prolog, haskell etc) was a LOT easier for people who aren't trained in imperative programming. Whereas those who are actually have a hard time picking it up... As was my experience.
@op have a look for declarative programming. You might like prolog :)
Most developers never learned proper blackboxing/state encapsulation.
It's impossible to create truly modular code without colocating related logic and state.
I remember my final breakthrough in grokking Prolog was realizing that the engine hides a glorified DFS that walks a graph of concepts for you. Suddenly, all the reasoning and non-deterministic features wasn't mysterious anymore, and performance-related implications became clear. Similarly, for people who struggle with async, it's beneficial to understand that async means somebody hid an event loop from you.
Of course the solution is to learn a lot on the low level details of the compilers for these languages, at which point it’s not easier than imperative coding.
I spend a lot of my day working in a 'no code' visual programming environment and the difference between the solutions created by the people who know how to program and those who don't know how to program is massive. Those who don't know how to program tend to fail at coming up with non-trivial solutions and are not really able to debug the 'code' when it fails. They also always come up with the most 'brute force' solutions and can't really reason around performance.
Familiarity with this type of thinking is visible not just in computer-related endeavors, but often in everyday life matters as well.
I think there’s a lot of misunderstanding of complexity by newcomers of programming. A lot of people are pointing to the current state of the Unix command line as an example of being overly complex and bad. And certainly you could point to this or that command line tool and say that could be better designed and you’d probably be right. But all the command line tools we are familiar with weren’t designed in one go, they grew over time to fill needs. It could not have been done in one go, the different needs of different users and the overlap and disconnect is too great to know all beforehand. And the same thing would happen if we started from scratch today. We would design something we think is great and multipurpose only to realize it doesn’t quite fit this new requirement so we will have to add an edge case. Maybe we could do better than the current standard, but it won’t be perfect, there will always be corner cases and competing requirements.
It's the first leap and as you make it you can manage the emotions and the growth will happen.
Neither can most programmers if modern software is anything to judge by.
A bunch of world famous artists would disagree with you there.
Dude, it's just a metaphor.
If you want to be a professional musician who works with other people rather than just doing their own thing, you need to know sheet music, especially within certain sub-domains like orchestral settings.
(To be fair, as someone who is on the periphery of the music business, the above is a simplification. I'm not trying to imply that the "rock stars" get to skate by, often they're working harder than everyone else to be/remain successful. But they are still exceptional in many respects. Your average person trying to make a living as a musician absolutely needs to know sheet music or at least it's simpler cousin, the lead sheet, to be taken seriously.)
I know an fairly good amateur folk musician who can't read music at all. He relies entirely on his ability to learn music by ear. But he can usually play something after listening to it a few times, and he mostly plays solo folk music. So because he's talented and happy in his niche, he can get by without many typical professional skills.
Similarly, I know a CS researcher who hates to use anything but MatLab, and his MatLab code is not exactly an example of good software engineering. But he's published a stack of really great papers. He's brilliant and he works in a niche.
But the average novice would not be well served by imitating either of these people. They can do what they do because they're above average in specific skills, and because they've found a niche where they can thrive.
I like this analogy a lot. You can't just write code and then say "here, I'm done" most of the time. You need to know the environment it's around and what it needs to interact with/what will interact with it.
I didn't see anything like that mentioned in the article, but I think that you can easily write code inside your browser today.
Also, web browsers are already extremely heavy and complicated. That complexity is convenient for end users, but it also has costs, like making it very difficult and expensive to create a new competitive browser. Do we really need to add another standard to turn them into offline IDEs on top of everything else?
Plus: glitch/replit are quite slow to do any real coding inside of vs developing locally.
But maybe the future really is in the browser in this way.
If we’re deciding to bundle additional software with a browser, why would a programming environment (chosen based on someone’s favorite language) be top priority?
Saving and loading .js files uses a very non-standard flow. The editor is OK but I think basic operations like "find across files" are missing. It's very "canned" and not customizable.
In other words, it feels more like a debugging environment than a programming environment, which I think is basically what they were going for.
repl.it, stackblitz.com, codesandbox.io, jsfiddle.net, codepen.io
Back then we don't even have online repls jesus christ.
These days devs got it easy it's really amazing
You can code in JavaScript on most browsers without installing anything. Sure, the UI of browser Developer Tools can be somewhat intimidating for newcomers, but that could be fixed with some good tutorials. But it seems the author doesn't want to just write and run JavaScript, he wants to use node.js specifically. But the whole point of node.js is to take Chrome's JavaScript compiler/interpreter out of its native webbrowser environment and have it run in a Unix-like command line environment, such as Linux/MacOS. So complaining that you need to know some of the workings of a Unix-like command line environment to use node.js seems very misinformed.
As for accessibility of programming in general, the core developers are usually not that interested in that, but for most popular languages there are plenty of third party tutorials aimed at laymen. Most programming languages are specialized tools; they shouldn't try to be everything to everyone. We don't complain that university Calculus profs don't also write arithmetic books for elementary schools either.
When I was younger, one had to search high and low on the net trying to find help using shitty dial-up service. Then, you'd end up in some IRC channel asking for help and someone simply says 'RTFM!'
That said, they did carry BBS magazines which led me eventually into the nascent WWW over the 14.4K modem I saved all my pocket money to buy.
Then I finally managed to access the resources to learn. God bless mailing lists.
I was able to fool around with BASIC easily enough, with entire programs provided in magazines like Byte.
Even then despite all the amazing ressource available, there is a risk of digital divide between people having access to tutor that can show the good ressource (because there is a lot of bad ressource!) and isolated people that are stuck with glorified engagement platform.
See p.514- for the schematic https://archive.org/details/c64-programmer-ref/page/n513/mod...
I had such a delightful retro experience the other day! I had spent days fighting a segfault in a widely used, mature library. Naturally, me being new to the library, and knowing that it's mature and widely used, I assumed I was doing something wrong. No mention of the problem online. Crickets in my StackOverflow question for days. In the end, my last ditch effort was to find some of the devlopers on IRC (I hadn't used it for a decade). I was ready for the "RTFM!!!" telling off of my childhood.
But no. People were super helpful. Helped me debug and explain what the library was doing. Turns out it was a bug in a little-used corner of the library afterall! It had lingered there unreported for 3 years. 10/10, would IRC again!
Overall I dont see how any of their points supported the random "install node by default" conclusion - and the point saying "most" people hate command lines made me physically reel.
And for an inquisitive mind, having to type arcane command just to get the desired result is incredibly frustrating, and I don't count mindlessly browsing stack overflow or the internet just to get the stuff I need as learning. That is why course such as nand2tetris are incredibly good.
There is still an incredibly lot of stuff that can be done in matter of computer education. My dream would be a time travel libvmi based educational tool that allow to drill all the various function augmented with built in interactive explanation a la explorable and various code vizualization.
If someone didn't know what they were trying to solve for here, I'm not sure google would help them succeed.
I haven't used Google web search for years, has it really gotten that bad?
At some point, there's some level of problem-solving required which involves taking what you know, and figuring out why it doesn't work. - One extremely common way of finding out what doesn't work is searching the web for the error you get, and finding a StackOverflow page which might be enough to explain it.
My experience was that I can "get by" without a deep understanding of some thing, until it doesn't work, then I need to poke around to get a better understanding so that I can fix whatever problem I have.
IIRC, I bet you can get decently far on the command-line without having to know what PATH is (or all the places it's set), thanks to package managers making things accessible. And then you'll run into some problem so that you need to know what PATH is, and then you'll learn.
Then they need to get over that if they want to learn to code or use scratch.
On the one hand I've been using the CLI for my entire career and and would be lost without it. On the other hand also I have colleagues who learnt to code after Visual Basic/Studio became a thing and work entirely in Visual Studio and manage to deliver top quality work year after year without basically ever having to touch the command line, so it certainly doesn't seem to be necessary.
If you really want to learn to program without learning to use the CLI you probably shouldn't pick and OS who's entire development environment is built around using the CLI.
This is the right attitude to have as an aspiring programmer, but exactly the wrong attitude for someone who creates the tooling or documentation for helping aspiring programmers learn.
In other words, the target audience of a Promise library for JS are people who know JavaScript and understand async. Trying to explain the basics of JavaScript, or programming in general, in that library's documentation would be a waste of time for everyone involved. A beginner has plenty of resources to learn from to reach the appropriate level, at which point they'll be able to wield the Promise library in a useful and responsible manner.
In video games you have blueprint systems because the economy supports this idea. For kids you have scratch.
For web dev you have some solutions but my guess is that when someone wants to use node there isn't yet any useful solution (outside of playgrounds) that is cheap enough to make and remove the need for some basic computer knowledge.
People should deal with it and learn. No matter how low the barriers to entry are, you're still going to have to figure shit out at some point.
PS: You don't need to understand $PATH to start coding in JS. You can create an HTML or JS file, hack away and run it locally.
From this field came things like Scratch [1].
If you're interested a very important paper in that area (from the philosophical aspect) is "Meta-Design: A manifesto for End-User Development". [2]
[1] https://scratch.mit.edu/ [2] (PDF) http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.68....
I do think VisualBasic(6) had a thing there. It was so easy to visually design a GUI and slap some code into it.
That said, as a "professional programmer" I once had to maintain such a VB6 application that was developed by someone that wasn't a professional programmer and that application was absolutely business critical for that company.
It wasn't fun to put it mildly. So my take on this is that it probably died for a reason.
Also I've seen some strong programmers being very productive with tools like VB6 and Delphi.
I suspect the main reason for its demise is corporates don't like installing software on client machines. It's much easier for them to deliver everything through the browser.
Yes, Microsoft killed it.
Up to the point when Microsoft killed it, it did nothing but grow. And for years after Microsoft killed it, it did nothing but grow.
Microsoft killed it because it was a mess on every level, and they didn't like the part they were the ones maintaining. But lack of demand certainly wasn't a factor there in any way.
Javascript is not a beginner language anymore. It has a lot of edge cases and traps that defeat the average person.
Why not? You can still write vanilla JS the same way you could decades ago without much (any?) change.
> It has a lot of edge cases and traps that defeat the average person.
It's always had that. In fact, I think the reason it feels less like a beginner language is that the solutions we've created to handle the edge-cases and traps have been solved for professionals. It's more that the way we teach it has changed. It's now a "professional" tool, so most content out there is aimed at people endeavoring to become professionals, needing to deal with all the complex realities of professional-grade problems. But you can still teach it in the same beginner-friendly way you could in the early 2000's.
I've seen this teaching my son (using JavaScript). My instinct is to direct him to use all of the techniques I use because it's the "right" way. But a beginner doesn't really care about the problems that the "right" way solves. They don't even know about them yet. So it's overkill. Forget Typescript, webpack, eslint, Angular, node, etc., let's just write everything in one HTML file (not even using <script> to include a separate .js file yet) and focus on the thing he's interested in making. We'll get to all that other stuff eventually, and then he'll actually have enough foundation and context to understand and appreciate (not to say all the complexity we've built is perfect).
I see this in many in many of my apprentices - the desire for instant gratification and the lack of experience means they refuse to do anything that doesn’t immediately proceed them closer to their goal.
Here’s the thing with programming - you can’t run before you can walk.
Go read “Learn python the hard way”, do 1 lesson a day
Go do Linuxjourney - do 1 lesson a day
By lesson 8 you’ll know about /usr/local/bin and path, and packages, that’ll fix all of your gripes about not being able to install ruby, pip and node too.
And all of that is solved only after 8 days of disciplined learning. Sure it’s not immediately towards your goal but you need the lower level skills and knowledge first. And it’s only 8 days!
Stop trying to assemble a fully functional car with no understanding of the fundamentals and then getting frustrated that car assembly is difficult. Go and learn some electrical engineering, go and learn some metalworking, go and learn some mechanical engineering, then you may come back and attempt to assemble a car. You might fail the second time too, but each time you’ll get further.
Stop seeking that immediate gratification, the path to success is NEVER a straight line
It helped me a lot as a teenager in the late nineties that I could install borland delphi and very easily have a self contained windows app running without understanding too much, it gave me the confidence to go on and learn the lower level stuff.
It is only required because, as the author correctly points out, the tools we use are BAD. They are absolutely fucking AWFUL.
/usr/local/bin is an implementation detail from an OS nobody has used for decades. It's still here because we refuse to fix these ridiculous things. Nobody should need to know this.
We just use operating systems which implement concepts derived from there.
So, technically correct, though the argument has little merit.
Are you taking the piss? Should we also remove SOCKET's because they were introduced in that same OS?
It should be noted that _EVERY_ modern operating system implements a "path" system, even the ones that are very divergent.
Even in normal Life, when identifying people or things, we have concepts of this everywhere. How can people see that as pointless?
process :: function
path :: namespacing
command line argument :: function argument
environmental variable :: dynamically bound variable
(Ok, that last concept may be alien for non-Lisp people.)You keep saying that things could be better but show no counterexample.
Lead the change or stop whining. Nobody is going to do the job for you if they're satisfied by their current tools, especially if they think you're wrong.
Do it and prove everyone else wrong. If everyone thinks the status quo can't be improved, but you're enlightened, it's your chance to turn your "likely can be improved" into reality.
The non-programmer user base is immense. You can get rich by selling your alternative.
Ugh. Look, just because they themselves have not attempted to create something better doesn't mean that their criticisms are invalid.
That's not a counterexample because beginners have contemporary expectations. There are simpler alternatives that just work. Why do beginners want to use Node.js locally then?
> We do things the way we do things largely for historical reasons
Nobody challenged that. The question is: is the alternative better or just a different (but equally arcane) set of quirks?
If you're not using $PATH you'd be using an analogue system to solve the same problem, and you'd lose portability with current OSes.
Sounds like NIH to me.
Did it do so for reasons that are still relevant today, is the question.
> That's not a counterexample because beginners have contemporary expectations.
Alright I'll present a counterexample: Lazarus. You download it and install it [0], then you run it and make programs. It has a WYSIWYG GUI builder and produces stand-alone executables for multiple operating systems. There is no complicated build environment to set up.
> If you're not using $PATH you'd be using an analogue system to solve the same problem, and you'd lose portability with current OSes.
I contend that the problem $PATH solves has nothing to do with programming. $PATH is a solution for finding programs when you type their name on the commandline, nothing more. Windows and Mac programs don't really use or need it for the vast majority of tasks. Programming does not fundamentally require $PATH.
> Sounds like NIH to me.
And arguments that understanding $PATH is somehow a necessary pre-requisite to get into programming sound like needless complexity fetishism to me.
[0] I would argue that the installation step here is also unnecessary as there is no reason Lazarus cannot operate as a stand-alone self-contained portable folder other than the developers insistence on hardcoded paths.
EDIT: Any good small-ish project in GitHub to get a feel for the language?
Understanding your programming environment is absolutely a prerequisite to getting into programming. If you don't want to deal with $PATH, you should know enough about your target OS to know how to run things without it (which is really, really not hard to do).
No program exists in a vacuum.
Do you write programs that don't load libraries? That don't interact with files? $PATH is required (or something to search along to find those libraries or files). I've been programming for 25+ years and I can't think of a serious actual application that I've written that doesn't need something like $PATH. Even simple data formatting console apps generally need to load a JSON library or something similar. It's impossible to bundle every library needed for an app in every app. People keep saying that $PATH isn't needed but location services of some kind is absolutely needed! I'd argue that $PATH is the result of 50+ years of engineering/science and research and is the best known way to address that issue as of now.
Yeah they're taking the piss. You can make the same argument about GUI tools too. We're gonna be dealing with "implementation details" for awhile lol. This thread is wild. Makes me understand why all the juniors I work with suck so much.
All of which used /usr/local/bin and $PATH. Every system, regardless of programming language across python, C, C++, java, go, erlang.
Saying /usr/local/bin and/or $PATH "has absolutely nothing whatsoever to do with programming" is total rubbish. Programming as a field doesn't just include domain and syntax knowledge of a programming language, it includes ALL of the system implementation details below it, and YOU ARE EXPECTED TO KNOW THEM.
Saying something so basic and fundamental "has absolutely nothing to do with programming" only shows a terrible lack of systems knowledge, this is used in unix, linux, bsd, embedded and massive server scale deployments.
Acting like this stuff is somehow below you, just shows intellectual laziness, this stuff both BASIC (easy to learn) and FUNDAMENTAL (applies almost universally in many systems), and if you acted like this during an interview or working at anywhere with non-trivial setups you'd be laughed out of the room.
Superfluous, and could be replaced at any time.
And I note you immediately jump to the conclusion that I am too stupid to know these things that you know because you are clever. And that is EXACTLY the problem.
"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?
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.
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 have to know them, 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
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.
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.
Then in the NEXT PARAGRAPH, you tell me that I don't understand command line tools.
I have been using them for decades. I know them very, VERY well. I am saying all of this from a position of long and deep familiarity with the tools.
Yet immediately you jump the conclusion that I just don't know what I am talking about.
Nothing I read by malux85 implied to me that not understanding command line tools makes someone stupid.
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.
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.
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“
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.
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.
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.
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.
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.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?
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.
There's no point to making sure a programmer knows how his environment is set up? Are you being serious right now?
And so when CLIs became popular with (broadly speaking) the early growth of the internet, we became more familiar with /usr/local and PATH (we probably had some exposure to these already). So while yes, these are found in most modern systems, we see these things as details. PATH simply doesn't feel "fundamental" to me because I've written exactly the same kind of code in environments where PATH is used and where it doesn't even exist as a concept.
Of course, what is "fundamental" is rather a judgment call, and your perspective makes it so that these are fundamental for you.
I won't defend the original post, particularly wrt nonsense like adding node to a browser. But I do think different perspectives are at play here, and disagreement on either side does not reflect intellectual laziness or people who should be laughed out of the room.
I define "fundamental" as something thats in wide use and deployment in actively running systems. Like $PATH being in every operating system used today and /usr/local/bin on every linux distribution running on literally hundreds of millions of servers globally, right now.
And the requirement of understanding these are part of what's holding back the author of the article from not having a running ruby, pip and node.js
I can't just wave my magic wand and eliminate Bash, and all $PATH nonsense.
It existed before.
So as a programmer, I expect you to know about it. There may be a day when the knowledge is obsolete. Where we can coordinate politically and socially enough to eliminate all usage of bash and $PATH. But those are social and political problems.
As a programmer, I expect you to have the technical knowledge necessary to do your job. Stop complaining about the social and political context that brought $PATH to existence and just know how to use it, and don't write something like it yourself.
Programming is not AWFUL. People and the social and political aspects of interacting with others is AWFUL and always will be. We work around it, we make it better, and we improve it. But no, our tools are not CRAP, they're not AWFUL. We build amazing, wonderful things with these tools.
What a short-sighted perspective. Just pass. Seriously.
Linux, MacOS, the BSDs... They're very much used today, not just decades ago. the /bin, /usr/bin and /usr/local/bin are very simple to understand after around 10 minutes of looking at the contents of / (root).
*/bin/ has binaries,
*/lib/ has libraries,
*/include/ has headers.
Its as simple as it gets, I dont see a way you could make a "better" system, other than maybe renaming "bin" to "binaries" for the 5 people on the planet with an irrational fear of common abbreviations.
But, a system _does_ have users. Those users _do_ have programs. There's a hierarchical relationship. I've been following along with your comments in this thread and I just don't follow what you're getting at here.
> Its as simple as it gets, I dont see a way you could make a "better" system
I do, we could stop separating binaries from the associated other files they require in order to work. That is an artifact of how UNIX was originally implemented that is irrelevant today. Case in point: the existence of containers, flatpak, AppImage, and other such things that do exactly that! Not to mention all the operating systems, like Windows and Mac, that always worked that way.
Also, using the search query "/usr/local/bin" in Google returns this[0] link first. This is my real issue. If a simple web search returns a good result first that gives you a good overview and gives you more background knowledge and more terms to search for and flesh out your knowledge, then there is little excuse to say learning is too hard. If you don't want to learn, that's fine, but complaining about learning being too hard here is unjust.
[0] https://unix.stackexchange.com/questions/4186/what-is-usr-lo...
I have struggled a lot with the nitty-gritty of ENV over the past few years and I agree with you that maybe there is a better way. /etc/, Conda, virtualenv, docker, ROS, Windows registry, they all deal heavily with managing the environment, and all have their own thorns. Then you have kube, consul, ansible, and all the fun of distributed environments.
The bottom line is, if you want multiple, orthogonal runtimes, you need an abstraction for managing namespaces. PATH is actually one of the simplest mechanisms to achieve this.
/usr/local/bin is where most Linux distros put binaries that were built locally, as opposed to those that came from the package manager...
Not to mention, if you don't understand how and where your binary is supposed to run, what on earth are you doing making it in the first place?
Most of these people find driving hard. You have to put the liquid in the hole and turn the key and keep pressing the floor-thing and hold the circle thing all while looking out the window to make sure no one gets in your way and the car stays on the hard paths.
What they really want is to just be able to jump in the back seat and state their destination then go back to chuckling at tik-toks and messaging friends until they're there. That's the kind of car assembly they want, complete with the commensurate salary and benefits. Is it really so much to ask to have that delivered to them?
Another thing I want to add on - it looks like the author is lacking curiosity. I didn't have much discipline and structure in the beginning of my programming journey. In fact, I've been trying to add more discipline and structure to my learning now.
When I started though, I had a TON of curiosity. I fiddled all the time with everything. I fiddled with settings in Windows XP to make my family's computer faster, I fiddled with my own laptop by installing Linux and trying out tons of programs, I fiddled with the code on my computer to make it do cool things on the command line, etc.
I didn't have an end goal in mind - it was just something fun to do and I just wanted to answer all the questions in my head. Being curious drove me to learn, adding discipline and structure helps to fill in some gaps in my learning that my curiosity may have missed.
I am always looking for better tools and tutorials for the people I mentor, but LPTHW has been great, I have mentored 15 or so people so far from no coding to starting and running their own companies, and I have yet to find something better.
Should Chrome have Node JS loaded into it during install? I don't do web-dev so my answer is no.
Should there be browsers made for those learning web-dev that come with these? By all means, sure. Go nuts.
This also might sound elitist but I would expect the kind of person that takes an interest in coding to be able to google what $PATH is or hell take the complete instruction "add <dir> to $PATH"
Googling "Making sure /usr/local/bin is in my $PATH" leads me here: https://stackoverflow.com/questions/19202007/making-sure-usr...
So I fire up the terminal and write echo $PATH and then go back to SO to see that it looks like it's all set up correctly. But why do I need to go to SO? Why do I need to fire up the terminal? It just feels too damn hard and too opaque.
I think defaults and documentation and onboarding matter. Not to mention a GUI :)
The "make sure X is in your $PATH" is its own thing. I sympathize but there is a balance between docs for the expert and docs for the novice. This is closer to the former.
Steve Jobs if he was a programmer would slam today's tooling.
Why do I need to fire up the terminal? Your OS doesn't do things via GUI like you do, so you need to validate that what it needs is available in the manner it will use.
Too damn hard and too opaque.? How did you learn that Node js was even a thing? You weren't born with the knowledge and everything has a learning curve to it, very few things are truly easy to do starting at the very bottom.
I agree that things need documentation and onboarding. I think we can view the Node js docs similar to a shop manual at a auto repair shop - it will expect you to know what tools are what and how to do certain things.
Your comment to which I'm replying now shows that you do have the ability to learn this new language. You've correctly and successfully used the term "SO" to refer to a popular resource on programming. You have successfully "fired up the terminal." You've even used the terminal to echo $PATH. You're making great progress! :-)
The particular idea of installing node.js by default in web browsers seems to me like installing toasters on sofas. That would make it easier to make toast without going to the kitchen, but is not something that most people would want.
> why do I need to ______?
This is the current state of computers and programming. Computers are just concentrated piles of logic gates and they don't actually know what they are doing.
He's been a user of HN since 2010...
It seems he likes the idea of programming more than the act of it. It's similar to one being enrapt with the idea of being an accountant but in reality, just wanting TurboTax to do everything and not learning anything. But i get to play pretend that I'm an accountant.
And in terms of (free) knowledge availability on the internet for any one profession, there is nothing that comes anywhere close to programming.
It's programming. It's difficult, and there's a lot you need to know to be effective. Trying to just hide things like the command line is just pointless. You need to know it. Go learn it.
You shouldn't need one though. Environment variables are one of the core basics of any program, and you'll need to learn about them eventually. The same thing is true if you can't deal with the terminal; there's a few "magic" commands to learn but most of the terminal stuff is just "how does this computer thing even work".
Most programming tools and languages, as well as their documentation, assume you know how to manage your computer when you start programming them, as well as some basic knowledge of how an operating system works. These tools and their getting started guides are written for people who know the basics of their computer and programming, and want to try out a new language like JS. If they're too technical for you, you're not the target audience. You'd get much more out of a book explaining you the basics step by step.
The terminal is everything but opaque; you tell the computer exactly what you want rather than clicking the "just make it work" button. You're in control instead of letting some tool assume what's best for you. In my experience, the "one button to fix all" systems will work for a while but once they break (and they will) they're basically unrepairable without deep knowledge of the tooling and its configuration as well as the defaults the installer chose for you and why they're now messing up.
A problem with Javascript and Python development is that the setup is very complex and that guides become outdated (especially for web dev). There's loads of edge cases to deal with so there's loads of configurations and options most tooling supports. The magic install button would lead many to ruin their operating system configuration because they've already installed another tool that might also have had a magic install button. These tools don't operate in a vacuum, they influence each other.
If you just want to program code, grab a great big IDE like MS Visual Studio on Windows (the full one, not Code) or XCode on Mac (no experience there, but it's trivial to install at least). The experience of getting started programming in C# is very easy, just select the types of program you want to be able to make (or "all" if you don't care) during setup and your tool is set up. No fiddling with the command line, just a shortcut on your desktop. You won't be making any websites in them from the start, but they'll provide you with an environment that Just Works for writing your first program, moet likely a console window that says "hello world".
If you want to get started in web dev, you don't need node or any terminal work, just a good text editor to write your own HTML, CSS and JS files in. Sure, node is what people use in production, but it's only complicating things if you're just getting started. Guides from ten years ago on how to write HTML and Javascript are still perfectly functional if you're just starting out.
If that's still to much to grasp, there's kits out there for Raspberry Pis that come prepackaged with tutorials and with exercise books for programming in scratch and Python. Your only barrier to entry there is the money to buy the kit. You'll still have to learn everything and work through stackoverflow or technical documentation all the time, but you won't need to bother with any terminals at least.
Complaining that programming is too hard because there's no fancy GUI for every tool is like me complaining that finances are too hard because I can't walk into a bank and start making money without reading all kinds of boring books about finances. There's easy ways to get started if you know where to look, but in the end you'll always need some knowledge about the field you're entering to get started without paying someone to teach you directly.
Note that the installer is not saying "please make sure /lib/node.js/ is in $PATH" - this would certainly be something to expect the node.js-specific installer to set up by itself.
It doesn't know if you purposely meant to remove it's install location from the PATH, so it doesn't re-add it.
It could do what you ask, but this requires setting the $PATH. The most common way to do so is modifying bashrc, but now you're modifying the user's bashrc. Now you ask, is the user using bash? Maybe you're using the fancy whiz-bang ohmyzsh since that's what Medium told you to do, and now that doesn't work either.
If you keep /usr/local/bin on your $PATH (which is standard in most 'nix installations) then you don't have to change anything or do anything. Why do _you_ have such an abnormal system? We can play this game all day and it's fucking miserable. Just learn how to use your tools for fuck's sake.
In what way is it madness?
These are highly orthogonal concerns. html is markup, React and Rails are client/server side ways of generating that markup.
> Yet that is the expectation we've set as professional web developers
This is so weird to read. Like yes, obviously it's an expectation that you need to know a way of generating html if you want to have any more than just a static page.
> There's no need for build tools in development when we can use module CDNs
Sure, if you want to write plain JS. But that means no Typescript. No tree shaking, or lazy load importing, so your application is going to be big, and slow. No code transpiling to backfill support for older browsers.
You can, press F12.
> Here’s my pitch: build a browser that comes pre-installed with node.js, an IDE and a simple runtime environment.
Why? If you’re new to coding then you don’t need an IDE: it adds complexity. You just need a “Run” button like in Excel (right?).
Additionally, you probably don’t need Node.js because it is just adding some API to interact with the operating system.
If you use said APIs then you need to learn a couple of things about the O.S. - nothing major - like what is a shell, or what mkdir and PATH stands for.
But, hey, we’re talking about non-coders here right? They don’t need these APIs, they are just getting started. So why should they need Node.js?
> People hate command lines - not only do they LOOK scary, they give weird unhelpful error messages and… you have to type everything. Ugh. This is why people would rather code inside a spreadsheet application - because it’s an application.
I’m all in for the no-code movement, although I’m not the target audience. I agree that you don’t need to know how to code to setup a simple website. You can just use Webflow.
I think this article doesn’t make much sense. Every paragraph of the article (especially the outro) suggests that Node.js is not an example, it’s the target of the article. The fact that the OP is proposing to run Node.js on the browser suggests that they doesn’t know what Node is, and why you should use it.
Your code will run fine on the browser and on Node as long as you don’t use Node APIs.
Once you use such APIs, you’re agreeing to the fact that you know what you’re a doing - you agreed to use Node’s API; if you didn’t want to deal with the OS directly, then should have opted for something like Visual Basic. And if you agree to use such APIs then you know that Node exists so that you can forget about the browser.
Yet if you're old enough to have gotten started in the time of JavaScript in the late '90s, or QBasic in the early '90s, or systems like the BBC Micro or TRS-80 in earlier decades, you should know what the author's talking about.
Everything you need to program is just there. It just works, there's no extra installation, you start a program and start coding. And just about any PC has what you need. [1]
Nowadays you can technically develop on any PC with a browser by locally editing HTML / JS / CSS using Notepad, but it's rather painful. How hard would be to have a default Firefox environment for budding coders? These days you can probably do some Wasm magic to create an entire Linux OS in a browser tab, and install stuff in a virtual disk in the local storage.
Heck, it probably wouldn't be that hard to cobble together the existing pieces to make a Firefox addon to do that.
[1] Granted BBC Micro and TRS-80 weren't PC architectures, but for computers of that generation, a built-in BASIC interpreter was pretty much expected.
If you want to pick up programming as a hobby, a hobby computer exists. If you want to get more serious eventually you have to learn your tools.
You can get there today with some closed loop envirinments. But like wit QBasic and other Basics, there is very little commercially useful programming you can do there, unless it is an in-house application. See e.g. FileMaker Pro. Production grade web application programming is an order of magnitude more complicate than it was in 80s. Networking, client/server, graphical UI, responsive UI, dependencies with third party packages, multi user and multi tenancy come in my mind for example.
That just sounds mindblowingly inefficient and pointless. There's no point making these great speed and efficiency leaps in CPUs if people just do inane stuff like this.
The browser is fine as it is. If you want to use it as an IDE, use something like codespaces or any of the online REPLs, don't try to make the browser an IDE?!
Visual Basic was essential in th e90s if you wanted to create a gui app, but it was a £500 piece of software you had to buy and install on top of windows.
Now sure, if you installed a standard linux desktop in the 90s you'd have things like gcc, perl etc built in, but you do today.
Nowadays you don't need a compiler for a lot of things, your interpreter is your browser which everyone has, you can just start up your text editor and create a html/js/css page, just like you could on your BBC Micro or Dos 5 machine and start creating a program by copying things out of a magazine. The standard debugging built into firefox and chromium is amazing compared to what you had with QBasic or the Spectrum 48k.
You've also got a realm of information on the internet available on how to start. If you do want to download something like Atom or VSCode it's three clicks away (literally you type "vscode" into ddg, click the first link, then click the deb)
If you want to program something even simpler from entirely in your browser you can pop over to Scratch or Purple Mash and build a game from the browser.
Nope. That's not what they're criticising.
"Yet if you're old enough to have gotten started in the time of JavaScript in the late '90s, or QBasic in the early '90s, or systems like the BBC Micro or TRS-80 in earlier decades, you should know what the author's talking about.
Everything you need to program is just there. It just works, there's no extra installation, you start a program and start coding."
Bash is 5000x more powerful and user-friendly programming environment than any version of rom BASIC ever was.
qbasic... well guess what? qbasic was not necessarily just there. It might be there. You have to type the command at a command line, and if it doesn't work, you have to investigate %PATH%
Bash kills basic hands down, as a programming language mind you, using only it's built-in features, forget the fact that it's also a wrapper around exec(), and it is right there exactly like the the old rom basics were.
There should be an "educational" mode on every computer where you can just boot into it.
Before the times of Firefox, Mozilla (the browser, not the company) actually did have something like that: Mozilla Composer[0]. Granted, it was a WYSIWYG editor and today no one writes entire websites that way anymore. But it still allowed basically anyone to start their own website – an idea which I still find very appealing as it's so close to Tim Berners-Lee's vision of a web where everyone is both a consumer and a producer. (Whether or not this vision was ever realistic is a different matter.)
https://github.com/features/codespaces
Maybe you don't need new browser ?
Maybe ?
The solution to this is to use an actual native IDE, not try to shoehorn it into the browser, which is completely inappropriate.
We could package programming languages up with GUI installers that set everything up correctly and let you get right to the code - and in fact, we used to. If you install IntelliJ, you'll have a fully-working Java environment out of the box. The same for Visual Studio.
Why the "hacker mentality" languages think this sort of user-obsession is beneath them, well, that escapes me...
The thing is, that's the system they are using. Node.js is a programming runtime for that system. Node.js has a GUI installer that sets everything up correctly, it's just not an IDE.
Jetbrains has an IDE, WebStorm, that probably works just as well as the Java one. It can automatically download Node.js for you, so the same experience as for Java is available there as well.
Those would be fairly trivial changes to the website landing page, but they could drastically reduce the steepness of the on-ramp.
By contrast, if I visit python.org, there is a clear funnel leading me to alternative development environments, beginner tutorials, etc.
Compare with https://www.javascript.com/
It doesn't tend to be true of mature IDE-first environments (see the aforementioned Visual Studio or IntelliJ).
npm? got it. whoop. yarn? okay cool nope. bower, now? wow. all set.. no. webpack. done. wait. gulp? okay okay. are we there yet?
Just as an aside, GUI installers are an absolute cancer. I don't mind if there is an option to do that, but I just wish I could make a simple script for installing all the necessary programs on Windows, just like I can on Linux. But no, I have to spend two days doing nothing but manually clicking through the installers, because that's fun.
That's a whole additional world of arcana, since the Windows PATH variable works subtly differently, and is configured through a (fairly obtuse) GUI in an unrelated settings panel.
> On most Linux distros you can simply run the equivalent to `sudo apt-get install nodejs`
The OP is however on a Mac, where there isn't a default package manager. Now suddenly novices have to go learn about the differences between Homebrew vs MacPorts, and why neither one works properly on their shiny new MacBook.
> Just as an aside, GUI installers are an absolute cancer
For us linux sysadmins? Sure. For the rest of the world GUI installers are just how computers work.
There is undoubtedly work to be done into making programming more accessible to newcomers - almost all tutorials on code start in the wrong place, assuming a lot of knowledge of the difficult bits but then labouring through the easy ones.
I don't think the problem is tooling, but how we introduce and talk about those tools - you can quickly explain the command line in a way that takes the fear away and gives learners a framework for understanding it, but you have to give that explantion; too often it's skipped over.
um... because you didn't press ctrl-shift-I?
But frankly, if you can't manage to install ruby and think $PATH is somehow complicated or scary, I don't want you writing code. So maybe it's for the best that you haven't discovered the developer tools built into every browser.
They don't want to have to google what $PATH does, they want the browser to come with an IDE (and massively ramping up its complexity because why?) instead of actually downloading an IDE.
The author has weirdly treated the problem of not knowing something as that it is wrong that they need to know it.
Yes, that’s TFA in a nutshell.
The title is deceptively “normal” though, so lots of people are making good faith attempts at answering the question. Except cloud9, code-server or whatever aren’t what TFA asks for, since you still need to understand what’s going on in the server to use them effectively, you’re only offloading storage and computations to a remote machine.
There's nothing wrong with being new to coding, not knowing things, and making mistakes - it's how we learn - but when you start your article with list of things that you couldn't be bothered to do a web search for, proudly proclaiming your ignorance and unwillingness to learn and expecting me to do your thinking for you, I don't have much interest in being nice and/or trying to teach you stuff.
No, but I also don't want them being paid for their efforts to prove the Riemann hypothesis using only an abacus.
>we need to be better teachers
According to google there are about 1,040,000 results for 'what is "$PATH"?'. I feel like one or more of those is probably a pretty good resource.
For anyone that doesn't know that, open dev tools > Sources > Filesystem > + (Add folder to workspace) > right-click on folder > New file. Then double-click on file to open it for editing and save modifications with Ctrl-S. Of course it isn't an IDE, with even the editor being nothing more than a Notepad clone, and you're limited to client-side work which is in contrast to what OP seems to want.
Recently, after a few days of trying to set up Scala to work with the latest JVM in Visual Studio Code I just gave up and installed IntelliJ IDEA instead. Works out of the box.
I'm a seasoned programmer with 15 years of experience in Python, Java, Scala, OCaml, C++, JavaScript, Linux, bash, ... (a.k.a. I can do or learn pretty much everything). Could I set up VS Code to work with Scala? Yeah, probably. But why would I bother?
UI matters. Programmers mostly suck at UI. Which is reasonable, really, because after you set it up once, you can easily forget about it...
But I also believe that he makes a lot of great points. Installing and maintaining programming languages is too hard. Going from "I would like to try some $lang" to being up and running is usually difficult and requires you to install binaries, then deal with PATHs, and with CLIs, and REPLs and a bunch of cruft before you can start experimenting and getting to the interesting parts.
The programming language experience comes with a shitoad of stuff that really has very little to do with the language itself.
There is also a lot of potential in more flexible tools that allow me to create small apps with, well, maybe not with minimal coding, but with minimal installations, minimal integrations in my particular OS, minimal maintenance of the installed binaries and tools etc.
I think a lot of people here forget that people who program no longer need to be "programmers", and understand every aspect of the system. For these people who just want to simulate a model, or do some calculations, or automate a mundane task. For them programming is a means to an end, it's about the result.
But, I don't see why this guy thinks installing NodeJS is hard. I have a low tolerance for painful installs, but NodeJS and Visual Studio Code were quite easy for me to install and pick up.
Furthermore, you can code in a browser: Azure supports this, although it was somewhat buggy when I tried it.
A browser is all you need to start coding and everyone has one installed on their system.
Also on coding is too hard for newbies: JS, Python, PHP are NOT hard. I couln't have became a developper 25 years ago when programming was really hard but nowadays building usefull applications with JS and/or Python the myriad of libaries available and the ridiculous hardware ressources at the disposal of anyone, it's not hard anymore.
And all of that goes against the ease of access the OP post seems to request.
Short answer: you can write NodeJS code inside your browser[0]. Being able to do so will not solve ANY of the problems listed in your blogpost.
The author's problem is that they don't have an attention span for learning a domain which contains necessary complexity; they crave quickfixes but don't have enough basic knowledge to understand why those quickfixes won't help them.
> An incomplete list of things I’ve tried and failed to do:
> [lists 3 things that most/many web programmers fail to do regularly as part of their day-to-day]
I've failed to install node or pip at least 100 times. This is a normal part of learning anything in life. How many times did you fall off your bicycle as a child?
[0] Whether it's repl.it, Codespaces or some other method there a million ways to do this depending on your needs. All do require a basic understanding of code which the author seems to lack (their bullet list of coding projects are all based on pre-existing templates & copypaste, especially their "fairly complex Jekyll blog")
A lot of those introductory tools abstract away the way that software actually works which allows you to focus on learning the basics of logic and programming. This is great for learning but extremely limiting. There is a reason why professional tools and programming languages don't abstract away the technical details. Because you need to know how things work under the hood in order to be a truly effective programmer.
This is part of why a formal programming education is so valuable IMO. It can be very hard to cross that gap on your own.
I think this article also defines a kind of smoke test for programmers. If you don't like learning how to read error messsage on a command line or googling stuff, you probably won't like programming.
To Tom I would say - programming is hard, but I think that's OK. It's not good to hide all of the technical "ugliness" of how these tools work because to be an effective programmer you need to know how they work. That's just the reality. The messages you see when working with tools like Ruby or Node are designed to be useful for a professional who knows how to read them. What may seem like command line garbage to an untrained eye is actually extremely useful to someone that knows what they are looking for...and that is what takes someone from a hobbyist programmer to a professional. Is there room for improvement? Can we close the gap between the myriad of "hello world" programming tools and the seemingly bottomless trench of "real" programming tools? Absolutely.
Cloud9 exists and although it was acquired by AWS you can still use it.
https://aws.amazon.com/cloud9/
The real solution to this problem is more awareness and good entry level resources that you can point indecisive people toward. None of his points are actually going to improve the situation even a tiny bit, mostly because they already exist and some of them completely failed while the others are there if you just look for them.
ANYTHING is hard when you first start out. Try making a table out of wood, or doing origami, or playing an instrument for the first time, and unless you're some bizarre savant you're going to effing SUCK at it. Learn why things are the way they are, or in this case learn the way things are in the first place, and your results will improve.
Sure everyone could learn about $path with a little research but there is SO MUCH to learn to get started with a "simple" react app... It's not necessary.
Great tools hands a "low floor AND a high ceiling" meaning it's easy to get started and possible to go really really far.
Clearly tools like replies show there's a desire for easier to set up environments.
Have you never wished you could save your css tweaks directly from chrome dev tools?
Why should the browser show you the page source when you could just curl it? Well... Let's try to make the unimportant things EASY so we can focus on the useful parts.
Firefox could absolutely come with a standard node server and editor. And it could integrate with providers like GitHub or netlify.
Gatekeeping getting started benefits nobody.
One line of HTML: https://reactjs.org/docs/add-react-to-a-website.html#add-rea...
> Have you never wished you could save your css tweaks directly from chrome dev tools?
You can: https://developers.google.com/web/tools/chrome-devtools/work...
> Firefox could absolutely come with a standard node server and editor
A node server runs JavaScript files as do browser engines and the majority of node’s API exists in the browser in a similar form, as well as an editor. GitHub as well comes with an editor built-in, Netlify can be connected to GitHub by clicking one button.
I agree that it’s good to simplify, but are these good examples for that?
FWIW, you already can. Sources -> Overrides -> Select folder for overrides.
I'm currently trying to setup the js testing library "jest" to use babel to transpile typescript and I get the most obscure error messages. This is painfully hard and I have years of experience with javascript/typescript [1].
I doubt there ever has been a more complex programming ecosystem than JavaScript's. No other system has more bundlers (webpack, rollup, metro, ..), transpilers (babel, typescript, flow, ...), testing libraries (jest, mocha, jasmine, ...), package managers (yarn, npm, pnpm, ...). It is just insane what we created.
[1] if you are curious, that is the error message. Good luck making sense of it. It probably is caused by non-compatible dependencies but yarn does not tell me.
Validation Error:
Preset @babel/preset-typescript is invalid:
The "id" argument must be of type string. Received type object
TypeError [ERR_INVALID_ARG_TYPE]: The "id" argument must be of type string. Received type objectIt had been a few years since I had started a JS project from scratch (I spend 90% of my time doing Rails dev). I ended up spending more time figuring out what package/build/testing tools to use than I did actually writing code.
Looking up best practices for Express.js project structures, I found that every blog post/article had a different "best" structure.
I'm happy that my new job is still primarily Rails. I'll take convention over configuration any day.
> Here’s my pitch: build a browser that comes pre-installed with node.js, an IDE and a simple runtime environment.
I don't understand the problem. Ignoring the node.js requirement, just open the developer console in Chrome or Firefox. There you have a powerful JavaScript REPL. There is also a ton of online REPLs, e.g. https://repl.it/languages/nodejs.
> Increasingly there’s a disconnect between the kinds of activities code enables and the “expected” workflow for “being a coder”.
What does that even mean? There is also a huge disconnect between the kinds of activities buildings enable and the expected workflow for "being an architect". Yet I don't hear an architect complaining that he cannot design a building simply by wandering through the Taj Mahal and thinking "wow, this really looks beautiful, I enjoy this!".
1. They fail (e.g. Smalltalk).
2. They succeed (e.g. the web). When they succeed, professional programmers overwhelm them and make damn sure only very very professional programmers can ever use them again.
I was reading that in the same vein yesterday: http://harmful.cat-v.org/software/c++/I_did_it_for_you_all
(it's a well-known false interview with Stroustrup)
Overleaf (and previously Sharelatex) on the other end makes everything easy. You have the choice between XeLateX, PDFLaTeX, etc., all the useful packages you could dream of, and more, without installing anything. Plus collaborative editing for free, when she needs help with a macro or a new environment definition.
So, yeah, being able to program without having to install a development environment is great. There are tools to do that already, like Repl.it, maybe the OP could try that.
The premise of his article is faulty because... you can code inside your browser. _They mention Glitch_, which lets you code inside your browser! There's things like CodeSandbox.io (and Github Codespaces coming whenever) that give you a full NodeJS environment and 'proper' IDE (VS Code) all in your browser and lets your deploy to a variety of production environments.
Downloading and running a node.pkg that installs all the command line tools seems pretty easy - there's nothing wrong with the command line, you've just got to learn it.
It's never been easier to code.
Well, people hate graphical interfaces - not only do they LOOK scary, they give weird unhelpful error messages and… you have to click everything with a tiny pointer like you are fishing in muddy waters. Ugh.
It would have been nice to see it expanded instead. A full on node environment would be a bridge too far IMHO but it would have been great to have added a good way to reuse modules and some more GUI niceties.
It did have full access to the current web page so there would have been security issues with new coders copy/pasting code from the internet. But a revised version could give it its own isolated environment by default.
I really fail to understand how people can see something like the $PATH variable and not understand it 'for years' - does everyone else not just Google/DDG things they don't understand?
It's not really worth critiquing more of the article, as the entire premise of not being able to 'write code inside the browser' is just another fallacy that's based on the authors complete lack of knowledge, or willingness to acquire any more knowledge.
Here's what you do: go to about:blank, open the console and start typing JavaScript code. Try:
document.write('hello world')I was really surprised with how easy it was to do stuff like add in a third party graphing library and then write a bit of code to graph interesting metrics on this page, directly from the console of my own browser.
I've also used greasemonkey for years to inject interesting scripts to improve usability on a couple of key sites. I think there are tons of options to do this kinda stuff, but I'm sure the tooling could be improved a little bit in some areas (e.g., to easily take advantage of npm packages).
1. https://www.decisionproblem.com/paperclips/index2.html 2. https://github.com/trogau/paperclips/
Sorry that (having posted the link) I don't have anything that concretely adds to the discussion, but I just thought I should point out that I'm not the author of the blog-article, as a few posters here seem to think.
I definitely don't endorse the author's views either, but I thought it was an interesting post for discussion, and I certainly don't think that making some aspects of coding more accessible is a bad thing.
edit: I just noticed the actual author is posting to the thread.
I mean the alternative - friggin' learnin' stuff - is too hard.
But you could rephrase the authors point this way: Browsers make a ton of concessions to regular users at the expense of developers. Consider for example that the act of developing a web application in fact often does not involve executing arbitrary source code online, it involves executing specific source code you have control over, which has different security requirements.
The author is expressing something I'm surprised more developers don't pick up on: The browser is a consumer tool first, and yet it's a favorite tool of developers despite the fact that it barely caters to developers at all. Take for example the "Developer" menu item, which is two levels deep in Chrome. A rational developer, who spends all day with a browser open for development, would be frustrated that one of their primary use cases has such a low priority in the application. But that's not how developers perceive the browser, developers have a fondness for the browser that's not reciprocated.
Another example of the low priority of developer use cases in browsers is that the commonality of the other main developer tools, text editors and terminals, is that they achieve incredibly powerful functionality through process management. E.g., code completion, linters, integrated debugging, `grep`, `git`, are all based on text editor's and terminal's ability to manage external processes. But browsers can't do this, which firmly limits their usefulness, and creates bizarre situations like having to manually hit the refresh button because your server process can't talk to the browser application itself.
> The new Firefox DevTools are powerful, flexible, and best of all, *hackable*. This includes a best-in-class JavaScript debugger, which can target multiple browsers and is built in React and Redux.
Here’s an example of extending the devtools for react https://addons.mozilla.org/en-US/firefox/addon/react-devtool...
Sure, but it's also in every single right click menu on every page and has several keyboard shortcuts (F12, Ctrl+Shift+I)
In my opinion, having to go two menus deep is not "barely catering to the audience at all". The vendor of that product just likes to have clean menus.
Would you be interested in using this word processor for programming over your text editor or IDE which is designed first-and-foremost for programming? If not, what's the difference between this and the way Chrome treats developers? (I'm not being disingenuous here, I honestly don't see the difference personally.)
What's the alternative though? Is the suggestion that browsers ought to be competitive out of the box with whole off-the-shelf IDEs that can cost thousands of dollars, prioritizing that use case over even web browsing?
Regarding the word processor experiment, I don't really mean as something you'd use for one-off programming tasks, I mean as a replacement for a dedicated programmer's text editor. E.g., the point is that a developer-first browser could have features and developer-experience that consumer-first browser can never match, just like adding developer features to a word processor would struggle to match a dedicated programming text editor.
https://lab46.g7n.org/_media/haas/ufbm.pdf
I've taught at several bootcamps, and this is the first book I tell everyone to read. I tell my students to just get it read ASAP. After that setting up your environments or $PATH becomes much more comprehensible. Git becomes much more comprehensible. Life as a developer is much more pleasant.
The article author should take time to understand the command line environment they work in, simple as that. I've had the exact same struggles the author has had. I've had Ruby, JS and npm implosions, multiple times. It would be nice if the languages and tools documented their errors better. All tools should strive for better, more beginner friendly documentation. But if you're a dev right now knowing Unix has to be table stakes.
F12->Console->Boom, Code.
It's legit right there? Open up a blank index.html page and you can even start adding canvas elements and stuff probably.
EDIT: After reading more carefully, I realize the author is of the "I just don't understand why this is so hard?" variety. Answer: There's a direct tradeoff between the expressiveness of your language and its difficulty. This is even a concept in linguistics. Take a look at several graphical programming languages, they are incredibly limited so they can be done graphically.
This article ticked me off honestly. Really feels like they just don't understand how and why people use text-based tools and command lines. It's not because we think we're better than you lol, we just like them more and find it more effective. It allows us to get the work done.
Another comment said intellectually lazy and I think that nails it. What a pile of crock.
Chrome should include a nodejs installation by default because the commandline is scary? Does he know, that node is based on the V8 engine that's part of Chrome? Packing it in would be redundant and it's a pure backend integration. You dont need nodejs to learn javascript.
If Pathes and Commands are scary, just right-click on your desktop. Click New->Text Document and name it "index.html". Open the document in a text editor of your choice. insert <html><head><script>### </script></head><body></body></html> into the file. Replace ### with your js code. Open file in browser.. Its that easy. FFS, some people just want to complain.
To begin with, it should be a single package without dependencies, just like excel is. Not some "ecosystem" where you need to install certain versions of packages for your script to work.
A former co-worker used to work in London for a bank, his job was to maintain the linked Excel spreadsheets that were business critical - and only took six hours to produce a result.
He found moving to the Java ecosystem rather relaxing and uncomplicated in comparison.
This is huge. Can you name any other programming language that automatically saves database + code in a single file?
Think about how many files you have to share if you use a script + database. At least 2 files. And then you have to zip it and the recipient has to unzip it. (cluttering your downloads folder)
However, at a certain point you have to make the jump and install/configure a database, even if it's just SQLite.
I've been working on a side project related to being an easier coding environment. I hope that is not a terrible idea.
https://www.apogeejs.com/web/apogee.html?url=/web/examples/q...
Nowadays, there's also tools like codepen, cloud9, etc, not to mention an endless amount of resources for learning in all sorts of formats (many of which are free).
The thing that bothers me is this idea of "look, I'm a beginner, but your not-geared-at-beginners tool should be geared at beginners!" Imagine you are a beginner at art, and you go around demanding that oil on canvas shouldn't involve brushes and mixing paints because that's too hard, or that metal sculpting shouldn't involve sparks flying out because that's too scary, and instead everything should be as easy as using crayons. That'd just be silly.
At some point in the mastery ladder, you will run into established tools and you just have to learn how to use them.
There's certainly an argument to be made about how rough the ground is when you've veered off the beaten path, but if we were to make a road analogy, while something like setting up a M1 assembler under linux might be way out in the weeds, installing node.js is at worst akin to driving in from out of town.
click Help.
select Toggle Developer Tools.
Realize you're writing code in a browser.
Or editors/IDE inside the browser:
https://webide.se/ https://codeanywhere.com/ https://aws.amazon.com/cloud9/
https://github.com/cdr/code-server (headless vscode) https://github.com/pylonide/pylon (fork of c9v2 when it was still open source)
But I agree with the general idea: The barrier to entry for coding is quite high, which puts it out of reach for so many.
Flash is dead now, but it was an environment that really lowered the barrier. People with barely any coding skills could program with it. But a lot of them had other skills. The results were often awful or horrible, but some really amazing things were also created.
When I people say "I want everyone to be able to code on the web in JavaScript", what I really hear is "I want an Internet full of broken, unusable, and possibly dangerous garbage, written in one of the least safe and elegant languages ever created, where most things are completely hostile to the majority who come across it."
Additionally, if this person can't read a ten-minute tutorial on how to install Ruby with homebrew, imagine what else they probably won't do:
- Read/write a CoC or contributor's guidelines - Spend time translating their web pages, or making them accessible - Understand basic security and privacy issues/best practices - Take the extra time to make useful bug reports, or make reports at all - Read (or write) references, documentation, or tutorials - Learn general netiquette for commits, mailing lists, pull requests - Understand the basics of open-source licenses
And maybe this is totally fine for your completely personal hobby project, but the next logical step is having other people use it. This isn't the kind of behavior we want to carry into that next step.
2) you operate web browsers via text commands just like a CLI - it all starts with the address/search bar. When you use your search bar to google, you are effectively typing commands into a CLI.
IMO if you can’t install some basic software like node or pip then yeah, maybe the software isn’t the issue and you just need a better fundamental understanding of what it is you’re trying to do. Plenty of people install node, every day, without issues. It’s not rocket science.
If you avoid CLIs, I don’t trust you as a software engineer, because it feels like you’re not looking for the right answer to the problem. It feels like you’re looking for the easy answer to the problem.
Part of the beauty, to me, of the CLI is like starting a painting from a blank canvas, vs a GUI being like a coloring book where you just fill in between the lines.
I agree with a lot of the commenters here that eventually you'll need to learn the arcane things! But I think there's something to be said for being able to just get started writing code and having it run. I did a lot of my early programming on a TI-83 in math class in high school while pretending to pay attention to my teacher. I didn't have to configure it, or do much other than learn the programming language I was writing code in. Later, in college, my intro-level classes were in purpose-built educational IDEs like DrScheme, where I once again just typed my code into the textbox and then ran it from the same UI. I probably would've grit my teeth and pushed through learning all the extra stuff anyway if confronted with an emulator, a shell, and figuring out what `$PATH` refers to, because I was pretty into computers and had high mental pain tolerance. But I can't say it would've been a better onboarding experience, and eventually, I learned all of that stuff anyway -- so why put people off with it at the beginning? Let them do the fun stuff first, then teach them how to do it "for real." In a lot of cases, the not-"for real" version might even be enough to suit their needs.
Or why not your terminal :) https://www.destroyallsoftware.com/talks/the-birth-and-death...
Yes, it would be very convenient for beginner programmers, but beginner programmers are a very small subset of browser users. (And a robust and even less-secure-against-”paste this command into your browser programming environment” attacks version would be good for more advanced programmers, but even worse for everyone else.) And having specific browsers targeting each of those environments would be possible, but negate (especially for beginner programmers) a significant part of the advantage of having the programming environment integrated in the browser in the first place.
How can we remove as much yak-shaving as possible, so that a person who can understand logic can use it to make computers do things without first learning a bunch of esoteric knowledge required to get the ball rolling? How can we make more Excels?
I think the idea of including a real, accessible, coding environment in a popular web browser is a pretty neat one, if for no other reason than the fact that everyone has a web browser and generally knows how to use it. It would open things up for a very large number of people. Like the author, I doubt Google would ever do this, but it's fun to think about.
But the authors request that this is built into the browser seems insane to me. Why would we bloat browsers with unnecessary stuff just to avoid hitting an app store, which is also extremely user-friendly? It's literally a request for bundled bloatware. No, hell no.
We aren't talking about people who make a concerted decision to "go find and install a tool for programming", and who just don't want to put in the effort to learn the "real tools". We're talking about people who would never think of themselves as programmers in the first place. I think you underestimate the significance of the small barriers, even ones as small as a search-and-install step.
I do think it would be silly to drop Node into Chrome wholesale, since the bulk of Node is V8, which is the JS engine Chrome already includes. But what about a version of the JS console that's designed to be exposed to everyday users, for interaction with the sites they use every day? What about a button on the New Tab screen for opening an interactive web dev space similar to CodePen, which can trivially save the resulting files to the local file system (and load projects from there)? They could re-use most of the GUI components from the existing Sources tab in the dev tools. What if it included a preconfigured (simplified) reactive front-end framework so people could get started making custom GUIs? Something like this: https://mavo.io/
I think you over-estimate that barrier. It hasn't stopped things like TikTok, Instagram, etc... The modern world is installing apps. It's not a meaningful barrier.
What you're describing with organic evolution into programming is a cool property of things like Excel, yes. But you don't get that by just bundling an IDE into a browser, either. You still have that barrier of the user needs to decide they want to program. Which they don't want to do when they're just browsing reddit or whatever, that's not a natural evolution path like the Excel one.
- Filter content feeds by custom criteria
- Count the number of items in a list
- Tweak a blog post's styling to make it more readable
- Automatically click a large number of items at once (instead of manually)
- Delete cookie overlays and adblocker-detection overlays
Just a few weeks ago a friend asked me how he could go about putting together a little GUI for navigating some D&D rules
Not that the average person would necessarily bother to do all of this stuff, but I think there's a larger space of usecases here than you're assuming
I think you have to admit, most people anyways, that you're ignorant of a lot of systems that came before you. If I gave you an IBM 704, would it be "easy" to program? I would not enjoy that, I think we'd all rather write Fortran on a MacBook. (ask yourself why?)
I have replaced an alternator, but I just learned older cars had "generators" and they're quite distinct (though very similar). I don't know much about "points" or distributors, but I've replaced ignition coils & spark plugs, I feel like I basically understand the gist of that. But I don't know what came before it. I wouldn't fault a mechanic for not knowing points, but an automotive engineer should.
To me, this is where perfectly good wrenching (programming, coding, per se) on its own might be unlikely to advance the state of the art (in software/automotive design). Maybe: To be a really good technician, you should focus narrowly on the hardware/software you service, and not necessarily what came before. But to be a really good engineer/developer/designer, you should focus broadly on everything, to as much depth as you can. Ideally, why not both?
I learned HTML in notepad, then looked for game makers, played with Winamp visualization language, anything that was easily programmable. Did y'all just go straight to writing Rust in Vim?
The idea was to make file-editing possible and simple in your browser. The extension let you edit file:/// URLs in your browser using the (now unavailable) NPAPI. The results were fun - especially for web development, where I could edit the CSS in one tab, and have it reflect in the second. Chrome added a "workspace" editor a while later, which was similar.
A blog post on why I really wanted to make it: https://github.com/captn3m0/captn3m0.github.com/blob/master/...
Coding is about solving problems. Coding is not for everyone. If he cannot even be bothered to find out what $PATH is, then coding is not for him.
He wants to doodle, not code. Why should he expect any browser to cater to his needs?
Well, I'll keep using it, dragging it along kicking and screaming... until it's deprecated or improved, I guess.
Second, there are many tools like https://repl.it/ and https://aws.amazon.com/cloud9/ that let you code in browser. I have used a half dozen similar tools on educational websites that allow coding in browser.
Not everyone needs to know how to code, how to be good at it, or have the temperament for it. And the fault rarely lies with the environment around programming.
I think this author is a the perfect target audience for Gitpod https://gitpod.io/#https://github.com/eclipse-theia/theia. With it, you can login with Github, paste the URL of your project into the address bar, and boom! You've got a VSCode clone with NodeJS installed already.
I've always assumed it was more a "me" issue, and so I've attempted to work in the more "normal" manner, but with pretty poor results. I've all but given up on Python due to its lack of a decent REPL and gone back to Ruby, where at least I have pry to dig in with as needed.
Although, his idea almost came to pass: Back in the day, the W3C's reference browser, Amaya, had a built-in HTML and CSS editor allowing for in-place editing of any content the browser could view. You could only save back if you had upload credentials, but still. With continued development, Amaya would have probably grown a JavaScript editor as well.
Side point: if you’re here because you’re interested in building solutions for people at scale, then maybe don’t tell users they’re stupid or lazy.
Building something for a mass audience means really understanding their problem, not just throwing solutions at them.
Sure, there’s a developer console. You can enable it, open it up, and then have a blank canvas. Then what? That’s not accessible to 99% of people out there.
$ pacman -S nodejs python-pip ruby
also $ pacman -S ghc lua erlang elixir rust gcc clang postgresql docker podman
---But seriously. There is no market. Browser is a javascript runtime, it is easy to make self-contained HTML like self-contained SWF before.
Nodejs is v8 running on the server. In theory it should be possible to emulate in the browser. In practice someone has to implement that first.
Here’s my pitch: build a browser that comes pre-installed with node.js, an IDE and a simple runtime environment.
Welcome to all editors written in Electron.It doesn't even need to come pre installed, as long as the GUI could install node almost silently.
E.g. if VSCode had some intelligence built like when it sees package.json and would prompt "Would you like to install Node" and it would do it's magic if user wanted. Lots of small problems would need to be solved, like where to install it etc.
And my company is actually working on this exact thing right now and we'll be sharing more info on how we think it works very soon!
I'm off to buy a computer science book - any recommendations?
Ideally, the system should have a good debugger and have an option to be self-hosted like TiddlyWiki (with an option to be served by a normal server). I did some experiment in this regard (https://pavel-krivanek.github.io/amber/amber.html - only "legacy IDE" work) but then you can save it and it will save the new version with all the changes you did as a self-hosted HTML file.
NodeSnippets – a cross-platform snippet manager with a Node.js playground. It is in the final stage of development, so if you are curious about it, please leave your email on website below and I'll notify you when the app is available.
Also, how can you fail to install something like NodeJS?
But as they mention, it can be hard to install ruby/python. Node is normally much easier. I've given up on getting react native going on my personal laptop, and I do react for a loving.
Very much enjoying doing some rails after years of JS
I'm glad the installation guide was helpful. Here's the full guide for Rails:
https://learn-rails.com/install-rails-mac/index.html
Take look at the `$ rails new myapp --minimal` option that's new in Rails 6.1 It gives you Rails without all the extras. Kind of like a 2010 Rails.
Technically you can write code in the dev console, or using javascript bookmarklets which is similar to code in a spreadsheet.
Sounds like GitHub Codespaces ought to be up his alley.
To be hired as a developer you have to know 1000x more, small and not related in any way details.
Now we can start talking about gate keeping, because doing some side project might be hard but there is still a lot of "low code" stuff that you can do. Setup a blog? Go configure wordpress.
If someone wants to be a salaried software developer issues like in this blog post are going to finish his career before it has even started.
I understand that author might be annoyed - but understand how people who are making living out of it are feeling when they are denied job opportunity because they did not know that one trick that interviewer knew...
Literally 7 entries further down.
We will have to add some more jargon new ways to do things so that the people who are not constantly keeping up to date are left behind. Its always been the way.
As a side note I do wish my browser has better programming tools for design, when I'm doing design I do all the editing in the browser and copy the js/css over when it works or looks nice.
As for your note about css editing, have you tried Brackets? http://brackets.io/
Failed to install node
Failed to install pip
Failed to install ruby
I stopped reading after those linesSounds fishy to me.
The author is lazy, and is channeling his energy into complaining rather than learning. He believes he is by default an expert on the 'user friendliness' of programming.
His comments don't really make much sense, and come across as whining that should be ignored.
"People hate command lines - not only do they LOOK scary, they give weird unhelpful error messages and… you have to type everything. Ugh. "
You have to type to write programs. I truly believe that this person has had a conversation with friends about how programs should write themselves by you just telling them vaguely what problem you'd like to solve. And unhelpful error messages? You know what would be an unhelpful error message? 'ls' outputting a commandline tutorial every time I mistype a directory name so that people like this can have his hand held and continue to be intellectually lazy.
I have no patience any more for lazy know it alls in regards to programming.
Programmers tend to get very proud of the completely pointless knowledge they have to acquire to use the pointlessly complicated tools they do, and they confuse that with being clever.
It's not. It's really not. Nothing has to be this esoteric and annoying. We've just chosen to keep things like this because we think it makes us clever.
Programming can and should be much, much more user friendly than it is now.
Dismissing other people’s work as awful, pointless on the Internet. Well, at least it makes you look clever, in certain eyes.
I use Bash a fair amount and I don't consider it overly complicated as a shell. There are some rough edges in Unix, like handling spaces in directories, and I'm no fan of Bash as a scripting language, but I wouldn't say the basic model of the Unix command-line interface is overly complicated.
-o for outfile / output
-f for file / infile
-q for quiet
there are already many of these, and for the others that arent so common between tools. Compilers will, inevitably, need switches that, say, a code editor doesnt need.
You're right that, for example, `watch` has -n for "delay", and `htop` has -d, but then again those accept different types (seconds vs some other sub-second measurement).
And it brings no good things. This is entirely superfluous complexity. You could have all the benefits with far less complexity if you just put in the effort to build and design things.
But we don't. We've decided that it is impossible to do so. And many people have decided that knowing all of these obscurities makes them smart, and they will look down on anyone who doesn't.
> many people have decided that knowing all of these obscurities makes them smart, and they will look down on anyone who doesn't.
I don't think it's sysadmins who are pushing for this messy state of affairs, it's that various specific projects refuse to follow the POSIX conventions, presumably for reasons of backward compatibility/general resistance to change.
[0] https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1...
[1] https://www.gnu.org/software/libc/manual/html_node/Argument-...
[2] https://www.gnu.org/prep/standards/html_node/Command_002dLin...
https://news.ycombinator.com/item?id=25305575
I admit that I'm kind of conflating the concept of a terminal emulator, a shell and a shell language, but the shell model has plenty to improve upon.
This shouldn't be supported in a first-class way, it should be supported as an extension where applicable, in keeping with Unix principles. We already have this with X11.
> It should be possible to `cat` an image, or a video, or even previews of Word and Photoshop documents
Again this can be done with X11 if you want it.
> Programs should be able to raise notifications without relying on third-party/OS-provided utils that have a drastically different API and availability across platforms.
Interesting idea, perhaps this could be done with a metacharacter, akin to the 'bell' character, or perhaps even overloading the bell character. There could be a convention along the lines of BELL BELL your message here BELL BELL.
> Rich read-only visualisations of progress should be possible to call up with a few lines of code. I want to see a `dd`, `mv` or `cp` with a graphical progress bar at the bottom of my window.
wget and curl indicate progress in this way. I'm sure there are programs out there that would give you this.
> We should be able to render a piece of output in 3D, if we so desire. I don't want Crysis, but I do want a Matlab logo that I can rotate by dragging my mouse and graphs that zoom when I Ctrl+scroll at them.
Again we have X11 for this. It's not easily done, which is why we have drama like Wayland which lacks network transparency. [0]
> Support for file pickers and rich selection/filtering of file/directory lists. Not for sandboxing, but for convenience.
A file-picker could be implemented as a TUI, which is roughly what Midnight Commander gives you. Perhaps a Unix shell could support mouse-clicks for selection from its auto-completion listings. I think that would be possible, perhaps it's already been done.
> A command line builder (like one of the classic Apple OSes had, cannot find a reference now, or something like the one in Fish but more advanced). Only valid combinations of parameters will be supported, mutually exclusive commands are impossible to select.
I agree it would be great to have a system like this, akin to type safety. Perhaps applications could distribute something akin to a regex to describe their syntax. I imagine something like this is already implemented for auto-completion purposes (e.g. how Bash can auto-complete git's verbs).
> Terminals should be able to intake gigabytes of input per second, up to the limit of the hardware, without choking up.
I don't know quite what you have in mind here but you can already do this in the way that matters. You can easily run a Unix command to tarball a local directory, then compress it, send it over SSH to a remote server, and have that remote server decompress the stream and then unpack the tarball, all 'on the fly' without ever saving the intermediate streams into persistent files. This all works very well in Unix, giving you a lot of flexibility/power and good performance too. (Doubtless the flow I described would be slightly faster if a dedicated application were used instead, but Unix pipes are pretty fast).
> We should be seeing 60FPS and beyond as a normal feature.
Which command-line applications would benefit from 60fps? Better TUIs would be nice but I don't think the frame-rates are the issue there.
> We should finally get unlimited scrollback enabled by default
You can probably enable that if you want it.
> We have the space for it, either in RAM or persistent storage
Not if you accidentally stream /dev/random.
> If not, it should be adaptable and drop the scrollback buffer that is lower priority than other applications on the system if they need more resources.
This approach would have the downside of being less predictable than the current one.
> Unicode should come as standard. Emoji should come as standard.
Sure. I think Unicode support is pretty good though, I believe it's used in many TUIs.
> End termcap. We should be able to hash out ONE standard to rule them all.
I imagine this is one of those things where there will always be a few legacy systems that still need to be supported.
> end Bash
I agree that Bash has many unfortunate quirks that are annoying at best and are outright dangerous footguns at worst, especially when it's used for scripting. The only advantage of writing a traditional Unix script, as opposed to say a Python script, is portability. configure scripts, for example, run on just about any Unix, with no dependencies.
> consider adding hypertext support. It's here to stay, and not just in the form of HTML
Not a bad idea, perhaps this too could be done with metacharacters.
[0] https://wayland.freedesktop.org/faq.html#heading_toc_j_8
The point is, we should not HAVE to use a different environment. Images and media should be first-class citizens in a CLI just as much as they are in a GUI. There is nothing about a CLI that says it has to only handle text.
Breaking things down into meaningfully separated subsystems is part of why Unix has been successful. What you're suggesting would mean hugely increasing the amount of complexity in SSH. It makes far more sense to use SSH as the transport solution, using a separate system to handle drawing/windows/graphics acceleration/user input into the GUI.
Not all servers support a graphical environment, and neither do all clients. This allows for lightweight servers and lightweight clients.
> There is nothing about a CLI that says it has to only handle text.
The command-line itself should be a relatively simple canvas, not a complex rendering subsystem. It's already rich enough to support TUIs, including mouse-click support. If you want more than that, use a proper GUI.
If you want a very basic GUI over SSH without a full-blown GUI like with X11, you already have the option of using a TUI like Midnight Commander. You can preview images on the command-line, with a tool like imcat. [0]
PowerShell streams Objects instead of characters/bytes. But that is more compatible with cmd than sh.
Many other points are more about the terminal emulator. terminiology has some of those features AFAIK.
If we rebuilt the command line today it would be massively better
Ctrl+C sends SIGINT, while CMD+C copies text, and running commands when a newline is pasted can be disabled.
Shell (just like language) is a medium. We use it to communicate our ideas, not because it is great or flawless.
But let's be honest, the design is pretty esoteric.
You want to find a file containing a particular string? For some reason the tool is called 'grep'. The name is followed by '-r' then the search term, then the directory to start the search in.
And it won't be long before you start encountering tools with such intuitive names as 'sed' and 'awk' and 'crontab'
The tool for finding a file by name is better - that's called 'find' - except compared to grep the arguments are swapped: The directory to search is now the first parameter, not the last.
Oh, to find the *.desktop files on your system you did a find on / ? Yes, the messages like "find: ‘/proc/19917/fd’: Permission denied" are normal, you should ignore them. It's easy, simply add 2>/dev/null to the command.
Before you know it, the command line infects your brain and you start saying things like "sudo and nohup are perfectly good names"
You bet that `ls`/`cd` is a great name for me - it takes 2 characters and I don't have anything similar conflicting on the PATH.
For a beginner? Not so much - `change-directory` and `list-directory` would probably be better. It's the same with regular expressions `^[A-Z0-9]{0, 3}$` is perfectly readable once you're reasonably familiar with the syntax.
It's also true in other fields such as mathematics or music - the notation is quite good once you're proficient in it.
g - global re - regex p - print
https://en.wikipedia.org/wiki/Grep#:~:text=Its%20name%20come....
just try to imagine the language as the OS. if it were good enough, there would be no need to have different languages, and one would not have the horrible level of fragmentation and harmful shared state that characterizes today's dev environment. most people have become blind to this fact.
then there is the problem of selection bias: the majority of developers in this business have tolerated an insane level of abuse. most are proud of their abilities, even if they can be characterized as "they know how to wade through layers upon layers of shit". it is often hard to have a discussion about this, because they take this as personal criticism.
the situation we live can be described as a paradox: the Unix culture is at the same time both a pinnacle of OS design (from days gone by) and a steaming pile of shit with so many bad practices abound it is no use highlighting one (with the command-line just being a visible part).
just pointing out the obvious.
The general trend in programming has been moving TOWARDS command line interfaces, not away from it. Mac OS didn't even have a built in command line until 2001. Microsoft Windows in the last few years has had its command line functionality enhanced, to the point that the GUI only Server versions of Windows have been stripped back, and now there are CLI only versions of Windows Server.
You can do more now in a command line than ever before, you can do more now in a command line than you could in 2001.
"Everything should have a GUI alternative" has been tried and it has failed. Almost all computer efforts through the 1990s were focused on making everything GUI only.
What are you assuming about my experience level?
I thought it was perfectly clear that the argument isn't "there should be no command line" but that knowledge of the command like should't be necessary for beginners. Just like e.g. knowing assebler shouldn't be (and isn't) neccessary for programming. That's why I put the parenthesized statement above, specifically so you understand what the argument is. Or you could just read what I responded to.
The command line _IS_ a programming language. If you do not want to learn it then you do not want to learn programming.
You can create and distribute a world-class iOS app without having to touch a command line even once. It is just not necessary. Nothing gets easier if you do.
Because iOS has actual well-designed modern tooling.
But sit in front of a device with a keyboard - one that's meant for creative use - and suddenly, the command line shines as a force multiplier.
Yet, to program for it, you don't need to use the command line. You just never need to touch it. It is possible to make a fully productive programming environment where the command line is not necessary, if you just put the effort in to do it like Apple has.
Your statement truly shows how unaware you are of actually good toolings and solutions for software development, and, frankly, you should not say a single word more about software development experience, if only not to embarrass yourself even further.
At least pro-console users had some sort of argument for their setups.
You cannot comprehend a simple idea that there are much better ways to develop software, than crippling, mind-bogglingly bad Xcode and friends.
I still find Xcode very productive, pleasant to use, and far better than almost any alternative I have seen.
It has some annoying bugs, some annoying limitations, but none that would make it any worse than the absolute shitshows you get elsewhere.
I do know what I am talking about, here. I have done a lot of this.
That is simply not true. I have plenty of colleagues that do everything in Visual Studio and never touch the command line and they produce solution to hard problems that are absolutely useful and well written.
Would you want your kitchen to be limited to plastic spoons and silicone bowls, because that's easy for a 2 year old to grasp? Pots and stoves and knives, after all, are too complicated, and God forbid the knife is metal and the stove is powered.
You can't do useful things and cater for beginners at the same time, because that implies nothing can ever improve beyond what a beginner can grasp. The job of a beginner is to become proficient. They can achieve that through learning, not through expecting rewards just for showing up.
(Hell, situation in programming is actually quite good for beginners. You can go very far with toys. For instance, people make and sell complex video games in clicker tools. The experience of pushing such tools to the limit tends to shine a light on why programming is complex in general: you're pushing at irreducible complexity. Serious tools like command line exist to help you manage that complexity better.)
Wow, if I ever saw a comment on HN that was fundamentally wrong on many levels, this was it.
No, a command line interface is not "a layer of abstraction". A command line interface is an interface. That's it. Instead of pressing a button, you run a command. If you want to pass settings to an app when you launch it, you use the command line interface. If you want to script away a task, you call the command from your script.
That's it. It's not a layer of abstraction. It's an interface. They exist for many good reasons.
Why, yes?
> Not useful, but necessary for a beginner to touch the command line?
Do you understand that you're asking if a beginner needs to run or pass a setting or even automate any operation that's relevant to programming?
I repeat, a CLI is an interface. It's an interface to perform an action and/or pass a setting. That's it. What warrants this irrational opposition to an interface?
You must not visit political threads much.
But seriously, you could have said that in a constructive way.
> Programming is massively over-complicated for no useful reason
And then offer absolutely no justification for why this is the case, and to shrug off any questions as to what obvious improvements could be made.
You offer no useful contributions to the conversation by doing this. None.
I am saying, the fact that those tools are bad is not a given. We could have better tools.
What you seem to miss is that developers tools are the best tools created in computer science, period. That's because we use them and we usually are too lazy to deal with stuff that bothers us, so we improve over time(and much faster than we do with tools for our customers). The only real problem is the learning curve, which is hard to avoid. So no, those tools are not bad. They just require some learning first, as pretty much any tool on this planet.
And yes, we could have better tools and we will have, that's how progress works. You just didn't make any useful suggestions how to get there faster.
I can use the command line. I've used it for decades. I know it intimately, and I know just how many problems it has. Problems it doesn't NEED to have, but problems that we have just decided will be there, and we learn them, and live with them, and then complain when someone points out that they are, in fact, problems.
Developer tools really, REALLY aren't the best tools created, in any way, shape, or form. They are generally AWFUL. But we've convinced ourselves that we are clever if we know how to use these awful tools.
I know how to use the command line. I could do it. But there is no reason to do so. It would not do a better job than the tools I have been given in the GUI.
1. It's faster. You can(and will after some time) remember hundreds of different commands. That means that to make computer do something, you just need to type. Typing is usually way faster than clicking in GUI, especially for non-trivial tasks, which require moving through several layers of GUI.
2. It's scriptable. I can automate pretty much anything invokable from command line through.
3. It's gluable. I can connect output of the program to any workflow I imagine.
All of those are usually strictly worse in GUI. Of course, GUI has it's uses(analysing data is usually easier in graphical environment) and there is nothing wrong with your personal preference. I object solely to your qualification of CLI being worse just because of your own taste.
Sure, in some cases, those are useful. But not always. And programming, in general, is not really a case where those things are useful on a minute-to-minute basis.
In your opinion
Trying to project your personal preferences as objective reality is not helpful. You don't like CLIs, fine. You sound like you've got some good reasons to not like them. Your assumption that everyone else shares your values is a little weird.
Personally, I love the CLI and have yet to find many instances where the GUI is easier to use and more useful than the CLI alternative. Does this mean I think all GUIs are objectively bad? Of course not. It's personal preference.
But the fact remains, they are not useful when doing iOS programming, because the tooling provided does a BETTER job than the command line.
> because the tooling provided does a BETTER job than the command line.
Once again, better for you.
I think it could be a lot less of the two former and a lot more of the latter. But it will not be, because people are unwilling to even admit it has any flaws.
> Please don't fulminate. Please don't sneer
> Please don't post shallow dismissals, especially of other people's work. A good critical comment teaches us something.
This is in reply to
> We've just chosen to keep things like this because we think it makes us clever.
Sneering at the unspecified "we".
> Programming can and should be much, much more user friendly than it is now
Work has been done on programming language accessibility for decades. It's often been controversial, e.g. Dijkstra versus BASIC, despite the huge practical success of BASIC as an introductory language across the microcomputer revolution. It's not enough to assert that something should be better, you've got to say something about how, in a way that at least acknowledges what has been tried already.
(Many of the ways in which the Javascript ecosystem is "bad" are the result of it being a horrible commercial battlefield over who gets to control the internet and all the computers connected to it and for what purpose)
[0] https://tutorials.yax.com/learn/your-first-custom-html-tag/i...
You can get low-level and write assembly on a 6505. Or you can write python programs in Python. Or you can break out a terminal & node.js and a browser and build an entire website.
But you'll need to put in different amounts of time, effort, and research to achieve these different things.
While there's no doubt there are some libraries/tools/systems which are poorly designed, perceived complexity may often be due to the requirement to support a wide variety of new and legacy systems or to support layers of the tech stack that many people are not even aware of.
"We've just chosen to keep things like this because we think it makes us clever."
If I could make my job any simpler I would jump at the opportunity. Personally I often marvel at how relatively quick and easy it is to quickly develop useful programs.
Perhaps if you try implementing some of these more simple tools the reasons for the underlying complexity will reveal themselves.
Two of the pieces of irreducible complexity that beginners have problems understanding (or even appreciating!) are change management and software delivery. If a newcomer created a simple but novel program and it turned out to be successful, two sure-to-follow requirements are:
- Now someone else wants to access and suggest changes to your project. In parallel. Without breaking anything.
- Now the software needs to be shared with others outside of the development environment.
Both create a surprising amount of complexity and require fourth- and fifth-dimensional thinking. You have to learn a version control system (probably)! You have to learn how to perform a code review! You have to do learn software design and hopefully documentation.
You have to learn and leverage at least one packaging ecosystem for the development approach that was chosen. Hopefully you chose one with an accessible packaging ecosystem, assuming that exists!
But no, what I am talking about is all the tooling around the programming, which in turn relies on the massively archaic Unix command line.
And 10 years later: people want ways to write a ten liner, in one line compressed.
The first one is easy to understand, easy to follow, the second one, not so much, even for the person who wrote it.. (after doing something else for a year for example)
I hate it...
There is nothing wrong with that. People want to work with higher-level concepts, which allows them to solve more complex problems without burning their brains out. I'd go as far as saying that the utility of a programming language is measured in its ability to compress code with abstractions. All this means you have to first understand the abstractive tooling and the abstraction itself before you can work with it, but this is how it should be. Most programming languages are tools, not toys.
The alternative would be to handicap all programming, make it impossible to solve complex problems with it for the sake of beginners, who want to get accolades without putting in work. You can't run an industry on participation trophies. By this line of thinking, we wouldn't have this conversation because inventing computers took work. Hell, none of us would have any conversation whatsoever, because language itself is something that takes years to learn.
Programming is in some cases over-complicated, for no reason. If you dig deeper however, you'll sometimes learn that the thing you considered overly complicated, was actually designed that way, not to annoy you, but because the same tool has to support use cases you didn't consider or don't understand.
That's not to say that things couldn't be simpler in many cases.
Witness, say, beginner python tutorials that start with "These 15 tools let you set up a development/testing environment that ensures your code can be tested against every platform that has ever run python". Useful tools, but poorly matched to the 'I just want to *learn how to* print "Hello World"' use case. I suspect we're all a little guilty of that occasionally.
Which part is over-complicated for no reason?
I think the point was that some things do not justify their complexity. Especially if you discount inertia.
Trivial example: the creat function could have been named create. That's one more thing folks just have to know and the reason for it isn't much better than "just because".
Again, can you provide an example? Because like you implied, tools like node.js and npm, were made with a purpose. They are professional tools made for professional programmers to solve commercial problems. They aren't made for beginners and novices to teach them about programming concepts. Their complexities stems from the fact that they need to support all kinds of deployment and runtime use-cases and can't be too opinioned on how they should be used.
>Trivial example: the creat function could have been named create
That's your example? Really?
Some are essential complexity, sure. But many aren't.
Oh come on. You're complaining about a function name (created decades ago) in a system level language as an example of 'needless complexity'. That's not complexity - that's just a quirky name kept around for backwards compatibility. By the way if you don't like 'creat' or find it difficult to use then don't use 'creat' use 'open' with the relevant flags. Any complexity around C programming does not come from this ... Honestly.
I have yet to see someone actually point out a good example of needless complexity in programming - something that the blog author is complaining about that apparently you agree with but cannot come up with a single reasonable example.
The question is whether it is easy to improve.
Writing good software is hard. You say it like programmers have ego, but you know what is better than ego? Money. People would lay down their ego to make money (by making a more user-friendly app).
But clearly it’s hard to write good apps. If you try any graphical programs you would see that it sucks. You default back to the terminal and vim because it’s better. I choose what works, not what gives me pride because this is work not hobby.
I CAN use the command line. I know very well how to do it. I have done it for decades. But when I program for iOS, I don't need it. The tooling is good enough that I never need to. So I don't.
There's no reason this couldn't be the case for other environment too. There's nothing magical about iOS other than that Apple actually values developer convenience and put the effort in that others are unwilling to do.
> Your scientists were so preoccupied with whether or not they could, they didn't stop to think if they should.
You can take that either way :)
What you are really complaining about is the fact that nobody is there to shout in your face that these options exist.
It takes practice to get computers to do what you want to do well and no matter what tools you use getting to know the tools will not even take 5% of the time that you need to get to a place where you do what you want.
Furthermore, the clamoring that there is some sort of nefarious gatekeeping cabal keeping programming from being easy to whoever cares to shout about it is fundamentally dismissive of the actual effort and practice put in by people who used to have (but no longer have) this problem. Sometimes the answer is just that it's not trivial thing to do and this shouldn't be a surprise to anyone. We don't think this of math, we don't think this of making good drawings or paintings.
We do and we try every which way to make it 'natural' and 'easy', sometimes with vaunted social goals like stemming drop-out rates. The reality is, at some point, you just have to sit down, put your head down, and power through. Sometimes, like you alluded, there are no shortcuts.
There are programming environments (sometimes even gamified) for learning, but if you want to use something to solve general purpose problems, you just have to learn it.
If PATH and installing python is a struggle for them, hoo boy, no wonder they don't feel like part of the "code club".
I merely type into my favorite search bar with auto complete
"make sure /u"
And I get:
"make sure /usr/local/bin is in your $path"
And top result is a SO spelling out what this message means and how to check.
Engineering, of any discipline, is the sum of three phases: domain research, applying that knowledge to build something, testing that thing you built. With experience, you spend less time on 1 and more on 2, but with learning software, you spend the lion's share in 1.
We still need to lower the barriers to entry. That involves teaching heuristics on how to solve problems.
The author is certainly correct on some things, but makes no good argument for why node.js should run in the Browser. I'm not even clear he understands what node is, or what he would gain from being able to use it in the browser, when it can already run Javascript just fine as is.
No, Google should stop the show and bring node.js to his browser because he can't be bothered to go to Google to look up what a PATH is.
I'm not saying programming can't be much more user-friendly; it certainly can be and should. Heck, maybe Chrome would do well to ship with a lightweight IDE to edit code in outside of the console. But the author hasn't listed a reason node.js has a place in Chrome natively, and is going on to claim they should. Talk about entitlement.
For what sort of users? It's clear a number of people here consider the command line difficult. I do not. There are many tools that make simple tasks very simple. I use it for manipulating tab files. I can pipe data through scripts and back through command line utilities, pipe it directly into a database, or do the reverse. It's very simple, and very powerful.
Just because you don't understand it or aren't familiar with it doesn't mean it isn't simple, powerful, and user friendly.
Most programming languages are very simple. a = 1, b = 2, if a+b > 2, doSomething(). You can't actually make the logic simpler than that - this is why visual programming fails. It's still programming, but it turns out a limited visual/gui tool to do these logical operations is much harder to manage and work with than actual code.
Consider all the things you've committed to memory that you've had to learn to do those things: all the archaic command names, all the one-letter switches, all the unreadable awk lines to re-jigger the formatting between tools, all the gotchyas and edge-cases you had to deal with in your scripting language, etc.
I think the point is that most programming tools aren’t made to be easy to use the first time. They’re made so that the 100th or 1000th time it’s fast even if every time it’s been a little different.
I didn't cite the commandline itself as the problem. PowerShell does a significantly better job at making sense than typical core-utils do, but you hear people used to core-utils bad mouth it all the time because it isn't exactly the same as core-utils.
And I submit that your lack of ability to conceptualize a GUI for doing the same thing does not mean one can't exist, but that is beside the point, because I don't think knowing how to use those tools is a necessary and fundamental part of programming anyway.
Someone who is just getting started in a new programming environment shouldn't need to know the ins and outs of a dozen different tools, especially when those tools are used to solve problems that user has not even conceptualized the existence of yet.
Again, this all comes down to one thing: why is it so damned complicated just to get enough of a programming environment running that the user can write a goddamned program? Not write it well, not write it efficiently, just f'ing write it in the first place?
If you have the time I would challenge you to spend an hour or two mocking up what you think a GUI with the same capabilities as powershell or bash would look like. I would genuinely be curious what you come up with. Personally I do not think it would be possible to do in an intuitive way.
> Someone who is just getting started in a new programming environment shouldn't need to know the ins and outs of a dozen different tools, especially when those tools are used to solve problems that user has not even conceptualized the existence of yet.
For some more complicated environments yeah it is hard to get the environment up and running. Python environment hell is a very really thing. But if you want a a simple environment to write a simple program is it trivially easy to get one up and running.
I am on computer I’ve never downloaded python on. I just googled python IDE. Clicked on the top result, pycharm. Downloaded latest release clicked next 4-5 times without looking at options. Opened it. Agreed to some TOS. Clicked new project and then clicked next without looking at any settings. Then I clicked the big green run icon. It printed “Hi, PyCharm”.
Python is a beginner friendly language and if I wanted to start programming it is probably the recommendation I would get. I did not have to know anything to install it and start programming.
And even easier if I want to do front end development I just go to codepen.com and that’s all I need to do!
You need that knowledge to build production level applications. The problem is not that these tools are useless, but rather that the audience you are thinking of doesn't care about them. Instead of crapping on other's people's work just look for things that are actually suitable for your own needs instead of trying to one up the experts.
>It's not. It's really not. Nothing has to be this esoteric and annoying. We've just chosen to keep things like this because we think it makes us clever.
I'll be honest. I don't like people like you. You are making things harder for yourself. You have chosen to go down a difficult path and then you complain that the experts that need these difficult tools are stupid.
Why? There are lots of easy to learn programming languages. You can start off with a very limited and restricted environment. Just fire up a google spreadsheet and start writing javascript if that is all you want. Don't complain that writing a production level web application is difficult because you need to know about complicated things like what a HTTP server is and why it has to run on port xyz and why everyone calls their own computer localhost.
>Programming can and should be much, much more user friendly than it is now.
It is so user friendly even kids can pick it up if their game supports modding. You're not looking hard enough. If someone were to hand you everything on a silver platter you would never learn on your own.
Like what?
I don't know of any developer that likes complexity for complexity sake for productive systems.
I know there are some esoteric programming languages or obfuscation techniques that make simple things more complex, but they a either meant as a challenge for fun or efforts to protect IP.
Do you have some examples where you have observed such design decisions?
What are you trying to do?
Say I'm Santa and have a list of names in "naughtynice.lst", in the format
Joey Bloggs,train,nice
Johnny Doe,car,naughty
Mary Lamb,car,nice
etcI can get my shopping list by simply creating a file on my machine
my $i = 0;
my $toys = {};
my $coal = 0;
while (<>) {
chomp;
my ($name, $toy, $nice) = split(/,/);
if ($nice eq "nice") {
$toys->{$toy}++;
} else {
$coal = $coal++;
}
}
print "$_: ".$toys->{$_}."\n" foreach keys (%{$toys});
print "coal: $coal\n";
and then typing perl test.pl naughtnice.lst
to run it. Python I assume is similar. I'm fairly sure that OSX comes with perl, python and bash if nothing else.Now you could say that you don't like the syntax of perl, or python, or basic, or java, but actually knocking up a quick program and running is no harder than writing that same code in some hidden part of excel
There's nothing wrong with not being good at something.
And for a different reason: I find that programmers who think like this, are also lazy when it comes to respecting the user. They're lazy when it comes to supporting accessibility. They're lazy when it somes to properly supporting i18n and making experience great for non-Americans. They're lazy when it comes to respecting privacy and not burning 8GB of RAM just to render a webshop frontend.
They'll say "this is hard" and add Facebook SDK to do things for them. They'll say "this is hard" and make the page inaccessible for people that don't own a 4000$ 16" MBP and has perfect vision.
That's the core issue of this attitude for me, which I'm seeing by too many people I mentor. Development is sometimes hard and requires hard work to do right by people.
I disagree, actually. There are plenty of languages, and even visual programming (via flow-diagrams, like Unreal Engine's "Blueprint" and Blender's shader flow diagrams), for those who just want to play around. For people who want to write a quick and dirty script, languages like python make it very easy already (relative to what they actually do).
> Programming COULD use [...] removal of barriers
Absolutely agree with this, though. There's an unnecessary elitism in many places that really needs to go..
> Development is sometimes hard and requires hard work to do right by people.
This is *so* important for these people to understand. There are languages and domains where the "elitism" is fully justified. If someone decides they want to write a high performance, easy to use, cross platform native application and complain about C++ or Rust being too complicated, then they should find an easier job. There is justified and unjustified elitism, and there are domains which could use, if anything, even more "complication" and more specifications, more "barriers" to ensure higher quality.
Graphical programming languages, removing barriers to learning, etc. They've been chugging away for decades and visual programming, Blender, Blueprints, Scratch, etc are all we got out of it.
Does the article writer just think research doesn't exist? That CS sprouted from existence fully formed as a web browsing experience?
More like 50 years. :)
I'm not sure I want to code like that, but damn is it impressive.
Blueprints and Scratch are widely used and are important tools. Your comment sounds very dismissive, and if you meant to be, then I think you’re unaware of their impact and reach.
That said I don’t fully buy the author’s exact argument:
- node.js local install IS for a traditional programming environment on the CLI - you don’t need node built in when you have the browser - plenty of web IDEs exist that do as the author wishes… run node code in the browser while also editing it.
I disagree. I follow a lot of game developers and you'd be hard pressed to say they don't do high-performance corss-platform native application development. They almost universally think C++ (and by extension Rust) are too complicated. They generally use C++ anyway because that's the industry standard, but they think there is definitely a conceptually less-complicated way to do things.
See: Jonathan Blow and Casey Muratori, for instance. The former is so sick of C++ he's making his own programming language, and the latter routinely complains about C++'s complexity and eschews all but the simplest features of it.
C++'s complexity is also a product of design choices like using templates to do both generics and metaprogramming, which in hindsight probably made things much harder than they needed to be. Rust has the benefit of being able to avoid decades of C++'s missteps.
However, I do know that a lot of objections to it from the people I follow are around the borrow checker and both the friction and high[0] compile times it causes.
[0] to put that in context, Jon is frequently annoyed by the sub-second linking time incurred by LLVM because it is more than an order of magnitude longer than his largest program (~60k line game, IIRC) takes to compile.
What makes it worse is that complication doesn't even exist for "good" technological reasons; it only exists for inertial, industrial reasons like compatibility with C and 1980s naivete -- both because of and in spite of it, since, like the other person said, even more complexity was bolted on to try to force new lessons without breaking backwards compatibility.
I used to love C++, since I thought its complexity was somehow, fundamentally necessary for a lang to be a "fancier C". Once I learned Rust and found out that was not true, I now hate C++ with a passion and can't wait until it completely displaces C++, which it should do ASAP[0]. :D
THAT SAID, some people (who are much better programmers than I am), say that C++ is the most expressively versatile language around, which is at least a "good" technological reason for its enduring existence. That's one I can't relate to, though, since the people who are saying that tend to be talking about very advanced, byzantine aspects of C++ that I never got to.
This has happened pretty regularly for decades at this point, people hate on c++ and think they have the silver bullet approach to do things better. They spend a few years on it, and it fails to get much traction.
There is a network effect around c++, sure. But industry standards are there for reasons, and usually most of them have a core at least that is sensible. People keep coming back to c++ mostly because it works, and it turns out often if you start with a safer and cleaner language you get 80% of the way there much faster, but a lot of the 20% that's left over is performance related and you just can't get there no matter how hard you try.
So from a business point of view, the pain level of c++ (and associated costs) is somewhat known, but most other approaches trade that off against project risks people just aren't willing to take.
It's not inherently crazy, even in 2021 to start a new high performance project in c++. Obviously the exact requirements matter, but there is a subset of what it can do that we don't really have a obviously good replacement for. What would be crazy is starting a new project in it that doesn't really need any of thee things it's good at.
Flash was terrible for all sorts of other reasons. But it did demonstrate that there is a class of incredibly creative people out there who can create amazing things, but not on the command line, and not using the tools currently available.
How do we get them doing that again?
I'm serious. I don't think there can be another "explosion of creativity" of the (relative) magnitude of Flash, because people now express themselves by recording videos. It's both easier and more social than making interactive software, even with Flash.
?? What kind of bizarre red-pill nonsense is this? You think all those interactive Flash microsites were to impress girls? lol
If you really hate `git checkout -b`, ship `git make-branch` that suits your taste. You can even package it as a trivial script to redistribute if you wanted.
Programmers do things by writing code, compiling, deploying, etc... so the notion of customizing an app through anything that looks like their workflow seems fine to them.
OTOH I write code for a living and I often hate the tools we use...
I so completely disagree. Writing JavaScript is already so simple that almost nobody knows how to do it any more. You can download a colossal framework and a billion NPM packages to write some completely unoriginal CRUD application and bitch about how hard life is. Fearing writing original code is the name of the game.
If not, where do you draw the line? Should you write your own business logic? Should you write your own logic to allow implementing that business logic (e.g. request parsing, validators, data transformations and processing etc.)? Or maybe you should write your own web framework that routes and handles HTTP(S) requests? Or maybe the entire ORM (if you're using one in the first place) as well? But that ORM probably uses JDBC/ODBC or some other driver as well, and the HTTP(S) requests also can be processed because of some additional code and libraries. Should you write those as well? What about the operating system itself, and the code that allows it to interface with the hardware? What about the kernel?
I don't necessarily agree with the OP's point about making a browser that has Node.js packaged (though it's a novel idea), but i definitely agree that defaults and tools matter. Tools like XAMPP ( https://www.apachefriends.org/index.html ) or the CLIs for automatically generating projects and helping automate everything from creating project files, like in Ruby on Rails Generators ( https://guides.rubyonrails.org/generators.html ) or entire apps, like with JHipster ( https://www.jhipster.tech/ ) or create-react-app ( https://reactjs.org/docs/create-a-new-react-app.html ) all seem to decrease the chance of human error and make development safer, more consistent and easier. Even IDEs that are aware of the specifics of the frameworks you're using can be very useful!
In addition, they can improve the developer experience (DX) a whole bunch, since in larger projects time can be invested to address common problems. For example, see Dylan Beattie's conference talk on the topic: https://youtu.be/lFRKrHE8oPo?t=431
I've seen people trying to write their own web frameworks and most of the time the results have been poor, both in understanding the system and maintaining it in the long term, in addition to which you can't hire people that are familiar with "Random Company's Web Framework". Unoriginality is good for being to maintain the project, as far as i'm concerned.
Here's another conference talk, by Venkat Subramaniam about deciding between using existing code or writing your own: https://youtu.be/OheeK7Ux2-8?t=727
One big task about programming is handling dependencies and thinking about assumptions. Before even beginning to write any code, you have to think about these things:
- What environment do I expect the end user uses? Are there already some libraries I can use as well installed?
- Do I need a GUI, or should it also run on headless devices? TUI or just CLI?
- Does it make sense to use a big comprehensive framework or rather a bundle of minimal components?
- Does a specific feature really need an additional dependency or can I rather implement something on top of the already existing dependencies?
- How good is the maintenance of a library, code quality and is the license compatible?
- and many more...
All of those are very difficult questions and require often some crystal balls to get right.Lazy people might just add any dependency some stackoverflow or other random search result says, without thinking about these. While good developers think about each one and try to find a minimal set of them.
> While good developers think about each one and try to find a minimal set of them.
(tl;dr at the bottom, things up to "In short, " are merely my experience, which is entirely subjective)
For example, suppose that i'm working on a Java project and i want to do some non-trivial operations with the filesystem. In this instance, my options for implementing the functionality would be as follows:
1. Attempt to do it myself by using the standard library
2. Attempt to find a really specific library that allows me to do what i need
3. Attempt to use one of the larger libraries out there, that provide a variety of related functionality, which may or may not be useful
Each of them definitely should be evaluated, but for the most part, i've found the following to be true about these approaches:1. Attempt to do it myself by using the standard library
+ Will be easily customizable, because no source/recompilation will be necessary for an external library (though mostly a problem of the toolchain and approaches to including libraries).
+ Will result in a small distribution size, since there won't be redundant code included.
- The code mostly won't have good test coverage, since i cannot spare the time because of business/bosses needig functionality ASAP. Neither will i be able to address the technical debt that might arise from this solution, or throw out a sub-optimal solution and rewrite it until i get it right. Ideally this wouldn't be a problem, but i'm afraid that this is usually the case.
- The documentation will be sub-par, since code itself doesn't provide many mechanisms for showing examples on how to use it (as opposed to a Wiki/sandbox), even in the case of "self-documenting code", non-trivial concepts will still require code comments, which will also need to be kept up to date by someone who'll need to edit the code. Onboarding will be more difficult, because initially noone will be familiar with the solution.
- Time spent creating bespoke solutions will prevent me from implementing other solutions and addressing other concerns with the limited time i have. In addition, bugs could arise, since i'd miss certain aspects that people who are more proficient in working with IO would notice and address.
2. Attempt to find a really specific library that allows me to do what i need + Will result in a small distribution size, since there won't be too much redundant code included.
- More often than not, minimal dependencies can result in many of the above problems (especially problematic with documentation, since i wouldn't even have had written the code in the first place).
- In addition, minimalistic solutions often have relatively few contributors, which can result in them becoming abandoned some time down the road. Maybe not too important for small libraries that can be rewritten, but eventually you'll end up with unmaintained dependencies which will need addressing.
3. Attempt to use one of the larger libraries out there, that provide a variety of related functionality, which may or may not be useful + Will usually be actively maintained (for example, https://github.com/apache/commons-io has 70 contributors and 360k users).
+ Will usually also have reasonable test coverage (the library above has 89%, according to GitHub)
+ Will usually have a rather good documentation that's updated by others (sometimes in the form of a separate website, like https://commons.apache.org/proper/commons-io/)
+ Can easily be Googled with plenty of common problems (some of which are almost inevitable) addressed. This will also help others, who need to work with said code.
+ Maintenance and technical debt won't need to be addressed in house. Oftentimes it'll be as easy as bumping up the version number and running the tests surrounding the integration (if any exist).
- Will probably include lots of bloat, which may or may not have a significant impact on the bundle size of your project.
- Will most likely increase the attack surface of your project in some way.
- Will also be difficult to audit and really get to know in entirety (if not impossible).
In short, i don't think that how "minimal" dependencies are should be the deciding factor when choosing them, but rather the results of deliberation of the points that you've described above. In my experience, i've found that more often than not, counting on existing and popular frameworks/libraries/approaches is the best way to go. Though this is from the perspective of someone creating mostly business oriented solutions for external clients, thus i'm biased because of time/resource limitations and such.There was actually a rather humorous presentation a while back and while the best video i can find of it is still in pretty bad quality: https://youtu.be/AUYPnxv0yss (couldn't find the exact timestamp) one of the things that stuck to me was the suggestion that you should use whatever language/tool/framework that your friends/colleagues use, if possible. Essentially - use boring technology, that will be easy to reason about and that will help you more often than not.
> In short, i don't think that how "minimal" dependencies are should be the deciding factor when choosing them, but rather the results of deliberation of the points that you've described above.
Well I said 'minimal set of dependencies' not 'minimal dependencies'. My text wasn't meant to make a point for small libraries or for implementing everything inside the project, but just to point out the important factor of dependency management as part of programming, which I felt was missing in this discussion.
Of course if there is some big framework that is well maintained, possible already used by other software components that might be already available on the device of the end user, fulfills all business/project requirements and you might end up using it for more the just one function, then great! That also means you might not add many other random small dependencies to dependency set, now or in the future and that set might stay minimal.
But if there is something that is not part of the big framework, and easy to get wrong, then of course you should add some dependency that does it for you under all these deliberations instead of trying, and possible failing, to do it yourself.
You should however step back from this and reconsider, if you start adding libraries for just string padding and the like.
TFA is a classic x-y problem. Author says they want node in the browser. What they really want is something they can quickly be productive in, a one stop shop. Author is describing an IDE.
Many problems don't go away and don't become easier just beacuse you shove them under the carpet into a library. A lot of developers use libraries as an excuse to NOT THINK about the issues and ignore their existence not to save work. There's a fundamental difference between "I understand the problem and I know that library X will give me a good solution with low amount of work" and "This problem is hard, I'll shovel in another library and keep my fingers crossed that it does a good job at it."
It's saving work vs. saving thinking. First one is ok. Second one is not.
The reason for this seems more that there a many coders that forget about the task of vetting their dependencies, which is a big part of programming.
Just learning a language does not give you the discipline required to be a good software engineer.
The result has been a massive proliferation of perpetually-junior engineers writing code and rising in ranks to run things.
There is a worse toxicity in my opinion: when engineers at all levels religiously adhere to fads or practices just because others do (see: OO, TDD, etc.)
Why I am questioning you is that You cannot call the author lazy. Just because one post gives you that opinion, doesn't mean he is a lazy person.
The author gave a fresh opinion about web browsers and shared it with everyone. appreciate that.
Problem - Browsers dont allow us to write code/ Solution - create browser extension / use console.
Thinkers talk, doers do.
>The author gave a fresh opinion about web browsers and shared it with everyone. appreciate that.
The author gave a stale opinion that can be answered by typing his post title into google and hitting enter.
Does make me think programming can be radically different and maybe a lot easier
What I'd like to see is how it handles any kind of more complicated tasks - e.g. one where you need to build two or three layers of abstraction. Or one where you build domain objects that are used by other tasks. Or even one that showcases error handling.
You can get something similar, minus the fancy NLP processor, in Unreal Engine, via its Blueprints feature. Suffice it to say, there's a reason people end up learning and switching to C++ the moment their problem starts to involve any kind of complex logic.
Note: I'm not against improvements in programming experience, and more visual and interactive paradigms. But I've also played with enough dataflow languages to fully internalize that there is irreducible complexity in programming (that comes from it being an art of micromanaging possible states), and it's painfully hard to work with it in a flowchart form.
This, I think, is more intended for people who are not really programmers, but would like to write a bit of logic, and find themselves with tools intended for professionals.
Because I am an experienced programmer now, I may be biased but I have a feeling we raised the barrier to entry for programming. The author mentions Excel, that still exists and us used all over the world by non-programmers to write terrible macros. But I am also thinking about Visual Basic, a lot of stuff by Borland (thinking about Delphi). DOS even shipped with Basic IDE.
As a general rule, I consider all "don't be lazy" arguments wrong. Machines are meant to work for us, not the other way around. The only ones who shouldn't be lazy are those who write the tools, so that users can be if they want to.
You can't install npm packages. There's no simple UI to alter DOM like via drag and drop. Theres's no pre-built components (besides html) to easily create more advanced functionality. They have to write JS from scratch to add events. Managing more than 1 liners is a pain.
I don't agree nor disagree, but I just wanted to point out the hypocrisy of this argument:
If someone is too lazy to learn how something works, would it not be hypocritical for them to complain about the laziness of other people, that fail to make it easier for them?
And if this lazy person writes their own stuff, would they be diligent enough to make it easier for others?
It would be something different if that person was actually not lazy and, after understanding something, could point out or help implement ways to make the introduction for the next person easier.
Yes, and I'll be honest and say that I missed that to begin with. The author is also not a developer, which is why he is mistaken on a number of specifics. I think concentrating on those specifics miss the point of what he's trying to relate.
I think the barrier to start coding is incredibly low at the moment though. There are so many learning resources and even websites that provide a full stack including a web based ide. The barrier to doing it completely on your own hardware may be slightly higher than it used to be because everything requires so much customizability that it ends up being difficult to operate. Of course there are simpler option out there but they don't get as much press as the more capable tools.
I don't think he solved the crux of his excel problem though: excel provides an easy way of coding, providing the input for the code, and presenting the results in productive manner. Most environments make this fairly painful for the beginner, requiring you to parse text files or similar. This allows beginner excel users to be productive quickly. Of course, baking node into the browser isn't going to solve that.
What is special about programming that should be easy where playing the piano or learning to draw well is not? Maybe it's just fundamentally hard?
I'm not suggesting it can't be made more approachable for beginners and for small tasks but most non-trivial things someone wants to make, they have 1000s of questions that need to be answered and even more combinations. Making the tools better, for the most part, won't remove that complexity IMO.
Take the stereotypical "To Do" starter app. First you just have an array (db) of todos and they have title, text, done fields, and that's it. Then you add due dates, dependent tasks, assigning ownership for tasks, oh, you just made it multi-user, you now need login, ownership, editing rights, migrations when someone quits. You probably have user settings, machine local settings, user account setting, People want different displays of the data, sorted different ways, or with graphs. They need formatting for printing. You want notifications when a task gets reassigned but you don't want them notified on every device. Oh, suddenly you have users in foreign office, they need it localized., etc.. It gets extremely complicated very quickly.
I think this is not exactly the same. Tom is I want to X, but I don't want to learn Y. Consider
> I want music at my party but I don't want to learn the piano
Easy, just put on spotify
> I want to compose, but I don't want to learn the piano
Well there are many evolving tools for doing that without needing to learn the piano, such as sibelius.
> I want an app to do X but I don't want to learn how
Just hire someone to make it for you
Just for context: he'a talking about installing ruby/npm/node here, not about coding. Not about visual coding!
The next line makes it obvious:
> Can you imagine if the beginner version of Node.js came pre-installed with a GUI for managing and running your code?
I feel like I almost have that in jetbrains tools. I can browse through composer packages, discover package names, and select specific versions. Not quite the same, but was a pleasant surprise to accidentally discover recently (but... it's still just wrapping CLI stuff, AFAICT).
But there is a balance to be spoken of here between laziness and learning. Laziness, in a way, is a driver of efficiency. You want to do something in a way that requires less effort.
It is learning, though, that gives you the tools you need to be "lazy" (if we agree on reading "lazy" as a desire to do less, as opposed to a desire to not doing anything at all - there could be debate here). In turn, finding a way to do less work takes work itself.
I guess what I'm trying to say is that these complaints could hold some validity, it's just a shame that the author doesn't seem like the type to do anything about it.
I would guess that almost everyone who has ever learned programming has gone through this experience, been frustrated, and understood in the moment that this was bad UX that could be improved for learners. As such, your attitude, and lack of empathy, seems like gate-keeping to me.
You have been treated poorly and accepted it, so other people must be treated poorly and accept it, in order to prove themselves. This only perpetuates bad practices.
I would say that you are the lazy one, in not wanting to support other people in their programming journeys.
There is only one word for someone, who approaches a topic they know little about, and suggests that its rubbish and he knows better.
That word is 'arrogant'.
And you are correct, I have no sympathy for arrogant people.
I can only imagine how much faster I'd have gotten my start if I could have used the browser itself. And the inspector console is useless until you can type your code perfectly on the first try (or second if you happen upon the up-arrow/edit functionality).
So after I began my dev career I began volunteering at a free local library coding session. It was part-babysitting, but there were a handful of kids who usually had part-time access to a parent's budget Windows laptop.
A basic coding environment inside Chrome or Edge (vscode lite?) would have made those sessions so much more productive. And I'd have been confident that no matter what computer they ended up on later, they'd wouldn't have to do any magic incantations to get back to coding.
Even giving them a bookmark to one of the all-in-one dev env websites isn't enough. It needs to be able to run locally without internet. And those coding websites over the past few years have been changing so rapidly in interface and setup that it would easily throw someone for a loop who was just beginning.
LoL they dont know tab completion exist.
Discoverability & Learning curve is a point in favor of GUIs. But having to press more keys (offset by not having to use mouse & fight with shitty new designs) is not.
I don't know about that. The author is certainly confusing programming with setting up a development environment. I can understand why they would be frustrated with the latter, since it takes away with what they are trying to do.
When I started out, the latter was fairly simplistic: computers booted into BASIC. If you needed something more sophisticated, you could buy an IDE where everything would run right off the boot disk or after an automated installation. You can still find those tools, designed to serve everyone from home users to professional developers. That being said, it seems to be much less common.
In some cases, like web development, that makes sense. The target is a standard rather than an operating system or hardware architecture. In other cases it is self-inflicted. When you choose to work with third party libraries, there is a much higher probability that some work will need to be done to integrate it. Then there is the WTF category.
Take one of the easier cases: Java. Even though the development model is much closer to traditional languages like C++, the most common use case will involve installing an IDE and the language separately (possibly with some tweaking of the environment). That's not too bad, but it's likely more than people want to see when they want to get their tools up and running. Contrast that to C++ on a commercial operating system: you install Visual Studio or Xcode and are ready to focus upon programming for the chosen platform.
Of course, C++ isn't always like that and it comes close to representing the other extreme. Setting up development tools for microcontrollers can be quite the task, particularly if you choose the "wrong" one. That's a good part of the reason why novices like Arduino and Platform IO, it makes going from nothing to a functional IDE fairly straightforward.
Now I'm not going to say that the author is right, but I will admit that they have a point. Presenting Unix-isms in a macOS installer is going to rub some people the wrong way. That should have been addressed in a better manner. On the other hand, they were also attempting to accomplish something that is non-trivial to start with.
Epigram 93, Alan Perlis
I like Prolog because it is that language. Other languages you have to write a program telling the machine what to do every step of the way. (Except if the program uses neural nets.)
We, as software industry at large, however should work on two fronts:
- Try to make things, which can be simple simple. Many do that out of self interest, but sometimes one is so used to complexitiest, that one doesn't see them anymore and we often fear redoing grown things as "it works" and we might break use cases and we don't want to relearn things ...
- There is a large room for enabling non-programmers to build tools. In the past™ people built fancy tools on top of dbase, delphi, access, excel (world runs on excel ...) etc. without being programmers. There is an easy start allowing a domain expert to build a tool in their office faster than explaining the problem to the IT department. The solutions weren't nice from an Software Engineering view, but solved problems. This we have to enable with modern technologies instead of access conflicts to an excel file on a windows share ...
> Simple things should be simple. Complex things should be possible.
[1]: https://www.quora.com/What-is-the-story-behind-Alan-Kay-s-ad...
The author is very right to point out the fact that the browser in 2020 is still so fundamentally broken.
Theoretically, tons of work should be facilitated in the cloud without having to download or setup a single thing.
You should be able to make fixes, test etc. in github without having to download the code and toolchain as easy as you would on your desktop.
Even the 'local' version of software development is a giant mess, we have not well thought out dependencies, tool chains etc..
However, there are times when I’d like to do it all in the browser too, preferably on a tablet or small laptop.
I won’t be at my most productive, but I’ll likely be sitting in my backyard or in a park.
I think the person is trolling.
It is, though. It really is.
He's some kind of self-anointed "thought leader" and "consultant". Because, honestly, of course he is.
> Here’s my pitch: build a browser that comes pre-installed with node.js
Okay, you don't have to know anything about JS or V8 or Node to live a normal life; most people don't and they're fine. But if you're going to complain that you can't "code in the browser" you should try to understand what you're talking about a little more.
This sounds like an elaborate prank.
>Because I love building things using code.
I mean, someone who "builds things using code" should be able to install ruby. I've never even attempted to use ruby, don't even know what its syntax looks like, but I guarantee you it can be installed by something akin to
$ apt install ruby
I can't even fathom how a person who has allegedly built things with code can "try and fail" to accomplish this.(Ubuntu 18.04, maybe it just came with this distro?)
This is the exact type of behavior thats unwelcoming in this industry.
You don't have to type to write programs. Many people don't. It's why applications that do visual programming have opened the way for AMAZING bursts of creativity.
Everyone should be able to communicate with a computer. The more people that are the more likely it is were going to make fascinating things.
Your elitism in programming is showing. And it's not welcome.
Do you ever see ads for 'become a doctor in 6 weeks, land a job'? Or plumber? Or electrician? Or anything else? No, but you do for programming.
Do you ever see people whining that being a medical doctor is too hard and confusing, and demand that everyone should just have a handheld with webmd?
Programming as a field requires many years to really understand. And even when you understand, it's just some niche, not -everything-. Nobody knows everything. And that's not completely dissimilar from other trades/professions.
I'm not trying to gatekeep here. I encourage everyone to learn to program, -if- they take the time to learn. If they don't, they do not belong doing it as a profession for others. Just as people can toy around with wood in their garage, so long as they don't call themselves a professional carpenter. That's how you end up with glaring security and privacy problems that we read about nearly daily. Imagine if anyone could call themselves a doctor, and constantly read stories of people dying from horribly botched practices.
I think the only real solution here is for the profession to be certified somehow, as other countries do.
No one is denying that you're not going to be the best developer in a few days. But I welcome everyone learning the way they want to and how they want to, and for others in the industry helping them learn.
And for your example, I'd much rather hire someone who has worked in their garage with wood for a decade than someone who just got a certification to call themselves a professional carpenter right out of trade school.
And yes, you are literally trying to gatekeep because you're realizing the thing you've spent thousands of hours learning is actually not that difficult and is getting easier and easier every day.
https://www.youtube.com/watch?t=167&v=8pTEmbeENF4
"There can be a lot of resistance to new ways of working that require you to unlearn what you've already learned and think in new ways. ... And there can even be outright hostility."
Programming Baduk used to involve expert systems. Now convolutional neural networks (CNNs) can hoist a computer to superhuman performance, even doing so without pre-programmed rules (see MuZero). We no longer "program" computers to play Go, chess, shogi, or even Atari games.
Some people have difficulty keeping code structures in their mind's eye. Here's a conceptual development environment for navigating code visually, ending with a dual text editor:
https://www.youtube.com/watch?v=u3QqjhzhnAw
Is that programming?
What's the difference between _typing_ instructions into a computer to place a graphical user interface widget on a screen and _telling_ the computer you'd like to put a toroid on the screen? Computers can use CNNs to fill in knowledge gaps. Even though the computer wasn't told the colour, size, shading, material, or location of the toroid, it can still show us the ring.
Is telling a holodeck that you'd like to replay a scene from a novel a form of programming?
https://www.youtube.com/watch?v=d7dfsLfWJvc
Each evolutionary step in programming has given us more powerful ways to express ideas in ever terser forms. Few people code in binary anymore. Did Picard need to tell the computer where to put every chair, table, glass, and machine gun?
What is programming?
What he's looking for is basically Anaconda for python or MatLab; Environments that are already pre-configured with packages so you can import whatever you want and start coding. But that's less clickbaity.
I think as a set of musings it's totally valid: there really is a ton of yak-shaving that still stands between "coders" and "non-coders" which actually has very little to do with code itself. It's a good exercise to brainstorm which speedbumps are unnecessary and what we could do to remove them.
Indignation commonly gets a lot of upvotes but it's not what we're looking for here.
What value does this article even add? It's a google query with a rant attached to it.
You started a 200+ comment value-subtracting subthread so the 'should have stuck to the guidelines' argument seems extra-solid here.