Steve Jobs thinks Objective C is Perfect?
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?"
I think the syntax is strange and takes some getting used to.
Anyone claiming a language lacking proper namespace support is "perfect" is nothing short of delusional.
He's already taken down the emails in question, apparently having had second thoughts about the appropriateness of posting private emails.
Frankly, compared to Intellij IDEA or even Eclipse orNetbeans, XCode sucks. (I don't know about MS stuff).
I don't want to leave my good IDE for something less than what I have now.
I develop with both objective-c and c# and while I like the c# syntax and gc better, Interface Builder is the most elegant way of user interface programming out there.
Fleur de Sel
"I agree with Dhanjani. What has Apple done recently to wow the developers, and make it fun to code Cocoa components?"
What, a fun and whimsical name like "Cocoa" isn't enough for you? Perhaps you'd prefer to code in puppies and rainbows?
Bill Clinton: Pimp we can believe in. - The Shirt!!!
Jobs is must be hoping that other developers see the supposed benefits of Obj C as well with the rumored Dharma (Cocoa for Windows) project, if it does in fact exist.
Sure, Xcode could do with a little bit of work to add features missing, but I truely find Cocoa a dream to work with. One year ago I only developed for the web, then I bought a Mac and was introduced to Cocoa by a friend. I havent looked back since, and have produced several 'scratch the itch' applications that otherwise wouldnt have been made.
not being a troll but remember "if it's not broken, don't fix it"? Objective-C and the Cocoa Frameworks are an amazing combo, very productive to code using it. I don't think there's much to add. It's not bloated like VisualStudio.NET, it's easy to grasp and understand, code is small... well, I just like the way it is, and XCode is a lot better than Project Builder so I think we're on a nice path, I don't want to see Apple reinventing its development environment every couple years...
-- Por mais que eu ande no vale das trevas e da morte, meu PowerMac G4 Não Travará!!!
posted an e-mail thread between Steve Jobs and himself.
I always knew Steve Jobs was just a little bit crazy.
It sure didn't take long for Dhanjani to reconsider posting the e-mail. Does anyone have the original string to post? I tend to agree with him that more choice in programming is usually better, but I guess I fear that opening up the environments will lead to less stability. In other words, is it better to use an inferior language really well, or use a lot of more "interesting and fun" languages haphazardly. Not sure I really agree with that logic, but I can at least understand where Apple is coming from.
The development environment is hardly static. Key-value-observing and bindings, Core Data; we get more toys for every system version and they are working on adding garbage collection to Objective C.
I've always felt Visual Studio (at least with all the .Net stuff) was turning more into a Visual Basic type of dev platform. A lot of automation, you don't have to know why your doing things the way you are doing, fundementals and such aren't important anymore, etc. It's more for application development than actual (think CS rather than IT) programming.
While wowing the developers is important, also providing them with a high performance, high reliability, and easy to use framework is important as well- moreso than wowing them. It does no good if it's "cool" to develop for a programming language, etc. if I'm spending 2-3 times the coding time for the other one or 2-3 times the debugging time, etc.
C#, for all of the claims of performance, is a a JIT based interpretive language. Ditto Java.
C#, for all of it's nicety, is little more than Java taken in MS' desired direction. If it weren't for Mono, C# wouldn't even be a subject of discussion as it'd been an MS only tool for use only on Windows (or whatever MS ends up calling thier stuff in the future...)
C, C++, and Objective-C are stable, robust languages that have been around for some time now. C# has not been around all that long, but since it's got all the "buzz" about it, people keep trying to deploy it everywhere.
Objective-C is actually a fairly clean OO language, moreso than C++. C++, while it's really good, has been muddied up with a bunch of conflicting design ideas that make for some...fun...with your coding if you're not paying attention to what you're doing.
All in all, I'd say that it's decent enough for doing Apple development- if you want to adapt Mono to that interface (Which, I believe, can be done...) knock yourself out.
I am not merely a "consumer" or a "taxpayer". I am a Citizen of the State of Texas
Personally, I prefer Obj-C to .NET, mostly due to the (IMO) superior organization and layout of the object model. It's simpler than .NET's API, which tends toward "everything and the kitchen sink." Not that Cocoa doesn't have it's problems. It's probably more difficult to write big projects using it, but for quick development, I find it faster to just throw something together in Xcode. Besides, it doesn't hurt that Xcode and it's related dev tools are free on OSX, whereas it's a $600 investement on Windows for the equivalent software.
.NET has something like three different objects to deal with different types of file access. Cocoa implements these in a single object with multiple methods for the data access style (streaming, read the whole thing once, etc.) Now, it's probably just personal preference on my part, but why invent multiple objects when you could just roll them up as separate methods for what is essentially the same data structure? There's probably a reason, and I'd be interested in learning why this is so, but it just seems to me that Cocoa did it right in the first place.
A good example of the complexity is the file access models for both APIs.
What has Apple done recently to wow the developers, and make it fun to code Cocoa components?
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 a very good language. I has a lot of the atractive OO features and still it lets you get as close to the machine as you'd like. For example you can drop into C and do your own memory management for parts of the code where you are allocating and deallocating lots memory. You can also code in assembly if you feel the performance gain is necessary.
.Net to use any language is kind of sexy, but I'm not sure you are going to gann anything in the long run.
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
Let your application domain suggest the development tools you need. Listen to art, science, and your own experience before listening to people who own lots of stock in giant corporations. They are motivated by the need to sell their own product first.
Software freedom...I love it!
As an old-school programmer (20+ years of Fortran, C, various assembly languages, C++ many many years ago), who's spent the last dozen years or so focused almost exclusively on server-side high-performance networking systems (in other words, heavy-duty C/Unix/threading), I've taken my 'spare time' in the last few months to teach myself ObjC/Cocoa, Java, and some of the .NET technologies. I found it unfortunate that Apple deprecated Java + Cocoa in the last XCode release -- not because I particularly enjoyed Java but because it was easier to learn both Java and ObjC at the same time when I could be doing the same things with it.
... and I'm guessing the set of people who have is extremely small nowadays.
Comparing ObjC to what MSFT offers nowadays seems to be apples and oranges (no pun intended) and the learning curve is much different -- coming from straight C, ObjC is much cleaner, and I can slide more extensive Cocoaization in as I go. On the other hand, the ObjC syntax is a mess and weird for people who've never done Smalltalk
As for development environments, so far I've _hated_ everything to do with visual * -- it seems to be a monster to use, to customize, and to work with efficiently, at least for this old Unix hack. XCode is far far far from perfect -- I wish the SCM integration were better, that the whole thing were a _lot_ faster, and that they'd release incremental documentation updates rather than 250M batches every couple weeks -- but since it's all wrapped on gcc/g++/gdb/make at the back end, you can entirely do your stuff with vi/emacs/whatever at the command line and never use the GUI much at all, if that's your preference...
I've always had problems getting my turtle to move using both Objective-C and VS.net.
Objective-C was unfortunately the path not taken when C++ was starting to take off. The syntax is a bit odd, but it does OO in a cleaner and more featureful way than C++. It's a pity that, even after all this time, it has not gained the popularity it deserves, especially given that there are new checklist items in recently-developed programming languages that it hasn't added to its resume, but it is still an excellent development environment that in its time was ahead of everything else out there (not unlike NeXTStep itself). I should disclaim that I am a former NeXTStep user/developer who moved on a very long time ago to more vanilla Unices, and now program in primarily in C, Java, and Perl.
For every problem, there is at least one solution that is simple, neat, and wrong.
Network mirror still has the original blog post up.
Be a real patriot: Question authority. Think for yourself. Formulate your own conclusions.
As a .NET developer, I haven't looked too hard at Mac dev tools, but I will say I could see an argument that Microsoft's rich development environment has some unexcpected consequences. Microsoft has made it easy for just about anybody to pick up software development, and as a result, just about anybody has picked up software development. =)
This can be good, but a downside is that some of the emphasis on design, best practices, etc. is lost. An office nerd who happens to get into VB is not traditionally pushed to think about things like standard UI guidelines. So in a sense the rich toolset can detract from good software. MS seems to be aware of this, and you can see a definite push for more guidance from them. Still, they have a ways to go IMO, and finding the balance between making development easy and making it "good" is difficult.
There are legions of NeXT fans that would disagree with your statement regarding .NET. The Interface Builder component has always been considered one of the most elegant, easy to use, intuitive UI constructing tools out there. It does what it needs to do, is well integrated into the rest of the tool (and the language) and just plain rocks. I have yet to use a UI layout tool that comes near the ease of use and effectiveness of InterfaceBuilder.app.
When it comes to Xcode (or ProjectBuilder.app as the old NeXT fans were used to), it's also an intuitive, easy to use project management system. I don't like IDEs, I hate IDEs. I prefer vi/vim to do all my code editing. The nice thing about ProjectBuilder in old days (I'm not sure about Xcode, I haven't had the opportunity to do much with my mac mini yet) was that it did what I needed (collect all my files in a nice visual fashion, manage my building and integration with UI components, and built skeleton files). It does all those things well, without forcing the user to be hampered by some built in editor components.
There are legions and legions of developers out there that consider the NeXT development tools to be the ultimate developer toolkit (and objective c is a pretty nice language). It's nice to see it didn't disappear into history :)
The question is inane and has been endlessly debated in the language flame wars on Slashdot. It is neither "News for Nerds" or "Stuff that matters". Both of these languages are tools to accomplishing a goal. If you like C# and .NET, then show us what you can do with it and impress us. Otherwise, stop inciting flame wars.
rus
Hey, there's no email thread on that page...
Looks like it's been slashdotted!
(Btw, "Objective-C gives you the full power of a true object-oriented language with exactly one syntax addition to C and a dozen additional keywords. Its power lies in its elegance and simplicity." -- GNUstep: Introduction)
Use Qt and STFU. Qt is available on all major platforms natively and that includes MAC. It makes C++ development completely pain free and if your idea is that of hating C++, there are python bindings available and there will be supported Java bindings available soon. (Q1 2006).
...). What else do you want - .NET? If so, there is Mono for ya on OSX.
Plus, Java has been an alternative option that doesn't suck on only one platform - MAC. The UI looks native, the development tools are good (XCode, Eclipse, NetBeans
So what else does Jobs need to do and believe in?
When I first got my Mac I did a few small projects in Objective C. From where I was sitting, it looked like some of the C++ like problems of garbage collection and proper invocation of destructors were still present.
.Net and Java I found that to be a 'deal breaker'. Machine time is getting cheaper as we speak. Programmer time is very expensive, however. So trading garbage collection overhead for more efficient programmer use (no need to chase down dangling references or improperly called destructors) is a good trade, IMO.
Having grown used to garbage collection under Perl,
putting the 'B' in LGBTQ+
From: Nitesh Dhanjani
.NET with CLI and managed code runs SLOW, so most serious developers can't use it because of performance. Second, the libraries in C# are FAR less mature and elegant than those in Cocoa. We are working on a better implementation for garbage collection than we've seen out there so far, but in the end its a performance hit and an unpredictable time that is not good for some kinds of apps.
.NET implementation, you are allowed to code using a plethora of languages (C#, Python, VB, etc), as long as the interpreter/compiler follows the IL specification - pointers don't matter, garbage collection is done for you - ah the beautiful world of managed code.
Subject: Re: Will XCode+ObjC ever suck less?
Date: December 25, 2005 5:27:02 PM CST
To: sjobs@apple.com
I look forward to the improvements! Thanks,
Nitesh.
On Dec 25, 2005, at 5:10 PM, Steve Jobs wrote:
I guess we disagree. First of all,
Steve
On Dec 25, 2005, at 2:36 PM, Nitesh Dhanjani wrote:
Objective C is old and clunky. Its almost 2006, and I _still_ have to look out for yucky pointers? I'd love to be able to write native apps with Ruby (or even C#!.) There are open community projects in progress that are trying to bind ruby and C# (mono) with Cocoa, but I'd love for Apple to step in and make this happen faster. Today, Microsoft seems to be _way_ ahead of the development curve - with their
Having said that, most native OSX apps are still beautiful and well designed. Imagine how much better we could do if the developers had a more flexible choice of languages? I can _bet_ you a lot of OSX app developers use Objective C because they have no other choice.
Nitesh.
On Dec 25, 2005, at 3:11 PM, Steve Jobs wrote:
Actually, Objective C is pretty great. Its far nicer than most other ways of writing apps. What don't you like about it? What do you like better?
Steve
On Dec 25, 2005, at 11:59 AM, Nitesh Dhanjani wrote:
Hi Steve
Will it ever be easy to write native OSX GUI apps? Objective C sucks.
Thanks,
Nitesh.
...I fire back with the almost-certainly-true statement that "You don't know C++ well enough to judge its value as a language."
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.
[ home ]
I honestly feel I can adapt to most programming languages with easy. Objective C was quick to pick up, but most of my frustrations were with X Code. I'd love to see an environment like Eclipse for Objective C and Cocoa.
I'm not saying you can't compete with Microsoft. But there's an advantage that Microsoft has that gives them a huge advantage, and that nobody seems to want to consider: Economies of Scale.
Objective-C probably remains my all-time favorite programming language (from some 30 years of programming) simply because it was so clean: ANSI C with a handful of syntactical and semantic extensions for OO development. I used it professionally for 5+ years and found it a delight (compared to, say, C++).
..bruce..
On the other hand, it's been 10 years since I did any Obj-C coding, so I don't know how the current Obj-C implementation compares to the current implementations of Java and C#; there may well be features in Java and C# that I'd be unwilling to give up to go back to Obj-C.
I remember hearing a rumor back in the early 1990s that Microsoft considered Obj-C for its nascent Visual development tools, but ended up going with C++. Sigh.
Bruce F. Webster (brucefwebster.com)
The idea that the OS X development environment should include the option of using managed is code is fine (although I shudder to think just how much work this truly encompasses). But I haven't yet seen the real benefit of using .Net or Mono while I have successfully used Objective C.
I think sometimes we get caught up in the tinkering with latest wizbang language and loose sight of the fact that if we simply paid attention and used the languages we already know we could solve whatever we are programming much simpler.
Over the winter break I have run into two miserable examples of this...
ONE the program Autopano-sift (100% managed C# code developed using mono) This program does nothing couldn't be done in C++ and little that couldn't be done in C. I've lost count of the megabytes I've downloaded to access the functionality of a program that has no cause to occupy much over a half meg... it's like having the bloat of windows and the user friendliness of circa '92 Linux all at the same time.
TWO Canon and the "software" that accompanies their cameras, specifically the 350D AKA Digital Rebel XT. I am very interested in controlling that camera by computer (any computer) so I have also signed up for their development program. So I can tell that all of the canon software that came with my camera was developed with the current version of Microsoft Visual Studio and also uses the SDK canon uses to obfuscate the camera's true API. Because of the user interface and some truly bizarre design decisions this is the worst software I have ever installed on any of my computers. With the possible exception being Arcsoft's image management application which was also included. I must admit, I have seen Arcsoft's applications before and while technically they work... the user interface is so poor and has such arbitrary limitations as to make it unusable, so this is not really surprising. Bottom line... sending a few hundreds of kilobyte of data through a USB should be easily accomplished by an 8 bit Microcontroller mounted on a board the size of my thumbnail... and IT IS NOT... thanks to manged code.
Nothing in the world is more dangerous than sincere ignorance and conscientious stupidity.
Having said that, since most of us haven't read the email thread, we have no way of knowing what SJ was really saying.
Correct me if I'm wrong, but as far as I've heard he can be a pretty neurotic fellow, subject to *ahem* exaggerated statements such as this.
Granted, I do think that objC has many strengths over C++, and I do think it's a shame that most Mac developers have adopted Carbon or CoreFoundation instead of the NS* classes. The Mac had a potential for a pretty good development platform and I think many of the developers blew it.
It was also silly of Apple to get rid of the Java bindings to Cocoa.
It is a really outdated 'language' today compared to Java, C#, and even C++.
If you look closly to objective C, it is really not a language, it is just C with a enhanced macro pre processor.
Performance is ABYSMAL compared to any modern language because message sends (the objective C equiv of a method call) has to go through a dispatch map. This is how it works:
1: you send a message to an object like [anObject doSomething]; this sends the doSomething message to the anObject object.
2: under the covers, this calls a function called regular function called objc-msg-send, this is part of the Objective C runtime.
3: this function looks up the object, then looks up the dispatch table to see if if can accept this message, then finally invokes it.
Overall, objective c message call performance is comparable to Javascript.
Now, of course you can just call C functions, but then what is the point of objective C?
Modern languages like Java, C# provide all the dynamsism of objective C, but do it effciently thougth vtables and reflection.
For a while I thought about porting some software we have to the Apple platform (it is currently written in C#), but with the abysmal performance of Objective C, the portion of the app turned out to be not usable (this is a parser that needs to make several thousand method calls per second). We ended up porting it to Java, and performance was a bit better than the original C# version.
So, while Objective C was a neat idea in the 80's, it is time to move on Apple.
Objective C was a great idea in the 80's but it is time to move on. Steve Jobs, why don't you try some Java?
There's also a Python bridge for Obj-C. So for those that prefer a very different language, with its interpreter already distributed with the OS, Python's a great option. You get the native objects exposed by OS X available to Python.
And let's not forget OS X is built on top of BSD. So effectively anything which can be written for BSD can be written for OS X. There are, of course, limited GUI tools, but options are available. Qt libraries, for example, will display native GUI elements when possible.
Developers: We can use your help.
interface builder is great. xcode is pretty good. but the whole thing could be easier to use for people like me that don't have the entire NS* libraries memorized, and don't feel like going to developer.apple.com for each call we want to do. meaning: they need "intellisense"-like support. .NET allows me to get programs done really fast because i can quickly find the proper name for a function by hitting period. xcode makes me go to developer.apple.com, and doesnt tell me its incorrect until i try to build. sure, this is like old days. but we're past the old days. xcode is *NOT* a tool for rapid app development. and other solutions like wxwindows and all those others for mac are a joke. x11 development for mac is a joke. real basic is a joke. we need a RAD solution for mac, and apple is almost there with xcode. they could even do the intellisense with the bracket notation, like whenever you do [NSString then space it would show a list of methods or whatever. its just too hard to get anything done. java makes things a little easier on the mac, but i still have to look up every NS* call i have to do.
If you want to use a C# stlye language, simply use Java on OS X.
If you want to build more performant apps, use Objective-C.
I've used Visual Studio and many Java IDE's. I think XCode is one of the nicer IDE's around (it also has code completion and other modern IDE features), and as others have noted the Cocoa approach to GUI development is really, really quick.
Frankly I really like the message-passing style of Objective-C as it's a very pleasing mental model for interapp data flow. People who are complaining are generally just too used to a C++/C/Java stlye language, and need to broaden horizons a bit... yes having no garbage collection is a bit annoying but there are autorelease pools you know.
The final word on how useful Objective-C is comes down to Apple applications themselves. Look at the size of Apple and the broad range of pretty impressive applications they are able to develop. It speaks louder than any other argumnet as to why Apple should keep Objective-C as a preferred base for development, as they have had great success with it thusfar.
Besides, don't we all want real choices as opposed to everyone developing in various flavors of Java across every OS?
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Really? .net suck?
Why is Objective C perfect?
Why does
also, I dont like how the syntax forces you to know exactly how many open brackets (==levels of dereferencing) you will need at the start of a statement. in java and c++, it is possible to just start with one object and dereference happily on your way along the object chain without ever looking back.
on the other hand, Cocoa and especially Interface Builder are both easy and lots of fun. great GUI API, would definetly use again!!!!11!
What Jobs is ignoring is that Macintosh customers are primarily non-technical, and have no need or want for a "religious war" around programming languages. Even if Obj-C and Cocoa are perfect, they are still for all intents-and-purposes a proprietary Apple-only environment (please don't pretend GNUStep has any wider importance), and is only used by True Believer devs.
.NET framework and C# and it is considerably more popular as well. Withholding .NET (and Java) from Mac users only hurts the variety of applicaitons, which in turn hurts the strength of the platform.
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".
Whenever I hear the word 'Innovation', I reach for my pistol.
Steve Jobs never calls Objective-C/Cocoa perfect, he just thinks that it makes for a much better development tool than .NET.
How the hell did that even get posted to Slashdot in the first place? Does anyone actually check anything before these things go live?
Check a few comments up for the incredibly boring emails back and forth, where basically the guy starts off by telling Jobs that Objective-C sucks without giving any reason. Makes me wonder why (and IF) he got a response in the first place.
The bad thing (or good thing depending your viewpoint) about Cocoa is the steep learning curve; Cocoa leans _heavily_ on some design patterns; once you're up to snuff on those, developing in Cocoa with IB and XCode, becomes a snap. The enforcement of the strict guidelines laid up by the design patterns is actually a Good Thing. Anyone argueing that has merely glanced over Cocoa and development environment, and has not climbed said learning curve, and as such cannot appreciate the advantages of such approach. ... ;)
Objective-C, being one of the OO-languages done right, has an added benefit of filtering out the herds of low-quality C++ and Java hackers, leading to better apps in the end. If only they'd add automatic garbage collection
From his thread:
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.
Objective-C was my first object-oriented language (this was back in 93 - 95). I loved the syntax and the integrated vision of the tools and frameworks ... but I hated memory management. The whole retain/release/autorelease thing was always a bug waiting to happen, and I spent many wasted hours tracking those down (basically, retain/release works great for trees but flops around like a dying fish for graphs).
... meaning that its better to combine many small focused objects. In Objective-C, you have a layer-cake approach, where each layer of inheritance mixes in a particular concern. This makes sense when you want to minimize the number of objects allocated, but in a GC language (Java, Ruby, etc.) you end up with better, more testable code when you let the GC do its thing.
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.
Howard M. Lewis Ship -- Independent J2EE / Open-Source Java Consultant -- Creator, Apache Tapestry and HiveMind
A lot of quirks in programming langauges don't show until one is actually trying to code something useful with them. More likely than not, the said comment by the Apple Egomaniac (tm) originated from opinion of MANGLERs in his organization; since they tend to quantate work performed by coders in terms of number of lines. If enough MANGLER said to him "my coders write more lines of code in Objective C than in it's not so far fetched that the Apple Egomaniac (tm) would conclude Objective C is a better languge to code in.
ELOI, ELOI, LAMA SABACHTHANI!?
After giving some though to one of the responses to this entry below, I have decided to take down the email thread between Jobs and myself. I have no way of knowing if Jobs would be OK with me posting the e-mail publicly, even though the contents of the e-mail didn't contain anything private or sensitive.
Ok, so now we're just talking about Objective C. So much for the news aspect of the story...
I believe Jobs is mostly correct. Objective C is a pretty nice language for what it is; you get a lot of very nice message passing features and notification passing in the base ("foundation") library that is pretty far ahead of most C++/Java frameworks I've seen.
Cocoa GUI apps require very little anonymous class/callback cruft compared to most C++/C#/Java apps I have seen. Also, most hacked together Cocoa apps appear to be significantly better than most hacked together C#/Java apps (better dnd support, better saving/import/url support, highly responsive).
Apple would do well for itself to offer first class support for other language bindings and to move from XCode to Eclipse (and figure out a way to keep Interface Builder around). The KDE/Qt people are able to provide good bindings to Python, Perl and Ruby with very little resources. C/C++, Python, Perl and Ruby are much better known to most of the devs I know than Obj C. The PyObjC (Python) bridge is good, but it could use better documentation and treatment from Apple.
Brandon
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.
Having recently introduced myself to Cocoa through Cocoa Programming for Mac OS X by Aaron Hillegass, I would have to say that Cocoa is quite fun to program for. Specifically, Apple's Interface Builder allows you to quickly build up a GUI without writing a single piece of code. A lot of common tasks require next to no code at all. For instance, adding tabular data requires only that you create your model in XCode and perform all other tasks in Interface Builder. Within seconds your application can have a table with movable, sortable, editable columns. The only code you have to worry about is your model. Of course, should you want to do something more complicated with tables you can.
Tabular data is just one example, but there are many other ways in which programming for Cocoa is quite easy. Copy and paste using multiple types is a snap, and drag and drop is just a slight extension on top of that, accomplished in minutes. Can Windows' Visual environment say the same? Friends of mine who have implemented drag and drop on Windows spent days doing so, and it still didn't work quite right. The broken nature of drag and drop in many Windows apps is the result.
Since Mac OS X uses PDF as its native format, creating PDF versions of your data requires only a few lines of code. Similarly, Cocoa provides support for many data formats such as RTF, PNG and TIFF so saving and reading images is a no-brainer.
ian
I gotta get my Delphi plug in here. It would be great to have Borland but its weight behind OSX. IMO Delphi has always combined the power of of object oriented programming and a visual RAD environment while still maintain the ability to do the most low level stuff that you need. All the power, none of the crap. Visual Studio has taken a lot from Delphi (including 30+ Borland engineers a couple years ago).
There is still a lot to learn from Borland and Apple seems like the logical place to apply their design methods. It wouldn't be over difficult to apply Object Pascal to wrap all the Cocoa APIs and create a native environment.
D.O.U.O.S.V.A.V.V.M.
I code various C#/.NET things at work, and code Cocoa stuff at home for fun. I'm well-versed in both environments.
- The environments are apples and oranges (no pun intended). The languages, the workflow, everything is much different.
- Moving away from ObjC would require some significant reworkings of Cocoa, as its workflow is based on the "ObjC way". Take a look at the mess that is the Cocoa/Java bridge, or Cocoa#.
- Objective C is WAY more descriptive than other languages (take a look at how you pass arguments in functions, for example).
- Objective C is easy to learn. Yeah, it's a lot different than the usual paradigms, but when you learn it, you'll enjoy its simplicity.
Things I hate about Cocoa:
- It's not managed code. Why should application developers in this day and age have to worry about memory management? (autorelease doesnt count)
- Having to keep two different programming paradigms in my head. I never even learned C#, I learned Java and jumped right into C#, because they were so similar.
- Practically no one else in the world uses Objective C, so it's not a very valuable (salary-wise) skill to have.
- The X-Code/Interface Builder dance is quite clunky. It was cool back in the day, but Microsoft has a much better system developed.
- VS.NET 2005 > Xcode
python
garbage collection - no
pointers - yes
ide - no
type '.' and get function names - no
i strongly suggest you try out python.
a perfect language for brilliant folks
such as yourself
"Is life so dear, or peace so sweet, as to be purchased at the price of chains and slavery?" - Patrick Henry
All of us developers have personal preferences and employment reasons for adhering to a certain technology standard. I write .NET code (VB or C#) and although there is voodoo within the IDE, it's not so horrible that I would choose another platform.
I can't speak for Objective C, but I know a few developers that love it and say more or less the same thing about it...that it has warts, but they prefer it over anything else.
So the evalutation should be in another area....and I will pick on the lack of choice where Mac software is concerned.
I bought a mac-mini for my wife and kids, feeling it provided a more stable environment for there mistake-probe usage. I feel vindicated over the past few months in that I have had almost no interaction with the mac and they've been happily doing their thing.
But when it comes to finding software for it, I have a huge problem. There is almost no kids software for OSX. Not only is there a ton of commercial software for Windows, but there is also a ton of shareware software for Windows. Where is the shareware software for the Mac.
I still believe that one of the primary reasons Windows proliferated over other OS's is that Microsoft created Visual Basic. The original VB made the creation of windowing software easy enough so that nearly anyone could do it. Obviously some of these efforts were a joke, but many of these efforts ended up being extremely useful applications. There was a period of time, in the BBS days and pre-Internet, that VB shareware was everywhere and had an enormous impact on why people purchased Windows computer systems.
So Objective C may be a wonderful platform for developers, but it has a fairly high learning curve for the average joe, and this is where you win OS battles. Quality will keep the professionals interested, but quantity of software is where you will win more users.
So if Apple really wanted to put a dent in Windows, they would adopt some platform that would mimic the ease of development that VB gave Windows 15 years ago. Granted, professional developers won't touch it and will likely scoff at it, but all of the entry level and non-professional developers might take a shot at creating one off shareware type applications that there will then be a buzz about all of the really cool apps you can download for your mac.
http://chicagodave.wordpress.com
The issue for me is how much time and effort is it worth learning a language and framework that only exists on a single minority platform?
.h files again. Copy and pasting message signatures around sure is a lot of fun. But that's just me. Bigger issue is memory management. It's a pain but it's better than c at least.
I personally feel that OSX is a beautiful combination of unixy goodness and gui usability. So much so that I dropped a load on a quad-g5 last month. And i've been playing with objectivec/cocoa/xcode/ib long enough to develop a few opinions:
1. Cocoa is the best thing going for the mac. It's feature rich and has loads of good documentation and examples. Far nicer (at a code level) to build GUIs in than say... Swing.
2. XCode/IB - Hello? 1992 called and wants it tech back. Once you get the hang of it's not a bad combo. But Delphi showed the way forward to today and not having two way tools is painful.
3. Objective C ditto. As a java guy I-CANT-STAND having to deal with
4. Libraries - As long as there is a cocoa lib for what you want to do you're good. As soon as you have to start calling c or c++ based libs you're screwed. It's nice an familiar to c/c++ guys. But it's rather jarring to be running along in objc and all of a sudden have a load of pointers hit you in the face, throw in the CoreFoundatiaon and carbon stuff... ech!. Every time I see it i'm just "argh... this is why I prog in java".
5. Deprecated Java-Cocoa bridge - Nice idea but making java behave like objc does in cocoa is pretty messy from a java prospective. Probably is better than they just killed it off.
So, back to the point. ObjC has some good and some bad. If you could hope to even just port your code to another platform I'd be all over it. But without that ability what business is going to let you build an app with it? What business is going to buy an app that is osx only? Given these two constraints what left? Server based apps? Java pretty much has that wrapped up in all but the most fervent windows only shops.
The good news is that the mac market is expanding like crazy. It's only ~4% or so.. but that's millions and millions of users who actually buy software. Dunno if it's enough to make a living off of yet, but perhaps someday.
Well, what timeframe are we talking here? In Tiger, they gave us CoreData and Quartz Composer, and Spotlight. In Jaguar, they introduced Cocoa Bindings, Quartz Extreme, the Address Book API, and Rendezvous.
OS X is gaining major capabilities with every release, and they usually come with an Objective-C API to make them very easy to use.
-jcr
The only title of honor that a tyrant can grant is "Enemy of the State."
I've been programming since I was 7. I've done Basic, Pascal, C, x86 assembly, Modula 2, SML, C++, Java, plus a large bunch of scripting languages. I've programmed for the Java VM (ME, SE and EE), Amiga, DOS, 16 and 32 bit Windows, most UNIX variants and a large number of mobile OS's including Symbian, PalmOS and Windows Mobile.
When I got a Apple PowerBook, my intention was not to use it for programming. ObjectiveC and Cocoa was totally irrelevant for me and I didn't bother to learn it. That is, until one evening when I decided to just take a look at some of the ADC docs included with XCode. After reading for about an hour, I was very surprised. It couldn't possibly be this easy and straightforward. It felt like it Cocoa must be seriously limited in functionality. The API was so easy and so compact, and ObjectiveC was like a halfway mix of Java and C++. I bought a book on Cocoa and read through it in about a week. It covered everything from basic GUI programming to drag and drop, printing with pagination, OpenGL, making custom widgets, data binding and persistence, preferences, making and using frameworks (think DLL's), and so much much more. And all of this was amazingly simple compared to any other OS and language combo I had ever used. And not just easier, but dramatically easier.
As an example, the chapter on drag and drop was something like 5 pages and covered making drag sources, drag targets, controlling the icon you see while you drag, data flavors, and so on. The classes involved were all extremely simple, easy and intuitive. Printing is even easier!
I haven't really had any need to do any apps of my own lately, so admittedly I haven't used Cocoa for anything in particular other than simple test applications, but I'm thoroughly impressed!! I would give about 80% of the credit to Cocoa, and 20% to ObjectiveC. You can use Cocoa with Java too, but it seems a tad bit more compatible and elegant with Cocoa. Also, looking at the more recent API's like CoreImage, it seems there's more and more functionality in the Cocoa family of API's but the simplicity remains. I strongly recommend picking up ObjectiveC if you know C++ or Java!
Peppe
The next generation Objective C and Xcode already exist: Smalltalk and Smalltalk programming environments.
Smalltalk is a language with Objective C's object model, but runtime safety, garbage collection, and reflection. Objective C was an attempt to create a very low overhead version of Smalltalk that would interoperate more easily with C code, but most of the technical reasons for making the compromises that were made in the design of Objective C are gone.
The only thing that would need to be done would be to extend Smalltalk with a notion of "native" or "unsafe" methods; that has been done multiple times before, and it can be done either by permitting C code to be embedded in Smalltalk (reversing the Smalltalk/C situation from Objective C) or by defining a Smalltalk subset that's close to the machine (as Squeak has done).
some guy sends steve jobs an email, gets a canned response, sends another email, gets another canned response, and the ensuing result is that the four-email thread makes it to the front page of /.
....... kris
there have got to be more than enough bottles of champagne to go around in the world to drink than to be concerned about things like this . . .
"I thought I could organize freedom. How Scandinavian of me."
Hello me, it's ME again....
Now Steve's Sweating BULLETS.
I like music
Does anyone use Dylan?
Metrowerks offered a stable, reliable development environment, even as Apple was frantically moving from one development platform to another. (Use Rhapsody! Prepare for Copeland! Use OpenDoc! Dump OpenDoc! Use Carbon! No, use Cocoa! Use OpenStep! Use Objective-C! Switch to XCode!.) Each time Apple pulled one of these stunts, more developers dropped their platform.
"As a .NET developer, I haven't looked too hard at Mac dev tools, but I will say I could see an argument that Microsoft's rich development environment has some unexcpected consequences. Microsoft has made it easy for just about anybody to pick up software development, and as a result, just about anybody has picked up software development. =) "
Well that certainly explains the open source programming tools.
"Still, they have a ways to go IMO, and finding the balance between making development easy and making it "good" is difficult."
Free speech is like that. I think we should gag all those that say something we don't want to hear. The overall environment should improve.
The one thing I really like about Steve Jobs... well there are lots of things. The thing I like most about Steve Jobs is that he's unusually candid in email. I have written him a few times in the past from everything about OS X to vegan recipes and he's replied, often with expressed interest and candidness. This is something not to be abused. When this kind of stuff is publicized, I worry about two things:
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.
At a risk of diving into a holy-war topic, I have to say I think both the author and Steve are right.
.Net, or for that matter, most any application building toolset out there. Once you grok the way it works (which take a bit of learning; don't snap-judge it until you've spent some quality time with it), you come to realize that NeXT was so far ahead of the pack as to not even be funny. I've never used anything to compare with it in terms of quickly creating maintainable, robust desktop applications. Other solutions, like VB.net, trade off maintainability and organization in order to lower the bars to entry, which is a trade off that I think, in the long run, has hurt the state of the industry. I don't think it's necessarily a good thing to make it so anyone can develop software, because then anyone does. Once you grok Cocoa, you can build applications incredibly fast with it, but you do need to understand a bit about how it all fits together, and that's not a bad thing in terms of overall software quality.
Jobs is right in stating that Objective-C and Cocoa are perfect. In a sense at least. The approach, and the high level concepts behind it are so much better and more elegant than those that drive
And, as to the author's question about what has Apple done for Cocoa developers lately? Well, I'd say Core Data, Cocoa Bindings, Key Value Observing, refinements to the project templates and Xcode would all count and all have been happening at a steady pace since before Jaguar came out.
Now... on the other hand, there is a valid argument that Xcode and Cocoa lag behind Visual Studio/.Net and Eclipse/Java in many respects. There are many refinements and features in Microsoft's current development tools that are extremely nice and which do not have a comparable feature in Apple's tools. Eclipse also has several features that I would love to see added to Xcode. Java and Microsoft's CLR have things that I would like to see incorporated into Objective-C's runtime. To say it's "perfect" is quite a stretch if you look at the big picture and aren't sitting in the RDF.
But having used both Apple's and Microsoft's tools quite a bit (and Eclipse as well), I have to say I still prefer developing in Cocoa over anything else. And not just a little: by far. Despite the fact that it's missing some bells and whistles, and in a few places lacks the polish of the competition, from a high-level view, it's the most elegant tool/language/framework combination I've ever used. I didn't take to it right away, though. You really have to spend some time with Objective-C and Cocoa before the little light bulb goes on in your head and you "get it". But once you do, it's undeniably cool. If you don't see it, then you don't get it.
Now, before you jump on me... "better" is a subjective term. I have and will continue to recommend other solutions to my clients based on the practical considerations of the specific project. I have Visual Studio sitting open on one of my computers at the moment not because my client mandated it, but because I recommended it after looking at the whole situation. Is "Cocoa" better? In a vacuum, probably. In reality, sometimes yes, sometimes no.
"When you pull in developers by "wowing" them, you get a certain type of developer. "
Oh, wow! Open Source is cool!
Not to state the obvious or anything, but Objective-C is perfect because that was a troll. Please don't feed the trolls. :)
PyObjC is the best way to develop software on the Mac. The bridge is reasonably comprehensive and complete. You can always drop down to Objective-C if necessary. Python is just a good of a programming language as C# yet much more mature. Cocoa is by far the best and most mature set of APIs available for writing software on any platform.
Personally, I have used PyObjC to build an application that won a MacWorld Eddy and has enjoyed millions of downloads. PyObjC saved me tons of time and allowed me to focus on making my app work well rather than simply work. The developers are responsive and seem committed to making PyObjC the best environment for writing Mac software. I think they have succeeded and I have nothing but good things to say about PyObjC.
Check it out, http://pyobjc.sourceforge.net/
You should try jrMan. It's a renderer written in Java, and it's over twice as fast as other renderers written in C++ with the same algorithm.
I done professional development with Objective-C/Cocoa, .NET, and C++/MFC, and .NET is by far the fastest and easiest to work with. Cocoa's ok - far better than C++/MFC when it comes to building apps with a GUI - .NET is still more powerful. Furthermore, Xcode just kinda sucks. It's not stable and very buggy, especially when it comes debugging. Visual Studio is bloated, I can't deny that, but it does an excellent job.
Compare, for example, the amount of steps it takes to build a simple app with button on the center that'll close when run it.
In .NET, it's something like this:
1. Drag button on to form
2. Double click button to create the Close method
3. Type "this.Close()" in the form
In Cocoa, it's more like this:
1. Open up MainMenu.nib in interface builder
2. Drag a button on to the form
3. Subclass Object to create a controller class
4. Ctrl-drag from Controller icon to the class
5. Add an action to the controller class's header file
6. Ctrl-drag from button to the action
7. Save everything
8. Open up the .m file
9. Type the close code into the .m file
(I may have even missed a few steps in there. And yes, you have to do all this dragging in Cocoa - you can't write that stuff by hand)
Now, which one is more complicated?
The speed it takes to do the GUI stuff very much matters when you're writing a desktop application. In C++/MFC you have to spend a lot of time on the GUI stuff, instead of on the core code. That's somewhat true about Cocoa, although not quite as extreme.
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?
.Net (at least 2003) works the same way as Visual C++ 6. At least you now have the C# language (which appears to be Microsoft's attempt to combine Borland's Delphi and Sun's Java using a C++ syntax), which can be developed visually.
As far as I know, you have never been able to do "Visual Basic" type of developing (i.e., "drag and drop programming") using Visual C++. In VS-6, the C++ instructions were to use Visual Basic to design your screens, then import the resources into C++ for coding. WTF? This is nearly as bad as the old Amiga OS, where you had to create the GUI entirely in code, using hex to encode any bitmaps you wanted. Arrgh. Unless there's a configuration setting I don't know about, Visual C++
But it would be nice if "Visual C++" was really "Visual", as the name implies. If MS can't figure out how to make their C++ truely visual, they can always steal some of Borland's C++ Builder developers to help, just as they did the Delphi developers to help with C#.
Sorry if I'm a bit grumpy. I wanted coal in my stocking to keep warm this Christmas, but the EPA told me I couldn't have any due to Global Warming. Ay Caramba!
"My country, right or wrong; if right, to be kept right; and if wrong, to be set right." --Senator Carl Schurz (1872)
Well, Copeland and OpenDoc are pre-Jobs Apple, so go yell at Amelio or Sculley about those two.
On the rest of it, Apple never made a blanket "use Carbon", or "use Cocoa" claim. They said, consistently, to use Carbon if you have a lot of legacy toolbox code, and to use Cocoa if you were starting a project from scratch or were bringing things over from NextStep. OpenStep is just the old name for Cocoa and Rhapsody is just the old name for OS X, so you're kinda overstating your point just to make it look more schizophrenic than it really was.
Metrowerks was in it for the money just as much as anyone else; they weren't "there" for anybody but themselves (and later, their shareholders). Once Metrowerks released a Windows version, they stopped giving the Mac priority and the tools stagnated. Apple inherited a perfectly good IDE from NeXT and Metrowerks gave no indication that they were chomping at the bit to upgrade their tools in a urry so that developers could be ready when OS X came out. Metrowerks wanted to play it cautious and didn't want to gamble on Apple's transition to OS X, so what else was Apple to do? I've met relatively few people except a few cranky old Toolbox guys who didn't want to make the transition to OS X, who aren't happy with Apple Developer support compared with what it was historically. The Inside Macintosh books used to cost an arm and a leg and weren't available in soft editions, MPW was a nightmare, as you stated, and the only other way to create applications was to buy third party IDE.
Life has been pretty good (not perfect, but pretty good) since Apple bought NeXT. It's been tumultous at times, but has steadily been heading in the right direction, and as a matter of fact, developers have not been leaving the platform in droves; there has been a well-documented and steady increase in the number of developers using OS X as their primary platform.
I'd hardly say they're "suffering".
I characterize Objective C and the Interface Builder integration and a lot of those concepts to have been ten years ahead of its time when it was in its heyday (let's say 1988). So it's a 1998 environment in 2005 -- it's not really getting any younger -- they used up their "ahead of their time" card awhile ago.
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.
Clear... Apple needs to fund the development of the D programming language and switch to that! :P
The worst part of all of this is that the e-mail messages he put on the blog were all top post replies!
For the love of all there is, wipe out top posting now!
Objective C code is *fast* -- .NET is dead slow.
Here are a few ObjC problems off the top of my head.
:-))
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.
-- "I never gave these stories much credence." - HAL 9000
He doesn't have time to read email. They just ask one of the interns, " Hey, you wanna be Steve Jobs today?"
Why should a computer language be made to be "fun"? If you want a computer langauge that's easy to extend, fine. If you want to make it fast, simple, and good for writing good code with, right on. But computer languages are not toys, although Java and .NET languages come pretty close.
I thought the most interesting thing about the exchange was the date. Kinda sad that with all the opportunities life offers, he spends time on Christmas answering emails like this.
I do hope it was really some peon who got holiday pay.
Metrowerks wanted to play it cautious and didn't want to gamble on Apple's transition to OS X, so what else was Apple to do?
Obvious answer: They could have bought out the Mac version of Metrowerks, since at the time nearly 100% of their developers were using it, and then instituted an orderly roadmap to transition devs to ProjectBuilder.
Whenever I hear the word 'Innovation', I reach for my pistol.
.net is targeted at RAD development, hence it being easy to use and slow. The payoff is that good developers can build stable, native applications at blinding speeds. I think the author's point is that Apple doesn't have an answer to that and needs one. Love it or hate it, MS has done extremely well with RAD because there is a huge need for it.
A few years back there were more VB developers than any other language on the planet. Think about that. You might hate everything RAD stands for, but its hard to argue it isn't needed when it's so popular.
>> C#, for all of the claims of performance, is a a JIT based interpretive language. Ditto Java.
.NET language for that matter). MSIL gets compiled into machine code BEFORE executing it. There's no interpreter in this infrastructure AT ALL (and that's the main difference from Java). While MSIL can, of course, be run using interpreter, its primary design objective was lightning fast, on-demand JIT compilation and as such it won't run well in the interpreter. Java bytecode is the exact opposite - it was designed to be efficient when run on the interpreter, and as such it will never be as fast at JIT compilation as MSIL.
True for Java (partially), not true AT ALL for C# (or any other
Function pointers are probably my favorite thing about low-level languages (and even a few higher-level languages that provide such support).
Apple's "our way or the highway" attitude is annoying. carbon is grudgingly provided for "those delusional c++ developers who refuse to walk the enlightened path of objc", but it is a second class citizen compared to cocoa, no matter how much apple waves their hands to the contrary.
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.
You made a great point. Thanks for taking the time to type it.
---
Sure, they could have. But why would they? They already owned a perfectly good IDE in Project Builder. Why buy a product that would have to be pretty much re-architected from the ground up to work with OS X? That wouldn't make business sense.
Yeah, why would a platform company want to make life easier for their ISVs? Gee, that's a tough one -- try mulling it over for a while.
(BTW, CodeWarrior is a native OSX app, and like most classic Mac apps, it didn't need to be "re-architected from the ground up" to get there.)
Whenever I hear the word 'Innovation', I reach for my pistol.
It's not like Obj-C doesn't have a wow factor anyway.
For starters you can create basically the entire interface of an application without writing a line of code by using bindings. What's even better is you know you will never see a crash in that code and it acts how a normal Mac OS X app should work removing tons of testing and freeing you up to do cooler things to sell your application.
Secondly the ability to rapidly prototype a working application using the above glue code and the already built objects allows you a near unprecedented ability to experiment with the user interface.
And finally I guess is what you get for free. Everything from Core Image to threading, it's all there and works perfectly every time. There are so many objects which I guess shows its age... if you need something then quite likely it has already been built or tacked on to an existing object allowing you to continue on and again produced the cooler items that sell your app.
Categories are *the* best feature of Objective-C. They let you keep problems object orrient when subclassing isn't avaiable. Simple example. Say you're working with a class library that exports a string class, and that string class doesn't have a 'spit/explode' function. In languages without categories you would write a static method some place, or a method on some unrelated 'toolbox' class that takes a string and splits it. In objective-c, you can just put a category on string that is a split method. This way the string is doing the split. If you later hve some subclass of string that can do a more efficent split, well override split, dont' swtich on the class type in your static method. YAY OO.
I hinted on a much more important feature above. When you have to work with many objects that you know little about, categories are awesome. Take GORM for example. GORM should integrate with many flavores of objects but it really only knows a lot about a couple of base-classes. Classes like view, object, and window. GORM might need to know if a view acts as a container. To do this, it might put a category method on view called 'isContainer'. It could return NO by default and be overrided in all containers to return YES. Now when working with a view, GORM just has to say [view isContainer] to find out if the view is a container. This is much better than looking asside in some table, or manually coding up the reflection hack that would be nessecary to ask such a question in other statically bound/typed languages.
Nice strawman. ... you obviously can't read.
And speaking of such.
We are the hollow men
We are the stuffed men
Leaning together
Headpiece filled with straw. Alas!
My Karma: ran over your Dogma
StrawberryFrog
Where in my post did I say that Java and C# weren't popular? Also, just because something is popular does not make it right, or even something nice to use
Of course, Java and C# are popular, ins pite of being not nice or right, they are "Nasty code resulting in memory problems, garbage collections freezing an application, and numerous bugs." (unlike C, which is perfect, no buffer overflows etc here, nope), and the developers who use them are all clueless: "use memory like its candy... Not knowing that every one of their objects in a list uses 2 megs of memory."
That's just a troll.
"don't give me the excuse that you can write your code faster"
Well, why not? You can, and it matters that you can.
So stop trolling.
My Karma: ran over your Dogma
StrawberryFrog
BULLSHIT. Apple gave Carbon to Metrowerks and the rest of the ilk back in 1997 at WWDC and we told them to get ready to transition to Cocoa/ObjC. Seven years was plenty of time. Get over your loss and embrace change.
What Jobs is ignoring is that Macintosh customers are primarily non-technical, and have no need or want for a "religious war" around programming languages...
...ObjC/Cocoa is one set of good tools, but so is the .NET framework and C# and it is considerably more popular as well.
Exactly why the users will not care if Apple continues to use Objective-C.
If you're going to base language choices on popularity, then perhaps OS X should include extensive Java support. Oh wait, they already did that!
Just because Microsoft has managed to market a lot of developers into using a Shadow-Java is no reason for Apple to switch.
Fundamentally what you do not realize is that Apple basing application development on Objective-C is a strength, not a weakness - you'd almost think Jobs and McNealey had colluded in tricking Microsoft into taking the path of playing endless catch-up with Java while Apple continued to mature the libraries and features they offer with OS X.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
I read through this and suddenly I asked myself, do I walk back in time, or is something wrong.
...
...
But sadly Top posting is so common nowadays, that managers complain if you don't do. Last time I normaly answered an email to an management person in our office and he complained later why my answer was not on top like "normal" people do
oh where there world went thanks to preset outlook settings
"Freiheit ist immer auch die Freiheit des Andersdenkenden" - Rosa Luxemburg, 1871 - 1919
----
Although I am a die hard Apple and OSX fan, I've never cared for Objective-C much. As far as the development world is concerned, it is my opinion that Microsoft has done wonderful things with
(NOTE: Jobs and I are probably on different time-zones, hence the confusing time-stamps within the thread.)
Update: A few people have e-mailed me and asked me to provide additional comments on Jobs' latest response to me, so here it goes: 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. Objective C may be OK with some, but take look at with Microsoft is doing with
code Cocoa components
code Cocoa components
code Cocoa components
this nation, under God, shall have a new birth of freedom. -- Lincoln, Gettysburg Address
There's two kinds of "realtime". Hard and soft. The "uncertainty" is less a problem in the latter, than the former. Second most programmers GC before sections of "critical" code, and then lock-out the GC during. For the majority of realtime this will suffice. The rest might be using something like Forth were the view of resources is much more fine-grained.
The best Obj-C & Cocoa intro:
Cocoa Programming for Mac OS X
m.m.
Someone earlier in the thread used the word "elegance". That, in my opinion, is the key word. Java and C# are decent languages with powerful (though somewhat bloated) platforms in J2EE and .Net. But they're not fun. The code at the end result for any major undertaking just feels ugly. Better than C++ perhaps, but rarely (if ever) something I could call elegant or beautiful. And that's a web app. The code for a GUI app written in Java or C# is just downright ugly, even in the best of cases.
Objective C code, on the other hand, just seems to be more elegant. Some of this is due to the structure and syntax of the language itself and a large part is due to Cocoa.
When I'm coding in C# or Java, I feel like I'm a hack writing up the police blotter and obit for the local paper. When I'm coding in Objective C (or Ruby), I feel like I'm writing poetry.
m.m.
This guy is as retarded as he sounds ("yucky pointers").
.net....
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.
#hostfile 0.0.0.0 primidi.com 0.0.0.0 www.primidi.com 0.0.0.0 radio.weblogs.com
...Pixar are being pushed to use Objective C++ and have plans to rewrite their tools using it. I also hear that the developers are pretty unhappy about it - partly because of the potential drop in performance that it might bring for much of the type of code Pixar write.
With programming, the correct cliche would be "evolve or die". Yes, it's true that "good enough" systems can stay around forever and ever and ever in programming, but it's also true that this only tends to happen if the system gets established. Apple is not established, they are still in a position of attempting to sell Cocoa to others. Worse, Apple is competing directly against one clearly-thus-inspired platform which attempts to replicate Apple's functionality (Java), and against another clearly-thus-inspired platform which attempts to replicate Java's functionality (.NET). .NET and Java have not learned from the greatest of Cocoa's triumphs. But they have both learned from Cocoa's mistakes, and each offer interesting new triumphs of their own.
.NET are constantly on the move, in some ways surpassi
And there are definitely mistakes in Cocoa, things that are broken and need fixing. Many things in Objective C feel like they're from a 20 year old language-- because they are. The new features in Java 1.5 (generics, real generics not this C++ template crap, and foreach/iterator support) make the cast-filled use of collections in even a simple Objective C program simply painful to contemplate, and objective c could stand to incorporate a few more of C++'s modern features without requiring you to go whole-hog to objective-c++. "Fix and run" or whatever it's called is a neat nod to dynamism, but ultimately is just part of a tendency within the Objective C language and Cocoa tools to go halfway to a state of perfect python-like dynamism but stop halfway. Cocoa is in some ways even more dynamic than Java, but it must be compiled, which offers a sort of dynamism gap which the tools need to bridge. Right now they don't. The tools, amazing as they were compared to the alternatives two or five years ago, really, really need work. The work you must go through to use a language other than Objective C in a Cocoa program is, frankly, bullshit. PyObjc and Camel Bones are clumsy add-ons; they should be built into the developer tools from the moment I install it. In general XCode is too prone to freaking out if I do something unexpected as opposed to just using the expected interface paths, and after you run into this problem where you're afraid to do anything unpredictable in XCode in case everything stops working. In general meanwhile XCode consistently engages in behavior that I can only describe as "mysterious". The great and interesting features XCode offers-- features which are truly necessary to get the most out of Cocoa-- cease to be of use, because XCode's general unreliability prevents you from making use of them. The worst thing about Cocoa comes in when you have to use any library which is written by one of Apple's Carbon-centric groups instead of one of the Cocoa-centric groups. Leave the little cloystered world of cocoa classes and try to work with, say, Quicktime, or CoreAudio, and suddenly you are in a strange and incoherent land, suddenly needing a crash course in new and interesting types of strings and something called the Component Manager, and suddenly devoid of the high documentation standards common in the Cocoa classes. Spend a few weeks using one of these "alien" APIs, and suddenly you won't care how great the core Cocoa APIs are, you'll be simply yearning for an operating system where the GUI library and the sound library are based on OS APIs which vaguely resemble one another.
Basically, Cocoa was without a doubt the best available developer system five years ago. But that was five years ago. The APIs have received new and interesting additions (KVM and coredata come to mind), but some things have not improved at all, for example the base language (in fact if anything the base language has devolved, thanks to the recent removal of Java as a future-proof coding option), the documentation, in many ways the tools, and the cross-language compatibility. Objective C and Cocoa are in many ways standing still while Java and
Irritable, left-wing and possibly humorous bumper stickers and t-shirts
The biggest problem with Objective-C is that it isn't standardized. It is great if you're writing OS X apps only, but if you need cross-platform support, things get uglier. Yes, I realize gcc has Objective-C support, but you need libraries and Apple's changes to the compiler aren't necessarily merged into gcc as they should be.
How about giving away xcode for FREE with the O/S.
Come on, it's a pretty decent environment and available to everyone who owns the O/S.
I think that's not bad.
Most well-designed programming languages allow code that can be optimized to reduce the amount of garbage generated. For the things where speed really matters, it can sometimes be possible to prevent the generation of any garbage.
This isn't meant to be a troll on how slow OS X is. My point is that the advantages/disadvantages of using GC parallel those of using a microkernel. It seems silly that Steve Jobs would endorse one and not the other.
Badass Resumes
I did. I dumped Mac support.
I disagree.
Specifically, I work at a small software house that writes exclusively in java. Our product is a piece of server software, quite large, runs on multiple machines, etc. Now, I won't say that GC isn't nice, but I will say this: it took us over three months to find settings that kept java from seizing up for over three minutes once every half hour or so for full GC, when it's under heavy load. When Java 1.5 came out, all those settings failed and we had to try again. (They're still failed; one of the hidden settings we depended upon has been taken out of 1.5, or at least appears to have no effect when used.) When that happens, our servers get out of sync and we had to write an entire new section of code to handle the fact that the servers regularly go away for minutes at a time. One solution, it turns out, is to load up the machine with 4 gigs of RAM, but we're hesitant to suggest this because even Oracle doesn't require 4 gigs of RAM to run. Another solution could be requiring multiple servers and failover setups... that would be awfully popular.
I agree that situations like this are rare, but they aren't unknown. If we had a choice, it's possible we would, in fact, redo this whole mess in Java Minus GC, despite the headaches. (Unlikely, but possible. I sure know a lot of our customers would like us to.)
-fred
Sign #11 of Slashdot overdose: You see the phrase 'moderate Republican' and you wonder if that would be a +1 or a -1.
I'd say Steve Jobs has certainly proved his geek cred by posting on this topic during Christmas day.
I'm so not there. Seriously, any time I'm given but one option I'm upset. One API, ok. But one language, not me.
-Tim Louden
Sometimes I type my response above what went on before, but then I usually only include the previous email in the chain. Sometimes I don't even do that. Sometimes I intersperse my response with the original to indicate what part of the previous email I'm referring to.
... but talking to myself is more often than not, the only way for me to have an intelligent conversation.
I was an intern at Apple in 1997 when Steve came back. We all knew he would save the company and were happy when Amelio left.
.NET) to a text editor or emacs or some glorified-text-editor-IDE like CW or XCode. Nobody goes back. The productivity gains are not only real, they are also significant.
This was the time of Windows 95 vs OS 9, pre-OS X. What was a huge problem back then was the Not Invented Here syndrome, which sounds silly until you realize that this is bound to happen at a company like Apple. Apple has the brightest engineers and used to make the best software and hardware. Now, if you are the best, who is going to voluntarily run Windows 3.x (for example) just to keep on top of what's happening on the other side. So at Apple, Win95 was pretty unknown. NT - even more unknown. People had no idea why it was better than OS 9. All they could see was the uglier interface.
The exact same thing happens these days with XCode and Objective-C. Once upon a time, Objective-C and InterfaceBuilder and the predecessor to XCode were light-years ahead of the competition. They were literally about 10 years ahead in NeXT times. Like, two or three generations ahead. Nowadays, they are falling behind. but because no one at Apple even considers to use anything else, they still think they are the best. XCode developers think that XCode is way better than anything else out there, even though VS.NET, Eclipse, and IDEA for Java development are far better. XCode's latest improvement was auto-completion (that works)... Eclipse and IDEA meanwhile are working on ever more refined refactoring mechanisms that automate away days and weeks of development time.
As for Objective-C I don't know it well enough to make a judgement but the syntax is certainly extremely different from anything else. I don't want to lean it if it is just for the sake of writing proprietary OS X-only software.
But since Obj-C is already dynamic and can do "everything" a dynamic programming language can do, why not at least provide wrappers for Ruby and Python? Ruby wrappers should be totally simple to write, and then I could just use my favorite programming language to program my favorite OS. Ruby would really be a perfect fit for OS X - elegance from within.
Developer's ignorance plays a good part in this too. If XCode is better than the previous XCode and works for you, why should you use anything else. I actually run into this problem with colleagues who use CodeWarrior or some other abomination of an IDE, or who use no IDE at all and claim that that's better for them than learning an IDE. Yeah, right. I have not met anybody who wanted to switch back from a modern IDE (IDEA, Eclipse, VS
"The Objective-C libraries are heavily based on inheritance, but I've learned that "composition trumps inheritance" ... meaning that its better to combine many small focused objects. In Objective-C, you have a layer-cake approach, where each layer of inheritance mixes in a particular concern. This makes sense when you want to minimize the number of objects allocated, but in a GC language (Java, Ruby, etc.) you end up with better, more testable code when you let the GC do its thing.
"
One of the advantages of inheritance is the possability for imposing a consistent look, and or behaviour by placing it in the lower classes, and exceptions to those behaviours and looks, are higher up.
Interns get paid pretty well to do a lot of real work. We don't have time to answer Steve's e-mail when we have products to ship. (If you're looking for a tech internship and like working on real products, Apple's the place.)
This is not a balanced thread. Without clicking to see any of the hidden responses, I didn't see any comments that disagreed with Steve Jobs. Please mod up some comments that agreed with Nitesh Dhanjani to give us a more informative conversation.
Sure there are nice things in C#, Python and Java. But overall Objective-C is currently by far the best compromise. It is C + a great object model and syntax, and its Cocoa companion is just wonderful. I'm glad Apple adopted it as their primary language for Mac OS X. Frankly, with things like C#, Python, Ruby or Java we would never be able to develop the applications we have on OS X. Maybe it will be possible in 5 year, or 10 years from now; who knows ? But currently Objective-C and Cocoa are, on the whole, a lot more up to the task. And Objective-C is evolving : a new exception model, a new thread synchronization model, and in Leopard we are going to finally get a real garbage collector. Cocoa also is evolving, and it does so at an incredible peace. Think about Core Data, Core Image, bindings etc.
Assuming you are programming on a regular basis the first one is consise and to the point. Assuming you are a newbie programming for the first time the second syntax is a nice... i dont know... guide. If you are programming on a regular basis you SHOULD know your functions. The additional information presented requires me to type more and isn't necessary. How hard is it to grep the header file for the declaration if you forget?
-everphilski-
...you can use whatever language you want so long as the language has exactly the same features as C#...
.NET has the same "features" if you're referring to the fact that they all have access to the .NET standard assemblies + Windows API, etc and that they are all (obstensibly) Turing complete. However, if you want an example of a language that allows one to think about a problem differently AND executes under the .NET CLR, then take a look around. You will find some premium examples like Eiffel.NET (which DOES actually support MI under the CLR; yes they had to put in a hack for it), COBOL.NET (yes, it actually works and customers pay us to use it), and some niche examples like F# (ML dialect). Let's not forget that VS.NET comes with C++, C, C# (don't forget managed AND unmanaged code for this), VB.NET, and J# (Java) right out of the box. I've also seen LISP for the CLR and there's probably others.
.NET is silly seems rather silly in itself. If it's not important to you fine, but the fact that you're happy with Obj-C + Cocoa doesn't mean that .NET or GC sucks. And by the way, there are a great many hackers out there who are quite happy with hacking on OS X using not Obj-C (gasp!) but Ruby instead. You should check in with them, they might just open your mind.
.NET is that it's propagates a software monoculture; you can only deploy to Windows with it. Now THAT'S a legitimate complaint. But you probably realized the futility of complaining about that being a Obj-C/Cocoa developer eh?
Umm.... bzzzzt! Wrong answer contestant!
Really, do you know what you're talking about? Every language in
Now, your assertion that language choice under
Or not. It's your loss then.
The ONLY major complaint I have about
Please mod this post only if you think others should/n't read this. I have enough ego^H^H^Hkarma. Thanks!
That clearly depends on your definition of "perfectly good."
We're now at several iterations later (Proj Builder -> Xcode -> several revisions of Xcode) and Xcode, though it is vastly improved, still suffers substantially in head-to-head comparisons with Codewarrior (let alone Visual Studio) for products of substance (it can't even reliably figure out whether a subproject needs rebuilding unless you're forcing all your projects on a given box to build into the same directory). There are many of us moving to Xcode now because we *have to*, but I assure you, we ain't all liking it.
That being said, MW/Freescale certainly wasn't selling Codewarrior. An embedded CPU manufacturer needs a quality development environment to go along with their chipsets.
Confirmed, that's in the manpage on 10.4.3:
// assignments to 'p' will have interceptor calls // assignments to 'q' ordinarly will not
... // this assignment will call an interceptor
// assignments to 'q' will not have interceptor calls // assignments to 'p' will have interceptor calls
... // suppress interceptor call for this assignment
-fobjc-gc
Enable garbage collection (GC) for Objective-C objects. The
resulting binary can only be used on Mac OS X 10.5 (Leopard) and
later systems, due to additional functionality needed in the (NeXT)
Objective-C runtime.
When the -fobjc-gc switch is specified, the compiler will replace
assignments to instance variables (ivars) and to certain kinds of
pointers to Objective-C object instances with calls to interceptor
functions provided by the runtime garbage collector. Two type
qualifiers, "__strong" and "__weak", also become available. The
"__strong" qualifier may be used to indicate that assignments to
variables of this type should generate a GC interceptor call, e.g.:
__strong void *p;
int *q;
(__strong int *)q = 0;
Conversely, the "__weak" type qualifier may be used to suppress
interceptor call generation:
__weak id q;
id p;
(__weak id)p = 0;
So many advocates of Java seem to miss this little detail- because they're tickled to not having to deal with the memory allocation, they think it's special and everyone should be using it. (Uh, BASIC had this... You'd think BASIC would have taken off more than it had if this was a useful thing for anything other than end-user application development...)
It amazes me how many people just don't "get it" with regards to this stuff- it's almost like they're not really teaching CS anymore. This is basic CS stuff and it seems to elude them.
I am not merely a "consumer" or a "taxpayer". I am a Citizen of the State of Texas
You're typing on a computer on Slashdot instead of sucking dicks in a slum in India.
Of course luck and circumstance are limiting factors on some people's lives. However for any given success story there is a pool of people with equivalent initial conditions. Plenty of people in the U.S. dropped out of college and messed around with computers with their friends in the 70's. Only a couple of them are running 30-year-old multi-national, multi-billion-dollar computer companies today.
There's more to life than what falls in your lap.
Build a man a fire, he's warm for one night. Set him on fire, and he's warm for the rest of his life.
Just that Java doesn't have much relevance to desktop applications, while .NET is the successor to technologies that currently dominate that market (VB, MFC, etc).
A subtle distinction there; VM/MFC are technologies that sit on top of an OS that dominates the market. On other platforms they have gained very little traction; even workalikes have not really caught on.
It's true that Apple is culling Java support; at least in terms of cocoa integration. They however continue to support Java itself fairly well. It's true they lag a bit on versions but now that JDK 1.5 is out (whch was a large amount of work) I think they'll keep closer abreast.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
in all of this discussion of languages, nobody has discussed IMO the most important aspect of a programming language: the economics of using it. Anyway, this whole thread smacks of religous defense of what you know and love, not object dicussion of pros/cons. .Net is not faster than C++ is the same way that C++ is slower than assembly. The more you abstract a language, the slower it becomes. When you build a house, you choose a hammer to put in nails, not a tape measure. The same goes for development - choose the right tool for the job. Duh!
While I wouldn't recommend .Net for doing performance-intensive simulations, I would recommend it for just about anything else if I'm actually paying developers - hell, developers are *expensive*.
This comment is my opinion and does not represent an official position of Donald Trump or others I do not work for
On comparing Obj-C to VisualStudio.NET
.Net also relies heavily on a wide set of frameworks (just like Java).
.Net usually means you are using Visual Studio - in fact almost exclusively
Did you just compare a language and framework to an IDE? How can that make sense?
That made a lot of sense to me...
Unlike Java, using
. While you can also do standalone work, the simple fact is no-one (and the people that do are the rounding error by 0.0) does that. They not only use the frameworks but the IDE that makes the frameworks usable. Since there is a monoculture (ha!) of language and IDE, slowly the two become inseparable as instead of thinking through API's the API developers can rely on tools to make a kludgey API usable.
So to me I understood exactly what was meant by comparing a language and framework to an IDE that is realistically just the the two combined.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
The whole point of private stuff is so that a programmer cannot "see" by API a call or variable you'd rather them not accessing. It's not meant to really be a security measure as much as keeping some things aside you'd like to be able to change later wihtout breaking other programs.
So the ability for someone to call one if they like - to me that is just flexibility, and can be of use. In the parent post it was mentioned that you could call into a third party private method (horror!). Well you can in fact even OVERRIDE a third-party private method, which can be handy. Yes to use it breaks encapsulation, but if done carefully can provide good benefit without very much danger and enables uses of third party libraries that might not have been thought of or possible otherwise.
Java reflection was lauded when it added the ability to introspect private members. Again the ability to access private data is not a flaw, as long as you have some means to hide the API for it so people will not accidentally make use of it.
I think it's funny that people cannot see beyond the working of current popular languages to other practical ways of programming. Were COBOL programmers proclaiming the same kinds of things 20 years ago, and calling C users apologists for not having overly wordy syntax?
"There is more worth loving than we have strength to love." - Brian Jay Stanley
First, as somewhat of an amateur PC historian, I can tell you that Jobs was never much of a programmer - if he ever was. I believe he did have a stint at Atari during the early 70s (during the Nolan Bushnell "let's hire every hippy off the streets of San Francisco" phase), but I doubt he was doing any circuit design heavy-lifting for those mostly hardware machines back then. And I've never heard any source say that he ever had his hands directly on any hardware/software engineering on anything coming from Apple. But he's been around it for a long time and so knows quite a bit about it. My old boss, president of the company, and head sales dude didn't program but had heavy technical knowledge - you could have a good technical conversation with him. So he doesn't have to be in the trenches to know some things.
.NET, but I think it would be great for more development choice on all platforms. GNUStep has always felt not quite there for me on windows and unix. But I've always heard good things about Objective-C, and there are benefits to having a highly dynamic language environment with the ability to drop down to C for some things. High quality Ruby bindings for Apple's frameworks would be really nice too.
But on to the main point, I thought i had heard a rumor of Apple porting their framework to other platforms not too long ago. Maybe I'm mistaken. I like C# and
Steve Jobs' hubris. The idea that objective C is perfect is laughable. Some developers may have considered it (mostly in arrogance) "ahead of it's time", I would have considered it's development "timely and innovative". Being first to the market with an innovative new improvement is not "ahead" of time, it's "first to market" which is ideal timing, if you ask anyone on wall street. The idea that their products are "ahead of time" and "perfect" is what allows their products to loose innovation while others are improving off their innovation and gaining steam while their "perfect" products stagnate, apparently "waiting for their time to come". If Apple had any sense, are were the "renegades" and "pirates" of programming that they think they are, they would at least have a small division programming for windows, using windows tools. "Know thy enemy" would be my mantra, not "blow thy own horn". Apple's criticisms of Windows and windows tools show a profound knowledge of generalizations and stereotypes, all of which are laughable in the face of actual experience. I'm anxiously looking forward to Apple adopting support for the Intel chipset to start seeing apple to apple comaprisons of windows vs macintosh. I said back in 4Q 2004 when Apple financials reported that a majority of it's income was from Ipod instead of PC sales that the end of Apple's RISC chipset was to happen in the next 3 years, and it looks like that premonition might soon come true. Given the end of the chipset, I wonder how much staying power the Operating System will have head to head against the competition of Windows vs Linux?
Any fool can criticise, condemn, and complain, and most fools do. - Benjamin Franklin
You have no clue of what you're talking about. Nobody is forcing you to use Visual Studio. Maybe because it's a productive environment, most people. Most Mono development is not done using an IDE.
.Net. If you're doing Mono yes you're not using Visual Studio, but just about every single person doing pure .Net development is using the IDE to take full advantage of webforms and the like. I didn't say you couldn't do it, I said most people are not chosing to do so ad that remains true (especially in corperate environs).
As I said the number of people doing Mono development is a rounding error compared to the people using VS and
You may think you knwo what is possible but you don't seem to understand what people are actually doing in the real world.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
I've never been a big fan of Jobs, but I had no idea he was so hard up for friends that he had to exchange email with himself. I almost feel sorry for the prick.
The Objective-C libraries are heavily based on inheritance, but I've learned that "composition trumps inheritance" ... meaning that its better to combine many small focused objects.
Dude, you're high. By "Objective-C libraries" I assume you mean the Cocoa framework? Cocoa encourages minimal subclassing. It does do it when there's a legitimate tree of derived types (for example, on-screen controls), but composition and categories are far more common.
- Scott
Scott Stevenson
Tree House Ideas
Yeah, I know about OpenDylan, but it really sucks that Apple chose Objective-C (mostly because of NeXT) instead of using the work they had done with Dylan. Dylan is a much more powerful language than Objective-C will ever. Seriously, check it out. It's compiled, but has 95% of the power of Lisp (CLOS-like object system and Macros). Too bad that the Functional Developer IDE doesn't get some love, but I still love the language (even if its a little verbose for my tastes).
While I loved the CW IDE as much as anyone, it wasn't maintained properly. Featurewise it hasn't advanced significantly in ages, and the release schedule slowed WAY down (remember the quarterly updates? Yeah, me neither).
As for Apple's direction, you're spouting a complete load of bullshit. It was:
Copland (no "e", thank you), OpenDoc. OpenDoc was killed off by lack of support and poor implementation. Copland was almost a complete disaster. Ultimately, a lot of the technology and API's (Open Transport, Appearance Manager, etc) made their way into the classic Mac OS.
Then came Rhapsody, which was essentially ObjC and Cocoa (only back then it was called "Yellow Box" - same API's). Those who had enormous code investments in CodeWarrior/Carbon didn't care to throw out all of their code (Adobe, Macromedia, Microsoft) and threatened to dump the Mac entirely. In 1998, that would have been the death knell. Hell, today it wouldn't be good either, but a lot less realistic given the different environment we're in today.
So, Apple created Carbon for porting over existing code, but has always emphasized Cocoa/ObjC as the preferred way of doing things. Architecturally, it makes sense, since OS X's roots are primarily NeXTstep. It makes even more sense now that we're changing platform architectures - NeXT/Cocoa has been through that before.
So to sum up, things were in a tizzy PRIOR to Steve's return - OpenDoc! Copland! PowerTalk! QuickDraw GX! A lot of people jumped ship - that was 1995-1997 when adjectives like "beleagured" described Apple all the time. After Steve, it's been one simple message - focus on Cocoa/ObjC. Use Carbon if you must, but otherwise use Cocoa/ObjC.
To bring things back on topic, I also wish there was a decent way to take advantage of the Cocoa API without ObjC. I love the object oriented API, but I HATE the ObjC syntax (as many have mentioned, the method-calling syntax is bizarre). As a result, I quit developing for the Mac some years ago. Can someone tell me why the same language couldn't be implemented with a more "familiar" syntax using parens, etc? It seems all you'd have to do is change the front-end parser and tokenizer, and everything else would just work.
I don't know what kind of crack I was on, but I suspect it was decaf.
I don't exactly know why, but Objective C just keeps reminding me of COBOL. Maybe it's just a revulsion to the ugly syntax...
It's especially gross that the syntax for the first parameter for method calls is different than all the other parameters.
Note that I said "parameter" and "method call" here, and don't say anything about "message passing" -- messages go one way and don't come back. A real message system doesn't have return values and doesn't wait....
Still is is impressive what they have managed build on top of such crude tool.
An engineer who ran for Congress. http://herbrobinson.us
I have been using Cocoa with Obj-C for a while now, had to switch over from Carbon due to lack of new additions in the Carbon front. I feel quite fustrated due to the lack of C++ support from Apple. Obj-C++ is there but its treated like a distant cousin. I wold like to introduce Macs to my work environment, we need high performance computing all the way. But the lack of a proper high performace language is a real show stoper for me. Am I missing the something here? I would like hear what others have to say about this.
The Common Lisp "image" idea doesn't bother you?
-rozzin.
Apple's choice of Objective C as the primary API language of Cocoa is the only thing that keeps me personally from making Mac OS X my primary development platform of choice.
Really, do you know what you're talking about? Every language in .NET has the same "features" if you're referring to the fact that they all have access to the .NET standard assemblies + Windows API, etc and that they are all (obstensibly) Turing complete.
.NET for commercial applications are absolutely miniscule.
Err, the point is that common language interoperability is based on a certain subset of language features that tend to be limited by C#'s features, which seems to be where Microsoft's mroe innovative language features are showing up.
You can absolutely use COBOL or Eiffel or whatnot, but the language constructs for talking across assemblies are limited in expressiveness based on the CLI spec. I generally think this tends to be "enough" for most practical purposes.
The other thing to note is the number of customers actually using COBOL or Eiffel on
-Stu
Generally I've found that you can tune the Sun Hotspot VM's generations to minimize pause times, though this requires a GC analyzer to determine what's taking so long. Ensuring objects stay in the eden generation, for example, ensures they get the faster parallel garbage collector -- the "stop the world" collector only runs on older generations. I've run heaps with a couple of gigs of RAM and it's pretty rare to see it pause for several minutes -- a few seconds, sure, but that depends on the application.
Another thought, have you tried BEA JRockit? It has both a concurrent generational and parallel garbage collector which you can swap at runtime, and also has a dynamic GC setting to optimize for "minimal pause times" (-Xgcprio:pausetime).
Unfortunately, it's only on x86, EM64T, AMD64, and Itanium for now (Windows + Linux), but a Solaris AMD64 and SPARC version is due in the coming weeks. It's free for general use, but requries a license if you want to use the management features / GUIs.
-Stu
Did I say bloated? No I did not.
.Net development, and lviing in a wierd fanatasy land where SharpDevelop is used by more that .0000000000000001% of developers. Give it up man and admit the truth.
Yes the compiler and libraries are not tied to VS.Net at all. WHich makes it even more interesting that so many PEOPLE tie themselves to VS.NET when, in theory, they would not have to. I'll repeat again; I'm only saying what people ACTUALLY do, not what it is possible to do.
You are totally ignoring what people actually do in the real world of
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Learning to program. How many programmers got the programming bug from playing on their Apple ]['s or Apple ][e's? Why was it really great about it? Well, after getting my computer when I was 14 I spent a few hours that Saturday morning reading the documentation and by that evening was creating lo-res graphics. By about the middle of the night hi-res graphics. It used to be really easy to sit down and learn to program.
The only problem I find with Objective-C is that I can't imagine a 14 year old getting his first computer and just writing graphic programs off the cuff. Maybe the age of the kid should be younger but other than playing on the web what is there to teach kids how to program anymore if not just for the machine.
Where is Apple Basic of the Mac? And why isn't it bundled? What happened to hobbyists did they all become rich and stop caring?
Save Pangaea!! Stop Continental Drift!!
Right, but one of the main properties of .NET is that it puts some distance between the applicaiton runtime and the OS. A C# application would be much more portable to OSX/Cocoa than a Win32 app is ... if Apple provided a runtime.
.NET API, which is large just like Java is.
.Net API on OS X. And as the story shows Jobs (and thus Apple) doesn't find it a worthwhile effort. I can't really blame Apple considering how productive Objective-C and Cocoa are today. Coming from a long, long history of Java development I agree with his assesment and I don't think developers would really be that much better served by moving from Objective-C to a Java like language as the primary support language.
.Net to OS X. They may do so after Vista is out, when OS X and Windows will share a similar set of underlying features that would be interesting to expose through new .Net API's.
Yes, in theory C# is like Java in that way.
In reality though it's not really on other platforms to any real extent (though I know Mono is trying, and in fact even ported to OS X). The problem is in the range of supporting libraries that need to be written to support the full
There's a reason why the Apple version of JDK 1.5 lagged a year behind the Sun release. A similar, if not greater degree of effort would be required to write all of the libraries to fully implement the
It will be interesting to see if Microsoft does end up porting
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Objective C for mac is analogous to C for linux and C++ for windows. It's the base, the language of the underlying OS and core libraries. When looking at it that way, macs absolutely and completely blow both windows and linux out of the water as development environments.
Not good enough for you? That's okay. It's not good enough for me either. macs ship with about the same set of alternative dev environments as linux - PHP, Python, Java (which is particularly well integrated - swing actually looks palatable on a mac), perl, and undoubtedly a bunch of others are installed by default, and no one is stopping you from adding eclipse or other alternative dev environments on your mac.
Exactly as it works on linux and windows, incidentally - except of course that neither linux or windows guaranteed ships with python, perl, PHP, and especially java, so releasing your software in such a language doesn't work when offering it to Joe Q. Average out there. No one wants to download 40MBs worth of a JRE first.
Can it be 'better'? Possibly. But looking at the big picture, I'm jobs on this one.
Nexttime Bill says "C# is great" or John says "Java is King" I'll be the first to submit the news Bill/John says C#/Java is PERFECT.
Yes Diebold is being vigourously challened
The problem is that they are being primarily deployed in red states where the powers that be have defined the law to support Diebold machines.
With the Diebold machines in place, what are the odds that the laws are going to change anytime soon???
BTW, the statistics are showing that the electronic voting machines are the ones that differ significantly from exit polling. Traditional vote counting methodology seems to agree. Hmmmmm......
Like Uncle Joe Stalin used to say, it's not who does the voting, it's who does the counting!!!!
-------- -------- Support Wesley Clark for president!!!
Garbage collection is for programmers too lazy or sloppy to implement an allocation and deallocation policy, and stick to it. Regardless of how fast hardware is these days, having something pour over memory allocation, determine unused blocks, purge them, compress existing blocks, fix up the pointers referring to those moved blocks, etc, is just eating up processor time. How much freaking difficulty is it to periodically run a profiler on one's application during development, and see if any leaks are occurring? Why introduce additional overhead of an all-the-time garbage collector, when this stuff can be found during development time and eliminated? I have written several very large commercial software applications for well-known companies, and we don't lament not having a garbage collector. We model our data, and we model the life-cycle of our objects and data, and knowing that we will sometimes frack-up, we profile our code and see if anything is being left behind.
Raskin was a bitter man. He is hardly the father of the final form of the Macintosh. Jobs never claimed that the Mac was developed by college drop-outs. The Apple I WAS developed by college drop outs.
"...I think Apple really needs to come up with a language that doesn't require memory management"
That would be Smalltalk, then.
He saw it at PARC, and completely missed the significance.
[sigh] The opportunity is already missed....
I added a few of my thoughts on my blog:
http://tirania.org/blog/archive/2005/Dec-28.html
I've also noticed people praising .NET for having a choice of languages. Excuse me? All of the CLR languages offer the same bloody features as C#, so what is the point of using any of the other languages other than familiarity? Using .NET can be quite limiting in actual use.
The suggestion that Cocoa can only be programmed against with Objective C is a myth. There are numerous languages that you can use and you can also mix Cocoa and regular C/C++/Python/Ruby etc... within your application. Numerous open source ports are examples of standard C code being called by Objective C interface code.
With the majority of cross-platform software, you can get away with using very little Cocoa in you application if you program your engine code separate from your UI and OS specific code.
Jesus was a compassionate social conservative who called individuals to sin no more.
How's that Poser-killer of yours doing, eh?
"Made up/misattributed quote that makes me look smart. I am on
Azerus is one of the leading BitTorrent clients, and is written in Java, which I think is an odd language for an I/O intensive task, but it sure is popular.
FYI, Java is not a language of choice for me, the only thing I've ever done was a ssh (v1) implementation while learning Java, and a little smart card work. It's not a bad language, but when I use it I miss C++'s STL, and when I use C++ boost::shared_ptr and week_ptr (now tr1::shared_ptr) are enough for me to not miss Java's GC.
Azerus is one of the leading BitTorrent clients, and is written in Java, which I think is an odd language for an I/O intensive task, but it sure is popular.
.5 seconds?
Actually I/O intensive applications like a BitTorrent client are really good places to use Java.
1. Since the application gets started up very rarely (once per login session, probably), the overhead involved with launching the JVM and JITting all the code isn't as noticeable/objectionable. If you're going to be downloading stuff for hours, do you care if the application starts in 5 seconds or
2. Since the application is I/O bound, and does minimal processing on the data it handles, it doesn't matter that Java execution speed is slow - all of the I/O happens in native libraries (or directly in the OS), anyway.
On the other hand, an application like Photoshop really would be a bad candidate for Java (because the performance is almost all CPU-limited), as would the various little server processes and command-line tools on UNIX systems (since they start and stop a lot).
Hmmm, maybe I got it confused with C++'s iostream vs. C's stdio (iostreams are at a disadvantage since they have to sync with stdio...or at least they use to be, maybe there is an option to turn that off now).
Stop suckin Jobs' dick you asswipe
Are you actually suggesting that the VM is writing memory pages to swap disk? Egad. I've not heard this as a problem with the parallel collector; typically I lock the VM to shared memory (on UNIX platforms) to ensure it won't actually hit the swap...
As for the BEA JRockit license, good point -- you sound like an ISV, thus there probably would need to be some sort of arrangement with BEA on it.
-Stu