4: The Bridges


00:00:00   By doing this podcast tonight, my wife asked me what I was going to do.

00:00:03   I said, well, I might be doing a podcast depending on what Marco--

00:00:07   his schedule or whatever.

00:00:08   But if not, I have a blog post I want to do.

00:00:10   Because since Dan Frakes' thing about the Mac Mini thing,

00:00:15   I'm like, all right, I have this week's blog post.

00:00:18   I need to write that.

00:00:19   And I still haven't had a chance to do it.

00:00:21   I wrote two or three paragraphs of it while taking my son to swim lessons

00:00:25   today while he was in the swimming pool.

00:00:27   I actually wrote it on my iPad.

00:00:28   I was inspired by Jason Snell to do that.

00:00:30   It actually wasn't that awful.

00:00:32   But anyway, I came back here, and I started writing again, and then I saw your email.

00:00:37   Podcasts tonight--so you are thwarting me from posting to my blog by continually--like,

00:00:40   last night I had a podcast, couldn't blog about it.

00:00:43   Tonight I got a podcast, couldn't blog about it.

00:00:45   Tomorrow--

00:00:46   You could talk about it.

00:00:47   Tomorrow I'm going to frickin' blog it.

00:00:48   Yeah, I actually was hoping we would talk about that particular topic.

00:00:50   In the podcast last night that I was on, one of the questions on this topic came up, and

00:00:54   I debated saying something, but I said, "Okay, well, here it is."

00:00:57   I talked for like two and a half minutes and I said, "Okay, now just make that coherent

00:01:01   and put it in writing," and that's what my blog post is going to be. That's always

00:01:04   the challenge.

00:01:05   Oh yeah, many of my podcast discussions were inadvertently drafts for blog posts that were

00:01:14   much better considered.

00:01:15   That's what my podcast is all about. It's just talking it out, rambling, and then you

00:01:20   distill it down or whatever. But you know what, I should do it anyway because the podcast

00:01:25   was on last night is going up on the 20th or something. So by the time it goes up, my

00:01:28   blog post will have been up for weeks.

00:01:30   Right. We can put this up tomorrow.

00:01:32   But anyway, I don't want to talk about the mini Mac Pro, because every time I think of

00:01:38   a blog post, I'm like, "You just got to write a blog post. It doesn't matter if it's two

00:01:41   paragraphs." I'm like, "Oh, I have a great two-paragraph idea," and it never comes out

00:01:45   as two paragraphs. Not that it goes out for pages and pages, but I look back at it and

00:01:50   I'm like, "That was supposed to be two paragraphs, and it's eight." If it was two paragraphs

00:01:53   and it came out as four, I'd be okay. But eight, I feel like there's something going

00:01:57   wrong. So I have one very simple idea that it should be really three sentences, but then

00:02:02   I write those three sentences and I say, "If you don't already know what I mean, you won't

00:02:05   understand those three sentences." So I expand, and I expand, and I expand until I feel like

00:02:08   I'm bringing some new people along who don't already know what I'm saying and don't already

00:02:13   agree with me.

00:02:15   So are we going to not talk about it then?

00:02:18   No, I'm not going to talk about the next one.

00:02:20   Fine.

00:02:21   I already know. I live in fear of Marco just blogging, "This is such an obvious idea that

00:02:25   if I mention it, all of you are just like, 'Yeah, everyone knows that. Stupid. Let me

00:02:28   write two sentences about it in my blog post.'"

00:02:31   I think with this thing, everyone has been talking about what they could do with the

00:02:36   Mac Pro. Every six months, there's a wave of discussion about it. And so many people

00:02:43   think that it's going to be some kind of weird modular thing where you get a bunch of Mac

00:02:46   minis and connect them via some mystery Thunderbolt that's fast enough to do anything meaningful

00:02:50   with this kind of stuff.

00:02:51   the PlayStation 3 is going to be like with a cell processor. You'll be able to have multiple

00:02:54   ones together to make your games look better. Did you hear about that?

00:02:59   And it's just like, it doesn't... All these fantasies that people have about this, in

00:03:03   addition to having a lot of technical challenges, mostly involving the speed and bandwidth of

00:03:08   the connectors between the individual parts, but it would just be an amazingly complicated,

00:03:16   inelegant setup. What I hate about the iMac is that once you have some kind of powerful

00:03:25   demand with an iMac, you usually end up having a desk covered in hard drive enclosures and

00:03:29   all these bolt-on things shoved on the outside or connected to it that with the Mac Pro you

00:03:34   could just put inside, and with many advantages there. So I feel like any move towards less

00:03:43   internal storage, less internal capacity for expansion,

00:03:48   any move in that direction really eliminates quite a lot

00:03:51   of the Mac Pro's appeal.

00:03:53   And a lot of people just, they don't really distinguish

00:03:57   between the Xeon line and the regular consumer CPU line.

00:04:01   But that's also a very important distinction, because

00:04:03   the Xeon line means you can have two sockets and lots of

00:04:07   RAM slots.

00:04:08   And you get all sorts of benefits, like ECC RAM, which

00:04:12   it just makes your computer a little bit more stable, like a little bit less likely to have

00:04:16   some problem down the road

00:04:17   or it'll crash, it'll kernel panic

00:04:21   three fewer times in its lifespan but those might really matter to you.

00:04:24   There's all sorts of these benefits that you get with the server grade components,

00:04:28   with these giant expensive motherboards, with these giant PCI Express slots that

00:04:32   have really really high bandwidth that you know if you have

00:04:35   if you want to do multiple video cards to have like six monitors you can do

00:04:39   that with a Mac Pro, you can't do it with anything else.

00:04:42   there's all these edge cases

00:04:46   that with the Mac Pro you can do all of them.

00:04:50   Most people don't need all of them, but a lot of people need one of them.

00:04:54   So I feel like, my blog post

00:04:58   kind of made it sound like I thought that the iMac could solve all these problems and it can't.

00:05:02   My point with the blog post was not that

00:05:06   the iMac is good enough for most Mac Pro customers

00:05:10   necessarily, but that it's a good enough solution for Apple to release, to address most of these

00:05:17   customers.

00:05:20   And that's a weird distinction to make, but it's good enough for Apple to deal with them

00:05:25   by just releasing this.

00:05:29   As a user, there's lots of...

00:05:31   I as a user can say, "I wouldn't like that as much."

00:05:35   And almost everybody has responded saying, "I work in video," or, "I work in science,"

00:05:39   something like that, I work in something where that would suck in some way.

00:05:43   And that's true, but there's already tons of small

00:05:47   markets that Apple doesn't address, usually because they're too small and they're relatively

00:05:51   unprofitable. If a whole bunch of high-end workstation

00:05:55   users had to switch to Windows, which many of them already have

00:05:59   for different video editing programs, since Apple pissed off all the video editors with Final Cut Pro 10,

00:06:03   if some of those people have to switch to Windows

00:06:08   video editing needs, I don't think Apple cares that much. Yeah, if they can avoid it easily,

00:06:13   they will, but I think that that specialized market is something Apple's willing to lose.

00:06:20   I'm going to be sad to see my tower with filled-with-server-grade hardware go up, because I don't know if I can

00:06:26   attribute it to it having server-grade components in it, but this machine has been so incredibly

00:06:32   reliable. My 2008 Mac Pro, it has been the most reliable, probably the most reliable

00:06:37   computer I've ever owned because even my favorite Mac ever, the SE30, that had some reliability

00:06:42   problems, mostly related to the fact that I had a color video card shoved in it, which

00:06:46   is something Apple never foresaw, so it had some flaky issues there and had a bum power

00:06:51   supply early on. But like, this Mac Pro has just been 100% champ. Like, nothing has gone

00:06:57   wrong in it. I think I had one bad dim that went wrong, and when it went wrong, it was

00:07:01   so obvious that it went wrong. The machine booted, but it just had less RAM, and you'd

00:07:06   go to the little thing and it would show which bank wasn't showing up. It was just like everything

00:07:10   worked exactly the way it's supposed to. I've put a million different hard drives in it,

00:07:14   I've added to the RAM, never had any problems with noise, heat, no fan bearings have gone

00:07:19   bad, just nothing. I can't imagine the machine replacing it being more satisfying than this

00:07:27   was when it was new. Because in 2008, and it was cheap, it was before they were super-duper

00:07:33   expensive for a crappy thing. And I don't know if it's because of the ICC RAM, is it

00:07:39   because the CPUs are relatively underclocked to what they could possibly be clocked to,

00:07:43   is it because the cooling is such overkill because the case was locked to the friggin'

00:07:46   G5? Whatever it is about it, I'm going to be sad to see this thing go. Or go into my

00:07:52   attic because that's not going to actually leave my house, of course.

00:07:56   I sold my version of that computer to Dan,

00:07:59   and it cost like $140 to ship it to him.

00:08:03   That's nuts.

00:08:04   Yeah.

00:08:06   But yeah, the Mac Pro is a fantastic computer

00:08:08   for these type of users.

00:08:12   I don't ever see myself going laptop full time

00:08:14   and being that happy with it.

00:08:16   I did it last year for a while, and it was OK,

00:08:20   but there are just so many downsides to it

00:08:22   for me and so many little annoyances.

00:08:23   I mentioned on neutral that I like everything

00:08:25   to be stock and clean. That's why I hate having a desk covered in wires and hard drive enclosures.

00:08:29   Like, I don't want to have to bolt on a million different things to make my computer fast

00:08:34   and stable and have enough space for what I'm using it for.

00:08:37   Yeah, but couldn't you just get, like, one of those absurdly overpriced Thunderbolt docks,

00:08:45   not dock, core replicators?

00:08:46   Yeah, the big bays. Well, I could, but—

00:08:48   You can't. You can't put a video card in it. You can't put a high-end video card in it.

00:08:53   And there's a lot of people for whom that solves their problem.

00:08:56   A lot of video editors don't use internal storage for their projects.

00:08:59   They use external drives with RAID 0 and just giant drives.

00:09:03   Well, then they have a fiber channel card inside their Mac.

00:09:06   Well, I mean, a lot of them-- not necessarily the big production houses,

00:09:10   but a lot of smaller shops and individual video editors

00:09:13   will just use those external G drives or LaCie, all those high-end enclosures

00:09:18   that are made of metal and just have two consumer drives in them.

00:09:20   They'll just use those.

00:09:22   I think those people--

00:09:23   it's not so much that they need a Mac Pro.

00:09:25   It's that they need a machine that's

00:09:27   built with the philosophy of the Mac Pro,

00:09:29   in terms of reliability.

00:09:33   They'd rather pay more for something

00:09:34   that will be reliable than pay less for something

00:09:38   that's just as good, but is made to consumer spec.

00:09:40   Right.

00:09:41   And I'm that way, too.

00:09:44   If my computer gets flaky, that is a severe problem for me,

00:09:48   in so many ways.

00:09:50   It'd be a problem for this podcast, or any podcast.

00:09:52   It'd be a problem with my work, with my coding,

00:09:54   if I have to be randomly rebooting every few days

00:09:58   for some weird issue or some weird reason.

00:10:00   That's a severe disruption, that adds up.

00:10:02   And for people who that really is disruptive to,

00:10:06   it is worth it to pay more to get a high-end tower.

00:10:09   Especially, and you said these things last forever.

00:10:12   Your 2008 Mac Pro is still pretty good by today's standards.

00:10:16   My 2010 Mac Pro-- we've not even got it last year--

00:10:21   my 2010 Mac Pro is still the fastest Mac

00:10:25   for most single-threaded tasks, and among the fastest Macs

00:10:28   for anything parallelizable.

00:10:30   It's certainly up there.

00:10:31   I'm still playing games that are released this year on my Mac.

00:10:35   So even though I have-- 8800 is not amazing,

00:10:38   a good video card.

00:10:40   It's still better than what you get in a MacBook, right?

00:10:43   Maybe not anymore.

00:10:44   But certainly for most--

00:10:46   Maybe not in a MacBook Pro, but I'm saying a MacBook.

00:10:48   That's what people buy.

00:10:49   Like when you get it, when a kid gets a laptop

00:10:51   and they go off to college, they get a MacBook,

00:10:53   because the parents just want to get them a laptop.

00:10:55   And you can't play modern games in that thing.

00:10:57   And here I am with my 2008 computer,

00:10:59   and I can play them in the floor.

00:11:00   So that's the kind of investment I want to make.

00:11:03   That's why I always want to get the biggest, hottest, fastest

00:11:05   video card they have, stick it in a box with lots of RAM slots,

00:11:08   make it reliable, and give me internal storage.

00:11:11   And I'm happy.

00:11:11   Oh, yeah.

00:11:12   And when you do want to get rid of that computer,

00:11:16   If you sell that computer in the next year, you'll still get over $1,000 for it.

00:11:20   I don't sell my children, Marco.

00:11:24   But you'll lease puppies.

00:11:25   Right.

00:11:26   They go up into the attic.

00:11:27   I'm trying to think of something to do with this thing.

00:11:29   So you just leave them there and starve?

00:11:31   If it didn't take so much power, I would put it in the basement and make it a video server

00:11:34   or something.

00:11:35   That's always the problem with old hardware.

00:11:37   It's not worth the power or heat or noise.

00:11:39   Well, I guess if you keep buying Mac Minis, I would put an old Mac Mini in the basement

00:11:44   if I ever had bought a Mac Mini, but yeah.

00:11:47   See, but the problem I have with the Mac Pro, having never owned one,

00:11:50   is that it seems contrary to everything that Apple wants.

00:11:53   You know, even within the laptop line, now RAM

00:11:55   is getting soldered on the board, and hard drives

00:11:58   are getting soldered on the board.

00:12:00   But you don't carry around a Mac Pro.

00:12:02   You're right.

00:12:02   But what I'm driving at is everything about all the consumer grade Macs, even

00:12:07   the MacBook Pros, for the purpose of this conversation,

00:12:11   I'm classing that as consumer grade.

00:12:13   All of those are becoming more and more integrated,

00:12:17   to cite the overly used word.

00:12:19   And the Mac Pro is contrary to all of that.

00:12:23   Consumers don't want crap in their way.

00:12:27   That's the basic thing.

00:12:29   The story I was telling about my sister when I convinced her

00:12:32   to finally replace her.

00:12:33   She had a Sunflower iMac, another one

00:12:35   with a little stand thingy.

00:12:36   And she was all right with that one.

00:12:38   And then I convinced her to upgrade

00:12:40   to get the flat panel ones.

00:12:42   And she was-- her favorite thing about that computer

00:12:45   was that when we put it on our desk

00:12:46   and started to get it set up, she says, where's the computer?

00:12:48   And I said, that's it.

00:12:48   That's all there is.

00:12:49   And she's like, that's all there is?

00:12:51   That's great, because that's what I always wanted.

00:12:52   I just wanted the screen.

00:12:54   I don't want some other thing in my life

00:12:56   that gets in the way of me doing stuff.

00:12:58   They recognize that they need a screen, because you

00:12:59   need something to look at.

00:13:00   And you need a mouse, and you need a keyboard.

00:13:02   But do I need anything else?

00:13:04   No.

00:13:04   And so that's why the iMac-- making the iMac go away,

00:13:08   consumers love that.

00:13:09   And the Mac Pro is the opposite of that,

00:13:11   because it's the opposite of going away. It's humongous, it's heavy, you can't even fit

00:13:16   it on a desk because it'll just dominate you. It's anti-consumer because consumers do not

00:13:24   want to see crap like that. Whereas if you're someone who needs a Mac Pro or someone who

00:13:28   wants it to play games or whatever, you are the type of person who is willing to accept

00:13:32   that intrusion into your life of this big space heater.

00:13:36   And so much of the Mac Pro commentary that's out there from tech blogs and writers and

00:13:41   stuff, so much of the commentary that focuses on, "I want it to get smaller, I want it

00:13:46   to get sleeker," that's from people who have never owned one.

00:13:49   And the people who own them usually love them and usually don't care how big it is because

00:13:55   it's on the floor.

00:13:56   It's out of sight.

00:13:57   You tuck it away under the desk and you don't really…

00:14:00   If my Mac Pro got 30% thinner, I wouldn't even notice.

00:14:03   I could stand for it.

00:14:04   I can see it.

00:14:05   Like, I don't see it because I want it to take up less room, but I'm like, you know

00:14:08   what?

00:14:09   Once you ditch the space for two optical drives and you convert some of the storage area to

00:14:15   be taking SSDs instead of 3.5 inch disks, I'm like, at that point, maybe you're wasting

00:14:21   space and maybe you can slim it down.

00:14:23   And some of it is also like fashion.

00:14:25   Like I would be interested in seeing a new fashion iteration considering we've been with

00:14:28   this case for a long time.

00:14:30   But it's not like I'm saying glom it all to the back of the LCD because I don't want it

00:14:33   in my way. There's a dedicated spot on the floor where it goes. I could put something

00:14:38   slightly smaller there, but I would be fine if they kept it the same. At this point, we're

00:14:43   desperate. It's like bargaining. Please, just keep the same case. Just give us a new one

00:14:48   that's not crap.

00:14:50   And also, a lot of the people who make arguments about it or have theories about it or who

00:14:54   judge it unfairly don't realize how expensive Zeons are. So, they'll say, "Oh, this thing

00:15:01   us overpriced, it's like, well, actually… Well, I mean, it's overpriced, but it's

00:15:05   not Apple's fault. Intel is gouging on that price, you know.

00:15:09   Exactly. Like, if you look at any other workstation… But at this point, it is Apple's fault,

00:15:14   because they charge so much money for what is an ancient piece of crap computer at this

00:15:18   point. Now it's Apple's fault. Well, the funny thing is, Intel still charges

00:15:22   that much for these processors. I know, but add it up. Build your own Mac Pro.

00:15:27   "Okay, so Intel, let's pretend we buy the processors at retail price," which Apple

00:15:31   doesn't. And then, "Let's pretend we buy the RAM at retail price," which Apple doesn't.

00:15:35   Pretend you buy all the parts at retail, and you're like, "Boy, that case must cost $1,200

00:15:38   to make, I guess." It does not add up.

00:15:42   No, it doesn't add up. But it isn't as far off as a lot of people think. Especially the

00:15:47   add-ons, once you go to, "Okay, well, I want to bump it up to dual socket with 2.66 gigahertz,"

00:15:52   then you look at the difference that costs, like, "$1,500 extra? What the hell?" And then

00:15:55   And you look, oh, actually, Intel charges $1,200 more for the CPUs.

00:16:02   I think it is such a beast, but if you did anything to really slim it down, like if you

00:16:12   eliminated a few drive bays, or if you made it single socket only, which would save a

00:16:17   lot of space on the bottom, then you are limiting who will buy it.

00:16:23   you are taking people who used to buy Mac Pros and you are really significantly reducing

00:16:28   their motivation to buy a Mac Pro again.

00:16:31   And that's why I just think, like, I do hope that Apple keeps it around.

00:16:35   I do hope that the next revision has some kind of solution for Retina on the desktop.

00:16:41   Hopefully they will release some kind of Retina Cinema Display and then there will be some

00:16:46   kind of insane video card in the new Mac Pro that can drive it for some insane price premium,

00:16:50   probably.

00:16:51   I'm hoping that's where they're going with this.

00:16:53   - It'll be the Apple 15-inch Redness Cinema Display.

00:16:56   (laughing)

00:16:57   - Oh God.

00:16:58   - It's just what you wanted, right?

00:16:59   - Oh man.

00:17:00   - It's like traveling back in time.

00:17:02   - I know, the thing that I just,

00:17:03   I can't reconcile it in my head

00:17:05   is that to me as a non-Pro Mac or a non-Mac Pro user,

00:17:10   I was gonna say non-Pro Mac user,

00:17:12   because I'm, the laptop is sufficient for me,

00:17:16   it seems so obvious to me that the Mac Pro

00:17:19   just cannot continue in any even vaguely similar form to the way it is now, because everything

00:17:25   Apple is doing is going in the other direction. I know I just said that, but it's just the

00:17:29   more I hear you guys talking...

00:17:30   Well, there's two sides to that, though. First of all, it is a very high margin product.

00:17:35   They don't make a whole lot of them, but it is high margin. And they could even raise

00:17:39   the price premium by another $500 per case, and we'd all still buy them. Right? Most Mac

00:17:44   would continue to buy them even if the price premium was even bigger.

00:17:48   So the profitability angle of them I think is probably covered. I don't think

00:17:52   if they treated it as a unit of the company, I don't think it would be losing money.

00:17:56   But

00:18:00   a lot of people will say, "Oh well, it doesn't sell very many, they should just cut it out."

00:18:04   Well, they don't sell very many Macs relative to iPhones and iPads, but

00:18:08   no one's saying they should stop selling Macs.

00:18:12   Yeah, most people don't say that though.

00:18:15   People tend to develop these rules in their head

00:18:21   about how Apple works and how they make decisions.

00:18:26   I listed a whole bunch of these

00:18:27   when I wrote about the iPhone Plus speculation.

00:18:29   So many people are like,

00:18:30   "Oh, they're not gonna add another SKU

00:18:32   "'cause that's not the way they do things."

00:18:33   No, that is how they do things when it makes sense.

00:18:37   - It's the iPhone math mark, I believe.

00:18:38   - Yes. (laughs)

00:18:40   So yeah, people have all these theories,

00:18:43   they're like armchair Apple commentators,

00:18:45   which yes, granted we all are,

00:18:46   but the armchair commentators will come up with some rule

00:18:51   that Apple will always follow.

00:18:53   And in practice, there are very few of those rules.

00:18:55   Apple breaks its own rules all the time.

00:18:57   And so many decisions Apple makes are inconsistent

00:19:02   with previous decisions they've made

00:19:03   and future decisions they will make,

00:19:05   that you can't say, oh, well,

00:19:07   they're gonna get rid of this line

00:19:09   because they hardly sell any of them.

00:19:12   That doesn't necessarily mean they should get rid of something or that they will.

00:19:16   Speaking of the iPhone Plus, we should start thinking now of how Apple is going to—because

00:19:21   we've seen enough of these presentations already—what does Apple put up on the slides

00:19:25   when they introduce the iPhone with the bigger screen?

00:19:30   How do you sell that?

00:19:31   I would say they're going to put it right between the iPhone and the iPad.

00:19:35   When they introduced the iPad and they had the iPhone on one side and the laptop on the

00:19:39   the other, and like, what can go in between these things?

00:19:41   I think they're going to completely ignore

00:19:42   the competition, which of course is all at that size now,

00:19:45   and just say, here's an iPhone, here's an iPad.

00:19:50   We think there's room for something in the mail.

00:19:52   Well, see, the way Steve Jobs would have done it

00:19:54   is his jerky way to do it would be kind of like,

00:19:57   we made the iPhone, and we thought

00:19:59   the size was just perfect.

00:20:01   And we decided that-- a couple of customers

00:20:06   said they would like a little bit bigger,

00:20:08   we made it a little bit taller.

00:20:10   And if you want a little bit bigger screen, there you go.

00:20:13   And then some people said they still wanted it to be bigger.

00:20:16   And so every time it's like, well, what we made was perfect,

00:20:19   but you people just kept asking for some other thing.

00:20:22   So we made it taller.

00:20:24   That wasn't enough for you.

00:20:25   So fine.

00:20:26   Here's-- kind of in a jerky kind of way.

00:20:29   That's one way we'd go with it.

00:20:30   The other way to go with it is just

00:20:31   pretend you'd never said all those things in the past

00:20:33   about the iPhone size being appropriately sized.

00:20:35   And just say, here's the new iPhone.

00:20:37   It's got a beautiful display.

00:20:38   It's 4.5 inches or whatever the heck it is.

00:20:41   We've always been at war with East Asia.

00:20:44   And no, don't even say anything about it.

00:20:45   And it's great.

00:20:47   In your own presentation, you're not

00:20:49   obliged to address the fact that the previous phones had

00:20:51   smaller screens.

00:20:52   Yeah, and that's how they're going to do it.

00:20:54   If this thing's real--

00:20:55   You just say, it's a new phone, and it's great,

00:20:57   and here it is.

00:20:58   Look at this beautiful display.

00:21:01   And they'll just give you the measurement of the display.

00:21:03   They don't need to mention that that measurement is

00:21:04   larger than the other one.

00:21:05   course it'll be the same rez, you know, at all nine yards. If they continue to sell the

00:21:10   old size as well, then they might have to mention it, but I don't know.

00:21:14   Oh, I think they'd sell both. Because, you know, that's... Like, with the iPhone 5 versus

00:21:19   the 4s, like, they're not going to keep both of those sizes around forever. You know, once

00:21:24   the 4s is out of the cycle of being the cheap phone, you know, they're not going to keep

00:21:28   size going somehow. But I think the iPhone 5 size,

00:21:32   that will, like the primary iPhone size

00:21:36   or one of the primary iPhone sizes will always be that ballpark.

00:21:40   And then if they have a bigger one, it'll always be that ballpark also.

00:21:44   Because, you know, the 4S to the 5 is such a small

00:21:48   difference in the outside dimensions of the phone, and the 5 is so much

00:21:52   thinner and lighter. I mean, a lot of people with the 4S look at the 5 and they're

00:21:56   angry because they bought the 4s, not the 5,

00:21:59   or they're angry that the upgrade would be too expensive

00:22:01   or something.

00:22:02   And they want to justify keeping the 4s and not getting the 5.

00:22:05   So they're like, the 5 sucks.

00:22:06   I don't want something that big.

00:22:07   I hope Apple keeps these devices around forever.

00:22:09   Most people, though, who have owned the previous phones, who

00:22:13   have ever picked up and held a 5 are like, oh my god,

00:22:16   I can't believe how light this is.

00:22:18   I want this.

00:22:18   And even if they don't immediately go and upgrade,

00:22:20   because not everybody can do that,

00:22:22   most people recognize that the 5 overall is better.

00:22:25   and that if the 4s went away and the 5 was the smallest iPhone you could buy, very few

00:22:32   people would say, "I want something smaller." It's pretty great. So I see them keeping that

00:22:40   around. But if they only made the big one, I think you'd have a lot of people demanding

00:22:44   something smaller.

00:22:46   After reading Andy's, have you been reading Andy's Android conversion stories?

00:22:49   I haven't read it yet, no. But I've seen some quotes and it does sound pretty compelling.

00:22:54   So one of the things he brought up, which I hadn't thought about too much before, is

00:22:59   I've seen Andy's-- Andy's always got different phones that he's testing, right?

00:23:02   And since they're not always Apple phones, they're bigger phones.

00:23:07   And one of the things I hadn't noticed, because I'm not actually using them and just sort

00:23:09   of playing with them, fiddling around that he brought up in the thing, is not so much

00:23:11   that like, oh, the bigger screen is nice, which is true.

00:23:14   And we know all the people who like bigger screens, people who have vision problems,

00:23:17   people who just like it bigger.

00:23:19   But that Android in particular does something with larger screens that iOS is probably going

00:23:23   to have slightly more difficulty doing, which is it uses the larger screen to actually show

00:23:27   more information. So the phones with larger screens have larger resolutions. So the apps

00:23:34   are designed to show more stuff, whereas we're all assuming a bigger iPhone is just simply

00:23:40   going to be, all right, same res, but just bigger, which gives you half of what a big

00:23:43   new screen can do. But Andy's saying what made him go over is not so much just that

00:23:47   it's physically larger because the eyesight is fine, right, but that apps on that phone

00:23:52   for that bigger screen showed more stuff and were designed to have more stuff on the screen.

00:23:58   Not so many more items in the list view, but just more context in the side and just more

00:24:02   room for information. It wasn't simply the same image you'd see on a smaller Android

00:24:06   screen made larger because your vision is bad. So that half of the equation, I'm not

00:24:12   sure what Apple can do there because all of its user interfaces on all of the iPhone apps

00:24:16   are designed for a thumb reaching around the screen. And by making it bigger, yeah, it's

00:24:21   easier to see, but you don't get to take advantage of that extra room because you're keeping

00:24:24   the res the same to keep the developers from freaking out.

00:24:31   With iOS 6, the issue is auto layout, which is way more capable and mature and flexible

00:24:36   than the old auto sizing system they had in place. So now, the frameworks are getting

00:24:43   in place for iOS apps to be more flexible sizes. Android has always had that because

00:24:50   Android phones have always been a wide variety of sizes. So Android is, like, all the apps

00:24:56   are designed, at least the good ones, are designed to be pretty flexible with the size

00:25:02   that they're willing to render at and will work at, just because they've always had to.

00:25:06   So that is definitely one advantage. But I wonder how Apple will do this in the future.

00:25:11   laying the groundwork with auto layout and by having the iPhone 4 and the 5 be these

00:25:17   two different sizes, they're laying the groundwork for a future where we can more easily support

00:25:24   more sizes and iOS developers expect that and do that. But it does add so much complexity

00:25:30   and it is so much harder to design apps that way that I wonder if they're ever going to

00:25:34   pull that trigger and make things that are a wider variety of sizes.

00:25:40   I think they'll be forced to eventually.

00:25:42   And I think the way they'll get away with it--

00:25:43   because the stumbling block is not so much going to be the apps.

00:25:45   Because assuming everyone gets on the Auto Layout train,

00:25:48   and everyone's had a trial run with making their apps taller,

00:25:51   which you don't necessarily need to adopt Auto Layout to do.

00:25:53   It's pretty easy to do.

00:25:55   But the sticking block is always games.

00:25:57   And what I think they're going to do with games--

00:25:59   things designed for a fixed screen sky.

00:26:01   Because they're not using any real UI.

00:26:02   It's just a big OpenGL view.

00:26:05   What I think they're going to do there with games

00:26:08   is the same thing they did on the retina MacBook Pros, which

00:26:11   is--

00:26:13   and they did this intent.

00:26:14   There was no reason they were forced

00:26:15   to do this on the MacBook Pros, but they did.

00:26:17   They said, OK, well, so you have native retina size,

00:26:19   but we also have a size that's even bigger than that,

00:26:21   and we'll just scale your whole freaking screen

00:26:23   and put it in retina.

00:26:24   And you're like, oh, that's going to look horrible in LCD

00:26:26   at non-native res, but it turns out

00:26:28   if you make the pixels small enough,

00:26:29   it is not as horrible as you might think.

00:26:32   So what do you do with the games that don't update

00:26:35   on your bigger screen?

00:26:36   You just scale them.

00:26:38   and you would think it would look hideous and it doesn't look as good as it could, but

00:26:42   because the pixels are so small, you are not incredibly sore that, you know, like, as long

00:26:47   as you keep the aspect ratio the same, "Oh, this game wasn't updated for the iPhone 7,

00:26:51   so it doesn't show any new information. All it does is scale the one that used to run

00:26:55   on the iPhone 6. You know, it scales it horizontally and vertically in proportion, and now it fills

00:27:00   my screen, and maybe that game guy never has to go back in port, and going forward, he

00:27:05   can make games that work at all the different ress natively, but he never has to backport

00:27:09   that. And then everyone else just deals with the auto layout issues and tries to do something

00:27:13   nice.

00:27:14   One of the problems with apps, though, is that designers have been accustomed to—before

00:27:19   the iPhone 5 came out—designers were really accustomed to having pixel-perfect control

00:27:23   over the whole screen, knowing that every iPhone/iPod Touch app would always have a

00:27:30   screen that's exactly this shape, exactly this physical size, exactly this resolution,

00:27:34   So they could design the entire app as one bitmap, basically.

00:27:39   And web developers used to make web pages out

00:27:42   of HTML tables with sliced up images, but the world moves on,

00:27:44   right?

00:27:45   Right.

00:27:45   And so now with the iPhone 5, they've

00:27:47   broken that for a lot of apps and games.

00:27:51   This does affect games, too, with UI.

00:27:54   Not necessarily the main viewport of the game

00:27:59   into the engine can be different sizes in most cases

00:28:03   without too much work.

00:28:04   but the UI usually can't.

00:28:07   So that is challenging for games and apps alike.

00:28:12   But once they've gotten people accustomed to it

00:28:15   with the iPhone 5, maybe now it'll be easier

00:28:18   and people will start adapting.

00:28:20   Also, stylistically, what's in fashion right now in design

00:28:26   is moving out of those extremely detailed

00:28:29   pixel perfect textures and into flat design,

00:28:33   which scales into different aspect ratios way easier.

00:28:38   - That fad will probably be over by the time

00:28:39   they change the screen size.

00:28:40   But we'll cycle back again,

00:28:41   and we'll be back to making everything look like

00:28:43   it's made with wood. - Bell bottoms.

00:28:45   - Wow.

00:28:46   Now the thing that,

00:28:48   where I'm not on the same thought train that you guys are,

00:28:52   is everyone I've ever spoken to,

00:28:55   which to be fair is a very small sample size,

00:28:57   but everyone I've ever spoken to who has tried auto layout

00:29:00   has not had good things to say.

00:29:01   And I think, was it Brent Simmons

00:29:03   just posted something saying that--

00:29:04   Yeah, I think it's not Auto Layout that's bad.

00:29:06   It's Auto Layout plus IB.

00:29:07   I totally agree with what Brett said,

00:29:08   and I've seen that in action with people

00:29:10   trying to do stuff with Auto Layout.

00:29:12   I still don't use Auto Layout because I can't figure out

00:29:13   how it works in interface builder.

00:29:15   So I just don't use it.

00:29:16   I just use the old system because it's

00:29:17   good enough for my needs.

00:29:20   So and I guess maybe the answer is

00:29:22   that we use the-- what is it?

00:29:23   Visual format language or whatever?

00:29:24   We all start drawing ASCII art.

00:29:26   Well, I think it's a bit of a learning curve.

00:29:28   And maybe you bail on that learning curve

00:29:30   if you know the old system well enough

00:29:31   it's not worth it for you to climb it.

00:29:33   But what Brian said is the way it has to be.

00:29:36   When you lay something out with a GUI tool,

00:29:39   auto layout is not going to leave

00:29:42   an open-ended question.

00:29:45   You have to have-- it has to behave in a certain way.

00:29:47   It has to be deterministic.

00:29:48   So it's going to add the missing constraint that you have not

00:29:50   yet specified.

00:29:51   And if you don't know what all those implicit constraints

00:29:53   that it's adding for you are, you're like, well,

00:29:55   I didn't add that constraint.

00:29:56   It's like, well, you need something there

00:29:58   to balance the equation so the thing knows

00:29:59   what it's supposed to do when you resize, right?

00:30:02   And that can be frustrating.

00:30:03   But I think if you really, really knew auto layout, it would be obvious to you what implicit

00:30:09   constraints Interface Builder is adding.

00:30:12   And you wouldn't be surprised by when you lay something out with Auto Layout Interface

00:30:16   Builder, add one constraint, and see how it behaves.

00:30:19   Because you'd know what all the other ones would have to be to fill that in.

00:30:21   Like, I mean, there's still room for variation in there that IB could be adding things that

00:30:25   you don't think should-- it should close the equation in a different way or whatever.

00:30:28   But I think it's a solvable problem,

00:30:33   and Apple will iterate on it until they get something

00:30:35   that works reasonably well.

00:30:37   Also, it's kind of a chicken and egg thing.

00:30:39   Right now, most apps are able to adapt to the iPhone 5

00:30:43   without significant changes because it just

00:30:46   stretched vertically.

00:30:47   And any app that has a scrollable,

00:30:50   like a vertically scrollable content area in the middle,

00:30:52   any kind of table view or list app,

00:30:55   that was a really easy transition

00:30:56   for most of these apps to make.

00:30:58   So it wasn't that painful to adapt to the iPhone 5.

00:31:03   If they would add a whole new resolution that

00:31:06   was wider and taller, that was different in both dimensions,

00:31:10   even if it's a different aspect ratio,

00:31:12   then that adds even more complexity.

00:31:15   If they do that, then it's going to be so much work

00:31:18   to adapt a lot of these apps to it,

00:31:20   then maybe it'll motivate developers

00:31:22   to convert to Auto Layout or to start using it for new projects.

00:31:26   Whereas now, the value proposition

00:31:27   isn't that strong for it.

00:31:29   Because it's like, well, the old system

00:31:30   works well enough for so many cases, and we already know it.

00:31:34   And we only have to support two devices,

00:31:36   and it's fairly easy to support them both now.

00:31:39   So it's a lot less compelling now.

00:31:43   Do you remember-- I'm trying to remember the Auto Layout Demos

00:31:45   WWEC.

00:31:46   Did you go to those sessions?

00:31:47   I did, yeah.

00:31:48   So I'm trying to think of if they had the ability

00:31:51   to do the thing where like, OK, so now when-- they

00:31:53   were showing it on the Mac.

00:31:54   So now when your window is a little bit bigger,

00:31:57   suddenly new information and/or UI elements

00:32:00   come into existence that weren't previously there.

00:32:03   Sort of like responsive design when

00:32:04   they have parts of the navigation disappear

00:32:06   and stuff.

00:32:06   I think that's supportive.

00:32:07   Because that's what you really need for-- you're

00:32:10   trying to avoid a situation where we have now,

00:32:12   OK, I make my app for the iPod or for the iPhone,

00:32:16   and then I have to-- if I'm going to do a good job,

00:32:18   I've got to do a different UI for the iPad.

00:32:20   Because it's just so different in size,

00:32:21   you can't just take the phone thing and scale it up.

00:32:23   Well, if you have a larger iPhone, like getting back to Andy's point, if you really want to

00:32:28   do an awesome job for those people, you're going to say, "Okay, now I have more room

00:32:31   to put stuff.

00:32:32   I shouldn't really just take my iPhone screen and make sure everything scales correctly.

00:32:36   In fact, I have room for another button here.

00:32:38   I have room for an ancillary display with some other information."

00:32:42   That's what the AAA guys are going to do.

00:32:44   And the question is, if they're doing that, does auto layout a factor or do they just

00:32:49   make three different views?

00:32:50   the regular iPhone, the bigger iPhone, and then the iPad.

00:32:54   And if Auto Layout has the ability

00:32:56   to sanely let people say, OK, well, here's the iPhone one.

00:32:59   If you make it a little bit bigger,

00:33:01   another control comes into view and another display thing.

00:33:05   And then I'll still have to do another layout for the iPad.

00:33:07   Yeah, see, I bet most good developers,

00:33:11   or especially developers with good designers,

00:33:14   most good developers will want to code those separately

00:33:16   anyway.

00:33:17   because a lot of times, even if it's like,

00:33:20   okay, we'll show or hide these controls or rearrange them,

00:33:24   even then, a lot of times the iPad interface

00:33:26   probably should work even more differently than that.

00:33:28   And so I think we're always gonna have people who--

00:33:31   - Well, that's the iPad, of course,

00:33:33   what I'm saying from the small phone to the bigger phone.

00:33:35   - Oh, right, yeah.

00:33:36   And that's a smaller jump, hopefully,

00:33:38   in what you wanna be different.

00:33:40   So Auto Layout could take care of that

00:33:43   in a lot of cases, I'm sure.

00:33:45   But I still think so many people are going to want to custom design things to just be

00:33:50   more different than what the layout engine is capable of providing.

00:33:55   And Carter is the old curmudgeon syndrome.

00:33:58   If you know how the regular layout works, is it worth it to you to learn how the auto--

00:34:01   because then all you're doing is you're going through an abstraction layer that's preventing

00:34:05   you from just setting the things that you know you want to set.

00:34:08   In some cases, auto layout can do things that you would have to write code for.

00:34:10   And that's the kind of case where you're like, am I writing this stupid freaking layout code

00:34:13   to recalculate the distances between these things based on the-- it's like, if springs

00:34:18   and struts can't do it, but auto layout can, auto layout is saving you from manually writing

00:34:23   that code to do some stupid math on points to figure out how far things are. And that's

00:34:28   the type of thing that probably would demo well at W3C to say, if you didn't have auto

00:34:32   layout, the amount of code you'd have to write for this would make you not want to use this

00:34:36   feature and would make you not make your layout act this way. But look how easy it is in auto

00:34:41   Auto Layout versus like, I could do this in springs and struts.

00:34:45   There's no reason for me to use Auto Layout.

00:34:47   It's just getting in my way.

00:34:49   Well, the other thing that I find

00:34:51   interesting about Auto Layout is, although, like I said

00:34:53   earlier, I haven't heard a lot of people sing its praises,

00:34:57   I certainly haven't heard a lot of people say,

00:35:00   this is supposed to work, but doesn't, a la iCloud.

00:35:04   You know, it doesn't seem like the technology is bad.

00:35:07   It's just a big learning curve, like the both of you guys

00:35:09   have been saying.

00:35:10   Whereas iCloud seems to have somewhat of a big learning curve and it's a piece of crap.

00:35:17   You can't learn anything if it doesn't act in a deterministic way.

00:35:19   So a local API in a framework on your system, you have a fighting chance of figuring out.

00:35:24   But when you're communicating to a black box over the network and you can't figure

00:35:27   out why it works the way it does, it does not converge on a solution.

00:35:33   When Apple makes new APIs and frameworks and things like that, they're solving a number

00:35:39   of problems with these APIs.

00:35:40   Some of them appear to be designed not necessarily

00:35:44   for everyone to use as their new default of how they build

00:35:48   things, but for rapid development,

00:35:51   or for less sophisticated developers

00:35:53   to get something working well and quickly.

00:35:54   So I think one of the biggest examples of this

00:35:57   is arc versus storyboards.

00:36:00   Arc is a really great feature that they obviously

00:36:03   want everybody to use.

00:36:05   There's really very few downsides to it overall,

00:36:08   And even power users, even very skilled developers

00:36:12   will get a lot of value out of using Arc with almost

00:36:15   no downsides.

00:36:17   Storyboards are a very restrictive and limited

00:36:23   structure that your app uses.

00:36:26   They can save a lot of time for rapid development

00:36:29   or for less experienced developers.

00:36:31   They can save tons of time and provide a nicer

00:36:34   framework for certain things.

00:36:35   But they're so limited that a lot of high-end developers

00:36:39   really can't use them for much.

00:36:42   And so maybe Auto Layout is not quite

00:36:49   to the level of storyboards, but maybe it's

00:36:51   not quite to the level of Arc either.

00:36:54   It's there for people to use maybe sometimes,

00:36:57   or as they go forward, maybe new developers learn this.

00:37:00   But maybe it isn't intended to capture

00:37:02   a lot of the older developers quite yet.

00:37:04   because maybe the value isn't quite that clear on it.

00:37:08   And certainly, once you have one of those situations

00:37:11   where you're laying out something with the old system

00:37:14   that's really a pain to do it, once you have one

00:37:17   of those situations, yeah, maybe then you start learning it.

00:37:19   But I think there's very little reason for developers

00:37:24   to convert things to Auto Layout if they're working fine

00:37:27   with springs and struts, or to absolutely use Auto Layout

00:37:31   for everything in the next project.

00:37:33   Like, it might not make sense to do that yet.

00:37:36   Yeah, maybe it's just the circles that we travel in

00:37:38   and the people who read, but the number of people

00:37:40   who have a grumpy face about IB, which is not

00:37:43   like a fancy new technology, come from the next days, right?

00:37:47   They're like, I'll just do it in code.

00:37:49   Oh, yeah.

00:37:50   Like, it just shows that sometimes, no matter how--

00:37:53   because that was a big selling point in the next days.

00:37:56   It was like, look at Interface Builder.

00:37:57   It's amazing, right?

00:37:58   And some people just say, I'd rather just do it in code.

00:38:02   And that's just what they would rather do.

00:38:04   And no matter how nice you make the tool,

00:38:08   if people don't want a tool that does that,

00:38:11   if it's not solving a problem they think they have,

00:38:13   it will just sit there.

00:38:14   So auto layout, even if they make it awesome and perfect,

00:38:17   just like interface builder, there will be some people say,

00:38:20   nah, I prefer to just do it in code.

00:38:22   And they will.

00:38:22   Well, and interface builder, I've

00:38:24   always thought has been comically unintuitive.

00:38:27   And my background, as Casey knows, because he was there,

00:38:31   My background was Visual Basic.

00:38:34   And Microsoft does a lot of things badly.

00:38:38   I got to give them credit for that.

00:38:40   They do so many things badly, it's quite impressive.

00:38:42   However, their development tools are really good.

00:38:46   And they're especially good at not

00:38:51   having a really huge learning curve

00:38:52   to get started on something.

00:38:54   And Visual Basic-- and now, of course,

00:38:57   it's way more sophisticated with all their new stuff.

00:38:59   But I started using Visual Basic with version 1.0,

00:39:03   literally.

00:39:04   Visual Basic 1.0.

00:39:05   And even then, it was really easy to use.

00:39:08   You drag out a control, and you double click it,

00:39:11   and there's the function.

00:39:12   It was so easy to use that I could figure it out

00:39:15   as an extreme novice in seventh grade.

00:39:19   It was really easy to figure out.

00:39:20   Interface Builder has so many weird little things about it,

00:39:24   weird behaviors that aren't necessary.

00:39:28   It's not like, oh, you're going to have some advanced need

00:39:32   at some point, and you might need to know this.

00:39:33   No, it's like, if you're going to use

00:39:35   this to do anything at all, you need

00:39:36   to know these weird things about it that aren't very intuitive.

00:39:40   And it's always been that way.

00:39:41   And they keep saying it's getting better,

00:39:43   and in some ways it gets better, and then it

00:39:45   adds new weird things that you need

00:39:47   to learn in some weird way.

00:39:49   So really, Interface Builder has never

00:39:51   been particularly easy to use.

00:39:55   And Casey, I'm curious, because you've come to this way more

00:39:58   recently than John and I have. What do you think of Interface Builder? Like, have you

00:40:01   had those problems and you have used all the Microsoft stuff more recently because you

00:40:05   were a Windows guy for so long at work, and you still are kind of. What do you think about

00:40:10   this comparison?

00:40:13   I think for the most part I agree with what you said. I don't have any hate for Interface

00:40:19   Builder and I think that largely comes from the fact that A) I haven't done years upon

00:40:25   years of iOS development, and B, all the iOS development I've done is tended to be with

00:40:31   reasonably simple and straightforward user interfaces.

00:40:37   I do agree, though, that it is not intuitive.

00:40:39   Like when you were talking about how you drag a button onto a form in current Windows forms,

00:40:46   parlance or parlance, however you pronounce that word, esoteric.

00:40:50   Regardless, you just drop it on a form, you double click, and there's your method, just

00:40:54   like you were saying, whereas with Interface Builder, as you're describing this, I'm thinking,

00:40:57   "Well, how does that work in Interface Builder?" Well, you have to have something on the header

00:41:01   or perhaps the code, the M file, that is an IB action or an IB outlet. Well, wait, what's

00:41:08   the difference between the two? Oh, well, you see, an IB action is for a function or

00:41:12   a message, and an IB outlet is where you just want to have a reference, and it's already

00:41:16   – it's like, "Oh, my God, just shut up." So I don't think it's terrible. I don't have

00:41:20   a problem with Interface Builder, but I would agree with everything you said about the micro

00:41:24   developer tools really are good. And it's funny because I've been teaching a co-worker

00:41:29   Objective-C and Cocoa and whatnot, and he's really enjoyed it and got over the ugly, ugly,

00:41:35   ugly syntax a lot quicker than I did. But one of the things that it's hysterical to

00:41:40   watch is when he's trying to figure out what the right method is to do something, like

00:41:45   for example, to make a string lowercase. Rather than go to the documentation, what does he do?

00:41:51   auto-complete it. That's the Windows developer for you.

00:41:55   Because Windows is so good at that.

00:41:59   When you're programming in anything.net for the first time,

00:42:03   all you need to know is the first word, "system." Is it still system?

00:42:07   So yeah, you can know nothing about

00:42:11   the language you're programming, or the API that you're programming against at least. The language, of course,

00:42:15   there's always things. But you can know nothing about the API you're programming against. And just type in "system."

00:42:19   and just start there and you will probably find what you need. Yeah you are

00:42:25   absolutely right and that's the funny thing is watching him use Xcode's crummy

00:42:29   IntelliSense I know it's not called IntelliSense but whatever they call it

00:42:32   and it's gotten better like I remember everyone freaking out at WWDC they were

00:42:37   so excited when they when somebody announced that when you start typing

00:42:41   NSS rather than what was it? NSS stream. Yeah or whatever it was. I was just trying to remember what the

00:42:48   what the bad match was. It was NS Stream, right?

00:42:52   Or set, maybe? I was trying to formulate a Google query for it. I was going to type

00:42:56   NS String, Auto-Completion, Annoying.

00:43:00   It was probably NS Stream. Whatever it was. Everyone went berserk

00:43:04   because they finally got the auto-complete to the point that it sort of

00:43:08   made sense. But it's not a great documentation browser, whereas in .NET

00:43:12   you really never need to kick open any documentation. Exactly. You can just

00:43:16   sit there with IntelliSense and you'll find what you need.

00:43:18   - Whereas like, if I'm working in Xcode,

00:43:21   I have to have that organizer window open,

00:43:23   and I have to have it to the documentation tab,

00:43:25   and I'm going over there and searching in a search field

00:43:27   like every five minutes for something.

00:43:29   Like, any kind of built-in, you know,

00:43:32   pop-up automatic documentation is usually not enough

00:43:35   for what I'm looking for.

00:43:36   Or I don't know the name of what I'm looking for exactly,

00:43:38   and you know, I can't autocomplete it.

00:43:40   Or the autocomplete is freaking out

00:43:42   because of some thing that it choked on,

00:43:45   you know hundred lines up but i don't know about yet

00:43:47   uh... and it's not working

00:43:49   and it's it's a reverse numbers i'm right i'm reading all my code the

00:43:53   old-fashioned way i don't have auto completion i just memorize every single

00:43:57   freaking function its name and then they the argument one like return that's how

00:44:01   i was a huge p because that was all my back and just don't you speak

00:44:05   uh... that's why right back i'm writing on text made which doesn't really have

00:44:08   like

00:44:09   intel sense type features

00:44:11   uh... or if it doesn't know how to activate them

00:44:13   and please don't email me, I really don't care.

00:44:15   And like, you know, I can write that way,

00:44:17   but it's so nice when you don't have to,

00:44:20   and it really is a major productivity booster

00:44:22   to have things that can tell a sense that it, you know,

00:44:26   but doing that well makes a really big difference

00:44:28   to coding, especially when you're new

00:44:31   to a language or an API.

00:44:33   - You're absolutely right.

00:44:34   And I think part of the problem might be

00:44:37   that Objective-C is such a verbose language,

00:44:39   and you know, method names are stringed

00:44:42   replacing occurrences of string with string with options or whatever the hell

00:44:45   it is i forget what it is

00:44:47   yeah that's one letter in pearl s

00:44:49   exactly that delimiters well let's be honest all of pearl is just regular

00:44:53   questions anyway

00:44:56   i think we should talk about that on some future podcasts

00:45:01   at a certain point the verbose names do not

00:45:05   understanding your reading well except once you do get familiar with apple's

00:45:09   crazy API naming style, then you can start guessing the names of things before you know

00:45:14   them. And you can usually guess correctly, at least to the point where then autocorrect

00:45:17   will help you.

00:45:18   That's so true.

00:45:19   That's so true.

00:45:20   Well, you know what to begin with, because once you learn the words for the event handlers

00:45:23   for "will" and "did" and "finish" and all that stuff, then at least you have

00:45:28   a fighting chance on the prefixes. But the words that come after the prefixes, that's

00:45:34   kind of like people writing little essays in their parameter names, and the order that

00:45:38   They put the adjectives and verbs and where the with comes and the option and error and

00:45:43   all that.

00:45:44   So there's a rich history of scrambling up the fake name parameter things.

00:45:49   That's what they should do.

00:45:51   They'll never do this, but give object to see real name parameters so the order doesn't

00:45:54   matter anymore.

00:45:55   That'd be great.

00:45:56   Oh, God.

00:45:57   That would be a different language.

00:45:58   That would be a different language.

00:45:59   That would be a different language.

00:46:00   That would be a different language.

00:46:01   That would be a different language.

00:46:02   That would be a different language.

00:46:03   It's funny though, Marco, because just today, I was trying to remember for the—I was working

00:46:07   with my coworker who's learning the language and the API, and I was trying to remember,

00:46:11   "Wait, how do you get a lowercase string? It's not too lower. That's .net. No, that's

00:46:16   not how Apple would do it."

00:46:17   How about just lowercase string?

00:46:18   No. You know what? I bet Apple would do lowercase string, and sure enough, that's what it would

00:46:22   do. So it's exactly—

00:46:23   Or like strings by converting to lowercase.

00:46:24   Yeah, so that's what I'm saying. You got the—

00:46:27   That's true.

00:46:28   Yeah. Well, like earlier today, I had an array that I wanted to join with a string and join

00:46:35   all the components with a string. And so I had the array, and from the array I started

00:46:39   typing string by. And I'm pretty sure that was correct. It's string by joining components

00:46:44   with string, or something like that. And because I'm familiar enough with Apple's style, I

00:46:49   was able to guess that method without looking it up. And I was right.

00:46:54   And so, an interface builder is actually very similar. Once you get it, then you can see,

00:47:03   "Okay, I can see why they thought that made sense, and now it makes sense to me, and now

00:47:09   I'm past it."

00:47:11   But the learning curve is just ridiculous for all this other stuff.

00:47:13   I understand the verbose naming thing, that someone who has never seen Objective-C before

00:47:18   can look at that and guess that you are taking a string and joining a bunch of other strings

00:47:25   with some other string, and they can tell which is which.

00:47:28   the mental and visual space that that call takes up,

00:47:32   as compared to like s equals a dot join,

00:47:36   and then single quotes the joining string.

00:47:39   Like maybe someone doesn't know what that means,

00:47:41   but once you know the language and know

00:47:42   a little bit about the basics of the API,

00:47:45   it's just that's why people are allergic to verbose things.

00:47:48   Not because verbose is so much bad, but because there's

00:47:51   a limited common vocabulary that people feel like should not

00:47:54   be that verbose because it happens so often.

00:47:56   And that's why a lot of Objective-C code looks like a lot of visual stuff like squint,

00:48:01   a lot of black on the page for doing operations that, you know, in some, you know, higher level,

00:48:06   more dynamic language like, you know, JavaScript even or Perl or Ruby or Python would just be so

00:48:12   much, take up so much less room and be so much faster to scan because you wouldn't have to read,

00:48:18   you know what I mean? Like it's just join map grep filter, you know, replace substitute instead of

00:48:25   the big English sentences with stuff hanging off of it.

00:48:28   Right.

00:48:29   Although, the big English sentences are substantially easier to read if you aren't familiar with

00:48:34   the API that they're calling.

00:48:37   That's true, but I'm saying there's a subset of really super common functionality.

00:48:42   So I guess maybe it would be weird to have a language where the—I don't know if it's

00:48:45   weird, I think it's reasonable.

00:48:46   They call it in Pearl Huffman coding, where you take the things that are common and make

00:48:50   them concise. And as you get more esoteric, you get more verbose.

00:48:55   So the built-in stuff is super duper short.

00:48:57   Lowercase is LC, right?

00:48:59   But the really more esoteric things, like creating a socket with timeouts

00:49:03   and a binding port and stuff, that is verbose and has big name parameters.

00:49:07   And everything's long and spelled out, right?

00:49:09   Whereas in Objective-C-- and not the language, but the API,

00:49:12   and the Cocoa and Foundation APIs-- everything is verbose.

00:49:14   Even basic string functions, even things dealing with numbers and formatting,

00:49:19   everything is verbose.

00:49:20   They don't say, OK, people are going

00:49:22   to change a string to lowercase way more often than they're

00:49:26   going to set up some sort of handler for some event

00:49:30   or whatever, set up an NSNotification center.

00:49:32   So shouldn't one of those be shorter,

00:49:34   because it's going to be more common?

00:49:36   To be fair, the lowercase string method

00:49:38   is one of the shortest method names.

00:49:41   It's not two letters long, right?

00:49:42   And substitution, like running regular expressions matches

00:49:46   and substituting-- Perl thought it was important enough

00:49:49   put syntax in the language for it. So did sort of JavaScript kind of put syntax in the language

00:49:54   for it and a couple other things too, but you know, okay, so fine. An objector saved,

00:49:57   it's not a syntax in the language, but the API for things that deal with strings don't have any

00:50:02   recognition of how common they are. Like they are just as verbose as everything else. Although—

00:50:07   Well, and then a string is monolithic as hell as well. I mean, it has so many different

00:50:12   weirdo methods, like for paths and—

00:50:14   And--

00:50:15   Can't you do-- doesn't it have data type things

00:50:17   related to URLs?

00:50:19   And it's like, I thought you were a string.

00:50:20   What do you have methods that have to do with URLs?

00:50:23   Well, I kind of know about those two.

00:50:24   Yeah, there's a whole bunch of things.

00:50:25   Why?

00:50:25   Why do you know about URLs?

00:50:27   You're a string class.

00:50:29   The core useful foundation class is

00:50:32   in a string, in its data, in its array.

00:50:34   There's so much weird-- OK, I want to convert this to this.

00:50:40   Which object has that class, or has that method?

00:50:42   Which class has that method?

00:50:43   And a lot of times, it's not the one you expect it to be.

00:50:46   It's not.

00:50:46   You've got to do like a knitWith,

00:50:48   and then you pass the NSString, or do you

00:50:49   call a method on NSString that returns the string from data?

00:50:52   Yeah.

00:50:53   And yeah, it's--

00:50:54   Yeah.

00:50:54   String to data gets me every time.

00:50:56   I always assume the wrong one has the method I need,

00:50:58   and I always have to spend two minutes looking

00:51:00   through documentation--

00:51:01   I actually have a macro IP string to data.

00:51:04   That's it.

00:51:05   Or I know, and IP data to string,

00:51:08   which is also a very common one.

00:51:10   like when dealing with web services, you get back data.

00:51:14   I use those constantly.

00:51:15   I also have a whole string category

00:51:18   that I stick on my strings.

00:51:22   I stole XPath's string functions,

00:51:24   so I have substring before, substring after, contains,

00:51:28   and a few other little things like that.

00:51:31   Like to just parse strings and check them,

00:51:32   because it's just-- even contains,

00:51:34   it's like a way more compact syntax than like--

00:51:37   Oh, god, yes.

00:51:37   If n is not found does not equal string range

00:51:40   of string and yeah, it's so much more compact.

00:51:44   So I'll definitely add helpers for things like that

00:51:46   that I do very commonly.

00:51:48   URL encoding, the default method of string

00:51:52   by replacing percent escapes using,

00:51:56   like that big long method that converts a string

00:51:59   to URL encoding doesn't do it right for OAuth.

00:52:01   There's a few characters that that method doesn't encode

00:52:07   that whatever RFC OAuth requires does require them to be encoded.

00:52:11   So I have my own IP URL encode string methods.

00:52:15   So I have weird add-ons like that that just save me time.

00:52:19   And the whole idea of having categories on classes

00:52:22   is awesome, that you can extend the built-in system classes.

00:52:26   You think that's awesome?

00:52:28   Yeah, you love Ruby.

00:52:29   A monkey patching your brains out.

00:52:30   You're going to go blind.

00:52:31   Certainly it can be done badly.

00:52:34   And also, haven't you heard?

00:52:35   It's three letters, please, for third party code in the prefixes.

00:52:40   You're just going to stick with IP, because that'll never

00:52:42   conflict with anything having to do with the technology stack,

00:52:44   right?

00:52:44   Yeah, exactly.

00:52:47   I don't understand why there are no namespaces.

00:52:49   I mean, I understand, because it's all C and it's all--

00:52:51   It's just C with the runtime.

00:52:53   I know, I know.

00:52:54   But god, namespaces would be so nice.

00:52:56   Well, you know, like baby steps.

00:52:57   All these problems you're talking about would be solved.

00:52:59   They just had to put a nicer, higher-level language,

00:53:01   but not--

00:53:02   You know what?

00:53:03   It'll never happen, John.

00:53:04   He's been bitching about that for years. Well, this year is going to be type inference,

00:53:08   right? So we're lurching towards something, but all that crap with the strings and the data and

00:53:15   dealing with stuff like that, it completely goes away if you have a language that has,

00:53:20   I don't know, native strings and a little more laissez-faire attitude about data types where you

00:53:25   can just sling things around and not worry about if it's a float or an integer or a number. Oh,

00:53:30   no, you can't do that. That language is useless. I know. I know all the reasons why

00:53:34   Objective-C is living on and it's way more efficient and so on. But, you know, everyone

00:53:38   wants to have their cake and eat it too. So right now at least Apple has its cake.

00:53:40   I honestly, I like it.

00:53:42   I understand how that analogy works.

00:53:43   But I like Objective-C and all of Apple's recent stuff with it. I mean, yeah, it's not perfect.

00:53:48   But, you know, I think if you think any language is perfect, you don't know it well enough yet.

00:53:53   Or you don't have enough experience as a programmer, honestly. And so every language

00:53:58   has problems and shortcomings. And, you know, just by the nature of these things, it's not

00:54:03   really possible to design a perfect language.

00:54:06   And certainly, Objective-C has a lot of ancient baggage

00:54:11   that it's still carrying that it can probably never get rid of

00:54:13   because of the kind of language it is.

00:54:15   But Apple's doing some pretty awesome stuff with it.

00:54:19   Like even simple things, they did reduce a whole lot

00:54:22   of that boilerplate last year when they introduced

00:54:26   compact syntax for array access, dictionaries, stuff like that,

00:54:31   the compact primitives.

00:54:33   They introduced a lot of that stuff that they are making real progress, making synthesize

00:54:39   optional, stuff like that.

00:54:41   And they'll get rid of the double name stuff with the type inference where you won't have

00:54:46   to declare the variable being of type whatever and then call the class method to give you

00:54:52   a new one of those.

00:54:53   Didn't I just write that name?

00:54:55   Exactly.

00:54:56   Well, of course that's the class that I'm going to call the method on to instantiate

00:54:59   one of those because that's the type of the variable.

00:55:02   So that's my next guess for what they're going to add.

00:55:06   But I still feel like at a certain point, you can't--

00:55:10   it's like HFS Plus.

00:55:10   At a certain point, you can't just keep adding crap

00:55:12   or fixing crap or trying to make it better.

00:55:14   At a certain point, you need a new boat.

00:55:16   Oh, right.

00:55:16   As long as it's like a C-based language,

00:55:18   you're always going to have-- there's

00:55:20   going to be a pretty hard limit on a lot of these modern niceties

00:55:24   that you can add to it.

00:55:26   I mean, the transition I see-- I'll

00:55:28   keep predicting this until I'm dead

00:55:30   or until Apple goes out of business--

00:55:31   is that you know how now you have core foundation, which

00:55:34   is just straight C, and you've got the Objective-C APIs,

00:55:36   and everyone's like, oh, I've got to deal with core foundation

00:55:39   APIs, like lower level, and it doesn't have all this stuff,

00:55:41   or whatever.

00:55:44   If they come up with something higher level than Objective-C,

00:55:46   which I think a higher level language is much more

00:55:48   appropriate for most of the stuff you do-- catching events,

00:55:52   figuring out when they click this button,

00:55:53   bring this view into view.

00:55:54   Like, that crap does not need to be in a C-based language.

00:55:58   It's just monkey work of connecting up things in the UI.

00:56:00   But there will always be parts of it that need to be in a lower level language.

00:56:03   So then you have a continuum of, all right, I wrote most of my code

00:56:06   in whatever this higher level language is.

00:56:08   And then some portions of it are Objective-C

00:56:09   because it's so much more efficient.

00:56:11   And then presumably some portions are still in core foundation.

00:56:13   It's a layer cake of, all right, well, the OpenGL crap is still a straight C

00:56:18   API because that's really performance sensitive.

00:56:20   And then somewhere in the middle is something

00:56:22   that's not high level UI dealing with it,

00:56:25   but it's a little bit lower level.

00:56:26   And then at the top, you'll be-- overall structure

00:56:29   most of the time you're writing this very high-level language.

00:56:31   I could see them going to something like that.

00:56:33   I think that served them very well, though,

00:56:35   in these early years of mobile computers.

00:56:40   Because they have gained so well--

00:56:43   they've benefited so much from just the sheer efficiency

00:56:47   of the C-based language.

00:56:49   The things that benefit them early suddenly

00:56:51   become disadvantages later.

00:56:53   Exactly.

00:56:54   Because then suddenly everyone else is less efficient language.

00:56:56   The CPUs catch up.

00:56:57   and it's like, "Oh, that was the great advantage for you back then, but now not so much. Now

00:57:03   that advantage is insignificant."

00:57:06   If WebOS came out five years from now, it would stand a way better chance in the market,

00:57:12   because everyone wouldn't be complaining about its terrible battery life and terrible performance.

00:57:19   It wouldn't be that big of a difference from anything else that was out there.

00:57:23   It's kind of like Android.

00:57:24   I mean, Java is disgusting, right?

00:57:25   But Android, like it is--

00:57:27   Tennessee, I think.

00:57:29   It is using a high-level language.

00:57:30   And it was slower for a long time.

00:57:33   And arguably, iOS still has the performance advantage there,

00:57:36   but the gap has really closed.

00:57:37   Exactly.

00:57:38   Hardware is getting better.

00:57:39   There's more memory.

00:57:41   There's more stuff to indulge Java's foibles.

00:57:44   And if you believe that the things you

00:57:47   don't have to worry about in Java,

00:57:48   like segmentation faults and crap like that,

00:57:51   are an advantage, then suddenly Android's platform,

00:57:56   in this particular respect, becomes

00:57:57   more attractive to development, to doing new developments.

00:58:00   You don't have to learn about Arc.

00:58:01   You don't have to learn about pointers, for crying out loud.

00:58:05   You know what I mean?

00:58:06   Right.

00:58:06   You don't have all these weird stars before your variable

00:58:07   names that new programmers have no idea what they're there for.

00:58:10   Yeah.

00:58:10   What is that?

00:58:11   And why it weirdly breaks when they forget one.

00:58:13   Luckily for Apple, in the continuum of things

00:58:16   that make someone go on a platform or not,

00:58:18   the crappiness of the language is very low on the list,

00:58:21   as evidenced by the fact of all these bazillion people suddenly learning Objective-C, because

00:58:25   that's where the money is.

00:58:26   Exactly.

00:58:27   So, all right, we'll learn your crazy-ass language with square brackets.

00:58:29   Just get out of my way.

00:58:31   And that's always how it's been, except on the web.

00:58:33   On the web, you can write in pretty much anything, as long as you can find some server software

00:58:37   to run it.

00:58:38   So the web has tons of great languages to choose from, and it doesn't really matter

00:58:41   which one you write in.

00:58:42   But on native platforms, there's always been one language and one framework on every major

00:58:50   native platform where you really should be writing things in that.

00:58:54   And Windows for a long time has been C++ and then

00:58:58   more recently it's moving into .NET stuff. OS 10 has

00:59:02   always been Objective-C. iOS has always been Objective-C.

00:59:06   They're adding stuff to the framework. There's always

00:59:10   that push that if you want to develop on this platform you should really be doing it

00:59:14   in this language everywhere except the web.

00:59:18   So, if—I agree with that. That is a very interesting point. My question for the two

00:59:24   of you gentlemen is, if you were to pick the language today that would replace or supplement

00:59:32   Objective-C, what is it?

00:59:33   Jon, this is all you.

00:59:38   What are my criteria? What realistic bounds do I have to stick with?

00:59:44   It has to be language that exists today, which by the way, I don't think Apple would necessarily

00:59:48   play by that rule.

00:59:49   No, they definitely.

00:59:51   And it has to prevent John Syracuse from continuing to bitch about what languages are available

00:59:57   for use in Apple platforms.

01:00:00   No choices to fill those criteria.

01:00:02   Okay, it will get him to complain as little as possible, which is an extremely lofty but

01:00:08   theoretically plausible goal.

01:00:10   This is a good question because it makes me realize all this time I've been talking to

01:00:13   I've never been pushing for Apple to adopt any existing languages.

01:00:17   I've always been thinking that they will do their own thing.

01:00:20   Like, pretty much as they have been, like Objective-C, at this point, is their own thing.

01:00:24   Like, it may have started out as the old--like, at this point, whatever crazy fake version number they apply to the language,

01:00:29   they've changed it so much, they're completely fearless about changing it.

01:00:32   So I always imagined, whatever thing replaced it would also be of their own invention,

01:00:36   exactly tailored to what they need the language to do,

01:00:39   And no language, like, there's no language out there that I like well enough to say they

01:00:46   should just do that one.

01:00:48   And I think you're right, and I think they would do their own thing, but then that John

01:00:52   Syracuse guy would continue to complain about the fact that everyone has to learn this weird

01:00:56   new language.

01:00:57   No, I never complained about learning.

01:00:58   I have never made a single complaint about, "Oh, you've got to learn this new language."

01:01:00   Never.

01:01:01   Well, here's an idea.

01:01:03   What if they are doing it already?

01:01:05   What if--so similarly, how Objective-C in its first implementations was basically a

01:01:11   macro language on top of C. Is that accurate? I've always heard that.

01:01:16   You're thinking of C++.

01:01:17   OK. No, I don't think so. I think it was C. Anyway--

01:01:19   No, C++ was C with classes, and it was just a series of--

01:01:24   Yes, that is also true. But I think Objective-C started out the same way.

01:01:27   It always had to have a runtime, right? I mean, it wasn't just macros. It had to have

01:01:31   a library of code to somewhere, Objective-C message then had to be written and you had

01:01:36   to call into that library to call a method.

01:01:38   Right.

01:01:39   Anyway, Objective-C started out as a bolt-on on top of C. It has matured a lot since then,

01:01:44   and the C roots are still all there, but now the tools are all native of Objective-C, the

01:01:50   compilers are all native of Objective-C that Apple's writing.

01:01:55   That is the language now.

01:01:57   What if their next big language is what they're doing with Objective-C now?

01:02:03   That's moving towards it.

01:02:04   And then at some point in the future, they enable some kind of new syntax mode, where

01:02:11   it adds a lot of the stuff that we want, it adds a lot of the complex stuff, it hides

01:02:14   pointers and things like that.

01:02:16   Yeah, so Objective-C without the C.

01:02:18   Yeah, built on top of Objective-C temporarily, or in version one.

01:02:23   And then over time—and exactly what you said, you'll have to drop into that syntax

01:02:27   to use some low-level APIs, but most of everything will be available right there.

01:02:34   I think they're moving...

01:02:35   Because if they were going to replace this language in five years, I don't think they'd

01:02:40   be putting this much effort into it now.

01:02:42   They're doing radical changes to it now.

01:02:45   The Objective-C without the C thing seems to be the path they're going on, but this

01:02:48   does not entirely satisfy me.

01:02:50   I'm sure they're taking this into account with their plans.

01:02:52   They are, totally.

01:02:53   They're listening right now somehow.

01:02:57   The people who are making decisions about what to do disagree with me about what the

01:03:03   ideal situation would be.

01:03:04   I think they would be perfectly happy to slowly evolve Objective-C to eventually bifurcated

01:03:09   into Objective-C without the C part, where safety is much more guaranteed than it is

01:03:14   and you could have an unsafe realm.

01:03:16   And then most people eventually get most people doing their coding in the safe part, where

01:03:21   you can't scribble all over your own memory, where you just call into Objective-C APIs

01:03:25   and just use the escape hatch for the other stuff.

01:03:28   But I really, like I mentioned, I really think that ideally--

01:03:31   and of course, you can't have the ideal-- but ideally,

01:03:35   a higher level language with more safety guarantees

01:03:37   and less fussiness about types wouldn't just mean,

01:03:40   oh, well, we've got that language.

01:03:42   We're all set.

01:03:42   It would also necessarily imply different APIs.

01:03:46   Like in a language with built-in strings,

01:03:48   NSString doesn't exist.

01:03:50   You don't instantiate a class to get a string in a language that

01:03:53   has native strings.

01:03:54   in a language that has language level support for regular expressions, that's not like a

01:04:01   library you call.

01:04:03   As things get pulled into the language, you necessarily change the way API works.

01:04:08   Whole concepts of APIs change based on what the language supports.

01:04:12   That's why these bridges are so terrible.

01:04:14   Like if you have Python, you're like, "Oh, I have this amazing Python.

01:04:17   It's high level language."

01:04:18   But you're just calling the same freaking APIs and they don't mesh.

01:04:21   It seems like, boy, no one would ever write a Python API like this. It's so clear that I'm

01:04:25   calling into an Objective-C API, not just because of the naming conventions, but just because of

01:04:29   write out error parameters where you pass in an error and it's going to write back to it and crap

01:04:35   like that. That doesn't happen in high-level languages because you could. You could pass

01:04:39   references in languages with references, but it just doesn't. It's not how you design the API.

01:04:43   And like I said, the whole NIS string wing of the language just disappears. And then maybe,

01:04:50   like Ruby, you have all the strings be objects and you have methods on them, which isn't

01:04:53   that the same thing? Well, not really, because it's not like you're saying "new string" and

01:04:57   putting—I just feel like the language and the API are a matched set, and you can't change

01:05:04   one without changing the other. And if you change the language sufficiently, if you keep

01:05:07   evolving this language to the point where it starts becoming higher level and more safe

01:05:12   and less work for the developer, it will be a shame if the API still looks like, "Oh,

01:05:18   "Oh, well, why does the API look like this?" Well, it used to be it was just the C-based

01:05:21   language, and this is the way everything was.

01:05:23   Well, see, I'm not sure I agree, though, because everything you just described is .NET,

01:05:28   or at least to my ears. And it's weird, because I have no love for Microsoft, but I do think

01:05:34   .NET is actually a pretty cool language. And to a .NET developer, you, generally speaking,

01:05:40   can use the Win32 API without ever touching C++ or C, because .NET consumes all of that

01:05:47   and acts as the bridge.

01:05:49   And even when I'm calling into these APIs, I don't need to

01:05:52   worry about pointers.

01:05:54   I can, but I don't need to.

01:05:55   And generally speaking, I don't need to worry about any

01:05:57   of that crap, because .NET has encapsulated all of it and is

01:06:00   putting a facade in front of it, so I don't have to worry

01:06:02   about that.

01:06:03   That being said, if I have an old C API that I want to call,

01:06:06   or C++ API I want to call, I can P invoke into it.

01:06:09   And I can say, hey, there's DLL here.

01:06:10   Here's the structure of the method I need to call.

01:06:13   And I can even do it unsafely.

01:06:16   and I have an unsafe keyword where I can manage my own memory and do all that crap. So everything

01:06:19   you just described, believe it or not, is .NET. I'm not necessarily saying that.

01:06:23   I know about .NET. I think .NET is way far ahead of where Apple is, technologically speaking.

01:06:29   Maybe not necessarily API-wise, because Microsoft seems to have more trouble figuring out what

01:06:34   it wants out of an API and sticking to it. I don't remember what iteration of, you know,

01:06:38   "No, you should use this toolkit for UIs." No, actually, just this one.

01:06:41   It changes every five years.

01:06:42   Okay, no, seriously.

01:06:43   Yeah.

01:06:44   Yeah.

01:06:45   The CLR and that whole idea behind it, that is a foundation, that if Apple had that foundation

01:06:50   now and it was performant and they'd put as much time into it as Windows had, they would

01:06:53   be in a much stronger position to say, "Look, everything is common language runtime, and

01:06:57   we have all these escape patches for unsafe, and we can put new languages on it."

01:07:01   And you know, Python on the CLR is just straight-up Python.

01:07:05   You write your Python functions, and we can try to Python API.

01:07:10   You write they have to do bridges, but hopefully they don't just do straight bridges.

01:07:13   They do, you know, wrappers are different than bridges.

01:07:14   a wrapper is like, "I want to use a convenient API that hides all the stuff that's irrelevant

01:07:19   to me because I'm in a high-level language." And wrappers have a cost in terms of performance,

01:07:24   but they're a better semantic fit than bridges are.

01:07:27   Yes, absolutely. And that's what I'm used to, is seeing a bunch of wrappers and facades

01:07:31   that under the hood are doing P invokes and all the nasty, crappy things that I don't

01:07:35   want to have to do. But to me, I'm just calling system.whatever.whatever.

01:07:40   The thing, the disadvantage that Microsoft has is that the API that it's wrapping is

01:07:44   much more disgusting than, you know what I mean?

01:07:47   Like Win32 is compared to like Core Foundation, it's not really a contest.

01:07:50   Oh, it's awful.

01:07:51   Yeah, so they're just wrapping wrappers of wrappers because in the very bottom is just

01:07:56   this terrible slime that no one wants to touch.

01:08:00   It's true, but you still haven't answered my question.

01:08:01   If you were to pick a language today, what would you pick?

01:08:05   Do I get to pick Perl 6 even though it doesn't really exist, kind of, sort of?

01:08:09   It's kind of a cop-out, I mean, because you don't really know what's so bad about it yet.

01:08:13   Well, I mean, I know what's so bad about the language, I just don't know what's so bad

01:08:16   about the implementation.

01:08:17   The language exists as a spec, it's just no one has implemented it, so, like, does it

01:08:21   really exist?

01:08:22   You know.

01:08:23   Right, that's kind of a question there.

01:08:24   You have a half implementation or whatever, but, like, language-wise, I think Perl 6 is

01:08:29   the most exciting language that sort of kind of almost exists.

01:08:34   I dislike Python more than I dislike Ruby.

01:08:38   So I would probably have to go with Ruby.

01:08:41   I really do dislike several things about Ruby

01:08:45   pretty vehemently, because I feel like they should have

01:08:47   known better.

01:08:49   But I dislike Python more, and I definitely

01:08:51   dislike JavaScript more.

01:08:52   So I guess I would have to go with Ruby as much

01:08:54   as it pains me to say that, as much as I am not

01:08:57   a fan of Ruby, really.

01:08:59   Python is just totally distasteful to me.

01:09:02   and JavaScript is just too primitive.

01:09:06   You know, nothing about Apple modernizing Objective-C

01:09:10   and eventually adding this new syntax layer on top of it,

01:09:13   if that's what their plan is, that

01:09:14   doesn't preclude them from also modernizing

01:09:17   the APIs along with that.

01:09:19   Well, I mean, they would have to wrap them.

01:09:22   Well, temporarily.

01:09:23   But compare with a bridge.

01:09:24   A bridge, when it wraps things, I

01:09:27   agree with everything you said, a bridge sucks.

01:09:29   because you get these weird APIs that obviously are not written

01:09:33   with that new language in mind.

01:09:37   But that's because bridges are usually

01:09:38   written by people who aren't the API platform owners.

01:09:42   If Apple would make a new bridge--

01:09:44   and the Java bridge was its own thing.

01:09:46   That was doomed.

01:09:46   But if Apple decided this is the new thing, this new language

01:09:51   layer we built on top of Objective C now,

01:09:53   or that's backed by Objective C that's now this whole different

01:09:56   language layer on top, this is our new thing, this is the way forward, then within a few

01:10:02   years they could have all their APIs modernized to it. Or at least all the ones people actually

01:10:07   use on a regular basis.

01:10:08   Or some of them. I mean, what you would hope is that, like, I guess you would hope that

01:10:13   the bottom layers roll up eventually, like, kind of like the assembly. Assembly has been

01:10:18   basically completely rolled up. Like, you know, original Mac operating system, tremendous

01:10:21   amount of assembly.

01:10:22   And the amount of assembly in operation

01:10:25   that anyone has to write or deal with or call or anything

01:10:28   has just shrunk up to the point where now it's

01:10:29   like in a couple of device drivers in the kernel

01:10:31   and some libraries for doing math.

01:10:33   That's it.

01:10:34   It's a low end curls up, and it's just

01:10:36   gone from the operation of the operating system,

01:10:39   the things dealing with the GUI.

01:10:41   And you would hope that eventually the C part of things

01:10:44   starts to roll up too.

01:10:45   Not the objective C part, but let's just

01:10:47   start with the C part.

01:10:48   OK, well now the C is only in the kernel

01:10:50   and device drivers or whatever.

01:10:52   And it used to be everywhere.

01:10:53   Everything used to be C. Everything is,

01:10:56   if you can't objector C as it.

01:10:57   I would like to see progress at the high end,

01:11:01   but also rolling up at the low end.

01:11:02   Because if you don't do that, all you're doing

01:11:04   is putting more layers on layer cake.

01:11:06   And at a certain point, no matter

01:11:09   what kind of performance you get--

01:11:11   this is a great article that someone should put in our

01:11:13   non-existent show notes.

01:11:14   But at a certain point, no matter

01:11:15   what kind of performance you get from the hardware,

01:11:17   if you keep putting layers on the layer cake,

01:11:20   Performance won't be your problem. It'll be like latency. Did you read that article from John Carmack talking about latency of VR headsets?

01:11:26   No, but that's that sounds good.

01:11:28   It's like we have amazing technology with GPUs and we can do like amazing texture fills and huge, you know, shader operations

01:11:35   operating on like millions and millions of pixels like 15 times per frame and we can do these amazing frame rates and

01:11:39   none of that matters because if you can't react to me turning my head within 20 milliseconds and get a new image in front of

01:11:46   my eyes, it's like motion sickness inducing. And so all this great technology we have actually

01:11:50   impairs the ability, because there's so many layers in the layer cake of like this goes

01:11:54   through this stack and goes through the USB thing and converted there and then goes through

01:12:00   the input system and then goes through the OpenGL and out to the graphics card and comes

01:12:04   back out and has to be displayed. Like all the layers we've added to the layer cake,

01:12:09   for this amazing performance, kills latency. So this is not a direct analogy because it's

01:12:13   not like this latency of the API stack. But it's the same idea is that we can't just keep

01:12:15   adding layers on a layer cake, you have to curl up the lower ones too. You have to pop

01:12:19   ones off the bottom as you add ones to the top. So that's the kind of progress I'm looking

01:12:23   for in my lifetime. If anyone's listening, get on that.

01:12:26   I think they're doing that. We haven't really seen the next big step yet, but it looks like,

01:12:34   based on the actions that we have seen, I think that's a plausible prediction of where

01:12:38   they're actually heading.

01:12:40   They're not going in the wrong direction. It's not like we're... It's just quibbling

01:12:44   about the details and the pace.

01:12:46   Mobile set everything back a decade or two.

01:12:49   So fine, I understand that.

01:12:52   It makes perfect sense.

01:12:53   But I would like to see more advancement in the high end

01:13:00   and more curling up in the low end.

01:13:02   The road they're taking to it is perhaps more

01:13:04   securitous and slower than I would like,

01:13:07   especially when I see things like CLR existing

01:13:09   for such a long time.

01:13:10   The technology was there, and yeah, your entire stack is still better than Microsoft's now,

01:13:17   but my whole thing with this is it's not something you can do overnight.

01:13:22   If you're going to try to do it incrementally in pieces, I think you will end up running

01:13:26   into a barrier where there has to be discontinuity somewhere.

01:13:29   If there isn't, you're going to end up with a sort of mongrel at the end of it, like HFS+

01:13:33   where you just took this old thing and slowly modified it a bit at a time, but never sat

01:13:36   down to say, "Okay, what is this new thing that we want?"

01:13:40   It's like if iOS was just an incremental revision of slowly adding mobile-savvy features to

01:13:44   Mac OS X.

01:13:45   It wasn't.

01:13:46   They started over conceptually from the UI perspective.

01:13:50   I'm a fan of that kind of clean break, and I worry that slowly creeping up on Objective-C

01:13:55   without the C will result in a language that no one can really love.

01:13:59   Maybe that won't ever hurt Apple, because like we said, it's not a big deal as long

01:14:03   as you're doing great in the market and everything, but that's what appeals to me.

01:14:07   So I think it's like a philosophical difference.

01:14:09   And obviously, I'm probably more idealistic in not being the person whose job it is to

01:14:15   make this decision for the biggest company in the world or whatever.

01:14:19   And you could also question—I think it's worth considering—is it too late to do something

01:14:24   like that?

01:14:25   Are these systems so complex?

01:14:27   Are these devices and APIs so feature-rich and so mature?

01:14:33   Would it be too big of an undertaking for them to do this now?

01:14:36   It's never too late.

01:14:38   Never too late.

01:14:39   I mean, if anything, I would say,

01:14:41   when is the time that you should be thinking about this?

01:14:44   It's when you're at the height of your power.

01:14:46   Because if you try to do it on your way down,

01:14:47   Palm is like, wait a second.

01:14:49   Did you know ROS sucks?

01:14:50   We should make an all new one.

01:14:52   Like, too little, too late.

01:14:54   Like, rim.

01:14:54   Rim, rim.

01:14:55   You know what I mean?

01:14:56   You got to-- so whatever their plan is, they have a plan.

01:14:59   Like, if it takes them longer and they

01:15:01   do it in a smaller series of steps or whatever, but like--

01:15:05   Either the company will go out of business or the day will come when they need to have

01:15:09   this better, higher level thing.

01:15:11   And they're either going to have arrived at it through a series of small steps and perhaps

01:15:14   ended up at a destination that's not quite as pretty as if they had made a larger discontinuous

01:15:18   jump.

01:15:20   But it's out there, I think.

01:15:24   I think the only thing I wonder is perhaps we should pay a little more attention to any

01:15:30   mentions of LLVM and Clang at WWDC because it seems to me if they were going to sneak

01:15:35   in a new language or a new framework or something like that, I would suppose that we would see

01:15:40   traces of that there first. Like, Arc, I believe, was, if I'm not mistaken, was built off of

01:15:47   the static analysis that was in one of the two of these guys. And I'm opening up a

01:15:51   whole new can of worms that I don't want to open, but I'm just curious to see what

01:15:55   LLVM and Clang are doing lately and what will be announced that relates to that.

01:16:00   Well, that's why I'm thinking of type inference, because it's like a natural progression

01:16:04   of what they're doing, they pretty much almost have the metadata in there for it.

01:16:09   Static analysis combined with the knowledge required to make ARC work makes it seem like

01:16:15   they could do some reasonable—maybe it's not enough bang for the buck for them yet. Maybe they

01:16:20   say, "Okay, yeah, well, we could do type inference, but it's not such a big win to be worth the

01:16:23   confusion, so we're just going to bail on it." But assuming they actually think it's worthwhile,

01:16:27   it's an obvious next step of things they can do to make it so you have to type less crap,

01:16:32   but you're not really changing the language. It's like the fast enumeration crap. It's not a change

01:16:37   in the language, really. It's just like, "Oh, you don't have to type too much stuff." Also,

01:16:40   now you can do like auto or var or whatever the hell word they use to indicate, "Look, don't make

01:16:44   it—you know what type it's going to be. It's clear from the code." And then—

01:16:47   And also, I think the pace of those improvements has increased dramatically in the last few years.

01:16:53   Yeah. Once they got totally free of GCC. Right. Now we're seeing this explode. This past year,

01:16:59   year they added all those little shortcuts and so many little benefits like just in one

01:17:03   year. You know, and the year before they added more stuff.

01:17:06   They still have C++11 kind of weighing them down. Like, they got out from under GCC, but

01:17:10   they still need to do a lot more to like fully support the monster language that is C++.

01:17:15   So like that probably still absorbs a lot of their time, like finally nailing down all

01:17:20   the little crazy ass idiosyncrasies of C++. Is that even possible?

01:17:25   I mean, the point is that GCC-- I don't know, maybe not GCC

01:17:30   as much, but C++ compilers that have been compiling production

01:17:35   C++ for a long time are still ahead of where Clang's C++

01:17:39   support was as of a year or two ago.

01:17:41   Maybe they've closed the gap now.

01:17:42   But it's a lot of work, and it's kind of annoying work,

01:17:45   because Apple barely uses C++ compared

01:17:47   to how much Microsoft uses it, for example.

01:17:50   And so it's like, oh, well, we've

01:17:52   got to make our stupid compilers support.

01:17:53   We don't care about this language, really.

01:17:55   we have enough support for our stuff, what?" And it's like, "Alright." Because if you want

01:17:58   Clang to be a popular widespread compiler, you have to make it support C++, even if Apple

01:18:04   doesn't use it that much. And that means all the stupid esoteric features, because if you

01:18:08   can't build important stupid projects, foo, if you can't build Boost or whatever, they

01:18:13   don't have that problem now, but they did early on. And if you can't support the new

01:18:17   new C++11 Lambdas and all this other crap that, you know, that's still in the background

01:18:25   the catch-up stuff that they have to do before they can totally fly free, you know.

01:18:30   Is C++ Ox still a thing? What happened with that?

01:18:34   That's what we came to C++11, didn't it?

01:18:36   I don't know. I don't follow the C++ world at all.

01:18:39   Yeah, neither do I.

01:18:40   I try not to, but it leaks into my worldview occasionally.

01:18:46   We're done.