views:

607

answers:

5

This question is inevitably subjective, but I will ask anyway.

I'm a PC. I've always been a PC. I have very little Apple expertise, although I'm completely happy in *nix. I've plenty of experience with development, and consider that I am able to pick up new languages and concepts faster than most of my colleagues (although ML/F# still hurts me on a regular basis). I'm reasonably familiar with C++, although haven't touched it since the nineties, work on a daily basis, and 100% confident with C#, would consider myself advanced to expert with Java and have developed a reasonable amount of stuff in Lisp and Prolog back in the day.

We've had a recent request to develop an iPhone app, which sounds like quite an interesting proposition that we'd be quite interested in taking on. We have very little in-house experience with Apple platforms. Given our ignorance of most things Apple, little to no familiarity with OSX and the Apple UI paradigms and assuming we acquire the necessary hardware for development:

  1. What one would need to learn?
  2. How long would a good developer need to get up to speed?
  3. Are there any non-obvious expenses that might arise from pursuing this route?

Once again, apologies for the subjective nature of this question. Many thanks.

+1  A: 

The Cocoa-Touch framework is a cut down version of the full cocoa framework, so fortunately, this makes things a lot simpler to learn as there are fewer ways to do things, so not so many choices and design decisions.

You require an Intel Mac to develop on, and would also need an ADC membership to publish the application. Other than this and test devices (iPhone and iPod Touch). This should be all of the require expenses. You could use only the Simulator to develop, but I would recommend on device development as well.

There are some good online videos in iTunes. I found the Stanford University iPhone Developer Course particularly useful.

A good developer could probably be up to speed in under a month. Especially if you have C/C++ skills, along with your other skills I would expect you to be productive in under a month.

The Apple docs are not the most forthcoming, but are quite complete. You could learn everything just from these.

Good Luck

Xetius
An ADC membership is not required, but joining the separate iPhone Developer Program is.
rpetrich
+7  A: 

It took me a couple months to feel comfortable with it; but that was only evenings/weekends. I came from a PC/VC background and had never owned a Mac.

Objective-C is OK, if a little unusual. There are the usual gotchas that you learn once and then don't do again. IMHO its easier to shoot yourself in the foot than C++, but it's not a big deal to switch. I think the bigger learning curve is XCode; it's certainly not a patch on Visual Studio, and can take a bit of getting your head around. That said, it is getting better with each release. One of the things that bugs me the most is the Mac keyboard vs the PC keyboard - particularly in the IDE - I keep jumping to the end of the file instead of the end of the line, etc. And then going back to PC you find save, etc. isn't the same key combination. It can get quite confusing.

The Mac & OS X is a breath of fresh air - wish I'd got one sooner. I bought an iMac 24 to get plenty of screen space. It's a lovely machine.

For Cocoa, I took the slightly unusual approach of starting with a Mac app before doing a phone app. I used the book 'Cocoa Programming for Max OS X' which gave me a good grounding. I then moved onto 'Beginning iPhone Development'. I think this approach worked well for me because the Mac OS is the bigger picture, and the iphone is a subset - it helped me get context on how things had been put together. I also bought several books on linux, mac internals, etc...whatever I needed to fill the gaps in my knowledge. I found I needed to get pretty comfortable with the Terminal, and read a book on the bash shell, and polished up my 'vim' usage. I also discovered 'git' along the way and haven't looked back.

For the phone itself, you really need a device, not just simulator; I've found several problems where the simulator didn't match the device (particularly if you intend to use OpenGL ES) - for that reason I'm going to test on iphone 3G/3GS & touch. Credit where it is due; all the differences I've found were problems in my code which needed repairing to make it look the same on simulator vs device. If you've done any device programming, it's probably the best device programming platform you've ever used - easy and stable, with good debugging.

I'd say the cost is one Mac + 2 iphones + ipod touch, and $200 worth of books... Haven't found any hidden costs...

cmaughan
Yes definitely learn to write apple desktop apps first! The documentation/books/online resources are so much better. Then just translate that knowledge to iphone app. (Its much easier to do it this way)
Jacob
+1  A: 

There are a lot of questions here about getting started with Cocoa on the iPhone and Mac, listing many great resources:

From my own personal experience, it took me six months before I felt comfortable with Cocoa, but that was years ago when I was only tinkering with it part-time. Since then, we've moved all of our robotic control software to Cocoa and the Mac, so it's what I now do full-time. Adjusting to the iPhone was a pretty quick process, taking me three weeks of nights and weekends to produce my first application, which has been on the App Store since launch.

In addition to all the resources in the questions listed above, I highly recommend reading Apple's iPhone Human Interface Guidelines cover-to-cover. They don't provide hard-and-fast rules, but they do explain the overall UI design of the platform and the reasons behind why things are done the way they are. Also, make sure that you use the device yourself on a regular basis, so that you understand what does and does not work when interacting with the platform.

As a final resource, I also recommend paying the $299 for the WWDC 2009 iPhone Session Videos. They are well worth the money, particularly if you are just getting started on the platform.

Beyond the cost of an entry-level Mac (the Mini is a good choice, but the 13" MacBook Pros are a great value and can run Windows well), the $99 / year membership in the developer program (which you don't even need to pay until you want to install the application on a device or distribute it), and the cost of the books or videos listed above, the only hidden cost to worry about is time. I've spent a lot more time tinkering with the iPhone platform than I imagined I would when I started over a year ago.

Brad Larson
+1  A: 

I started programming this year with a introductory Java course at Uni. I then started learning about iPhone Dev in my own time this summer. I learnt a lot from Stanford's CS193P lectures (free on iTunes U). It took me a few weeks to go through them.

Three months after I took my first steps towards learning C/Objective-C/Cocoa, I'm now working on a few medium-to-complex difficulty level apps for the iPhone. And I've already created a few apps for my own consumption.

As you're far more experienced than I am, I think getting up to speed will be far easier for you.

Since I was fairly new to programming, I was trapped by a lot of "gotchas" throughout the course. Memory management in particular was a bit of a nightmare at first. A lot of trial and error was involved since documentation concerning how different frameworks manage memory was sparse.

Besides that, I think the experience was a joy. I prefer objective-C to Java (and what I've come to learn of C and C++). Apple have gone to tremendous lengths to explain the language and frameworks in great detail.

I'd encourage you to watch the Stanford Lectures in your free time. Also, read Apple's "The Objective-C Programming Language" and "Memory Management Guide" from start to finish. The "iPhone Application Programming Guide" is also very handy. But I read it, a section at a time, only as follow-up to the Stanford Lectures. "The Fundamentals of Cocoa session from WWDC" is a pretty decent video. It gets you started with creating a Cocoa app in 30 minutes or so.

If you need to understand the Model View Controller and Delegation paradigms (which are at the very basis of iPhone App Design), "Cocoa fundamentals guide" does a really good job of explaining them. I think Delegation is the one thing that the Stanford Lectures don't explain well. If you're interested, look for "iPhone Programming Association" on iTunes-U. I really liked their lesson on Delegation.

All the above resources are available free of charge (you have to sign-up for a free Developer account to access the Apple docs/videos). The web is full of further support and resources. Appsamuch (http://appsamuck.com/) have 31 open source apps devoting to teaching you the basics. And another handy link to have is http://www.bestuniversities.com/blog/2009/100-free-courses-tutorials-for-aspiring-iphone-app-developers/

Needless to say, SO has been a really good friend as well!

Regarding the costs. I already had a Mac so that wasn't a cost for me. Even if I had to buy one, I wouldn't count that as a cost. I think they are great value for money in a lot of other ways. You would need an iPhone/iPod touch. I thought I could do without them for 3 months. But when I first loaded one of my apps onto a device, it crashed almost immediately. Turns out that the simulator is only good for intermediate debugging. I'm assuming that you won't be publishing directly to the app store so you wouldn't need to purchase the yearly licenses.

Well, I wish you all the very best and hope you find a good friend in Cocoa!

cocoaholic
A: 

I came from a heavy Java background, with lighter amounts of C++ and also some Lisp/Scheme as you have - I've been doing iPhone application development full time since the SDK release. Here are some thoughts I have on the questions you raised.

What one would need to learn?

You need to learn Objective-C, the language - a helpful guide showing you comparatively how things are done in C++ (and some Java) compared to Objective-C is:

http://ktd.club.fr/programmation/fichiers/cpp-objc-en.pdf

I found that very handy in quickly understanding the Objective-C syntax, since it's not a large divergence from C syntactically but is more so conceptually.

Beyond that, just like Java Apple's Objective-C has a very large set of foundation classes you can work with - just as rich in terms on string handling, internationalization, complex time/date support, etc. Just like Java, that will take some time to get used to - but knowing the Java libraries, a number of things are conceptually similar. The GUI classes are also extensive and pretty powerful, as are some of the other frameworks like CoreData and CoreAnimation. Happily I find the documentation very good, it's well integrated with XCode and even has sample code links in the docs.

Also, the GUI development tool Interface Builder is very good to work with. I never found GUI builder tools of much use in the Java world (or really in any other world) but the model that Objective-C uses where you basically are creating objects that get wired up at runtime to your code, works really well and does enhance productivity. It's good to know how to do some things manually to understand what is build built by the components you are adding, but I'd start learning how to use Interface Builder when possible, early on.

I also highly recommend the O'Reilly safari online book service, because you can hunt down a few books that are of use and search for extended examples on something you are having trouble with for a marginal monthly fee. You can get the widely read Hillegass book there, among others.

How long would a good developer need to get up to speed?

That's tricky to say, because it depends on just what kind of app you are trying to build. Some areas of the frameworks and GUI components are easier to understand than others. But, I would say probably a month or two of full-time working with it would yield a pretty decent level of familiarity, and you would be productive before then. Someone with a good background in a variety of languages will have an easier time I think. Also it pays to really learn the ins and outs of XCode, because it's a very powerful tool but at first may not seem that way depending on what IDE's you are used to.

One thought is that you may way to go to a training session somewhere. There's actually an in-depth iPhone conference in Denver just a week from this post date, 360iDev:

http://www.360idev.com/

(Disclaimer, I am a speaker at a few of the session there)

Although if you do not yet even have a Mac, It may be a little too soon for that to be of full use. You could check around for other such conferences, or other places that offer training.

Are there any non-obvious expenses that might arise from pursuing this route?

Financially? Not really. You can use pretty much any modern Intel Mac to develop with and it will work great, with the caveat you should have 2GB of RAM.

You'll need a device, but if you are not using features found on the phone a Touch is fine to develop against for all platforms so you could avoid a recurring fee if you do not need one.

Time-wise, as noted there are a large set of foundation classes and so that takes some getting used to. But one good thing about the mac as a platform is that while it differs from windows, it has a good Terminal app so you can be productive in a standard UNIX shell with all the UNIX tools you are used to having. You can even do command line builds although realistically you end up working pretty much all the time in XCode (though I admit to breaking out to Emacs on occasion when I need to do some tricky bit of editing better suited to Emacs' abilities).

Kendall Helmstetter Gelner