One thing to remember is if you make use of any of the even a little bit fancy functionality of the cell phone through J2ME (SMS send/receive, Phone book integration or location based services) your app probably won't work on real handset outside the emulator - at least in US. All cell phone carriers here are control freaks and they have turned off all those permissions for any "not officially blessed" third party app. This is the main reason for the lack of any worthwhile mobile applications in the first place!
I agree that the platform is pretty tightly locked down, and both of these issues make the platform useless for real development. If you want to write anything other than a Tetris clone, stick with an open platform.
Android is going to push you towards "Java". And iPhone will hook you with Objective-C. (Unless you focus on doing web-based apps, which may be a good way to get your feet wet.)
Attractive though Android is there is no shipping phone and thus a zero market (at the moment anyway) [We have developed an Android app but it's sitting on the shelf while we wait and see what happens].
Also, can anyone recommend a good cocoa book?
The best beginning Cocoa book is "Cocoa Programming for Mac OS X", found here: http://www.amazon.com/exec/obidos/ASIN/0321503619/bignerdran...
It's a great book, and a huge number of mac developers got started with it. The new version (which has Obj-C 2.0, Leopard, and other updates) just came out a few weeks ago.
2.0 brings you object properties (just syntactic sugar), object iteration (for x in ...), and garbage collection (but not on the iPhone).
http://theocacao.com/document.page/510 is a good overview of the new features.
http://pragprog.com/titles/eband/hello-android
The only supported language on Android is Java, so I'd stick with that.
Good luck.
Its not mobile specific but is the new framework that Apple is using for its mobile me apps. This would allow you to dev apps for workstation or handhelds.
The easy language to get started with sproutcore is ruby ;)