Bio Mark Meretzky has been teaching Unix, C++, iOS, Ruby, and Android since 1990 at the New York University School of Continuing and Professional Studies.He has also taught Calculus at NYU, C++ in Harlem, assembly language atRadio Shack, and was one of the operators of the planetarium at the HudsonRiver Museum in Yonkers.
Software is Changing the World. QCon empowers software development by facilitating the spread of knowledge and innovation in the developer community. A practitioner-driven conference, QCon is designed for technical team leads, architects, engineering directors, and project managers who influence innovation in their teams.
That is the question that everybody asks me. I think Android is a so much better platform. It’s heart breaking to me that Android loses just before the finish line. I think an iOS app looks better on the surface, but deep inside Android is a much better place to write apps in.
About the good news or the bad news? Well it’s a little bit unfair. Android was invented after iOS was invented. They had the advantage of seeing iOS’s mistakes, I think Android chose a much better language, Java - it’s so mainstream, where iOS is using a language that is really used nowhere else outside of the Macintosh and iOS worlds. If you are teaching an Android course, you’ve got assumed that everybody has a reading knowledge about Java, if you are teaching an iOS course, you have to spend the first two weeks just on the language before you could begin talking about iOS.
It’s just a superset of the language C, it’s the language C with extra expressions added to it and it’s very easy to recognize these extra expressions, any expression that begins with a commercial add-sign or a left hand square bracket, is an addition to the base language C. So I basically have to teach them the Objective Add-on’s that were added to C to make Objective C, and it’s not hard but it takes time, it uses annotation that it’s so different from every other language that has objects and functions and people aren’t patient, they want to get on to their “Hello World” App.
5. When people come out of your course, your Android course and your iOS course, do they tend to be equally competent coming from both courses or should someone who is hiring a developer be a little bit more suspicious of someone who has taken instruction in iOS because of the difficulties in learning the language?
Well one difference is, an Android course is going to cover more about Android than an iOS course will cover about iOS, because you are not spending as much time on the language, but the real difference is because you get different people taking Android courses as opposed to iOS courses. In the iOS courses we get a lot of people who are convinced that they are potential millionaires, they have a great idea and all they have to do is take care of the little detail of coding it up, and often this is very unrealistic.
I find the people who take the Android course already know Java and they are more battle hardened and they are more realistic, where is to my horror, I often discover people taking iOS, are learning Objective C as their very first programming language.
I wouldn’t say that there is a glaring insufficiency on either side, there are similarities and there are differences, and I find the similarities very reassuring because if everyone is doing it the same way, then perhaps it’s the right way. But there are differences too and where there are differences, Android is better.
The first difference is language. Android is using a better language, it’s a more mainstream language. The other big difference is, from the beginning Android was designed so that one app will cooperate with another app, and in fact they went much, much further than that. They designed that so individual components within one app can cooperate and communicate with individual components inside of another app on the same phone, and there is nothing like that in iOS.
Yes, this is a hypothetical statement because there is not back button on iOS, the way there is on an Android phone, but if there was, you would be pressing the back button on an Android phone much more than a back button on an iOS phone. On an Android phone things pile-up, don’t they? And then you press back, back, back, to go backwards. What you are really running is bits and pieces of maybe several different apps, they are not necessarily all from the same app. And that doesn’t really happen as much on iPhone, does it? It doesn’t have a built-in back button because it doesn’t need it as much.
Yes, but I want to elaborate just a little bit. Remember at the very beginning of iOS, you were forced to run the apps one at the time, it was a little bit like the very beginning of Macintosh. Remember the very earliest Macs could only run one application at a time, you had to close one app before you could open up another one. Eventually iOS became capable of having one app launch another app, and even get back a response or an answer from that other app, but it doesn’t have the fine granularity that you have in iOS, where the app is divided in two individual components that can send messages and receive messages. So that to me is the big difference in the architecture but you know, if you are looking at it from the point of view of a beginner during the first couple of months, the biggest difference is really not a difference of architecture, it’s a difference of whether you are using Xcode or Eclipse, it’s a difference of which programming environment you are typing the application into. If you are writing an iOS app you are using an application called Xcode and if you are writing an Android app, you are using an application called Eclipse, and there are very different environments and I guess for the beginners Xcode on the iOS side is easier to use than Eclipse. Maybe that is the biggest difference that the users would see when they first sit down, the different environments even before they start writing statements in the language.
It doesn’t affect you if you are a beginner. If you are two guys in a garage trying to write Angry Birds then it really doesn’t matter if the architecture is open or not. If you are a humongous company that wants to distribute 20.000 tablets, then if you are running Android maybe you might want to genetically engineer the version of Android that runs on these tablets, so you’d want to have the source code of the operating system, or occasionally you get a bug that is just so obscure that there is no way to explain the behavior unless somebody goes in there and reads the source code of the operating system. But all of these are very, very advanced, if you are just starting off you really don’t care all of that much whether it’s opened or closed. Of course in principle, I vote for open, but it didn’t hurt me none that the iOS is closed.
12. Well in my experience is harder to get an app on to an iOS phone in order to test it, than it is to get it on to an Android phone. That makes a difference to me as a developer, does it make a difference in your ecosystem?
I had exactly the same experience and part of that experience was paying 99 extra dollars. Once you have the Android phone, all you need is an USB cable and you follow some simple instructions and the app is copied to the phone. If you are dealing with Apple, first you need a certificate and even before you get the certificate you have to generate a certificate signing request, and after you obtain the certificate you need a provisioning profile and you need keys, a public key, a private key, the list of instructions is so much longer plus the 99 dollar fee. Was that what you meant by open versus closed?
That is one of the things that I meant.
I guess I misunderstood the question, but yes, it’s so much easier to slide your app from Eclipse onto an Android phone, than it is to move the app from Xcode onto an iPhone.
13. Another difference is that there is no approval process or very little approval process at Google’s Playstore and on Apple’s AppStore, there is an intensive approval process, does this entry your students minds and if so how?
Yes, it seems like the people at Apple are just lining and wait, waiting to catch you for anyone of the number of different mistakes, and Android is so much more freer, but you know, people are not going to worry about that until they get the app up and running an app that people would be interested in using. It’s not something that it’s going to be a problem in the first couple of weeks. Down the line when it’s ready to go to the store, that is when the agony sets in.
You mentioned that people who take your iOS course are thinking about monetization.
You could use the words starry eyed, that it’s ok.
There are more digit heads dedicated hobbies types. Yes, they like to make money, but I think a lot of them are primarily interested in tinkering, whereas the iOS people, they really don’t know much about the joy of programming.
15. Apps earn more money on Apple’s AppStore than on Google Playstore. It’s a known fact that users of Android much prefer less expensive apps or free apps versus people who are willing to spend a bit more on the Apple AppStore?
That doesn’t surprise me at all.
iPhone apps just look so much beautiful and people are willing to pay more money. Android apps are, for people who have alligator clips on their dining room table, they want to play with stuff and they really are not all that concerned with: “I’m making outrageous generalizations about the students who are taken different kind of courses here, but there is an element of truth of what I’m saying with many exceptions”.
17. What is the most popular kind of app that people are interested in developing? When I get questions from people who read things that I write about Android, they are always interested in creating the next great game. I wonder if that is true in your experience?
Two years ago would be easy to answer that and the answer would be games. Nowadays a lot of people are interested in social media, not necessarily explosions on the screen but typing text and having the text appear somewhere else, I guess if you could invent a game that involved explosions and typing text, that would be a winner.
18. We’ve talked a lot about the advantages of Android as a development platform, as a learning platform, as a mobile platform over iPhone. Can we reverse it now, there are probably some advantages of iPhone that you want to talk about for a moment, aside from the pure beauty?
Well as I mentioned before, when you look at a bar of Android icons, it looks like they are all designed in different decades, whereas if you look at a bar of iOS icons, it looks like Steven Jobs agonized over each one of them. But aside from the aesthetics and aside from the operating system itself, a big part of the experience of developing an app is dealing with the application environment, Xcode versus Eclipse, and Eclipse is harder to use.
19. Do you think it’s harder to use for professional developers, I understand you are saying that it’s harder for you to teach students to use it. The question is once someone has overcome the difficulties that they may face in using Eclipse and learn where to click and what to do next, is it an equivalent experience to using Xcode?
Yes, they occupy the same ecological niche, they’re equivalent, I think Eclipse had far more bells and whistles, but Eclipse labors under some burdens that Xcode doesn’t have to worry about. Xcode runs on only one platform Macintosh. If you want to write an iOS app then you have to have a Macintosh. Eclipse runs everywhere, it runs on Microsoft Windows, it runs on Mac, I’ve installed it on Ubuntu Linux, and you know, it was a little bit harder to install it on Ubuntu Linux, because it’s running on so many different platforms, you find it behave slightly differently on different platforms, it’s a much more …………….beast than Xcode.
When you turn on Xcode it behaves consistently, I guess the word for this is the behavior is synchronous, you always get the same user experience. When you turn on Eclipse on a Macintosh or on a Linux or on a Microsoft Windows, the experience you get is usually different each time, partly i’'s because when you startup Eclipse you are launching 50 different processes and occasionally one comes out ahead of the other, what you see on the screen is slightly different or you do exactly the same thing today as you did yesterday, but today Eclipse is giving you an error message. It shouldn’t be giving you an error message and usually you could ignore that error message or you open up the same app today that you opened up yesterday.
It’s exactly the same app because you saved it in a zip file and you are opening up exactly the same zip file. But yesterday it worked and today there is an error message on every single line and eventually you learn to remain in calm and you eventually learn to ignore some of these error messages from Eclipse, but the experience of using Eclipse is always a little bit more unpredictable than the experience of using Xcode which only runs on one platform and delivers the same experience with Macintosh, scroll bars on a Macintosh screen. Eclipse is stranger, it runs on many different platforms and doesn’t use the need of decorations on each desktop, it carries its only little atmosphere with it. So the Eclipse experience it’s a little bit stranger, it’s harder to get in to than a Macintosh person would find the Xcode.
20. Android it’s been criticized for fragmentation of the platform. An Android app runs on many different vendors phones and has to accommodate many different vendors phones and that is not at all true with an iOS app. The iOS people say, perhaps rightly so, that it’s an enormous advantage of their product over Android, what say you about this?
Well yes, Apple manufactures the hardware and the software. We have a similar problem in Unix, don’t we? There is no one company that manufactures Unix, there is a lot of different Unix’s, they runs on lots of different hardware and there is a lot of differences. Grap minus I versus grap minus Y, that kind of thing. Well yes, if you install Android on radically different hardware it is going to give you a different user experience, I’m not sure how you would get around that except that by restricting yourself to a little rectangle in the upper left hand corner of the screen, that is 320 by 480 pixels.
21. One way of getting around it is to program responsively, in other words to test and see what kind of screen you are on, what size screen you are on and branch in different directions depending on what the hardware that the program it’s running on has?
Yes, and Android app and an iPhone app can interrogate the hardware and find out the screen dimensions and the pixel size and the number of color layers and of course you don’t want to hardwire these numbers in, you want to ask the hardware for the characteristics. Part of the problem is that Android runs on a lot of different hardware so unavoidably it’s going to behave differently. Part of the problem is though that right at the beginning Apple published and emphasized the HIG, the Human Interface Guidelines, it’s their bible and in the early days of Android there was no comparable document. Android apps have different looks and feels whereas iPhone apps are strongly encourage to obey not only rules about their appearance, but rules about their behavior and rules about the way you...from one situation into another situation. They did a beautiful job on the HIG document, I wish there had been something in the Android world just like that from the beginning, but there wasn’t.
22. [...]I guess my question is to what extent are the aesthetics, the feel of the hardware, the look of the interface, actually real life important features in a platform, a mobile platform such as iPhone or Android?
Barry's full question: Let’s look at this from another point of view. I have a person who was an Android user for many, many months and suddenly borrowed an iPhone and said that the feel of the hardware is wonderful compared with the feel of the hardware on an Android phone. I guess my question is to what extent are the aesthetics, the feel of the hardware, the look of the interface, actually real life important features in a platform, a mobile platform such as iPhone or Android?
I think they are very important for the same reason that everyone in the world wants to have a Macintosh on their desk rather than a Microsoft Windows on their desk. Everything takes fewer mouse moves, fewer mouse clicks on an Apple than on a Microsoft and in the same way everything is more intuitive and it flows more smoothly and maybe it even takes less finger smearing on an iPhone than on an Android. The user interface is important and iOS did a better job on that than an Android, but everything else I think it’s better designed on Android. The user interface is only 5%, 1%, one tenth of 1% of a large app. If I wanted to develop an app, they did a very complicated procedure and then deliver the result on to the screen, I would pray that they would let me write it on Android.
Well not a single person in the world knows the answer to that question, and now I’ll guess. Suppose America pulls out of its economic slump, suppose everybody has a lot of cash and we use it to get better healthcare and we all have Masters Degrees in education and how is this in Vermont? Then the phone that people pull out of their pocket will be an iPhone? But suppose America scrapes along at 9% unemployment year after year, then the phone that everybody pulls out of their pocket it’s going to be an Android. I’m not saying that Android deserves to be in this position, I just think that is what is going to happen, I think people are going to go for the user interface rather than the beautiful programming platform which is actually only seen by the developers. I like Android as a better development platform, despite the fact that Eclipse is harder to use.
Interesting, Mark thank you so much!
The notion of iOS apps being more beautiful than Android ones is totally false
FWIW, Apple started mocking Android's style starting on iOS 7.
And anyway, the style differences only exist for general purpose apps.
Games tend to look exactly alike, since they're developed with cross platform tools like Unity.