567 karma · joined April 19, 2011
Working on tools that expand what people can think and do.
Past: led R&D at Khan Academy, helped build iOS at Apple.
http://andymatuschak.org
[ my public key: https://keybase.io/andymatuschak; my proof: https://keybase.io/andymatuschak/sigs/cXR2O704tD-HTFzScbqwt5b81_3bhHaU-xHGAHmHkfc ]
And of course, because React Native can build to web, one could ship Electron apps for platforms with lower priority for your business.
In particular, this means that you can use React Native to build native macOS apps. You still get live reloading, hot code push, pleasant abstractions, etc. Most importantly, though, these apps can use straight-up AppKit controls on macOS and straight-up UIKit controls on iOS. Better still, you can use react-native-web to ship such projects on the web too.
You will+should, of course, have many platform-specific branches. But I find that the vast majority of my code is shared, and there's a _world_ of difference in being able to use the same development tools to ship polished software on desktop, mobile, and web.
My most recent project builds to macOS, iOS, Android, and web out of the same Typescript project. There was certainly some toolchain chicanery involved in this, but now that it's set up, it's delightful.
Many of the companies shipping Electron apps on desktop are shipping React Native apps on mobile. I would very much like to see React Native-based desktop apps replace Electron apps.
That section's claim is that these mediums are often common goods, so it's hard to build moats around one's investments. Extending your comment to more explicitly attack the central claim, I think you're suggesting that if Adobe _had_ paid attention to this market, they'd be able to defend their position, and Sketch/Figma never would have been relevant. Maybe they would have been able to more quickly create a "spinoff" app because they could adapt existing code, or maybe they could take advantage of their existing network effects (e.g. through educational channels). And, more broadly, that the general claim is weaker than it appears: media inventors can often find ways to defend their turf through mechanisms like this.
That might be true! It's hard to adjudicate counterfactuals like this. I'd be curious if you have any lenses that might help us think about that. Given that we're on Hacker News, I'll offer: one reason why startups often outcompete incumbents is that line extensions like this are counterintuitively often _harder_ for the well-resourced incumbents because of inertia, culture, etc.
Research stemming from Piaget suggests the need to introduce information not authoritatively but rather in response to "disequilibria"—authentic intellectual needs in the listener/reader. Of course, good authors can also work to create these disequilibria.
Do you think that the presence/lack of this intellectual need is the highest-order bit? That is: if you really have questions you want answers to, you're not going to have any trouble absorbing what you need, no matter the medium's shape? I guess I see it as a both-and situation!
To your central point: you're right that effortful engagement is a hugely important ingredient for learning, so we shouldn't aspire to simply remove effort. But do you think that there's nothing that can be done in an explanatory artifact to support the knowledge construction process you're describing? To make it any easier, at all?
Just as an intuition pump, imagine comparing 1. Euclid's Elements, with no figures; 2. Euclid's Elements with figures. Does the latter addition ease knowledge construction? If so, why wouldn't we expect it to be possible to take more steps of the same kind?
(Author here) I agree that methods like the ones you've described are indeed quite effective when executed successfully. I argued in the piece that this kind of process is often blocked on metacognition. That is: the reader has to regulate and monitor the processes you're describing while simultaneously grappling with new concepts. It's a lot to ask. And of course, the medium doesn't even explicitly ask it of the reader: when people do these kinds of methods, they're instigating that independently.
Even if we limit ourselves to just these methods, can't we imagine a medium which is somewhat more involved in the methods we claim are essential to understanding?
And if we accept that, one more provocation: wouldn't we want authorial intent to carry into the use of these methods? Given that the author is already carefully sculpting so much of the rest of the reading experience, why wouldn't we benefit from them extending their authorial direction to the metacognition around the book?
That said, if the theory is that books’ knowledge is absorbed through concrete use, why is the book so uninvolved with facilitating or interleaving with that concrete use? I’d suggest the impetus and regulation of the concrete use (and its relationship to the book) is all on the reader. Does that align with your thinking?
The framing which drove me was: isn’t it odd that even readers who are quite motivated to read a book still often absorb fairly little?
That would be a very expensive thank you for a tiny business! Given Panic's level of polish and concomitant development timelines, I expect this app took several months of a designer's time and at least six months of an engineer's time—probably more like nine. Then QA, support, etc. I'd guess we're looking at a >$150k price tag here, plus ongoing maintenance.
As to paying for itself via bringing new users into their customer base: given the average sale price of their desktop software, this iOS app would have to generate several thousand net-new sales. That doesn't seem wildly outlandish to me, but I'd guess one order of magnitude fewer is more likely.
At Khan Academy, we’re building an early product development team which will explore and propose solutions to big open problems in education. We’re looking for a couple new prototyping-and-invention oriented colleagues to join us, and we naturally thought of you all. Our approach is multidisciplinary, but we’re seeking depth in interaction design (https://boards.greenhouse.io/khanacademy/jobs/825531) and scrappy prototype engineering (https://boards.greenhouse.io/khanacademy/jobs/825502).
For an idea of our work: we’re currently exploring how we might support students in developing rich understanding through open-ended, free-response-style activities (rather than the typical fill-in-the-blank or multiple-choice). We hope to help millions build critical thinking, historical reasoning, and literary analysis skills.
Here are a few reports on more conceptual exploratory projects from some of the folks involved: https://www.khanacademy.org/research/reports/cantor and https://www.khanacademy.org/research/reports/early-math
Please let us know if you’re at all interested in chatting more about the roles (andy@khanacademy.org). Thank you!
At Khan Academy, we’re building an early product development team which will explore and propose solutions to big open problems in education. We’re looking for a couple new prototyping-and-invention oriented colleagues to join us, and we naturally thought of you all. Our approach is multidisciplinary, but we’re seeking depth in interaction design (https://boards.greenhouse.io/khanacademy/jobs/825531) and scrappy prototype engineering (https://boards.greenhouse.io/khanacademy/jobs/825502).
For an idea of our work: we’re currently exploring how we might support students in developing rich understanding through open-ended, free-response-style activities (rather than the typical fill-in-the-blank or multiple-choice). We hope to help millions build critical thinking, historical reasoning, and literary analysis skills.
Here are a few reports on more conceptual exploratory projects from some of the folks involved: https://www.khanacademy.org/research/reports/cantor and https://www.khanacademy.org/research/reports/early-math
Please let us know if you’re at all interested in chatting more about the roles (andy@khanacademy.org). Thank you!
The big picture observation is that for value types with storage larger than a few words, several instructions must be emitted per call and per storage word because they cannot be passed-by-value in registers. And Swift often emits more calls than you can see (e.g. thunks, protocol witnesses, weak sentinels, etc). This is not new to Swift—the same requirement exists when passing large C values around—but we use value types a lot more in Swift for various reasons, so the issue becomes more salient.
In terms of remediation, I audited our app for all structs larger than a few words. I just did this manually; there were something like 120 structs to look at. For each, I converted it to a class then evaluated the impact on generated code size. Only four structs had meaningful impact on generated code size (to the tune of ~13MB), and happily, they were fully immutable, so they retained their value semantics even when converted to classes. If they had not already been fully immutable, I would have had to spend some time either adapting the classes to achieve value semantics, or adapting their clients to tolerate reference semantics.
Then I audited our app for all enums larger than a few words. These can be made pass-by-reference by using Swift’s `indirect` feature, which implicitly boxes associated storage. We had one enum for which this made a substantial difference, to the tune of several MB.
Then I had to make sure runtime performance hadn’t been too badly damaged by all the new dynamic allocations and indirections. In the end, I observed nothing noticeable. We don’t have formal repeatable performance tests, though—it would have been interesting to see the impact on those.
C++ has this issue, too; it largely handles it by using reference arguments when consuming large stack values. In the future, it’s possible for Swift to optimize many cases (especially intramodule) where this occurs by allowing deeper stack frames to reference values types stored in parent stack frames when it can prove it’s safe. Rust has a lot of fanciness here you might find interesting!
This is a tough area for us in general, unfortunately.
But I'd love to be wrong and discover a way to achieve the same quality of results remotely and asynchronously.