Why a veteran web developer finally turned to OS-native apps
gigaom.com
gigaom.com
It seems strange to me that so many young developers don't seem to comprehend why that is a big advantage.
I want to code in CoffeeScript and use nice simple APIs.
I'm sorry but Objective-C is outdated and overly complex. The only reason people accept and even learn to love it is because if you are an Apple person you have to. You have no choice in the matter. Its like people in North Korea have to love their Dear Father Leader or something.
I'm sure the Android Java libraries are much better than before, but they are still based on what I consider to be a dated type of development. The framework APIs are inferior and constantly specifying types is unnecessary.
To me CoffeeScript with Node.js modules are the state of the art in terms of language design, dependency management, and API design.
Currently I'm working on a project that is extremely heavy on the client-side and despite being the solo front-end coder, the four back-end folks can't keep up with my (RESET API) demands. Not that I am some rockstar 10x programmer - it's just that the current environment makes me the most productive I can be. With a few scripts and editor shortcuts, my workflow from code change to browser-refresh is near instantaneous.
As I alluded to at the end, the web case makes a lot of sense for companies with unique services who want to roll out across platforms. e.g. If you're a corporate insurance broker, you have a few hundred users who just want some conveniences from native apps, that's a good case for HTML5.
Another example I saw recently is an agency making "viral" apps. Just one-time apps for short contests and so on, and they can do a great job with HTML5.
Deep-level integration though needs native, whether you like Obj-C or not.
I am still hoping that PhoneGap/Cordova will work out ok for my next 'native' app. Have you found that it isn't adequate?
* Hard or impossible to do rich, interactive widgets, notifications, and lock-screen in HTML5
* Unclear path for downloading and saving large files. (Might be possible, but again would need native bridges or native code; forget about Ajax and offline HTML5 storage.)
* Mediocre UI. If you work hard at it, you can build a reasonable UI, but one of the feedbacks we got from reviews and reporters is how they like the way we implemented Android's Holo look-and-feel. A lot of people feel an emotional attachment to their OS and appreciate apps that fit within the guidelines.
It's a bit ironic that Java finally caught on as an interactive programming language once it was put into a runtime environment that is intimately joined to the design of the Android OS?
Operating systems have substantial differences, and they compete based on those differences. Apps that ignore the unique features of each OS they run on are impoverished and uncompetitive.
Objective-C is by far my favorite language. I can code up an ObjC solution to a problem far faster than I could with JavaScript, C, C++, C#, Java, Python or anything else I've used. I adore ObjC's meta programming capabilities, its simplicity, its fixes for issues I encountered in C++, the way it gives high-level abstractions if I want them but allows me to drop to low-level C if I need to, and its encouragement of self-documenting code.
More importantly than any of that, I have more fun with Objective-C than any other language.
The reason everyone always cites for going native is "performance", but, tbh, it seems like most web projects don't pay attention to the same level of detail as native apps because the web is so much faster to prototype. I bet if devs spent the same amount of time working on perf and loading states on the web as they did on native, the performance argument would have much less impact.
We tried testing that theory, having one team prototype the same app using web technologies and the other prototyping it using iOS native technologies. iOS appeared to be the faster of the two.
The vast majority of the work was prototypeable in Storyboards directly, and only required, if I recall correctly, around 20 lines of code for supporting requirements to build out the prototype. I haven't found many tools for the web that can compete with that.
Of course it depends on what you are trying to develop. If your application is document-centric, then it will be difficult to beat HTML. That is, after all, what it is designed for. But for an application-centric design, I'm not sure it is really all that fast as a prototyping platform – unless, I suppose, that is all you know. It does take time to ramp up familiarity with new platforms.
Interface Builder is more than just an interface builder, it is a serialized data builder. That distinction means that you can instantiate virtually any class in your project without having to write a line of code. It is not limited to just UI elements. That turns out to be pretty powerful.
Below that level, the deserializer exploits a number of properties of the Objective-C's dynamic runtime in order to provide that instantiation of random objects and properties. There are certainly other languages that can be exploited in the same way, but it is not something that can be done directly in just any language.
Without Objective-C, or at least something like it, there would be no Interface Builder as we know it today.
The test case that I'd like to see is someone replacing notepad.exe with a webapp in such a way that an end user cannot tell that a change has been done. It's the Turing test of usability. Web Apps can do an excellent editor, but the finer details like (associate *.txt, save, save-as etc.) are still a problem.
However, what does one do for logic that belongs on the user's 'device (i.e. client-side) and will be the same on all platforms? Especially considering that one of the targeted platforms may well be the Web.
One solution is to use the Xamarin suite for native targets, and something like Script# or JSIL for the Web. Of course, Script# and JSIL can only support a subset of .NET functionality, e.g. no shared-memory threads and therefore no blocking APIs (unless one of these compilers can transform code into continuation-passing style). Another possible solution is Haxe, which can compile to JS, Java, and C++ among others. The trouble with both of these solution is that when working on the Web version of the app, one has to know both the Web stack and the other language.
It seems to me that the best solution is to write all platform-independent client code in JavaScript, minimizing the use of browser APIs for that code (e.g. only XHR and setTimeout). Then, for the native mobile versions of the app, integrate a JS engine (note: not a web view), find or write stand-alone implementations of XHR and whatever other APIs one needs, then write the front-end in the native language for that platform.
Any thoughts on this? For native mobile apps, are we stuck rewriting everything in ObjC and Java, and maybe also writing a JS version for the web?
This is how it's often done with desktop applications.
So there are some signs that you might (eventually) get what you want.
It will be interesting to see if anything related gets announced next week at WWDC.
I agree if you're a company, you can't afford to turn your nose at one or the other. But there's few unicorns who can build excellent apps in all of web, Android, and iOS. And despite a lot of software mythology, I don't believe most programmers can just learn a platform in a few days, not to be seriously capable at it.
While you need your designers to understand both well enough to create a common design, you are going to find very few coders who are true experts at both Web and native architecture and implementation. While you can cross train people, you need experts in both.
Another way to look at this question is to ask under what circumstances would you expect a developer on X platform to shift to Y platform.
IMO it takes 2-3 months at least for a good developer to become professional-level in another language. And in an app context, it's not just a language, but a large set of libraries and frameworks.
So you can assume a 4-6-month ramp-up in skills, with relatively low productivity, and then work backwards to decide if the investment is worthwhile. If the developer has sufficient domain and institutional knowledge, and is likely to stick around, it might be.
It's an audio app (SpeakerBlast) where you sync the same audio across devices; used to amplify audio amongst friends or throughout your IP devices for gatherings, flash mobs & playing audio throughout your home!
We feel it's easier for to tell your friends to go to this link to join in then, "Hey download this app so we can all play audio in sync."
No doubt that the current market says native apps, but this will change within two to three years. Web technologies are catching up in regards to what can be achieved via Android (specifically Chrome) and Apple mobile web browsers.
The second being metadata and search engine indexability of the content.
The main issue is that the receiving user probably doesn't have the actually app. That's the benefit of web presence from a sharing/virality perspective.
"Web technologies are catching up in regards to what can be achieved via Android (specifically Chrome) and Apple mobile web browsers."
This is assuming native platforms stand still, and they aren't; the web's caught in their cross-fire.
Whenever you think something is "done", it's rarely the case. (I know you didn't say that, but it's a related argument people sometimes use in favour of the web.) iOS and Android in a few years could be dealing with home automation, cars, wearables, etc., and while some developers today might say "oh but we just do mobile", in the future that might be like saying "oh we just do 7" tablets".
The "catching up argument also assumes web standards are converging, and in the past two years, the increased pace of innovation has made some web technologies diverge. Such as the offline technologies I mentioned in the linked article.
Also, available on android app store. https://play.google.com/store/apps/details?id=com.premii.hn
It's not easy, but I think you can write very good mobile web app using HTML5 that works on all major platforms.
Just don't use any frameworks/libraries. They are quite slow on mobile devices.
Also, is there no meta tag to designate a WP8 tile image when pinned to the start screen?
Improve readability and make comments easier to access (perhaps inline them after the article text), and you've created something amazing.
This is in fact very close to Vannevar Bush's idea of the memex.
But we are trying too hard to make it good at something that we already have a good solution for. People forget how much software runs natively, from medical devices, to airplane and missile control, to celestial navigation and radio astronomy.
Theres no good reason to webify many of these areas. Ultimately its not the web vs native. The web is a way for me to write better native software, through the practice of digital collaboration. It makes possible a new way of thinking.
For a great example, check out the web version of the article's featured app http://player.FM
And not just because of the store submission process (which only takes a few hours in Android's case anyway). HTML5 has such a rich set of resources, as well as great desktop browser environments, that it can be a super-fast way to get projects going. Thanks to Backbone, Angular, etc, and in the future Web Components, it's easier to scale the architecture too.
Notice all of these benefits are centered around developer experience. User experience is the biggest gap right now.
From all the benefits of web technologies, "developer experience" is the worst one.
Developing (good) UIs using web technologies is an exercise in masochism. It's forever piling hacks and finding new frameworks to bend a browser to do what you need (a broken model). Then, worry about cross-compatibility.
Someone proficient in XCode is likely ten times more efficient and produces a more polished result with much less pain.
With every project the conviction that the web cannot move away from the wild west development style grows on me.
That's my experience too. Things are faster to prototype in a web application only if the UI isn't very rich.
Perhaps, it really is time to look at something past the web for app development and let the [edit] web [edit] go back to displaying documents.
The issue is that HTML5 apps don't install and run the same way (not as convenient).
"The ultimate purpose of PhoneGap is to cease to exist."
http://phonegap.com/2012/05/09/phonegap-beliefs-goals-and-ph...
A mobile web presence is very important and shouldn't be ignored but if you're going to distribute something as a native app it's silly to build it entirely in a WebView
also it's wise to never forget that technology changes so fast neither of these current platforms will be the same in 2-3 years .. so really just pick something and go