|
|
|
|
|
by ballenf
2951 days ago
|
|
> One interesting thing I realized is that communities are built around programming languages and it's really hard to influence another community from the outside. IMO, that point is worthy of a detailed blog post or conference talk, if you would be so inclined. Would love to hear more. |
|
When I started working on React Native, I thought that the most difficult thing would be to design a good set of APIs to make it easy to write mobile apps using React that felt good. This turned out to be the "easy part", we started the project wanting to solve this and having lots of good ideas on how to do it.
What turned out to be a lot harder was the fact that we were trying to use JavaScript from within iOS and Android ecosystems.
1) Those at the time were in different repos, how do you synchronize code between them?
2) The three ecosystems use a different set of tools for everything: IDE (xcode, intellij, sublime/atom/code/emacs), package manager (cocoapods, maven, npm), linters (eslint), build (how do you hook up with the play button in xcode?), profilers (can you display stack traces with the two languages calling each other?)...
3) Mixing and matching languages inside of a single project is hard because there are a lot of subtle different semantics (eg: javascript doesn't have int32 or int64). If you have type systems, they are incompatible (flow vs obj-c). So in practice you end up with a lot of boilerplate to talk between the two languages and it's a performance overhead.
There's also a social aspect where you invested so much learning an ecosystem that it becomes part of your identity. So you see someone wanting to bring another language as trying to attack you directly.
My mission since then has been trying to "break down the silos" and trying to build tools that can work with all those languages. It's not been easy :)