Book sales mark shift toward Mac, iPhone development

124»

Comments

  • Reply 61 of 77
    Quote:
    Originally Posted by melgross View Post


    I'm not sure I understand. Does Apple function in a vacuum, or are they compared to other firms all over, all of the time?



    As they are, shouldn't that be mentioned here as well?



    Don't you think that all the other websites already do that job perfectly well?

    I don't see why you guys need to do that too.



    I guess that what I'm saying is that (and I admit that this could just be me) I really couldn't care about any of that "stuff". I certainly don't care about well the Zune is doing!



    If I want to read about the Zune I'll go to engadget or wherever.
  • Reply 62 of 77
    melgrossmelgross Posts: 33,510member
    Quote:
    Originally Posted by badNameErr View Post


    Don't you think that all the other websites already do that job perfectly well?

    I don't see why you guys need to do that too.



    I guess that what I'm saying is that (and I admit that this could just be me) I really couldn't care about any of that "stuff". I certainly don't care about well the Zune is doing!



    If I want to read about the Zune I'll go to engadget or wherever.



    So, other websites shouldn't mention Apple because it's done here, Macworld, MacLife etc?



    Linux should only be mentioned on Linux sites. Windows only on Windows sites, etc?



    You know that it's what you're saying.
  • Reply 63 of 77
    jfanningjfanning Posts: 3,398member
    Quote:
    Originally Posted by melgross View Post


    Not all the time. I'm also not the only one saying this you know.



    The data has value. Retail sales of these books are skewing that way. That is important. Do you think that if retail book sales on various Apple programming needs are soaring, that the 50% not stated in this survey are moving the other way?



    Are you saying that you think that could be the case? Why would that be the case?



    There are courses on iPhone/Touch programming being given at various colleges now that weren't being given before. There are new textbooks on the subject out. There are more developers than ever before on the Apple platforms.



    You say that that doesn't matter, and isn't an indication that even the unknown, in this survey, books sales numbers might not be rising?



    Even if they held steady, then overall, Mac books on programming would be rising in sales.



    None of this is logical to you? All you want to do is to say that the other 50% isn't known so it may be very bad? Because that's how what you are saying reads.



    ok, the population of the USA, and Europe are roughly the same.



    Lets take the sales of iPhones compared to other devices from Europe and defer the US sales from that.
  • Reply 64 of 77
    javacowboyjavacowboy Posts: 864member
    Thanks for the detailed post. I'm still digesting it and will have to read it several times to process it. Still, this is the thing I love about mature discussion. There's the opportunity to learn a lot from people with different perspectives.



    There's one point I want to make about language support, though. Programming languages evolve constantly, but there are times when a language can't evolve further. This happened with languages such as C and COBOL, and it's happening with Java. The problem with Java in particular is that it's so widely deployed, and so many enterprise applications depend on it. Backwards compatibility is as important in Java as it is in Windows, perhaps more so. That is to say that if the Java language were to add support for closures in Java 7, it would involve significant changes to javac and an ungodly amount of testing to ensure that the compiler was fully backwards compatible. After some bad experiences with the language changes in Java 5, including some silly comprises made with such features as generics and autoboxing, Sun decided that the Java language has only so much room to evolve and decided to support alternative languages within the JVM.



    New languages like Groovy, Scala and JavaFX make up for many shortcomings in the Java language. Once Objective-C/Cocoa apps are more widely deployed, backwards compatibility will become an issue and the language will eventually stagnate. Also, developer adoption is key. If aspiring Cocoa developers for whatever reason find Objective-C distasteful, but prefer Scala (random example), then Apple would be well served to make a framework that supports alternative languages.



    Quote:
    Originally Posted by Synotic View Post


    JavaCowboy? You've asked a lot of good questions, and generally seem to be more curious than attacking, which I respect. A few comments...



  • Reply 65 of 77
    vineavinea Posts: 5,585member
    Quote:
    Originally Posted by Synotic View Post


    I'd find this disappointing, although I don't disagree that it's true, or that it's the direction that things are going.



    From what I've seen (and I'm biased), most of the crowd that "learns" from scraps of advice on blogs and reading a few overviews tend to only create what you can find on tutorials. The crazy people, the ones who are actually out there making all the tools we're using (engineers at Apple, Facebook, Google, etc...) however didn't learn this way.



    Eh? The blogs, code fragments and tutorials are all starting point. You learn to code by...coding. Trying things out. Figuring out what works and what doesn't. Figuring out how something works.



    The crazy prople are the ones coding, not reading books.



    Quote:

    They either started programming when it was simpler and kept up, or learned through books and school.



    Coding has gotten simpler. This is why we can do more than before. But I agree to a point. You need to know the foundational elements and school is a good place to learn that stuff. Data structures, algorithms, fundamentals of languages, compilers and OS. That puts a lot of things in a solid context.



    Not that you can't learn these things outside of school but school provides a good framework of what to learn in what order.



    Quote:

    I don't think this is the only approach, but when you're doing things like multithreaded programming, networking (like creating Facebook chat which scales to however millions of users they have) a tutorial or two on the web isn't going to cut it.



    The principles of programming you learn from a textbook and school. These foundational elements haven't changed as much as been added to. However, scalability is not something often taught as much as apprenticed. Yes, there are fundamental principles you can apply but a lot of the nuts and bolts of building hugely scalable systems is learned via screwing it up a couple times in the past or learning from someone who's screwed it a couple times in the past. Or reading from a blog about how someone else did it after screwing it up a couple times.



    If I had to build a really scalable chat I'd start with XMPP and work from there. Where'd I learn that? Off the internet then working with XMPP for a while.



    Quote:

    Also I think it's important to clarify that a book isn't necessarily something you have to hold in your hand. I admittedly haven't bought as many physical computer books lately, but rather do most of my reading on a Safari Books subscription. I do think that the era of the physical book is over.



    The problem with books is that it takes time to write and often by the time it gets published the APIs have changed or will change within a couple months.
  • Reply 66 of 77
    timgriff84timgriff84 Posts: 912member
    Quote:
    Originally Posted by Synotic View Post


    I'd find this disappointing, although I don't disagree that it's true, or that it's the direction that things are going.



    From what I've seen (and I'm biased), most of the crowd that "learns" from scraps of advice on blogs and reading a few overviews tend to only create what you can find on tutorials. The crazy people, the ones who are actually out there making all the tools we're using (engineers at Apple, Facebook, Google, etc...) however didn't learn this way. They either started programming when it was simpler and kept up, or learned through books and school. I don't think this is the only approach, but when you're doing things like multithreaded programming, networking (like creating Facebook chat which scales to however millions of users they have) a tutorial or two on the web isn't going to cut it.



    I agree and also strongly disagree. I went to Uni to learn programming and it gave me a good base understanding as well as good architecture knowledge. However anything I learnt about actual languages is irrelevant as the programming world moves to fast.



    As someone else has already mentioned blog's and videos are often just a starting point which your going to build and experiment from. Not to mention the greatest resource of all (at least for Microsoft developers) the MSDN Library. No book is ever going to come close to the amount of information in there. For a really serious developer thats experimenting, creating something new rather than following a guide in a book or a blog, having an on-line library off all the functions and class's is unbeatable.



    Keeping up with programming I think is also only possible through blogs and other internet resources. Microsoft release blog posts all the time and beta's of all the new bits of functionality there working on, in many case's even video tutorials have been released before the products even been released. No book is ever going to keep you up to date in that way as it will have a 6-12 month delay waiting for the product to actually come out and then someone use it to a good enough extent that a book could be written, and then actually write the book.
  • Reply 67 of 77
    melgrossmelgross Posts: 33,510member
    Quote:
    Originally Posted by jfanning View Post


    ok, the population of the USA, and Europe are roughly the same.



    Lets take the sales of iPhones compared to other devices from Europe and defer the US sales from that.



    Ok. Sales in those other countries of Apple's phones and computers are rising as well.
  • Reply 68 of 77
    jfanningjfanning Posts: 3,398member
    Quote:
    Originally Posted by melgross View Post


    Ok. Sales in those other countries of Apple's phones and computers are rising as well.



    But they have sold sfa using your theory
  • Reply 69 of 77
    melgrossmelgross Posts: 33,510member
    Quote:
    Originally Posted by jfanning View Post


    But they have sold sfa using your theory



    Excuse me? sfa?
  • Reply 70 of 77
    jfanningjfanning Posts: 3,398member
    Quote:
    Originally Posted by melgross View Post


    Excuse me? sfa?



    opps, sorry I thought that saying was more widely known...



    Sweet f**k all
  • Reply 71 of 77
    Quote:
    Originally Posted by melgross View Post


    So, other websites shouldn't mention Apple because it's done here, Macworld, MacLife etc?



    Linux should only be mentioned on Linux sites. Windows only on Windows sites, etc?



    You know that it's what you're saying.



    Now you know it isn't.



    But whatever happened to the idea of specialized reporting?

    I can understand why AI wants to expand it's market - but I think it just dilutes the appeal of the site. You become like everybody else - so what's the point?



    Anyway, somehow I don't think I'm going to convince you!

    But I'll keep reading. I'm a fan.



    (But if you start posting articles about Oracle's financial results I'll really complain!)
  • Reply 72 of 77
    melgrossmelgross Posts: 33,510member
    Quote:
    Originally Posted by jfanning View Post


    opps, sorry I thought that saying was more widely known...



    Sweet f**k all



    I don't use those words as much as you might.



    But we're talking about TRENDS.



    Apple only has small marketshare in computers here as well, but not quite twice as large as they have in the rest of the world.



    But the amount of books sold at retail are now more than half, I think the article says. That means that a lot of people are interested in programming for them. Likely, many of these people already program for Windows machines and other OS's.
  • Reply 73 of 77
    melgrossmelgross Posts: 33,510member
    Quote:
    Originally Posted by badNameErr View Post


    Now you know it isn't.



    But whatever happened to the idea of specialized reporting?

    I can understand why AI wants to expand it's market - but I think it just dilutes the appeal of the site. You become like everybody else - so what's the point?



    Anyway, somehow I don't think I'm going to convince you!

    But I'll keep reading. I'm a fan.



    (But if you start posting articles about Oracle's financial results I'll really complain!)



    You know, we have 63,000 members. Those numbers are increasing.
  • Reply 74 of 77
    Quote:
    Originally Posted by Synotic View Post


    JavaCowboy? You've asked a lot of good questions, and generally seem to be more curious than attacking, which I respect. A few comments...



    I suspect you're referring to fact that Objective-C uses message passing with named parameters, rather than method calls. So instead of something like this:
    Code:


    firstHeader.style("red", 32, true, false);



    In Objective-C you'd have something like this:
    Code:


    [firstHeader styleWithColor:@"red", fontSize:32, bold:YES, italics:NO];



    Admittedly the brackets everywhere and the at signs can be a little disconcerting at first, but what I've always found a little interesting is that this really isn't different from say how jQuery specifies parameters or how Wordpress uses query strings in their internal functions. A few examples:



    JavaScript
    Code:


    $("#firstHeader").css({'color' : 'yellow', font-size:32, 'font-weight' : 'bold', 'font-style' : 'italics'});



    PHP/Wordpress
    Code:


    style('firstHeder', 'color=yellow&fontSize=32&fontWeight=bold&fontStyl e=italics');



    Both of which are considered (again my biases are creeping in ) to be very enjoyable environments to code with/in. Neither JavaScript nor PHP have named parameters built-in, but the developers found it useful enough that they rolled the functionality themselves. Objective-C just has it built-in. Personally, it's one of my favorite parts about using Objective-C and jQuery. But I can understand that it's more difficult to type and can seem overly verbose. A few things make this less of an issue. The first is that Xcode's code sense is really, really good. Here's an example:







    I've typed about three characters, and it can already present possible alternatives. If it's not what I'm looking for, I can do control-period to cycle through the options, or hit escape to pull up a contextual menu of possible completions. Or I can keep typing whatever else I intended. The dashed line underneath lets me see where else in the code I've used that message call. But what's particularly awesome is that I don't have to hit tab and then fill in the fields. If you do control-/ (or control-shift-/) to go backwards you can cycle through the tokens and fill in the parameters. Another thing is that I typed the opening bracket but even that isn't necessary. As soon as you type the closing bracket, it'll close off the initial one for you. I end up typing far fewer characters and can actually understand and see what the parameters mean compared to when I'm working in something like Eclipse.



    Just out of curiosity, do you primarily backend Java development, servlets or GUI applications? I mostly do backend type stuff and servlets, so please excuse me if the GUI tools require significantly less code. From what I've found, however, that even for something like the Spring Framework which is meant to simplify development, there's still a lot of very painful boilerplate code required. For example, if you want to pass anything more than a string of data to template, you have to wrap it up in a model object, write its accessors methods, and then pass it to the template.



    Header files are an interesting case. They're present in all the C-based languages I'm familiar with (I'm not sure about C#), while Java is one of the few (compiled) languages that doesn't have them. The reason they exist is because in order for code to link against compiled libraries, it needs to know what variables and functions are available for it to link against, since all the actual code is in machine code. How does Java get around this? They link the filename to the class name (or interface or whatever). This actually isn't the worst idea (and is the de facto standard in Objective-C projects anyway), but it does have a few implications. One is that you can only have class or interface per file. This might not seem like a bad thing, but sometimes you need to create helper objects (like Iterators) or want to define an interface that objects in your collection class have to conform to. This actually isn't impossible in Java, but then you have to resort to inner classes, and because Java is strongly typed, you have to deal with properly typecasting things as necessary and properly initializing your inner classes. This can be painful.



    Again, this isn't an argument for header files, but as I mentioned Xcode helping with method names, Xcode also makes creating new classes painless. Your header files will be created for you and your implementation files will properly reference them. You can write the code yourself or have it create UIView, or UITableViewController subclasses with accompanying NIB files, if you want. I've found it to be incredibly helpful to be able to jump through different header files and get a sense of the overall class. It's a form of at-a-glance documentation that can be hard to get with Java without generating automatic documentation (which you can also do in Xcode and also view your custom documentation within its reference library).



    I think this question might be one due to unfamiliarity . Type-checking using proper types in Objective-C is de facto and expected. The only time that you don't specify an explicit type is with delegate objects (objects to which you can delegate responsibility) and for objects in collection classes. You're probably familiar with the delegate pattern, but as a simple example, you might need to do an asynchronous URL request in code. In Java, the typical pattern would be to subclass whatever class is available (something like URLConnection ? I'm not sure), and then override methods that deal with response and any other error conditions. Then you'd include this class you created in your main controller code, initialize it with your URL and you're done. In Objective-C you just initialize an NSURLConnection and set your controller as its delegate (something like urlConn.delegate = self). Then when the URL connection has either succeeded or failed, it will see if you respond to a particular selector (a fancy word for Objective-C's representation of message calls; you can make one like this: @selector(didReceiveURLResponse)), and if you do, send the message.



    This is why you don't specify an explicit type for delegate variables. But I can tell that checking if an object supports a message bothers you , so if you want you can also declare a protocol such as NSURLConnectionDelegate, with required methods, that your controller object conforms to (MyControllerClass <NSURLConnectionDelegate, SomeOtherDelegate>) and the compiler will tell you when you've sent a message that your object can't understand. And you don't have to check in code anymore. This is less common before, but it's used throughout UIKit.



    Finally, to answer a question you asked below, there's no need to "turn on type checking" or to fiddle with settings. It's built-in and at the heart of how all Objective-C programs are written. If your code tries to send a message to an object declared as the generic type (id), the compiler will throw a warning (unless it explicitly supports it using a protocol or checks if it responds to the selector as I mentioned above). Similar with collection classes, it's useful to say that your custom array classes hold "id"s. It's not necessary to declare an explicit data type since you're simply holding references to your objects, rather then manipulating them or sending messages to them. Since you're a Java programmer, I'm sure you're more than familiar with setting up generic types for your collection types, coercing them back to their proper types when you need to deal with them. In Objective-C, this is a lot less painful. The general reasoning behind Objective-C's type design is that it's strong where you need it and weak where you don't.



    I suspect you're right about the debugger. For the simple use cases that I use it for (setting breakpoints and analyzing variables, it works more than well for me), but I imagine it could be better. No promises, but I wouldn't be surprised if an upcoming version of Xcode had a fantastic new feature to let you debug your code . Check out more recent versions of Xcode. The code sense and code generation these days are very good.



    Projects at Apple aren't written without unit testing. OCUnit has been around since before Mac OS X and has been integrated into Xcode since 2005. Check out this post by Bill Bumgarner, one of the engineers at Apple that wrote Core Data.



    Option-double-click on any symbol or keyword in your app and it'll pull this up:







    Includes links to sample code, related documents, the header file, and a link to the full documentation. Also I've found Apple's programming guides to be excellent.



    See my examples above. I think it's worth the weirdness .



    Not disappoint you, but from what I've seen, I don't think that Apple is looking to push Python and Ruby for Mac or iPhone development. I think that you'll find, if you spend enough time with it, that the difficult part isn't the language (I actually find it to be one of the less important things; I just happen to like it), but rather the Cocoa framework. To be, as Aaron Hillegass calls it, a stylish Cocoa programmer is difficult. And the Ruby and Python projects are just Cocoa scripting bridges. You still have to learn Cocoa. The ability to use Python instead (with a performance hit) is mostly a comfort thing. I'm not knocking the projects. I had a lot of fun with AppleScript Studio back in the day, which is built on a similar premise, but it's not really appropriate for larger or complex projects.



    Also, I think that Apple has already increased developer adoption and it's already taken off. Its developer conference has sold out for the past few years and books about Objective-C programming have apparently gone up over 500% (!). Take a look at Objective-C again and I think you might be surprised. You do have to have to write a lot of classes in order to do what you want, but no more than Java. They, together, require a seemingly large amount of files because they're object-oriented and that's the Object-Oriented Way?. If you don't have a lot of objects (and are instead using things like switch statements and constants) you're probably doing something wrong. I've generally found that Cocoa rewards me in the cases that you abstract out your functionality and create additional classes. Java on the other hand, often requires you to create a separate class to do seemingly simple things. Which can be frustrating. I've already type far too much, but one last controversial example:



    Java:

    Code:


    public class ReverseString extends String {

    public String reverse(String blah) {

    // implementation

    }

    }



    Objective-C

    Code:




    @interface NSString (ReverseAdditions)

    - (NSString *) reverse;

    @end



    @implementation

    - (NSString *) reverse {

    // implementation

    }

    @end



    In Java, you whenever you want to use your new reverse string method, you have to create initialize a ReverseString and declare it as a ReverseString. But if the collection class you're passing your string to only accepts strings, then you have to cast it to a String to put it in the collection, and then cast it back when you reversed it because you remembered that it can be reversed. It's true that Java has strong typing, but when you're forced to cast constantly, the type information it enforces becomes less meaningful. In Objective-C you can just open up NSString, add in a reverse method, and all strings (even string literals) will have your additional method. You can do similar things with Ruby and JavaScript's prototype hook. Anyway, that all I have to say for now .



    --



    An update: JavaCowboy: It's true that Java did borrow from Smalltalk, but Objective-C, too (Java's interfaces were taken directly from Objective-C's protocols). Here's a good post by one of the designers of Java. An excerpt:



    A really long post that made me strain my eyes, but really useful too. Thanks!
  • Reply 75 of 77
    One thing I realized while Googling is that Objective-C does not have closures, and will only be getting them along with Snow Leopard. They'll be called "blocks":



    http://landonf.bikemonkey.org/2009/0...Phone.20090703



    Yeah, I know that Java doesn't have closures either (and won't have them in Java 7 either), but it strikes me as odd that a language where more flexibility is claimed than Java doesn't yet have a feature that languages such as Scala, Ruby, Perl and Python have had for years.



    With the addition of properties and garbage collection in Objective-C 2.0, is there any reason for the sudden push to add features to the language, and why NeXT and Apple didn't add more features to the language before?



    Just curious.



    Quote:
    Originally Posted by JavaCowboy View Post


    Thanks for the detailed post. I'm still digesting it and will have to read it several times to process it. Still, this is the thing I love about mature discussion. There's the opportunity to learn a lot from people with different perspectives.....



  • Reply 76 of 77
    Quote:
    Originally Posted by melgross View Post


    Some of the most popular articles on the webs two biggest PC sites, PCmag and PCWorld, are about Apple, Macs, iPods, and iPhones.



    While most of these are positive, some are negative. Should they stop their coverage?



    ARsTechnica, another big news/rumors/fan site has had extensive coverage of Apple going way back. Some of those articles are very critical, and over the years, though less so now, posters were vry Windows oriented, and very derisive about anything Apple.



    Anandtech, another mostly Windows tech site has expensive Apple coverage, which has increased over the years, particularly since Anand himself moved to a Mac laptop and Mac Pro as his own mainstay computers.



    Most of those sites are news and technology. Of those, only Ars is really a rumors site as well.



    But AI is a rumors site and a news site, and is unabashedly Apple based. What would you expect?



    If you want more objective news oriented information on a Mac site, then go to MacWorld instead.



    But do you really want that, or do you want to come here to complain about Windows coverage?



    I suspect the latter.



    Oh. MacRumors too.
  • Reply 77 of 77
    Quote:
    Originally Posted by badNameErr View Post


    Don't you think that all the other websites already do that job perfectly well?

    I don't see why you guys need to do that too.



    I guess that what I'm saying is that (and I admit that this could just be me) I really couldn't care about any of that "stuff". I certainly don't care about well the Zune is doing!



    If I want to read about the Zune I'll go to engadget or wherever.



    You wouldn't want to see Steve Ballmer on an Apple Rumor site.
Sign In or Register to comment.