PodSearch

ATP

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.