5 ms·
Can we please stop trying to Javascriptify everything? The cross-platform thing has been tried again and again and again, and always runs into the same pitfalls
by tspike 8y ago
Can we please stop trying to Javascriptify everything? The cross-platform thing has been tried again and again and again, and always runs into the same pitfalls: poor mimicry of native standards, inefficiency, debugging difficulty because of abstraction layer built on abstraction layer, enabling developers with poor understanding of the underlying platform to make an absolute mess of an app for others to maintain later on, and so on.
- CharlesW 8y agoApps like VSCode show it can be done well. And using JavaScript for doesn't necessarily preclude a native UX (see: React Native).
- tspike 8y agoReact Native only minimally uses native views. Rather than standard controls, they paint generic views, which still requires custom implementations and reinventing the wheel.
- petekp 8y agoWhile React Native doesn't fully support native navigation components out of the box, there are third party libraries that interface directly with native navigation modules, e.g. https://wix.github.io/react-native-navigation https://wix.github.io/react-native-navigation. Moreover, React Native makes it easy for developers to 'drop down to' native code at any point to fully leverage native SDKs and APIs alongside their Javascript code using the NativeModules API. Example of native modules with React Native wrappers: https://facebook.github.io/react-native/docs/components-and-apis#ios-components-and-apis https://facebook.github.io/react-native/docs/components-and-... NativeModules API: https://facebook.github.io/react-native/docs/native-modules-ios https://facebook.github.io/react-native/docs/native-modules-...
- int_19h 8y agoIt still doesn't give you native look & feel. Although much as it pains me, I think that is a lost cause. And it was lost through attrition - devs kept throwing non-native (often, JS-based) apps at users, and users got conditioned to each app having its own look, much like websites.
- petekp 8y agoI feel you. In most cases, Android and iOS's native components are superior to custom-rolled UI elements. Easier to use, more performant, and they leverage our platform muscle memory. Fortunately, it does seem like these platforms are beginning to converge on a set of common UI patterns, e.g. Android adopting the tab bar, and iOS apps beginning to adopt Android's horizontal-paging navigation. The colors, iconography, and typography shifting can disorient somewhat, but I'd argue it's the navigation model that's most disruptive when using different apps.
- int_19h 8y agoIt's much worse on the desktop, where we already had very detailed GUI standards, with decades of polish - and it's all getting thrown out because of the latest Electron etc fad. The upside is that Linux sees some great apps (like VS Code), but I'm not sure that's worth the cost.
- tspike 8y agoIt's easy to get trivial examples of native integration working, but as soon as you try more complex things it starts to break down. Code push? Oops, your native integration in old app versions just broke. Share an existing native UI library? Sorry, Yoga has its own (incompatible) thing going on. Yes, there are workarounds for all these things, but at what point does the overhead defeat the purpose? Also, the security and performance implications of the Javascript dependency ecosystem should not be ignored. Small greenfield app on a shoestring budget? It's perfect for that.
- CharlesW 8y ago> React Native only minimally uses native views. My comment was that it doesn't preclude it, addressing the parent's conflation of language and view layer. Yes, you might have to do more work in React Native. But similar frameworks[1] appear to do this out of the box, if that helps. [1] https://docs.nativescript.org/ui/components https://docs.nativescript.org/ui/components
- robbick 8y agoIt may come up against the same pitfalls again and again but it has produced some of the most popular desktop + mobile apps out there because it consistently has some of the best benefits (large community, standards driven approach, lots of developers who know the language)
- supernovae 8y agoI disagree entirely... I hate how an app for everything means vendor lock-in. Developers should embrace web standards and come together on making apps/tools that don't suck. I think having to write for android, ios, osx, windows, chromeos and linux sucks worse..
- anthk 8y agoQT5.
- spondyl 8y agoI would love to use QT5, specifically the Python bindings but I always struggle to find documentation beyond a handful of out of date tutorials.
- pnenp 8y agoWhat in particular are you missing? I happen to be writing a PyQt5 tutorial for my https://build-system.fman.io https://build-system.fman.io today.
- laurent123456 8y agoLast time I tried, what I found was missing is some guidelines on how to architecture an application. For the web, we have React, Angular and plenty of frameworks to choose from, which help having some base app skeleton to build on top of. In Qt (QML), I couldn't quite find something like this and I had the feeling I needed to create my own framework from scratch, which is hard when, at the same time, you need to learn a new technology. There were some random ideas in various blogs and articles but nothing major or at least no officially supported one.
- Gorbzel 8y agoYou are wrong. ...note how I’ve said nothing to refute your comment because what you wrote it in responds to none of the historical empirical problems with this approach and just asserts “let’s make this not suck” glossing over the reasons why it sucks.
- deleted 8y ago[deleted]
- qwerty456127 8y ago> Can we please stop trying to Javascriptify everything? Good news is they have invented a better programming language called ReasonML for React.
- namuol 8y agoCan we please stop gatekeeping our industry and embrace tools that lower barriers? But seriously, if you're concerned about the quality of software, build better tools that guide new developers into best practices. Remove needless abstractions, replace others, and optimize the rest.