An experimental software development environment
isomorf.io
isomorf.io
But please god, the UI is in iconese with many missing tooltips. I hate this trend in UIs. I have no idea what the buttons do, and I am scared to touch them. (and it's a webapp, so it will change in 6 months).
What does a half full beaker have to do with software development?
A decent number of people's brains just don't assign meaning to images. I'm one of them. As an example, I've been using an iPhone for several years. I still routinely click on the Notes icon instead of the Reminders icon, as well as, the Maps icon instead of the Weather icon whenever I'm rushing and don't take time to read and say the app name in my head.
I'm not sure if it's tied into being an auditory learner, but I know I'm not alone.
You should provide tooltips regardless of whether the meanings are generally clear.
How do you see real applications being managed in this system? The tour doesn't touch on this. The included examples are quite abstract, perhaps even too much as they don't really engage me -- I can't imagine caring about how many times a "length" function is used globally. If anything, that example gave me an uncomfortable vibe of the Node.js "left-pad" drama... Sharing code in ridiculously small units just doesn't solve any productivity problems I've experienced.
The stuff about abstract types and function shapes is certainly intellectually interesting, but I'd encourage you think in terms of larger assemblies of code. (Maybe you already are -- I do understand that this is an early demo and you want to get the core right.)
In terms of applications, our initial work has been to export functions as microservices onto existing platforms (e.g., Lambda). We've also explored downloading code as either native artifacts (e.g., maven) or as command-line apps. We are also playing around with adding integrations for ReactJS to support web applications. Where we focus our deployment efforts is one of our current big questions, and one where we are most interested in community feedback.
In terms of the abstraction, you are quite right that the examples we've shown are very trivial, really just to convey the concepts. The more interesting work will probably be sharing much more complex functions, or sharing the built app/services themselves (which could be made transparent within the platform itself).
Definitely reach out if you have more thoughts or feedback!
For example, Javascript added `bar${foo}`, but my code still has lots of 'bar' + foo. It'd be sweet to just click a checkbox and see my code get smaller on screen, without changing the underlying source code.
So what I really want is an editor that takes verbose languages and collapses common idioms into concise syntax.
Also, parsing and generating N languages is a really, really hard problem.
> So what I really want is an editor that takes verbose languages and collapses common idioms into concise syntax.
IDEA does this. Among other things, it hides lots of boilerplate in Java anonymous inner classes.
Really, it is not a hard problem with the right tools. Haskell, for example, is extremely good at parsing and generating (maybe that's the only thing that is is #1 in, but it is miles beyond any other language I have used...). An example of this is pandoc https://pandoc.org/
A projectional editor shows you both the original source code, and alternate representations (or, 'projections') of it. Given the right plugins and config, these alternate projections could happen to be more intuitive to grasp/edit than the original source code. One plugin could, for example, remove all the unnecessary semicolons. Another, could remove all the unnecessary punctuations and project the code in an indentation-significant way or vice-versa. Your idea to replace all the `'bar' + foo`s with ``bar{foo}``s would also be possible.
It's easy to imagine much more advanced use-cases. A sufficiently advanced editor could detect calls to FRP libraries, and project the data flow as a visual graph (picture all the `flatMaps()` and `scanLatest()s` as nodes on that graph). Or, given access to compile-time type info (via a typescript-style language-server), it could overlay the type of a value with the missing fields being shown as slots to be filled.
I can imagine such an editor to mostly "obsolete" the idea of a single syntax for each language in the first place. Like the language but not the syntax? Roll your own syntax! Just configure your own editor plugins. No one would have to know. No one would have to agree with your "taste." Not even your git repo [0]. (See /r/nosyntax/ for more ideas)
A projectional editor can also be implemented in the runtime, ala Smalltalk. In that case, the language itself is designed from the bottom up to accommodate such DX and opens many more possibilities.
A Clojure Conj talk called "... forgotten Lisp UX" explores the history of this idea in the context of lisp [1]. The author is also on Patreon doing exciting things in this field (https://www.patreon.com/shaunlebron).
---
[0] the editor may store some metadata next to the code that'd be committed to the repo, but the code itself would still be saved in the original syntax. [1] Inspiring a future Clojure editor with forgotten Lisp UX - Shaun Lebron https://www.youtube.com/watch?v=K0Tsa3smr1w
A few screenshots on the home page that gives an abstract idea would solve this.
EDIT: Found this by reading the comments. https://blog.isomorf.io/what-is-isomorƒ-bdc50ce597ee In another 60 seconds I've learned that it's a way to program in a syntax-agnostic way with your mouse. I don't like using my mouse because of wrist fatigue, so I guess I wouldn't be interested.
>I don't like using my mouse because of wrist fatigue, so I guess I wouldn't be interested.
Is like saying:
>Having to do activities that involve lightly throwing baseballs hurts my arm so I'm going to stick with lightly throwing tennis balls.
Oh well. Structural editors didn't catch on in the 1980s, I'm not holding my breath for the 2010s. But we'll see; some things do change. Also, it might really be useful for beginners or people who write programs without considering themselves programmers.
Oh wow I got like 5 minutes into the tour and didn't realize that until I read your comment. I gave up because it felt like I was just looking at an HTML IDE with some verbose Java. If the novel part of the product isn't showcased in the first few minutes of the tour you're going to lose a lot of interest.
This almost certainly won't catch on because inertia is very hard to overcome, but how amazing would it be to have computers do more of the heavy lifting for us?
(this is guided by my reaction to the product, where I saw the following:
* Syntax is a detail, you choose one you like without altering the semantics! It's a view layer.
* Static types (present in many other languages, less of a gamechanger)
* Analysis of dependencies of and users of code at-a-glance.
* in-IDE integration with social element of it
These were what struck me as the most novel bits, but I might have missed others)
Could be pretty neat if you focus on learners. Once mildly proficient, one'll want the speed and flow of typing and freely operating on lines/blocks/selections in an unconstrained text file.
We wrote up some thoughts on the economics of structured editing on our blog: https://blog.isomorf.io/the-economics-of-semantic-coding-7e8....
For those interested in this field, there is an emerging subreddit: r/nosyntax
General UX: "What will/did this button-with-no-tooltip do?" was a theme for me.
Tour UX: I felt trapped in chains of modal windows.
Perhaps add "clicking outside modal windows bails out of chain"; and in Overview, "clicking on numbered topic jumps to that step". These are perhaps low hanging fruit for restoring some user control of navigation?
I wonder if "tours" is the right objective. Perhaps topical examples? Eg https://threejs.org/examples/ ? However... many use youtube videos to learn code far more than I would, so perhaps I'm just not the target audience for a video-like tour. Perhaps a label change to set expectations "Take a video-like tour"? But I expect to be able to jump around in videos. Screencast the tours for youtube?
Language: I wish the type system was richer. I'd happily accept "projections have structured comments describing unrepresentable semantics" for that. If I could express the type "thing with a partial order < and a +", then I'd have looked to sign up, intending to upload a bunch of algorithm code.
Functions are nice, but to win big, we need a better type system than is currently available. ADT's don't scale. Witness haskell's half-decade of heroic effort... just to insert Applicative. Anyone wants to make something like this with a type system that's a pushout lattice of theories, I am your slave. Figuratively.
Randomness: Projective editing might help with the Unicode!/Ascii! Agda/Idris rift, but the semantics would be a challenge, and the market small. Though its maybe a good population to attract if the type system were more of a focus. Fortress-style "projected to look like math" might appeal to Julia-is-the-new-FORTRAN folks? Using kate.com-style emacs/vi/etc plugins with a "sidebar" website window for value-add, might separate out the "switch to us as your editor" aspect from the "here's analysis and ecosystem" aspect.
XR changes the UX constraint space for this kind of thing. Perhaps startlingly soon and rapidly. So something to keep an eye on. The bite-sized functions, sidebar analysis, refactoring, fine-grain ecosystem, and type directed development and search, seem good matches for an XR UI.
Huh? Firstly that has nothing to do with ADTs. Applicative's a type class. Secondly it didn't take effort it just took an agreement to do it and enough warning and checks that everyone had done the minimal rewrites required. If anything taking five years was a sign that it wasn't desperately important, just housekeeping.
> it didn't take effort [...] housekeeping
This description is not consistent with my limited observation of discussions among some involved.
This is also the case for algorithms in Haskell when the Applicative Monad Proposal was enacted. All existing implementations stayed unchanged. The benefit of the AMP was that some implementations could drop an Applicative constraint if they wanted.
> > it didn't take effort [...] housekeeping > > This description is not consistent with my limited observation of discussions among some involved.
Then I suggest you ask for further clarification. There was a lot of discussion and debate to make sure we got a smooth transition. Basically no one opposed the proposal. The changes to code were absolutely minimal.
Unfortunately, I also found the UI so difficult that I gave up. When I got to the Sandbox (note: clicking the different tour stage links to jump ahead doesn't seem to work) I tried editing the "doubleMe" function, and deleted the expression "x * 2". Then I spent five minutes just trying to re-enter that expression in a way that Isomorf would like, but to no avail.
I understand the desire to establish unambiguous semantics at coding time, but it feels like you're forcing the user to do extra work for it. Perhaps if/when I get used to the editor, it'll save me time in the long run. Right now it feels like I'm hamstrung.
All that said, the overall concept still looks fascinating, and I hope it succeeds. Good luck!
You might also check out the post on general editing [2].
Thanks for the feedback!
[1] https://medium.com/p/the-economics-of-semantic-coding-7e8fd1... [2] https://medium.com/p/an-experiment-in-structured-code-editin...
I basically lost interest into the language when I run into the most verbose type declaration I ever saw, isomorf.number.Number (I couldn't copy it on the phone). There must be a better way to do it.
But the idea is cool even if maybe not very new. I've seen different languages compiled or interpreted into the same pcode, bytecode, etc. Maybe the translation here is deterministic.
This tool seems to me like it would be fantastic for building and managing strongly typed, 100% code coverage, reliable bug-free microservices. Lots of other tools help you build microservices, but they help you build BUGGY microservices. I think solving the problem of building reliable microservices could be huge.
But this product itself is not a microservice, instead it's an advanced IDE and backend with a lot of different components. So while it would be cool to use isomorf to build parts of isomorf, I'd vote you delay going for this goal for a long while.
I can't click on next in the tour without triggering the chat feature.
I've now gone back and tried the sandbox and I couldn't code like this. As such, I'm still left wondering what is the use case for this?