Hacker News new | past | comments | ask | show | jobs | submit login

I never did iOS development in anger; I just really, really don't like Obj-C or Xcode from dealing with OS X programming. A few things that come to mind off the top of my head:

-Again, the documentation isn't well-written. It almost all feels like it's written either by an engineer with little writing experience or a technical writer without engineering experience. There have been times when I've had to re-read passages over and over again because I genuinely couldn't parse what they were trying to say.

-The insistence on weak typing everywhere is insane. Intents are sloppy, weakly-typed junk; Messages ditto. The R auto-generated class isn't bright either--even if you need an integer index, at least wrap it in a type-safe class to eliminate the possibility of passing the wrong thing around. I really do genuinely like working in Java, but I like working in well-designed Java. This is the same company that made Guava, which is perhaps the most elegantly designed API I know of in Java-land. But many of Android's APIs treat classes as an incidental hindrance.

-Dalvik blows. There is nothing good about it and there's so much that's bad about it. The class limit is crippling, and the lack of hot-loading is prohibitive. (I write games in my spare time, I'd love to be able to use Groovy as a scripting layer, but that's not going to happen.)

-This might sound crazy, but XML is a machine-readable format. People know that, right? Okay, great. So why are the tools for building layouts so much junk?

Not on this list is fragmentation, because I don't find that to be a real problem for my purposes. My app for work is 4.0+ only, and I test on a Galaxy Nexus; if it works there it'll work on a SIII or an Atrix HD or whatever else somebody wants to try. (We're outsourcing wide device testing to uTest, but our app isn't done so I haven't had the opportunity to try their services.)




I think many of your points are valid. In any large SDK there will be rough edges, and you have pointed out several of them. However I would like to post a contrary opinion, just because I know that many people who have never done Android development will read this and think 'yup, android development blows'.

I've been working with the Android SDK for a few years now, and I haven't found any of the things you mentioned to be a major hindrance.

Personally I think the documentation is just fine - Perhaps I haven't been poking around the same corners of it that you have, but the tutorials have always been helpful and the design guide is very good.

The weak typing is again an annoyance. However in all my time I can say, that I have only run into one bug that was caused by weak typing and that was on the R auto-generated class. Typically your strings are a R.strings, colours are at R.colours, etc so it makes it pretty easy to spot if you are passing a string through where you should be passing a colour.

I did java dev back in the 1.1 and 1.2 days - now that JVM sucked! Dalvik, again I have never had any problems with.

As for the GUI design tools, they are probably some of the best I have seen. Definitely better than the tools that I was using to do Swing dev work back in the day.

So yes, all those things you mentioned could do with some more polish. But I have found my Android dev experience to be good one and the android SDK is more than adequate to develop some pretty hefty apps!


Typically your strings are a R.strings, colours are at R.colours, etc so it makes it pretty easy to spot if you are passing a string through where you should be passing a colour.

Here's the problem. Say you need to pass around a specific resource (reusable code somewhere in your app):

   void doSomething(int stringResourceId)
                     ^ THIS IS WRONG
The problem is that the R bullshit essentially decontextualizes what that actually means. This is a statically typed language. It should be used as a statically typed language.

And comparing the GUI design stuff to Swing is ignoring the ridiculous number of vastly better systems everywhere else. SWT is great. Microsoft, too, nailed it with WinForms and WPF/XAML kick an unreasonable amount of ass (though I won't use it because, derp, Windows). Swing sucked from day one.

Your post disagrees with me, and that's fine, but I get a vibe of "good enough" out of most of it and we should, as a culture, be better than that. Android isn't. It is precisely "good enough," and that sucks because the Android people are obviously very smart people who could be doing vastly better.


Well, we should aim to do better than 'good enough'. There are some bits of android that absolutely rock:

* I really like that the OS can handle so much of the scaling and resizing for you as you move from a 3 inch phone all the way up to 10 inch tablets

* I think google is to be commended for building an eco-system that involves so many different hardware devices, manufacturers, etc

* The latest look and feel in 4.1 and 4.2 is turning out really well. A well designed android app looks great [1][2]

* The intents system and the way you can link together different apps is very innovative. I wish iOS would copy it!

* Android is evolving at a really rapid pace.

There are some bits that are 'good enough'. You mentioned many of them. They get the job done, but are not necessarily the best way of doing things, or they need plenty more polish. I would add one thing to your list: performance. Project butter still has helped, but android still feels nowhere near as performant as the apple devices.

Finally there are some bits with just plain suck. Google HAS to do something about the upgrade story on existing devices. They can add features and optimise existing code until they are blue in the face, but it isn't going to do them one iota of good if 95% of the devices out there will never see the updates!

[1] - Checkout Instapaper and mint here. IMHO they look really good: http://developer.android.com/distribute/googleplay/spotlight...

[2] - http://androidniceties.tumblr.com/


Agreed for the most part, except for these:

I think google is to be commended for building an eco-system that involves so many different hardware devices, manufacturers, etc and Google HAS to do something about the upgrade story on existing devices.

Disagree on the first part, for one really big reason: the overwhelming majority of those manufacturers are anti-consumer assholes. Like, I would personally much rather that literally-literally every manufacturer who ship with a locked bootloader or who refuse to commit to three years of updates be blocked from using the Google apps on any of their devices (which is why I included the second bit). I realize Google will never do that, and the "screw you, this is how you do it right" attitude of the Nexus line is an okay "toe this line" approach, but I don't think it's sufficient.

The intents system and the way you can link together different apps is very innovative. I wish iOS would copy it!

The idea behind the intents system is groovy. The implementation is terrible. Intents external to my application are great, barring API problems. But within my application--I get the reason, intents are bad for this sort of thing because the information you can pass around is limited and not typesafe. You end up with global state or a lack of type safety and neither option makes me not want to throw things. I think I'd rather see the Activity model be more object-oriented--like, have startActivity() actually take an Activity and allow you to define a constructor.


That sort of error should be picked up by the lint now. Still, not ideal. Keep in mind that a lot of the android design decisions were made in order to get good performance on G1-vintage hardware with no JIT compilation.


For games, I'd definitely recommend the NDK, which lets you write cross-platform code with OpenGL. Or just go with Unity and C#.


I don't really have any interest in dealing with Unity (to me, it's not programming) or C++. I generally use libgdx for messing around/prototyping. I'd be more likely to go to Mono than the NDK, though that too is a lot of work.


>Dalvik blows.

The single thing that almost got Google into big trouble with Oracle is a weak point ;)


Yup. Different is not always wrong, but different-and-worse is.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: