Is it hard to become an Android developer?
kreci.net
kreci.net
"Ask HN: Jumping into Android Development"
http://news.ycombinator.com/item?id=1347170
The general consensus from my extended network of mobile developer friends and acquaintances:
Android is harder to develop for than iOS - you will spend more time and effort on building something nice than you would in iOS. Windows Phone 7 is not an easy transition for .Net and C# developers because it is basically Silverlight framework programming. No one I know is doing WebOS (Palm) development.
Also, the money in mobile development is almost always from making apps for companies and organizations that want to have their own app (e.g. consulting). This is from my knowledge of how my friends are making a living. Yes, they have their own apps but to succeed in the direct to consumer device marketplace is really is more about being a better marketer, designer than a mobile developer.
The consumer who downloads your program only sees the tip of the iceberg (the UI, the functionality, the user experience). Does it make them feel cool (or appear cooler to their peer group) and/or add some bit of value to their life workflow? They don't care how it was made. Note: This is why HTML5 apps are at a disadvantage - there is only so much you can do with Canvas.
Can you elaborate on the reasons why?
Device fragmentation means that you will need to test your app on multiple Android devices and operating systems to ensure the experience you built is up to par with what the user sees
UI layout: To build a decent UI requires taking the wayback machine to Java Swing and GridBagLayout. It is getting better though with Gingerbread.
Third thing: Too much decoupling in the development environment
So, here are a few reasons:
1. On iOS, if you use the native interface the app would look good. On Android, it will look like crap :-)
2. On iOS you have predefined UI effects and transition, on Android you'd have to do custom
3. iOS is faster, and has a much higher memory limit than Android. Allows apps to use more resources (because it's not multi-tasking)
4. iOS doesn't have a capped app size. Most Android phones have application storage limited to around 10Mb. Android introduced lately support for installing apps on external storage but.. check #5
5. Fragmentation. You currently have to suppor 2 major Android versions (4 minor). Believe me, that really caused me a lot of problems in the past 2 years
6. Screen sizes. On Android, you currently need to support 5 different screen size ratios, as well as over 10 screen sizes. handle that!
on #6 Android has support for a limited range of display setups, making it fairly easy to provide different UI resources for small, medium and large screens. If you want to start supporting different aspect ratios (the Droid is a good example), you have to either start detecting resolution at runtime and modify layout accordingly, or make sure you build your layout in such a way that it will adapt itself to the aspect ratio. The later is preferred, but always needs extensive testing (hopefully on real devices) because every minor OS version messes up something (1.5 has problems with PNG transparency, 1.6 with 'center' positionings, etc...).
Or, at least that's the reason my friend gave for not developing an interface beyond the default UI for his app.
We could do with a good GUI for designing interfaces, but it's not horrible once you grok the layouts work. Google have acknowledged publicly that the current UI builder in Eclipse isn't good, but there's no public schedule that I'm aware of for when that will be improved.
Thanks for the clarification.
Any advice on how to find clients?
Launch your own app, they'll find you ;)
I'm not interested in consulting, but I've had several requests. Usually they have had a look at the three of the things I mention above.
I guess generic advice by freelancers on finding clients should help you too.
Which is incorrect, because WP7 and Silverlight are comprised of .NET technologies. There are some new APIs, but C# developers can make extremely smooth transitions, similar to Mac OS X->iOS.
Additionally there's the XNA stack on WP7 -- which is also a purely .NET stack.
I apologize for spreading misinformed data. Please forgive me.
The last MSFT experience I have is circa VB6/ADO. I will chastise my .Net acquaintance for giving me the impression that WP7 was hard for .Net/C# devs - and, myself, for spreading misinformation.
Personally, when I looked at it (about 2 yrs ago), I didn't know where to start. How did you learn XAML, MVVM? Just brute force and practice? I'd love to be able to do a Zagat-like WP7 app. To be able to know what the custom part of that app development was.
Personally I'd start by using Blend. While the drag and drop approach is largely criticized, it's a great tool for seeing the Xaml get built as you build the UI. And the actual markup generated is quite good.
You don't need to know or use MVVM to do Silverlight apps. It can be useful, but I wouldn't try to learn that first. And if you make use of databinding whenever possible, you'll almost have to contort yourself to not do MVVM (although you'll be data-bound against properties in the code behind... this is easy enough to change).
The Zagat app is beautiful, and honestly, really straightforward to do most of the Silverlight stuff I saw. Like literally, I think if you know C#/.NET you could get a similar looking app up in a week.
The hard part... having the Zagat data. But seriously, a C#/.NET dev should be able to be modestly proficient in Silverlight over a weekend, IMO.
- If you are going to pick up a phone to do android development, my recommendation would be a used original Droid or the HTC Desire. And its not because these are good phones but because these are the phones that I see a lot of people using. I have a Nexus One and I find that it is too powerful and does things other android phones can't. (read on)
- Understand what device fragmentation means for your development. Are you creating a form based native application? Different handsets generally handle native layouts, text and buttons very similarly so fragmentation may not be a huge issue. Are you creating a game or an application that uses video/audio? Prepare to be buried in a multi-dimensional matrix of hell :) As an example, take for example streaming raw AAC audio from the internet. Android as a base platform does not support this in hardware or kernel, but some sprint phones do support this.
- Keep in mind the relative power of the different devices. As with most emulators, the Android emulator has slow draw times and fast network times (though network can be adjusted). Just keep in mind that, if you have a device, where does it rank in the spectrum of devices. Developing an android app that runs 'smoothly' on a Nexus One can leave a lot of customers having a 'jerky' experience. Some of this, in my experience, is also cause by poor design decisions.
How hard is it? Doing something trivial is, by design, trivial. A todo list app would take you, with knowledge of any other programming language, less then 8 hours. I find that the expensive part of the process is knowledge of the fringe, as with all things. Things like knowing how button requests cascade, how a view hierarchy should be organized or how to stream media (can you tell I'm hung up?) are the sorts of things that aren't extremely well documented and take more time to understand than similar concepts for web programing (IMO).
Like kreci, I'm open to questions.
Developing on the N1 was perhaps a mistake. We became used to the speed of it. When I finally started testing on the Droid I had to go back and do a bunch of UI optimizations.
Take a look at Bruce Eckel's free book "Thinking in Java" (3rd Ed)
Have you tried streaming OGG audio? I've been looking at doing an streaming audio app, and by all accounts, OGG is properly supported by base Android. I'm willing to add an OGG encoder backend because I already had to do that once to get iPhone/AAC support, but if OGG doesn't really work then I might try a different approach.
When I try to sit down and do a "toy" app to learn the platform better I find myself getting bored because I'm not excited about the app I'm making.
Does anyone have an advice on finding or coming up with ideas?
Or better yet, does anyone need a simple app made? (Maybe I should do an offer HN if that's still around).
I just got a Droid X. I had been trying to brainstorm ideas for dev'ing on it but realized on my commute home yesterday that was the wrong way, for me, to go about it.
Basically I need to just use the phone and anytime I think "wow, i could really use X to do Y" go and try to find X, and if I can't maybe work out a plan for developing X myself.
Like on my commute, I have several routes I can take. I got the idea to make an app that collects statistics based on time of day, route, speed/traffic that will help predict which route is the best depending on when I leave the office.
And hey! It already exists. But can I compete? Or should I just be happy someone already did the work for me?
I figured it wouldn't be a good first project, but maybe.
Also GPS kills my battery in under two hours on the incredible :-(
CommuteTrack[1] is the app I found. It's listed for $5.00 but I haven't purchased it so I can't comment on the quality or functionality.
You don't even need to use an IDE if you don't want to. Google, in typical hacker-friendly fashion, has provided pretty complete instructions for developing in your environment of choice. Personally, I use vim, but in case you're not as masochistic/in love with vim as I am, the instructions should work just as well for your favourite code munger.
http://developer.android.com/guide/developing/other-ide.html
Heck, you don't even need to use Java:
(It's even moderately crossplatform with iOS and soon blackberry).
* Rhomobile/Rhodes is a Ruby framework for developing Android and iOS apps from the same codebase.
From where you started, how long did it take to be able to create a basic own use app with a quanta of usefulness. If it makes it easier, compare it to starting in php. In the time it would take a non web programmer to learn enough to make a do list app, how far would you get in android?
What ever happened to new Google Phone? I was first planning to buy the Desire for programming, like you. But the possibility of a "clean" phone has me waiting...
This is a very good way to release complete garbage.
Once the Droid is rooted and has a good recovery image loaded, you can back up and go from "Stock" to some aftermarket ROM for testing a variety of scenarios if needed.
I would recommend testing with an HTC Incredible as well - with that, there's the possibility of switching between Stock HTC build and Cyanogen using the bootloader (requires "rooting"). I'm finding quirks with SenseUI (most annoyingly, the keyboard throwing the same event multiple times) that I would have never caught without the device in my hand.
Also, keep in mind depending on what you're doing, some built in Vendor app (Verizon, etc) might interfere, so testing on a purely stock Google build phone might cause you to miss something.
You have to code to OLD versions often to get huge marketshare due to the fragmented install base so the updateability isn't as important as just buying a cheap one every year or so.
ie. do webkit style animated transitions work? smoothly?
[ Found a partial answer to my own question, here : http://blazingcloud.net/2010/08/11/jqtouch-slide-transition-... ]
Stopped reading as I found a grammatical error on the first line. I mean, I could just accept that articles that people put on their personal websites might not be copy-edited by professional editors and that despite errors they might be useful or interesting. Probably easier to just dismiss the whole article though.