Live data from Hacker News

Rethinking the IDE for the 2020s

movingfulcrum.com

21–30 of 64 posts

Re: Rethinking the IDE for the 2020s

#21
This doesn't align with my expectations/needs. I would love to see metrics/survey data on what others need.

- We no longer want code running on developer machines. We're actively working to embrace remote execution for everything. - Repository boundaries exist for a reason. Why are you modifying two repositories at the same time? - We think collaboration is a good thing. Live coding allows for pairing and troubleshooting. It's great for knowledge sharing and for getting new developers up to speed.

Re: Rethinking the IDE for the 2020s

#22
I disagree that VS Code is just a "downgrade" of the IDE level experience offered by IntelliJ. Certainly, a lot of functionalities are missing in VS Code, but they are compensated with speed and depending on your needs this compromise is more than worth it. If you are using web-technology (like TypeScript), IntelliJ does not even offer much more than VS Code.

Re: Rethinking the IDE for the 2020s

#23

All I need is fast text editing, fast navigation, fast syntax highlighting, fast fuzzy finding. Keyword is fast.

Have you considered buying a zen cpu? It's worth it

Should I have to upgrade my CPU to get acceptable performance out of a TEXT editor?

Re: Rethinking the IDE for the 2020s

#24
It seems to be a set of opinions and self-quotes based on the frustration of a particular project management pattern, which includes micro-repos and micro-services.

Managing dependencies, at build and run times, internal and external, seems to be the prominent pain point. As far as I can remember, it has always been and it cannot be solved in a single simple way.

Things have gotten "better" (ie at least there are tools and practices) with the omnipresent git, cheap VMs, CI, docker, kubernetes, etc.

> Refactoring so far has really been a single repo feature. But what if the code you are refactoring is called by code in 100 other repos in your organization? What if those repos are not even checked out locally? The modern IDE needs to evolve beyond single repo operations.

I hesitate to either call to Hanlon razor or accept that tools can help, further than basic monorepos. I don't see any valid ways to manage this with external dependencies however.

Re: Rethinking the IDE for the 2020s

#27

Earlier quoted context omitted.

Have you considered buying a zen cpu? It's worth it

Should I have to upgrade my CPU to get acceptable performance out of a TEXT editor?

Well a modern editor is more akin to an exobrain than a simple text editor. Anyway recent intellij is pretty fast, also it is more memory bound than cpu bound.

Re: Rethinking the IDE for the 2020s

#28
post #19

Cross-repo refactoring (even worse: renaming) seems like an at best worthless and at worst quite costly thing to optimize your toolchain around. Having stable interfaces between systems is very important. The whole point of having separate systems is so you don't have to change one when you change the other. If that's not the case, you're better off with a monorepo.

Indeed, if you’re doing that kind of refactoring a lot what you have is a distributed monolith, not a microservices architecture.

Re: Rethinking the IDE for the 2020s

#29
post #4

Basic summary: "a modern IDE should be optimised for my particular use-case". The author then proceeds to describe a very atypical use-case. One example: "The IDE should ask for the Github org eg, github.com/astradot and it should create a single project that contains all the repo as modules. It should then manage lazy-loading/lazy-checkout or whatever is needed to give me a seamless experience browsing the code of m…

Is that a monorepo? Or just one organization with many repos?

Re: Rethinking the IDE for the 2020s

#30
Context: I most recently worked at Facebook, which develops and maintains an in-house IDE, Nuclide, for working with its massive codebases; currently it uses VSCode as a base, although it previously used Atom. In a previous life I led the DevTools team at Airbnb (and before that did various other things at Airbnb).

This article hits most of the nails exactly on the head, at least from the perspective of large corporate environments; I doubt any of these apply to small startups (and if they do to yours, something has probably gone very wrong). Nuclide handles these issues in fairly interesting ways:

* FB built their own incremental, caching compilers for several languages that Nuclide is aware of, so that typechecking and rebuilds are effectively instantaneous even across massive codebases.

* Nuclide integrates with FB's massive cross-repo search service, BigGrep, so that you can find references to anything.

* Nuclide's version control UI is phenomenal, and is aware of multiple repositories existing, which ones you have checked out, and integrates with their in-house version of Phabricator (a code repository/review tool similar to Github). I literally never learned to use Mercurial while I was there. I just used Nuclide.

However, there's one major difference between Nuclide and the vision that this article lays out: remote vs local code checkouts. Nuclide ran locally, but it used remote code checkouts, and your code ran on the remote, not on your local machine. I think the reasons and benefits were compelling:

* Massive repositories take up massive amounts of disk space.

* Massive repositories take massive amounts of time to download to your laptop, and if you're working in a large corporate environment, they also take massive amounts of time to download recent changes since there are many engineers shipping commits.

* If your machine gets hosed, you can spin up a new one quickly; in FB's case, it took seconds to get one of the "OnDemand" servers. If your local machine gets hosed... A trip to IT is not going to be as easy.

* If you run into issues, tools engineers can SSH directly into your instance and see what the problem is, fix it, and also ship preemptive fixes to everyone else. That would feel quite privacy-invasive for someone's local machine.

* Many employees enjoy being able to take their laptop with them so that they can work remotely e.g. to extend a trip to another country without taking more PTO. Laptops aren't great at running large distributed systems.

* Even some individual services (ignoring the rest of the constellation of services) are impractical to run on constrained devices like laptops, and operate on either "big data" or require large amounts of RAM.

* Remote servers can more conveniently integrate securely with remote services than laptops or desktops.

* Having the entire codebase stored locally on a laptop or desktop is a relative security risk: if it's in a centrally managed server and a laptop gets stolen, revoke the key. If it's on disk, well, hope the thief didn't get the password? Or in FB's case, hope the thief isn't an APT/the NSA and has backdoored the laptop's full-disk encryption? And it's not just laptop theft: a disgruntled employee could intentionally leak the code -- or in Google and Anthony Levandowski's case, sell it to a competitor through a shell company. If everything is stored centrally and local checkouts are extremely uncommon, you have a lot more room to automate defense against that scenario.

Overall I'm a big fan of running your code on remote devservers rather than on local machines once you get to scale.

Post reply on HN