- 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.
Rethinking the IDE for the 2020s
21–30 of 64 posts
Re: Rethinking the IDE for the 2020s
#22Re: Rethinking the IDE for the 2020s
#23Re: Rethinking the IDE for the 2020s
#24Managing 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
#25Re: Rethinking the IDE for the 2020s
#26Re: Rethinking the IDE for the 2020s
#27Earlier 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?
Re: Rethinking the IDE for the 2020s
#28Cross-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.
Re: Rethinking the IDE for the 2020s
#29Basic 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…
Re: Rethinking the IDE for the 2020s
#30This 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.