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: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: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: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: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: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: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: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: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
◼
►
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: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: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:58
◼
►
- It's just what you wanted, right?
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: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: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: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: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: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: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: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
◼
►
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: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: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: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: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: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: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: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: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 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
◼
►
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:53
◼
►
And yeah, it's--
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: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
◼
►
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: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: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
◼
►
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: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: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
◼
►
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
◼
►
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: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: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: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: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: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: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: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: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: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: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: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: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.