Building Nuclide, a unified developer experience
code.facebook.com
code.facebook.com
But they didn't, my guess is because NIH.
Perhaps but nobody has done it yet.
Emacs and Vim are like Lisp at this point: unicorns. Perfect, mythical creatures everybody loves to talk about. Meanwhile oxen like Eclipse, Visual Studio, Sublime, etc. keep chugging 90% of the world's code :)
I've been waiting for this for literally a decade with emacs. It hasn't happened and I don't have the expertise to do it, so nowadays I exclusively use IntelliJ for the languages I can. I'm probably going to start using CLion with it as well.
There are lots of aspects of Emacs that I miss but I hope that IntelliJ can take them over with future iterations of the vestigial "IDE scripting console". They just need to put a lispy language in there like Clojure and bindings into the editor like Emacs Lisp has.
Oh and also replying to the guy above. Tell that to dozens of OSS tools that had to be supported by real companies because people were not that willing to donate. Look at grsecurity for example, tmux, and the other ones i do not remember that Stripe donated 100k to.
Which gives you the incentive to make the software less user friendly so more people pay for support :)
I work with someone who has gotten me thinking a lot more about what software I do and don't pay for. He pays for any software he uses "daily". The payments are either donations to open source projects, service fees, or software purchases.
Although this would not be much of a change for Sublime in particular, which is commercial with purchase optional (just occasional nagging.)
A majority of programmers actually wanting to use it.
While we might use Emacs and Vim in our echo chamber, the huge masses of programmers prefer an IDE or something like TextMate, SublimeText, Notepad++ etc.
Generally I wasn't really that impressed by the demo. Sure, the integration is nice, but I don't see how that's different from most other IDEs. But what struck me as a bit odd was the presenter stating a preference for vim, and then starting to edit Objective-C like all you've got is your cursor keys plus tab.
So, yes, another IDE, yay. And if you work at FB, sure, mindshare alone is probably worth it. But why would one give up normal mode/macros/elisp/abbrevs etc. for that?
Now don't get me wrong, I totally understand different preferences, and if your current editor is e.g. TextMate/Sublime or an IDE like PhpStorm/Eclipse/Xcode, I can see it. But if you start with the premise that vim is the One True Editor, why would this be the switch reason, whereas IDEs before didn't get you there?
No problem with another flower in the garden of editing, I just thought the sales pitch was a bit weird.
Re: pico. You'd be surprised what editors new employees and interns use when presented with a shell prompt :-D. At FB everyone is free to use their editor of choice...we don't force Nuclide on them.
Re: what's different. Xcode does Objective-C well. IntelliJ does Java well. PHPStorm does PHP well. Tons of editors do JS well. As soon as you start mixing technologies, the IDEs quickly degrade in overall usefulness and you basically have an IDE for one tech and a dumb text editor for the other. Nuclide is opinionated and provides a nice integrated end-to-end experience if you buy into the tech it supports. If you don't use any of that tech (Hack, react, buck, react native, flow, phabricator, mercurial, etc) or only use 1 language/platform at a time (like a pure objective-c iOS app) then Nuclide basically is Atom.
Nuclide's value is super apparent with React Native. You need to be able to edit JS and Objective-C and eventually Java, and it would be nice to have all the autocomplete/click-to-symbol/code search goodies for all three. Let alone debugging all of them and jumping between the stacks. No IDE provides all the features you need for a project like React Native out of the box. So we built one (leveraging Atom of course). It is magic working on a React Native app and using the same debugging UI to step through the JS, and then the Objective-C, and then using the SAME interface to debug your Hack code on the server.
Finally, over time you'll start to see a bunch of really, really smart integration with tools and libraries like Relay and GraphQL. We already have some internally--I can "click to definition" in a GraphQL query and see where it is defined in JS, and then click through and see where it is implemented in Hack on the server. Simple symbol search can't do that and spanning multiple languages and stacks is unsupported by most IDEs. Nuclide is opinionated so we can do deep integration like that...we leave the general editor-stuff to Atom proper.
Re: clumsy demo. I actually converted from vim when we started Nuclide...I even used vim for most of my JS/Android/Hack/iOS programming. For the demo I didn't install the vi bindings because I wanted fewer things that could go wrong. Because I wasn't a huge IDE user previously you see me using the mouse a ton instead of (generally) standard IDE keyboard shortcuts.
I'm sure it is nice to have an editor that understands javascript better and it is nice to see that yes they have syntax checking and auto suggestion. Experience tells me the devil is in the details of the architecture for how much their integration will survive tool churn vs composition model of different tools.
What I'd really like to see in my next editor that seems hard to find is:
- Ability to easily share code and screen with other developers. I know the lone gun is typical in software development but it would be great to work with other people seamlessly as well.
- Working with files/shell on a remote server. All to often these days I find myself with large data set that is hard to move so I end up using console tools to debug the problem on the box.
sorry thought that was funny
This editor looks cool though. I haven't really looked at Atom, so I assume that it has good PHP/Python/Ruby support. I will try this out when it is released, I love the autocomplete
They're great for browsers because the affordance fits: you have one active "browsing session", and then a bunch of inactive ones, and the inactive ones don't matter, and when you switch, you're asserting that the active one now doesn't matter.
But for productivity applications, tabs are just kind of silly.
In the OSX Finder, for example, if I have two windows open, I'm likely rearranging files between two-or-more folders—I need to see the state of both the source and the destination. You can drag-and-drop a file onto a tab, but you lose the visual cue as to where it's gone—it might have just ended up out of scroll-range in the current folder, or in some other random folder. To do the task quickly, I need to see both places: something done much better† by the window metaphor.
† (Though not perfectly: having to rearrange the windows to get the drag-sources and drop-targets all visible is a big hassle. Mac OS almost had something going for a while with MDI applications having their own virtual desktops, but they never far enough with it; if you could tell a given MDI application to auto-arrange/snap its document windows, people might actually start to want MDI interfaces again, rather than uberwindow "I know what's good for you" interfaces like FTP programs or Xcode.)
Then again, I'm also astounded that "tabs" aren't just a window manager feature (i.e. being able to group arbitrary windows into a single tabbed window, and noting when windows in a tab group spawn a new window and spawning it inside the tab group instead.) That would have cost too much GPU power decades ago, but it's costless with compositing window managers.
ZUIs are far too esoteric for the average WIMP paradigm nearly all computer users are familiar with. I wouldn't count on it anymore than I would on getting an Oberon/Cedar-like programmable text window interface.
(File management, on the other hand, is completely different; there, you're almost always going to want to have more than one thing visible and a windowed interface is better. That's why no mainstream file manager supports tabs OOTB.)
I'm trying to achieve this using i3 as window manager and a minimal browser like vimb which has no tabbing built-in. That way you can search for a browser page just like you would any other window.