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.
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.
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.
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 :)
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.
Most developers never learned proper blackboxing/state encapsulation.
It's impossible to create truly modular code without colocating related logic and state.
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.
A bunch of world famous artists would disagree with you there.
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.
Dude, it's just a metaphor.
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?
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
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?
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!'
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!
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.
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.
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.
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.
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.
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....
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 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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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...
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.
/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?
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"
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.
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.
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.
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.
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.
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.
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.
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.)
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.
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.
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.
It doesn't tend to be true of mature IDE-first environments (see the aforementioned Visual Studio or IntelliJ).
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.
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.
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.)
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.
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.
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.
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 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
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.
Indignation commonly gets a lot of upvotes but it's not what we're looking for here.
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.
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.
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.
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.
> 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.
Epigram 93, Alan Perlis
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 ...
It is, though. It really is.
He's some kind of self-anointed "thought leader" and "consultant". Because, honestly, of course he is.
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?
Does make me think programming can be radically different and maybe a lot easier
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.
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.
>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.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.
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.
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.
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.
I think the person is trolling.
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.
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.
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.
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.