We discussed this before... but... what if Microsoft developer tools are better than Apple (xcode) and Android (eclipse) ? what if any guy can develop some software in a few days while doing the same for Android and the Apple takes 2x o 3x? what if Silverlight experience is better than html5 or native UIs? And... what if connecting games between desktop, xbox and mobile works?
Many "What IFs", but for me the developing tools and silverlight are key. Also on the RIM side QNX is a very promising bet against Linux/iOS/Windows, the demo doesn't feel real, but QNX is a strong OS.
Have you written code for Android? To make it any easier, you would have to advance the state of IDE and language integration by a few decades. Sure, it doesn't let you draw widgets by hand and attach callbacks all in an instant, like Visual Basic, but, for an API, it the simplest, most obvious thing you can imagine.
And FWIW, I do my Android hacking with emacs and a shell buffer.
I kind of passionately disagree. I think that both Apple and Microsoft's tools blow Android's out of the water. Objective-C and C# are more pleasant languages; the graphics libraries are in vastly better shape (ever wonder why Android scrolling blows so much compared to iPhone?); tools for profiling and the like are vastly better; etc.
Android's tools don't suck, but I think they're objectively inferior to Apple's and Microsoft's across the board.
True. And private gardens are superior to public parks.
Android at least has garbage collection .. native C interface, and it's open to you as your mother's arms.
If Android lacks anything, it's only a matter of time before it's fixed. The cat is out of the bag, and the OS of the mobile future is Google's as much as it's yours and mine. For every polished iPhone handset sold, there are three crappy but wide-open android devices sold to hungry minds. iPhone is the best mobile OS today, in terms of polish and usability, but Android powers devices that haven't been conceived yet!
Poor grad students in EE and CS are all over the mailing-lists, asking for help with Android ports to their cheap boards. They're ambitious, confused, tired and hungry. They don't know what they're doing .. yet. They're just making use of what they have, a Free OS that does the basics. However, said students, amateurs, wannabes and beginners number in the millions .. the little busy bees are hard at work, reading, writing, and hacking, and in five years time, when they know better, when they're more capable, when they graduate and funded, you can bet your last dime they will make this a Free Android world. Neither Apple nor Microsoft have enough money to buy people's free will and self-interest.
I said this before and I will say it again; Android is on par with LAMP and GCC in terms of impact. It's not a piece of infrastructure software, it's a fundamental right for the mobile future, and will power far more dreams than any niche or specialty mobile platform, which iOS and the others are destined to be.
In all fairness you are lumping a whole bunch of devices together. I have no doubt that Android will find its way into all sorts of products, much like other flavors of Linux already have. Most people have no idea that Linux is powering their network gear, web cams, etc., but they don't need to. No one thinks to themselves "wow, my microwave is using embedded Linux, I'm going to get a Linux notebook."
Apple is making the best phone and tablet os that they can. That is their goal. If it means it's also the best in the market, then they will be rewarded by people buying their products. They haven't lost because iOS isn't being installed on a printer.
You are looking at people who buy mobile devices as accessories or luxury items. I, on the other hand, want to develop tablets for medical assistance, mostly diagnosis, translation and record keeping, and deploy them in my home country of Somalia, and the refugee camps in Kenya.
Whether Apple sells X units or makes Y dollars is immaterial to me. All I care about is that every Android source file begins with a preamble that's sweeter than Aretha and Whitney to my ears: it promises me Freedom. Freedom to share, copy, clone, sell, give away. And from my experience, Dan Bornstein and the gang, bless their hacking souls, are here to assist me.
My "users" might never care what powers their doctors' tablets (they don't even know what an OS is, in fact, most of them can't read) but I do. I know I can fly back to ShenZhen and shop for boards, case, power chords, and save money. And in the end, have a Free, world-class operating system waiting for me.
To me Android is not a privilege, it's a right. It's what I will use to help my people. And there are millions like me who outnumber luxury mobile users by a huge margin.
I shipped nearly every type of electronic piece from China. $100 is not the bottom, it's the ceiling. I have been in this business (gadget hardware) since 2004.
But I have a feeling you were not replying to me ;-)
Yes, it was placed here to complement what you have written about social needs which will be fulfilled by Android. Android as an OS plus many vastly different hardware platforms.
This not a gadget for the rich. It is now available for normal people.
What do you think makes WP7 superior to Android? Please be as detailed as you can; this is not an argument, it's a feature request :-) A million lurking volunteers, bored but capable as they are, will take it upon themselves to improve Android before Google gets around to it (it's a vicious race for good hacks.)
I can share my experience from developing with Silverlight and c# for a few years (Though for the past year I've developed exclusively in java).
First of all the language. c#, especially in the latest iterations has become incredible. Featuring the goodness of both statically and dynamically typed languages. It has become very elegant and powerful.
Sadly, I can't say anything similar on Java. Is has been very slow to advance, very conservative when advancing, and the tools are still so slow (At least eclipse).
Regarding GUI development on Silverlight. Microsoft has done many things right with it. It has the best separation of UI and logic that I have seen built right into it. They have xml files to represent the UI (In the same way web has HTML), and the framework is as flexibly as could be (e.g. it wouldn't take you more than a minute to create a scrollbar that looks like a clock for example (If you have the graphics ready).
And the most important of all - they have a UI editor built for DESIGNERS. It encourages you to worry about the UI look and feel, and not on the logic behind it. It has tools in it from the designers world, and encapsulate a lot of headaches (E.g. setting a gradient direction is done by dragging a line over the area, and not by setting some numbers).
In addition, Silverlight has the advantage of being a second generation after WPF. Microsoft has learned from its mistakes with WPF, and simplified Silverlight dramatically. They could do that because Silverlight was a new technology which didn't have the requirement to be backward compatible.
Android allows you to define your UI in XML as well[1]. It's not that novel, Flex does the same thing too. But not to be too dismissive, it would nice to hear of experts in both to tell us what Android might be lacking.
Regards UI editor, yes, Android doesn't have any WYSIWYG UI editors. There is one, but it's 3rd party and not as polished as you describe MS's to be.
Android may allow you to design your ui in xml, but go read a tutorial on custom styling WPF -- I were much doubt you can:
create a new list box which works exactly like a normal listbox would but the items in it are replaced by whatever you write between <datatemplate></datatemplate> tags, and all the bindings you make in the data template are automatically set so that they are bound to the object they represent (ie the dynamic properties in data template 3 are bound to object 3 in the source list). And the entire thing takes only about 30 lines of xml.
Bind any property on any object to any property on any other object
Have any properly which is bound to any other property be automatically updated when the value of that property changes
Attach new properties to any xml element, and execute code when that property changes (useful to change a bool in one class to cause a window to close in another)
You can create entire master detail system and bind them together without haveing to write a line of c# code to tell it how it should look or what it should do -- which means that (if you structure your code right) that you can create unit tests that check that when one button is clicked, an item is removed from a list, etc.
Again, MS have created something that is really, really far ahead of anything else here. Too bad it is windows only.
With respect to Android vs WP7 controls is the lookless nature of Silverlight controls. This allows you to completely reskin and add new behavior to an existing control while maintaining all of its current behavior.
I wrote some code for Android, and I'm currently working on WPF application for windows (which should be similar to Silverlight). Saying that Android XML UI description files are comparable to XAML + Visual Studio XAML designer + Expression Blend is like saying that C# and Java are the same because the source code for both languages can be written using vi - technically it's correct statement, but it completely misses the point.
Why do you believe this to be true? While the Linux desktop has improved incrementally over the years it has remained a good distance behind it's proprietary rivals.
I disagree with what you're saying, actually. While I know I'm biased as an Ubuntu user at home, I think that MS Windows and Apple OS X are far behind the Linux world when it comes to - for example - window management. In Windows 7, there's no way to make a window stay on top, if you hook up two monitors, you only have one taskbar, etc.
Another example is package management. If you want to mount an ISO in Windows, you have to scour Google for a while attempting to find a spyware-free available download. It's a garbage situation in Windows.
Linux, however, has amazing window management capabilities as well as package managers.
Now, if we turn to ease-of-use, I'd like to remind you that Google Chrome OS is coming out in one month (ish). While it is a proprietary OS, there is an open source / free software version called Chromium OS. This is a Linux OS that looks totally easy to use and will be natural for non-Linux people to handle.
I very strongly disagree that the Linux desktop is "a good distance" behind its rivals.
Linux (or more specifically the free desktop) is a great deal ahead of the Mac in terms of user choice, but falls down in terms of quality of implementation.
I'm a Fedora Core user at work (and have been for the better part of a decade) and am consistently appalled at the unreliability of things like sound and clipboard management. Areas that are completely taken for granted on other platforms.
I can't agree on the web side(asp.net, sharepoint, web parts, etc) but on the desktop (.net, c#, wpf, silverlight, parallel programming) I can't found something similar and when somebody speaks about HTML5 replacing the desktop I can't find any sense (I can hold my bet for the next 4 years.) There are few people with strong experience in many technologies to have a good argument in favor of the WEB with RIA. I simple example: there are not strong graph libraries (like Tom Sawyer, Jung) in html/JavaScript except prefuse in Flash.
You can't compare (or compare in an unfavorable way) the fundamentals of these companies with the fundamentals of hyped web companies, also many of those companies were profitable quickly and follow the IPO way. FourSquare will be here in ten years? Twitter? Zynga? M&A can make them durable but IMHO their fundamentals are more volatile: Google is not just a company who configured open source software and develop some scripts, some of their processes (adwords) can't be even copied with virtually infinite money (microsoft=>adcenter, yahoo=>overture, Apple=>iAds). We can argue that you can't copy/trash the network effect of facebook but we are in the prehistoric moments of the hypercompetitive web and their fundamentals are more volatile.
Yes, the founders level of motivation is a key factor of risk for a startup company, one thing is early after the creation and another ten years after, even if your company is profitable. One test is how motivation works after macro/micro economic cycles (i.e: dot com) or inflection points (crisis or growth). Also excelent moments in a company gives a false sense of security for the inexperienced management, so... I'll get the money if I have the risk of being out of business and without some personal financial security
I am one who doesn't really understand javascript hype (and have used it in advanced ways), there are few types, objects are automatically converted to strings, few functions support even for the web (urlparse). I am in favor of a VM to the web, supporting more programming languages.
I'd be interested to know by what standards you asses programing languages.
JavaScript has an admittedly clumsy and unnecessarily Java-like syntax and few built-in functions, I agree. But underneath there is a very elegant functional programming language. Who needs more built-in functions? Most scripting languages' built-in functions are just libraries written in that very language anyway. There's tons of such libraries for JavaScript.
A lot of the recent hype is due to node.js, too. Node.js is (somewhat simplified) a set of evented IO bindings for the V8 JavaScript engine. Those bindings enable us to build webservers using JavaScript. JavaScript was designed to be run in an event loop without any concurrency or blocking, which makes it incredibly easy to build software the scales reasonably well.
That said, I do agree that you should be able to use more languages in the browser. IIRC somebody has already ported Mono to Firefox which allows you to run tons of scripting languages in the browser. The next thing we need is standardization.
Calling Javascript a functional language is quite a stretch. All native data structures are mutable, the function literal syntax is extremely clumsy, and there is no algebraic datatypes, pattern matching or TCO.
Having JavaScript on the server side makes me a bit weary, because of the difficulties of developing with it on the user side well mainly the no compilation/type checking and lack of concurrency. With the push to multi-processor systems concurrency is becoming much more important to take advantage of which makes me curious how does a non concurrent loop scale well (I don't know much about this node.js library).
On the user side however I have learned to like it. The lack of type checking does bug me since I tend to make cludgy spelling errors which compilers pick up, but its tolerable. I do wish js had a built in type checker for development.
Another driver of hype, more negative hype is GWT. But it is a bit disappointment and is a wrong approach to the whole browser independence issues. My brother and I have been working on a project for over 4 months, which initially started with using GWT and after two month of struggling with it, we threw it out, and switched to JQuerry. Our productivity instantly shot up.
More language support would certainly interesting, but I agree JS standardization across browsers is a more important issue to have resolved.
Concurrency is not much of an issue, you write concurrent JS apps like you write them in other languages.
There are three types of applications, and two are easy in JavaScript.
The first is something that is well within the capabilities of one modern CPU core. This class of applications includes every program that's currently running on your machine. Servers that only do IO (message queues? memcache? SMTP?) can also be included, in many cases.
This is easy to handle because there is no concurrency. For IO, you use an event loop, of course.
The second class of application is something like Facebook. One machine will never be enough to handle it, so you design for it to be as distributed as possible. Each app is "shared nothing" and passes messages to communicate with other components.
Obviously, JavaScript will do fine here. Each tiny component runs on one CPU core, and then you run a million copies of the app on 250,000 4-core servers. Easy. Need to double capacity? Just buy more servers. Wonderful.
The third case is the Enterprise Application. This is something like your company's HR portal or your online bank. It's an application that's the swiss-army-knife of applications. It slices, dices, and reads email too. Just compiling it is a week-long process involving 10 engineers and 4 consultants. For maximum SPEEEEED, everything happens in its own threads, which share 100% of everything with the other threads. (How could you read email and RSS feeds and check your paycheck if there weren't threads!?)
This type of app can only ever run on a single machine; if it's too slow, IBM and Oracle would be happy to help you out with a marginally-faster box for a few million more dollars. Since everything is shared, once you hit the most expensive hardware, that's the best you can ever do. If you wonder why it takes 120 seconds to load your bank account balance... this kind of app is why.
And no, you can't write one of these in JavaScript. Shared-state threads are not implemented. What a loss...
Taking advantage of multi-core platforms is easy. Just start multiple node processes and have the kernel take care of the rest. If you want the processes to communicate, there's a host of tried and tested IPC methods available.
The advantage of this approach is that when you write a function in Javascript, it is guaranteed that no other program other than the very function you are writing will modify your data in any way.
I've used GWT on a big project for about half a year. It's not over-hyped. It definitely has it's space. If you're working on a project with two people, you're just not in the market for it. GWT is all about stability, optimization and structured development. I don't want to get into too much detail here, but some optimizations that GWT gives you are impossible to achieve by writing JS code manually.
If there are at least two people in the company and one consulting can cover their expenses I think that's the way to go. MSFT (Paul Allen and Bill Gates) did consulting in Microsoft.
Many "What IFs", but for me the developing tools and silverlight are key. Also on the RIM side QNX is a very promising bet against Linux/iOS/Windows, the demo doesn't feel real, but QNX is a strong OS.