Steve Jobs thinks Objective C is Perfect? 784
josht writes "Nitesh Dhanjani has posted an e-mail thread between Steve Jobs and himself. Dhanjani argues "I'd like to see Apple developers gain more choice. With every iteration of OSX, there seems to be so much effort put into innovation of desktop components, but the development environment is age old." I agree with Dhanjani. What has Apple done recently to wow the developers, and make it fun to code Cocoa components? I've looked into the Objective C and Xcode environment but compared to Microsoft's .NET solutions, it doesn't impress me at all. I think Apple can do a lot better. Steve Jobs disagrees. What do the readers think about Objective C and Xcode?"
Compared to Intellij IDEA, XCode sucks (Score:1, Insightful)
I don't want to leave my good IDE for something less than what I have now.
well... (Score:4, Insightful)
I dunno (Score:2, Insightful)
Re:I dunno (Score:1, Insightful)
the Wow factor. (Score:5, Insightful)
When you pull in developers by "wowing" them, you get a certain type of developer. I certainly don't want my buildings and bridges built by engineers who were attracted to pastel concrete and click-and-deploy girders. Having said that, I realize that sometimes, small quirky apps written by "poet coders" can make a platform a lot more interesting, I just doubt that that's what causes innovation or platform acceptance.
Objective C is hard to beat (Score:5, Insightful)
Objective C appears to be a good development environment. Apple for example, has developed a lot of software in a short amount of time that is of very good quality: Safari, ITunes, Page, Keynote, mail...
The ability of
-b
application domains (Score:2, Insightful)
Re:I dunno (Score:5, Insightful)
I'm not entirely sure what that comment means - haven't you *always* been able to use VS as "a Visual Basic type of dev platform", with Visual C++ even ignoring Visual Basic itself? VS.NET does support Visual Basic
It's more for application development than actual (think CS rather than IT) programming.
Application development isn't actual programming? Theory is extremely important, and I'm the first to defend seeking knowledge for knowledge's sake, but to say that application development isn't real programming is to deny the entire point of programming - to automate processes and create applications in order to make tasks easier (or quicker) to perform, and to enable people to do things that previously they could not (eg edit video or audio).
Re:.NET is a bit complex (Score:2, Insightful)
Every time the ObjC/C++ discussion comes up... (Score:5, Insightful)
I have been coding in C++ for about 15 years; I have seen the language evolve over that time; and while there are aspects that I don't like, for the most part I think C++ is wonderful and natural to program in, as long as one takes the time to design API's in an extensible way. This is no different from any other language, though C++ certainly gives you more rope if you are already inclined to hang yourself; but, OTOH, the extra slack makes it possible to type-safely do things that cannot be done in languages without multiple inheritance or parametric polymorphism.
FWIW, the same is true of me for Objective C: I can make only the most shallow, uninformed observations about it, so I generally avoid doing so. Perhaps one day I'll learn it so I can make an informed judgment about it, but until then, I'll keep my mouth shut.
Re:Compared to Intellij IDEA, XCode sucks (Score:4, Insightful)
The article is about Objective C (and Cocoa) versus C# (and
Re:Wowing developers... (Score:4, Insightful)
It would also be nice if they would use something with a more conventional syntax (I'm looking at you, method calls). Wasn't a huge deal, but I think it would make it easier to dive into or attract developers who are more used to the Java/C#/etc way of doing things.
As a side note, much of
Re:well... (Score:2, Insightful)
Re:No garbage collector (Score:2, Insightful)
GC causes all kinds of load spikes that can bog down end user apps and blow server apps clean out of the water. GC makes things "easier" for the developer at the expense of overall performance. But, with at least C++, there are ways of accomplishing the same thing without needing a GC subsystem spooling up CPU cycles- smart pointers handle most of the same features that GC does in a safe and efficient manner. The code knows when a variable has dropped out of scope (it's compiled into the code itself...) and frees memory as opposed to a separate thread of execution periodically polling all the active objects to see which ones have dropped out of scope.
Re:well... (Score:3, Insightful)
Jobs doesn't get it (Score:3, Insightful)
What the Mac platform needs the most is applications, good ones. And if the apps are good, the users simply don't care if the language frameworks are slightly faster or nicer to program with.
ObjC/Cocoa is one set of good tools, but so is the
NeXT was a developer tool company and he could get away with this approach. Mac is a mainstream platform (or trying to be), and there needs to be "more than one way to do it".
Re:Objective C was a neat idea in the 80's BUT... (Score:5, Insightful)
Get this guy off my platform (Score:1, Insightful)
I _still_ have to look out for yucky pointers?
I hate these fucking developers like this. These people that don't want to write code, but would rather have everything taken care of them in an unpredictable manner.
Garbage Collection==excuse for not writing better code and don't give me the excuse that you can write your code faster. The time spent writing nasty code results in memory problems, garbage collections freezing an application, and numerous bugs. Not to mention that these developers use memory like its candy... Not knowing that every one of their objects in a list uses 2 megs of memory.
pointers==I don't understand how my computer allocates, deallocates and references memory so I would rather have Sun wrap all that confusion and trust that they did it well. Sorry... but if you have never used pointers then you obviously do not understand the benefit of using them. And while it is nice that Sun can take away the need to use them, they should still be available in some manner to the developer. I feel I can optimize my code a lot more than sun can.
IDE whores==hold my hand while I code. Honestly, developers that depend on an IDE and the hitting of a period to find the Integer.parseInt() method end up writing some of the worst code. I work at a company where I refuse to write Java code for them. Basically because these developers are morons and don't understand any of the hardware and software that they implement. A good example was a lot of developers started implementing JGroups which is a multicast memory replication useful for clustering. It worked great except every developer copied the same code snippet and every application was using the same multicast group and port. Instead of changing the address, they decided to handle it at the application level and filter it after they had read the packets off the socket. Gross.
Bytecode is great==I don't understand how fast a computer really is with native code. Bytecode solves a few problems, but it is totally unacceptable for large applications. Whatever happened to Sun's Web Brower? It died despite being Java. Everyone says Eclipse is a great IDE, but its bloated and slow. I worked at a company that put all its Apples(No Pun Intended) into Java/Swing combination. When I left, 4 years after the project was started, they were still having UI speed problems. When I develop, I don't want anyting getting in my way and I don't want to have to buy a 3ghz processor to do it/run it.
Now, I know all the Buzz word slashdot people will disagree with me, but Object Oriented programing adds a layer of abstraction, taking away pointers adds another layer of abstraction and then adding in a garbage collection adds another layer of abstration. And also having Sun hide all those pointers behing an extrememly gross hierachy of classes that always seem to hand-off work to another class has its penalties.
Can't go home again (Score:4, Insightful)
Anyway, I simply can't go back to a non-memory managed environment again.
I have seen that, as I've matured as an OO developer, and as I've distanced myself from Objective-C, my style has changed. The Objective-C libraries are heavily based on inheritance, but I've learned that "composition trumps inheritance"
You can see this in Tapestry, where currently (through the 4.0 release) you extend base classes. I'm starting to gear up to break this limitation for 4.1 (where you will use simple objects and have framework dependencies injected into your classes).
ProjectBuilder was great in its time, but compared to Eclipse, it's hopeless. IB still rocks, and I wish Sun had demostrated some intelligence when first designing Swing by investigating IB. That is, Swing treats UIs as a coding problem, IB treats it as a configuration problem.
But, as I said, you can't go home again.
Re:Did nobody actually READ the emails? (Score:1, Insightful)
Sigh. I don't know how many times I have to point this out, but Slashdot has nothing to do with accuracy or "news". It is about PAGE HITS. PAGE HITS = ADVERTISING BUCKS. That is all you need to know about it.
Re:Objective C was a neat idea in the 80's BUT... (Score:5, Insightful)
A dumb developer will write bad code in ANY language. And of course, he'll blame the language
Re:Compared to Intellij IDEA, XCode sucks (Score:1, Insightful)
I'm willing to bet that if you find yourself wanting to use regular expressions in a Cocoa program, one of two things is happening. Either you're coming from a scripting background and you haven't really figured out how to program in Cocoa yet, or you're using Cocoa for a job that could be better done with a script.
Don't just use Cocoa because it's the cool new thing. Use it for things that it's good for. For things that Cocoa's not good for, use something else.
Re:namespaces (Score:2, Insightful)
>
No. This is offtopic, but what's clear from Jobs' experience at Apple is that he had big dreams and a child^H^H^H^H^H undeveloped set of people-management skills.
If he hadn't been thrust into a leadership role early on, Jobs probably would have been another big talker who never mastered the skills it takes to move up the ladder. A lot of entrepreneurs have this problem when they try to move into established corporate structures.
Re:namespaces (Score:3, Insightful)
The Sears/Circuit City thing was just my attempt at humor. However, he would have no where near the success he's had if he didn't have the right friend at the right time.
You may be right about his programming talent (I'm not saying you are) but clearly you don't know a single thing about human nature.
If you think that Steve Jobs has any programming talent, then you don't know a single thing about Steve Jobs.
Comment removed (Score:5, Insightful)
Re:Get this guy off my platform (Score:1, Insightful)
Yeah, that's why Java and C# will never catch on. Troll.
Re:well... (Score:3, Insightful)
Did you just compare a language and framework to an IDE? How can that make sense?
Re:Wowing developers... (Score:5, Insightful)
And this says nothing about the ridiculous naming conventions of C++ and Java. Translate the following statements into English. and The first is C++ and translates to "Assign value to get the value of object". The second is Objective-C and translates to "Assign value to value of object". This is why Objective-C is called a self-documenting language.
As for memory management, yes, it can be a pain. Any Cocoa developer could tell you tales of how he accidentally released an autoreleased object and spent a half-hour trying to figure it out. But Objective-C is a strict superset of C. Being able to work with pointers is absolutely necessary. That's one of the biggest strong-points of Objective-C. Virtually any C library will work with absolutely no modification at all.
I'd love to see garbage collection added, but not as the primary method of managing memory. It should be there to catch what the developer misses, not to be the sole method of memory management. We'll never get rid of pointers. They will always be there.
Re:Every time the ObjC/C++ discussion comes up... (Score:3, Insightful)
So does C++: they're called virtual function tables.
Unless you mean that in ObjC the possible methods for an object are not available at link time, in which case type safety is not available. I don't know enough about ObjC; perhaps you can explain it to me succinctly?
Kyle
Re:objective-c is cool (Score:3, Insightful)
Re:namespaces (Score:-1, Insightful)
God damn you're fucking bad at humor. GOD DAMN!
Re:Every time the ObjC/C++ discussion comes up... (Score:5, Insightful)
Ease of learning is an important part of language design.
I think C++ is wonderful and natural to program in, as long as one takes the time to design API's in an extensible way
The amount of effort a language forces you to invest up-front in design decisions is also an important factor to consider.
Personally, I think C++ is a great language--but only for specialty applications and very skilled programmers.
For most mainstream desktop applications, people are better served with Python, Visual Basic, or Smalltalk, precisely because those languages are easier to learn and require less experience to use well.
Re:Get this guy off my platform (Score:3, Insightful)
And (to use your language) I hate fucking morons like you: people who don't understand that they can't do memory management as efficiently as a machine, people who don't understand that pointer-based code is usually slower and inhibits optimization opportunities, and people who overestimate their own ability to avoid pointer errors.
After programming in C for nearly 30 years, I can confidently say: I am incapable of writing a substantial C program without memory and pointer error bugs, I don't see the point in doing so, and I have yet to meet anybody who can. And the people who are the ones usually producing the most bugs are usually people like you, people who don't even understand their own limitations.
And also having Sun hide all those pointers behing an extrememly gross hierachy of classes that always seem to hand-off work to another class has its penalties.
Java is a bloated P.O.S., but Java is not representative of garbage collected or safe languages.
Comment removed (Score:2, Insightful)
Re:well... (Score:3, Insightful)
Don't ruin Steve, please (Score:5, Insightful)
1. Steve gets inundated with tons of dumb emails just to get a "response from steve" to hang on the wall. End effect is that Steve stops reading his email.
2. Steve stops being so personable because he figures anything he says will end up splattered all over the web. Within a few days, this simple "Dear Steve, I don't like Objective-C" thing will be blown out of proportion by cnet, dvorak, and other journalists who are entirely too clueless, et al. Remember, what Steve says could affect stock prices, etc. And Steve will just sigh and stop responding.
It's really, really nice having a CEO that doesn't just communicate through press releases, folks. Don't ruin it. It was my hope that those few who knew Steve responded to his email would keep it on the down low.
Re:Wowing developers... (Score:1, Insightful)
Making it optional, however...
Would be a fucking waste of time.
Re:namespaces (Score:4, Insightful)
Ten years ahead of its time seventeen years ago (Score:2, Insightful)
As much as everyone loves the warm fuzzy "objects send messages" purity, it all starts falling apart on hardcore refactorings (renaming messages and classes) which I consider to be a Large Problem with maintaining a large codebase. Don't get me wrong, I like Objective C. But man, it was a sad day when I learned that they're not going to keep Java up-to-date. Maybe Cocoa# is my savior.
I programmed in Windows for 15 years before becoming more of a "server guy" and now an "OS X guy". I do agree with the comments that the API is far easier to grasp than the mishmash of shit that Microsoft shovels on you (Win32/COM/WinFX/MFC/ATL/Etc. etc.) But that doesn't have anything to do with Objective C or Xcode. That's just smart API design which isn't language or environment dependent.
Re:Love it (Score:4, Insightful)
The historical lowest common denominator solution has been to define it in C (though C++ has slowly crept up in the last decade) and then use higher-level bindings to make it easy to use. Gnome is a very modern system that has taken this approach. Apple on the other hand has went one step up on the abstraction ladder, they have kept the basic C interface style and linking behaviour but used the OO added by Objective C. The strong point here is that a lot of higher-level languages can now wrap much closer to the interface (getting close to a natural 1:1 mapping) while still retaining most of the possibility to go with C-style to-the-metal stuff. Objective C is even a nice enough language to make taking another step in abstraction unnecessary for a lot of people.
Personally I really like this. Defining the platform in C has aged (though it is still useful for maximum flexibility of implementation, though very archaic to use) but going straight for a high-level garbage-collected language is a step too far still. For example I think it would be a mistake to enforce a garbage collection model on the system level, removes much too many possibilities from the application. Add to this proper function pointer objects, co-routines, "global" reflection, continuations and so on and it becomes clear that too much power at the interface becomes a liability when it has to be fitted into another system.
This extra power is of course then a good thing for Python users on OSX just as for Objective C programmers. A straight wrapper around Cocoa is a lot nicer than say a straight wrapper around GTK+. Some may argue that this is unimportant since a "good" wrapper around GTK+ will be just as good, but personally I find that a wrapper that stays close to the unerlying interface is a very good thing when possible. Less bugs, often much more clarity, more available documentation, the skills one learns carry over if one switches languages and so on.
Man this post is long and rambling. Better push "Submit".
ObjC problems are many (Score:3, Insightful)
1. No proper namespace support. If multiple teams are working on a project, each team is advised to prepend the method names of its classes with a two or three letter abbreviation to avoid name-collision. WTF?? Hence, why all Cocoa methods are prepended with "NS" (short for NextStep). Apple should fix this asap.
2. Horrible constructor support for derived classes. ObjC makes one proclaim one or more of a class's init methods to be "designated initializers", and these are the init methods that derived classes must override, no more, no less. Oh, and the proclamation of "designated initializers" is informal; there's no formal support by the language or runtime.
3. All methods are public. To implement private methods, one must "simulate" them by not declaring them in the interface header file, but they're still accessible. Implementation of protected methods is even more of a hack, where one must create class Categories that are only known internally, and place the "protected" methods in those Categories. But the Categories are still accessible, and there's nothing stopping a third party from implementing a Category of the same name on his own, causing namespace-collision.
4. Lack of proper support for abstract classes. One has to use [self doesNotRecognizeSelector:_cmd] to implement abstract classes (either in the init method or the individual abstract methods), another ugly hack.
(Lack of garbage collection may also be a problem, although refcounting never bothered me and I rather do like autoRelease, by which one can achieve something akin to garbage collection (for objects, at least).
There are some other problems, all of which (and the above) stem from ObjC being an "old" language, having not added any of the advancements in language and runtime design that other languages adopted in the 90's.
Re:namespaces (Score:2, Insightful)
successful people may have some charming story involving luck, but of course luck does not keep them on top, and it's probably not much more luck than anyone else has, just like everyone else, they'll associate random events around good events as having some special meaning, or more likely tell you that.
100% agree (Score:3, Insightful)
the problem here is that apple's obsession with objc means c++ is neglected, and it makes porting applications to osx a major pita (it doesn't help that carbon's api is wildly different from anything unix or win32 either.)
apple is spending all their time and effort preaching to the choir. they aren't doing enough to get new converts. and objc/cocoa simply isn't the way to do it.
Re:Notes from a Cocoa AND .NET developer (Score:2, Insightful)
really, i got tired of all the crashes. edit project properties in the ui, boom. internal error. build project. boom. internal error.
i ended up writing everything in pico and using scons for builds. no boom.
Re:I've used Cocoa, .NET and C++/MFC (Score:2, Insightful)
Re:Wowing developers... (Score:3, Insightful)
Re:What's wrong with pointers? (Score:3, Insightful)
It's the nondeterministic bugs when you read or write to invalid pointers, and the risk of security holes via buffer overruns.
Function pointers are probably my favorite thing about low-level languages
Any decent high-level language has equivalent or superior functionality.
Re:The emails are already gone. (Score:5, Insightful)
And this, kids, is why you should never ever top-post.
Yaz.
Re:Apple blew off Metrowerks. Now they must suffer (Score:3, Insightful)
Re:namespaces (Score:3, Insightful)
For the record (Score:2, Insightful)
Gee I wish there was a 10 year old mature language available on Mac's that was better than
*thinks*
yeah that would be cool. *thinks* You could name it Java if you want.
This guy really sucks, not objective C.
Re:Learning ObjC/Cocoa (and others) now... (Score:3, Insightful)
That's really changed with VS 2005, the debugger can be extended in many ways that leave your jaw laying on the ground. You can create custom "visualizers" to visual data structures in memory, and the popup "drilldown" features are a dream come true.
Want to be able to visual your HTML data buffer? XML? Custom document? Images? the visualizers are really cool.
For example, here's a regex visualizer:
http://regex.osherove.com/Articles/RegexKit.html [osherove.com]
And here's an XML visualizer:
http://blogs.conchango.com/howardvanrooijen/archi
Re:Compared to Intellij IDEA, XCode sucks (Score:3, Insightful)
But back to the question at hand...
Although it got better with 2.1, XCode suffers seriously from configuration problems. Determining where to go to set something, where a setting is overridden, or what it actually does is insane. A simple comparison with CodeWarrior is enough to show how far development has fallen for the Mac in this respect. Then there's the plist and such files that are an inevitable part of Mac development these days. Why can't there be some better editor for that sort of thing with a nice GUI? ResEdit from the 1980's beats it. Then there's the error window. You click "compile" and you get a "ding!"... then you hunt for what happened. When you find it, you get a difficult to use pane of errors buried below, but in the same pane as, your project. Huh? Then there's the editor... having lots of files open is a pain compared to almost any other IDE. Then search... for the company that produced Spotlight, searching is amazing primitive in XCode. The general layout is a mess, the build outputs are annoying to keep track of, and things like the class browser aren't nearly as helpful as something like IDEA or even CodeWarrior. Then if you compare it to many of the Java development advantages (since we're including the old ObjectiveC language in the rant,) you start to miss out on TONS of refactoring options that Eclipse and IDEA both offer. Those types of things become essential for keeping code maintainable over the long-term. Things like xgrid for distributed compiling are near-useless for most small developers, so I hope they didn't take away any resources to develop those features, either.
In short, I think the Macintosh community would have been much better served if Apple had simply bought CodeWarrior and wrote a gcc4 plug-in for it for PPC/x86 codegen. Then they could start adding some of the intelligent refactoring, assuming such things are possible in Objective C. Alternately, they could start over with Java or even Mono/C# and provide an environment that would let you create Mac apps quickly and efficiently, as well as being able to use the same code on Mac, Win, and Linux.
Re:namespaces (Score:2, Insightful)
Also, it's not like he's be able to have so much luck without the big pile of money that the Apple II generated, back in the 1970s. That cash funded a lot of failures, and one hit: the Mac.
The Mac money was spent on a lot of things, but had one hit: Pixar. NeXT was cool, but it wasn't a financial success.
With that string of success, he came back to Apple, made the iMac, brought back the old NeXT software from the dead, and basically trailed Windows for a while... until the iPod... which was originally a me-too product late to the market until it was mated with the music store (which is also a me-too product).
It takes some talent to be that lucky.