Leapfrogging the IDE
amasad.me
amasad.me
- Something like Light Table would probably seem like a step up for repl.it users, instead of a step down.
- It can take a long time to reach the point where it feels like there's a big payoff from using IDEs and similar tool.
Now, I definitely see the value of being able to do something like set a breakpoint in Visual Studio, step through a bit of code and observer local values changing, and then step backward, change the value of some variables or even edit my code a bit, and then step forward again to observe how my changes impacted the execution of the code. But when you're just learning, it's hard to even know that this kind of time travel debugging and live editing is even possible, and even when you know it's possible, it can be difficult to envision how you'd want to use it until you have more experience.
I suppose I don't see Intellisense as something that's IDE specific anymore. It's available in plenty of editors that aren't IDEs, and I think that's a very good thing. The line is pretty blurry sometimes, too. For example, I don't think it would be inaccurate to call VS Code just and editor, even if it doesn't have any many features as Visual Studio.
For me, the some of the big wins with heavyweight IDEs are things like built-in debuggers(which I know repl.it has), heap snapshots, CPU and memory use profiling over time, and other tools along those lines.
So I definitely wouldn't want anyone to think repl.it is opposed to IDE features; I think you've already implemented the IDE features that will provide the biggest wins for your users.
And so I don't come across as someone who jsut loves big, complex tools: I agree with what you've written in the past about envionments like Smalltalk and Lisp Machines. I think we've forgotten about a lot of innovation that we could be making better use of. I think we've forgotten about some of the best parts of Hypercard, too. And even VB6.
I went to the bottom of the page to find the "about" link, which had a 1 line mission statement that doesn't say much, and a bunch of employee pictures.
I still don't know what it is you do, other than your name which implies a repl, which most languages have already.
I don’t care if you use a text editor but I do care if you make design and process decisions that mute or erode the power of IDEs.
There are ways to organize code and modules such that you have to have a mental model of the entire system because they sabotage the static analysis that IDEs build much of their functionality off of. Don’t do that and we’re fine. Do that and we have a problem.
I’ve seen this many times, variable renamed done with text replace or by hand, inconsistent formatting and headers, silly bugs that an ide could catch as you type get committed, switching between screens to test their code constantly. Ignorance isn’t bliss, it’s just new developers aren’t getting the wisdom and expirence of the past and are repeating past mistakes instead of improving on the solutions.
The trouble is these enterprise dev tools assume you have bleeding edge hardware.
Back when I developed in Oracle we had to have special pc builds and then spend over £2000 on memory and more again to buy a 20inch monitor just to get it to work!- and it still crashed every 15 minutes
However quake came out at the same time and the 20 inchers where amazing to play networked games on.
I see IDEs largely as a symptom of the complexity sickness in software development. Companies take a strategy of letting complexity grow to the point where it can’t be controlled. IDEs and other tools for managing massive complexity emerge, because you need such tools to work in codebasses that have become a hurricane of complexity.
There is another path, where you choose to use simpler tools and adapt your plans to fit the tools. This is how the Amish work and they are able to do incredible works and be highly productive.
So, yes. You can try to become like “iron man”, wrapped in tools of immense complexity to match the tasks you set yourself to.
Or you can be like a Japanese carpenter and study and think and refine so that you can do only small tasks, with simple tools, and see miraculous detail emerge from the compounding interest of consistent daily practice.
When Julia and Rust get support that good I’ll never have to use a text editor + plugins again; and I will be very pleased (even though the Rust sublime text plugin is very nice).
I have tried all of the above 'modern' editors and almost immediately find tooling i'd assume is part of every IDE (i.e. code formatting, import organization/cleanup) but wasn't
Amongst the current crop of engineers, there seems to be a stigma against even trying Eclipse or IntelliJ. I kind of feel like junior engineers are missing out on discovering some much more powerful tooling and forming their own opinions.
For example, VS Code pulls TypeScript definitions of your JavaScript dependencies and thus has superior intellisense.
Also, the plugin ecosystem uses JavaScript, so it tends to be more cutting edge, especially if you're working on a JavaScript project (i.e. same language as plugins). For example, VS Code and Atom had Prettier code-formatting when IDEA didn't. And they sometimes have the best support for newer languages like Elm.
I'd be wary of painting people as junior developers just because they don't use your preferred IDE.
I wish Intellij was as snappy as Sublime. I wish it was as intuitively keyboard driven as Sublime. I wish the community around Intellij was half as helpful as the Sublime one when it comes to plugins, extension, customization.
It doesn't have as much refactoring support as eg Resharper, but it has the basics covered and honestly - even when I was using Resharper, well over 90% of the refactoring I did was renaming variables, which VS Code has covered.
Outside of the JS/TS realm? I don't know, I can imagine Jupyter and other notebook technologies really taking off too. I don't really see those as writing programs, however, I see that more as an exercise in data preparation that can be used in some other long-running API or otherwise.
Going a little beyond too - I am seeing more and more shops (including ours) that are adopting an ALL JS/TS approach and leveraging React, GraphQL on top of Node. I think the reason is that we're collectively deciding on reducing our code knowledge footprint. Companies are favoring fewer languages because JS/TS is "good enough" now to handle the backend of something major, it begs the question on why we should use Java or something similar for our APIs. We are also finding places where we can write something on the front end, and magically also run it on the backend for doing some similar operations.
Webstorm integrates with popular build tools like Webpack and Gulp, and adds support for more tooling all of the time through plugins.
There is really no reason to use another IDE for JS/TS unless you can't afford its very reasonable price.
But if you are jumping into a lot of different projects that were written by a lot of different teams, and making tiny, local edits, configuring an IDE properly for each new project is a pain. Startup time on a new project is more important than advanced refactoring. It's hard to beat an editor for opening a file or directory you've never seen before and making a quick edit. You can be done before a more powerful IDE has even finished indexing the source code.
The newer editors are gradually getting more IDE features without losing fast startup, so I find them appealing even with a lot of experience with IntelliJ.
> It's hard to beat an editor for opening a file or directory you've never seen before and making a quick edit. You can be done before a more powerful IDE has even finished indexing the source code.
I can't imagine this _ever_ being the case. Setup of an IDE is trivial compared to wrapping one's head around the first time look at a new project. I mean, you're talking about cracking open a new project you've never seen, making an edit and "being done" in a matter of a few minutes !This is perhaps doable if you're talking about assembly-line-cookie-cutter projects, or maybe you're talking about super-geniuses? It takes me a minimum of hours to days before I'm ready to "make a quick edit" on a project I've never seen.
It’s a different state of mind from IDE users. Not better or worse, just different. I’d hate to be stuck in IntelliJ all day, but most of my colleagues love it. As long as we’re all productive, to each their own.
That said, I’m a polyglot, so learning specific IDEs and plugins for all of the different languages and DSLs I use throughout the week sounds miserable to me).
For me it's the text editing features that these IDEs lack. I'm definitely giving up advanced language integration, but I (and many) make the choice to do this for more powerful and/or preferred text capabilities.
Vim, Emacs, Kakoune being my main examples. Not just a "vim mode" - I've never used one of those that was even remotely useful for me, heh.
My main prob with jetbrains is project setup sucks, and the support for quick editing an arbitrary file is awkward. so for quick editing of a file I end up in atom or vim. I'm currently trying to get vs code's editor to be as similar as possible to intellij as possible. it looks like code's editor is pretty solid and full featured.
When compared to Vim, it's not about one specific "feature" that vim lacks, it's Vim, it has just about everything - it's about my editing UX, and vastly preferring how Kakoune does it.
Now would I choose IntelliJ if it could perfectly replicate how Kakoune does editing? Without a doubt I'd choose IntelliJ. Yet I massively doubt that's even possible.
Fwiw, I've been dying to use a GUI editor, but I cannot give up first class implementation of my text editing methodology of choice, be it vim, Kakoune, etc. It's not about "is it possible to do X", it's possible to do nearly everything in Notepad.
As far as I'm concerned, either go whole hog with an IDE or stick with lightweight editors like Sublime/Vim/Emacs and rely on CLI tools to find errors.
There are just too many opaque things going on, everything is slow and if you don't sick to the workflow intended by the authors of the IDE, everything is lost.
I feel like if the language has not been designed with an IDE in mind, it's hard to get the integration right.
I feel that engineers who don't try out emacs & vi really are missing out on some amazingly powerful tooling (more so emacs than vi — but vi lives within a Unix shell in much the same way that emacs's text-editing capabilities live within emacs-the-OS).
Working longer on a larger code base I would prefer a specialized IDE like WebStorm hands down but that seems not to happen so frequently.
Also, if you have so many instances of a name in your codebase that you need automated tools to change it, and you haven’t already split that code out of the repo into a well named and stable library, I consider that a code smell. You’re building your house on jelly.
In the rare case I end up in that spot, I can use sed.
Say it all really. Online coding tools may be fine for beginners, but think it would be next to impossible to do my work with one.
In particular, CodeSandbox has come a long way by basically running VS Code in the browser.
I even use to have a remote instance for developing and testing... I can definitely do all my work in a simple (multiplexed) terminal, whenever it is online or offline.
Of course, given a stable connection.
A Chromebook plus a 100% cloud-based dev environment is a great way to work without having to radically rethink How Software Works.
Nix, to automate software installs and per-directory (per-git repo) environments. NixOS, to do the same for your OS.
Gradle, for automated IDEA setup. Or check the config into git. Cachix, to ensure your build artifacts remain available.
These problems are solvable, and the solutions already exist.
Or, I can do my development in the cloud, in an environment explicitly more similar than my desktop environment. Other than aesthetics, I don't see why this is a Bad Thing. It's making my setup easier and more consistent, and it's making my development environment portable to whatever system I want to work from, rather than binding it to a piece of hardware.
(Memories from the same era - hand-rolling TCP stream protocols in lexx and yacc, because XML didn't exist and http was a toy)
I'm trepidatious however, since I'm not a huge fan on relying on external services in general. "I can't code because the server's down" doesn't seem acceptable to me. There is a very real problem with mobile development environments though, a solution I'd like to see start with the phone manufacturers.
It's nice for learning, because you can get the immediate feedback of a terminal with physical hardware. It is extremely limiting in that you can only have one file open in the IDE though, so it is unfortunately difficult to justify for anything other than teaching or toy projects.
My primary development environment is vim combined with CLI commands (and some wrapping with vim plugins to simplify the workflow). However, when I want to play around with something in Go to figure out how it works I will often go to The Go Playground (https://play.golang.org/) and play around there.
However, as soon as I'm done (and maybe shared my findings with a peer, which I can't do as easily with my local vim + CLI environment) I'm back to my regular development environment because very little that I work on is trivial enough to stay in Go Playground.
All that said, I've seen plenty of developers who seem to get by sticking to the basic feature level of Notepad. Whatever works for you.
I have trouble labeling it "post-IDE". Depending on whether you consider Smalltalk/Lisp machines to be "IDEs", it's either "original IDE", or "pre-IDE".
Eventually, I learned Ruby (and abused Pry for a long time) "correctly" and I"m re-learning Python the proper way now (and abusing pdb), mostly with VS Code, but there are some very large gaps that are easily filled with a good REPL, so I find myself popping over to Repl.it to test out some snippet that isn't doing what I expect. Perhaps there is an IDE setup that would do what I want while enabling me to be more productive, but learning a (usually lightly documented) tool, full of various assumptions, while trying to learn the actual language, AND get useful work done, is not an ideal combination.
I work on the Web IDE at GitLab (among other things) which we built after we noticed that there were a few situations in our day to day work on GitLab where we didn't need a full local development environment, like updating documentation or addressing simple review comments. It doesn't replace a local IDE from me yet, but it is helpful and we hope we can make it more useful in more situations where local IDEs have shortcomings. I think the effort and maintenance of a local development environment is also a cost that is frequently overlooked – reinstalling dependencies is a headache that disappears in an automated ephemeral environment like repl.it or where we're heading at GitLab.
But that seems like it's just an iteration on the status quo rather than leap frogging to a post-IDE world. I think the idea of online interactive development can go so much further. Maybe we can integrate interactive editors/terminals/previews with our planning and code review tools so that experimentation and exploration are easier and happen in line in the discussions we have planning the next feature to build. I put a few dot points down on this line of thinking last week https://gitlab.com/groups/gitlab-org/-/epics/533 but I'd be interested to hear some of your more concrete ideas of what a post-IDE world might look like.
I think the fact that you'd have a globally accessible, pay-as-you-go, zero-setup, multiplayer programming tools is surely a different beast from the IDE. However, it does go further than this and most of the innovation to this end aren't coming from us but from our users and how they (an)use the system. I can try to predict what the post-IDE world looks like, but it's better to discover it.
Instead, this is clearly a marketing article for your own product. You specifically ask the question in your article, why would anyone install an IDE locally, instead of using your product.
The answer seems very obvious to me: Only very few people can actually use an online interface, such as your product, in actual production.
For me, for example, it would be a non-starter. Not only do I work with sensitive data that I can't just upload to somewhere else, I am also often on the road and simply do not have guaranteed internet. So I'll need a local IDE anyway. Another reason is that the actual computing infrastructure is located, and protected, in a local network. So I couldn't even run my code directly. How much computing power do you actually provide? What if I actually generate large output files? Where do they go? Like, do you just send me gigabyte sized files over the tubes constantly? Do I have to download thousands of files from that terrible web-interface? How do you deal with changes in massive datasets? How do you deal with those data that need to stay local?
The whole article is just weird. The use-case for local IDEs is pretty clear, and I think the people who actually have to use some local solution is, and will be, larger than those who just casually write their code in your datasets. Most people would literally get fired for using your product as you suggest.
In fact I think the major use-case for your product is education and learning, specifically where you code in several languages. Like, you quote some kid asking why one would like to learn an IDE if repl.it is so cool and good. Well, that kid is obviously learning and not leapfrogging anything. Sooner or later, he/she will be coding in a company on a larger project and then all of the above applies.
I also like the irony of repl.it stating its support for Open Source, while apparently not being OpenSource itself.
With repl.it, it was simply a matter of typing out a bitly link and hitting enter and everything was set up and ready to go.
Repl.it member (amasad, see note) wants to promote Repl.it by saying that more people are using Repl.it and thus it is the modern stuff because modern is having "no IDE, just a modern repl" and etc. So "modern, 2018" is basically having what Lisp developers have had since the early '80s.
We absolutely did not have a globally, network-accessible terminal with pay-as-you-go computer time.
I have no experience or interest in repl.it, but I think you're understating things somewhat.
> With programmers growing up today being used to instant and interactive programming like Repl.it, Jupyter Notebooks, serverless compute, and others, it doesn't seem so outlandish to imagine a post-IDE world.
In fact, parts of Ethernet protocol were researched at Xerox.
> See the Lisp community practiced the Right Thing software philosophy which was also know as "The MIT Approach" and they were also known as "LISP Hackers".
A typical mistake is to believe that there is a single homogenous Lisp community, a single approach or a single philosophy. In fact the Lisp community was and is extremely diverse. If you look at the LISP hackers, their approach wasn't actually to do the 'right thing' (whatever that is), but to tackle interesting problems and having fun solving it. The Lisp Hackers at MIT (and other places like Stanford) were working for government labs swimming in money and people like Marvin Minsky provided a fantastic playground for them - which then clashed with the 'real world' when DARPA wanted to commercialize the research results it funded, to move the technology in to the field of military usage (also doing technology transfer into other application areas like civilian logistics). If you've ever looked at the Lisp Machine code, you see that it is full of interesting ideas, but the actual implementation is extremely diverse and grown over time. Often complex, under-documented, sketchy - not surprising since much of that was research prototypes and only some was developed for actual commercial markets. The 'MIT Approach' was creating baroque style designs. Is it the 'right thing' to have a language standard telling how to print integers as roman numbers?
Thus 'the right thing' might not be what you think - I think it is more 'image' than reality.
> The destiny of computers is to become interactive intellectual amplifiers for everyone in the world pervasively networked worldwide
That was Alan Kay's vision, not the vision of the Lisp community. Kay's vision was personal computing - and not the crippled version of Apple, IBM and others. Much of the Lisp community was working on AI and related. Which had much different visions and Lisp for them was a tool - they loved or hated. Lisp/AI developers think of it as 'AI assembler' - a low-level language implementing much higher-level languages ( https://en.wikipedia.org/wiki/Fifth-generation_programming_l... ). When no effective systems were available to be used as powerful development environments for small and medium-sized research groups - they invented their own networked / interactive development system using the technology they knew best: Lisp. They hacked up development environments and even operating systems. But it was not necessary to keep them, once similar platforms were available from the market. With Lucid CL one could develop and deploy a complex Lisp application on a UNIX workstation and were not bound to a Lisp Machine - which was still more expensive, used special hardware/software and was less general as a computing platform. Lucid CL was quite successful in its niche for a while - but Gabriel then tried to make that technology slightly more mainstream by addressing C++ developers with a sophisticated development environment - sophisticated, and expensive. This tool was then sinking the company. But, anyway, much of the commercial AI development moved to C++ - for example most of the image/signal processing stuff.
Parts of the Lisp community shared different parts of the Kay vision: OOP as basic computing paradigm (Flavors, Object Lisp, CLOS, ...) , accessible programming (LOGO as an educational Lisp dialect), intellectual amplifiers (AI assistants) - but where Kay developed an integrated vision (Smalltalk and especially Smalltalk 80), the Lisp community was walking in all directions at the same time and this created literally hundreds of different implementations. Simple languages like Scheme were implemented a zillion times - but only sometimes with an environment like that of Smalltalk 80.
The Lisp community addressed both medium and high-end needs. Something like Interlisp-D (developed right next to Alan Kay - but as a development tool for Lisp/AI software and not addressing programming for children and similar) was a very unique programming tool, but its user base wasn't large and more towards the higher end of development - most of it still in AI. There was no attempt to make that thing popular in a wider way by for example selling it to a larger audience. It was eventually commercialized, but Xerox quit the market with the first signs of the AI winter in the 80s. Its actual and practical impact was and is also very limited, since only very few living developers have really seen it and almost no one has an idea what to do with it or even how to use it. It's basically lost art. I saw them in the end 80s when they were on they way out.
I doubt that from hundred authors of advocacy articles has even one used something like Interlisp-D or Lucid CL to develop or ship software. I know only very few people who have actually started it, even much less having seen it on a Xerox Lisp Machine. So much of it is based on some old people telling about it and very few have ever checked out how much of what they hear is actually true and how useful that stuff actually is. One reason for it: it's no longer available.
The 'worse is better' paper was slightly misaddressed at the Lisp users - since they were not after the operating system and base development tool market (like UNIX and C was) and were not married to a particular system or environment. They used Lisp on mainframes in the 60s/70s, on minicomputers in the 70s/80s, on personal workstations (even developing their own) in the end 70s / 80s and personal computers from the 80s onwards - unfortunately Lisp never really arrived at mobile systems - though it participated in an early attempt (transferring a lot of technology to the early Apple Newton - or what it was called before it was brought to the market - projects). The main Lisp influence on what we see as web technology, was the early influence on Javascript.