No development system can be perfect for everyone because each developer has a different set of needs and desires for his development.
In very general terms there is a sort of trade-off to where the programming knowledge is stored. In a higly automated, do-it-all-for-you type of system, the programmer does not need to know very much, but can't change or customize the application as much, because the knowledge is wired into the development system. In a system at the other end of the spectrum, the programmer has to know quite a bit more, but can make the application do just about anything, including, for example, new types of data display or UI feedback. Cocoa and Objective-C are at the flexible end of the spectrum.
Objective-C lets you add methods to any object, so that if you are having trouble with something in the Cocoa libraries you can add methods to those objects to help you debug the problem, or even work around bugs. The language is reflexive enough that you can actually go and find all the internal methods of the problem object(s). Yes, you do need to know what you are doing or you end up shooting your toes off at the kneecap, but the point is that if you hit a hard problem, there _is_ a solution.
Cocoa may be the most mature, complete and flexible set of libraries in general use today. Remember Cocoa isn't new with OS X, it was new with the NeXT. Of course, it can't be perfect to everyone, but it has had many years to evolve to be "pretty darn good" to a large number of different developers.
I'm a little less happy with Xcode, but then it's the newest part of the development environment and you've got to expect a few problems. On the negative side, I sometimes find it very hard to figure out where a particular setting or path can be found and changed with Xcode, and I find it very annoying from a version control point of view that Xcode stores things like window positions and sizes. On the positive side, since the Xcode data is XML, I can close Xcode and edit the Xcode file with vi rather than spend more time trying to find the setting in question, and Xcode does have separate files for the dependency data and personal preferences, so I could probably find a workaround for the version control issues if I wanted to put a little more effort into it. It gets the job done, and it's no worse than other systems.
I haven't made too much in-depth use of Interface Builder, but I find it is almost always a very nice stepping stone to whatever UI I'm trying to build. I can rough the UI elements in in just a few minutes, and then continue refining behavior programatically. It's sort of the best of both worlds, I can get the simple stuff out of the way easily, but then it gets out of my way when I want to do more exotic things.
Over all, from the viewpoint of an experienced programmer who usually wants fine control over the UI elements, I'd have to say it comes closer to perfect than any other development environment I've used.
Re: weather problems - I've only had a couple of hours worth of outages in the whole time, I wouldn't consider it an issue. If you live in a snow zone though, make sure you can reach the dish easily with something to clean off excess snow. A dusting doesn't hurt, but a foot of snow on the arm pretty much kills the signal:).
Re: SSH and interactive delay - extended interactive work _will_ drive you nuts. The technical term for the experience is "wait and see, squared":). SSH works just fine for file copies, BK/CVS, tunnels etc., as long as any typing you do is local. I use direct ssh only to set up something less interactive.
My original installation was with a Win2K box and was useless for networking, as any large file that went through "internet connection sharing" got dropped part way though. I switched to a Helius Satellite Router and have been happy with it ever since.
Overall I'm quite pleased with it. I'll never see cable or DSL, and dialup is long distance, so this is the only viable alternative for real network access, but I'd choose it over dialup even if dialup were completely free.
In very general terms there is a sort of trade-off to where the programming knowledge is stored. In a higly automated, do-it-all-for-you type of system, the programmer does not need to know very much, but can't change or customize the application as much, because the knowledge is wired into the development system. In a system at the other end of the spectrum, the programmer has to know quite a bit more, but can make the application do just about anything, including, for example, new types of data display or UI feedback. Cocoa and Objective-C are at the flexible end of the spectrum.
Objective-C lets you add methods to any object, so that if you are having trouble with something in the Cocoa libraries you can add methods to those objects to help you debug the problem, or even work around bugs. The language is reflexive enough that you can actually go and find all the internal methods of the problem object(s). Yes, you do need to know what you are doing or you end up shooting your toes off at the kneecap, but the point is that if you hit a hard problem, there _is_ a solution.
Cocoa may be the most mature, complete and flexible set of libraries in general use today. Remember Cocoa isn't new with OS X, it was new with the NeXT. Of course, it can't be perfect to everyone, but it has had many years to evolve to be "pretty darn good" to a large number of different developers.
I'm a little less happy with Xcode, but then it's the newest part of the development environment and you've got to expect a few problems. On the negative side, I sometimes find it very hard to figure out where a particular setting or path can be found and changed with Xcode, and I find it very annoying from a version control point of view that Xcode stores things like window positions and sizes. On the positive side, since the Xcode data is XML, I can close Xcode and edit the Xcode file with vi rather than spend more time trying to find the setting in question, and Xcode does have separate files for the dependency data and personal preferences, so I could probably find a workaround for the version control issues if I wanted to put a little more effort into it. It gets the job done, and it's no worse than other systems.
I haven't made too much in-depth use of Interface Builder, but I find it is almost always a very nice stepping stone to whatever UI I'm trying to build. I can rough the UI elements in in just a few minutes, and then continue refining behavior programatically. It's sort of the best of both worlds, I can get the simple stuff out of the way easily, but then it gets out of my way when I want to do more exotic things.
Over all, from the viewpoint of an experienced programmer who usually wants fine control over the UI elements, I'd have to say it comes closer to perfect than any other development environment I've used.
Re: weather problems - I've only had a couple of hours worth of outages in the whole time, I wouldn't consider it an issue. If you live in a snow zone though, make sure you can reach the dish easily with something to clean off excess snow. A dusting doesn't hurt, but a foot of snow on the arm pretty much kills the signal :).
Re: SSH and interactive delay - extended interactive work _will_ drive you nuts. The technical term for the experience is "wait and see, squared" :). SSH works just fine for file copies, BK/CVS, tunnels etc., as long as any typing you do is local. I use direct ssh only to set up something less interactive.
My original installation was with a Win2K box and was useless for networking, as any large file that went through "internet connection sharing" got dropped part way though. I switched to a Helius Satellite Router and have been happy with it ever since.
Overall I'm quite pleased with it. I'll never see cable or DSL, and dialup is long distance, so this is the only viable alternative for real network access, but I'd choose it over dialup even if dialup were completely free.