#102: Sharpening Your Skills.
00:00:00
◼
►
Hello, and welcome to Developing Perspective. Developing Perspective is a podcast discussing
00:00:05
◼
►
news of note in iOS development, Apple, and the like. I'm your host, David Smith. I'm
00:00:09
◼
►
an independent iOS developer based in Herne, Virginia. This is show number 102, and today
00:00:13
◼
►
is January 3rd, 2013. Developing Perspective is never longer than 15 minutes, so let's
00:00:19
◼
►
get started.
00:00:20
◼
►
So the topic I decided would make sense for today is vaguely related to kind of a new
00:00:25
◼
►
new you kind of thing. But specifically, what I was going to talk to is how do you continue
00:00:31
◼
►
to get better and better at your craft? How do you become a better developer? How do you
00:00:36
◼
►
become a more skilled, you know, actual practitioner of what we do over time? This is something
00:00:42
◼
►
that's often easy to kind of find you fall back on, or you just sort of stop becoming
00:00:48
◼
►
better. I find this happens to lots of myself, I get stuck in a rut, I start solving, you
00:00:52
◼
►
You know, every problem the same way.
00:00:54
◼
►
The classic thing of, you know, if all you have is a hammer,
00:00:56
◼
►
everything looks like a nail.
00:00:58
◼
►
It kind of becomes that way.
00:00:59
◼
►
You end up with these, I don't know,
00:01:01
◼
►
like pigeonholing yourself into a technology stack,
00:01:03
◼
►
or an approach, or a style that may not necessarily
00:01:06
◼
►
be what you want.
00:01:07
◼
►
And that can be problematic.
00:01:10
◼
►
And so here's kind of a few steps of things
00:01:12
◼
►
that I find to be pretty helpful for me to kind of try
00:01:14
◼
►
and keep my skills sharp, to keep my abilities fresh,
00:01:19
◼
►
and to not sort of fall into those problems.
00:01:22
◼
►
And so the first thing, and this is probably the most--
00:01:24
◼
►
I guess probably is fair to say, most of what
00:01:26
◼
►
I'm going to talk about is assuming that you're working
00:01:28
◼
►
in the Apple ecosystem.
00:01:29
◼
►
So you're working with Objective-C,
00:01:31
◼
►
you're working in Xcode, you're working in either AppKit, UI
00:01:33
◼
►
kit, it's that kind of thing.
00:01:36
◼
►
Some of them will apply generally,
00:01:37
◼
►
but specifically if that's what you do.
00:01:40
◼
►
So the first thing you want to do
00:01:41
◼
►
is I think it's important to make sure
00:01:44
◼
►
that you try new technologies, and especially
00:01:47
◼
►
language technologies.
00:01:49
◼
►
This is something that I think Apple
00:01:50
◼
►
has put a tremendous amount of effort
00:01:52
◼
►
and a tremendous amount of focus in over the last couple
00:01:55
◼
►
of years is they are trying as best as they can to make
00:01:58
◼
►
Objective-C better and better and better and better
00:02:01
◼
►
and to make the way that we interact with it better
00:02:03
◼
►
and better and better.
00:02:04
◼
►
Some examples of this, there's the obvious ones,
00:02:06
◼
►
things like ARC.
00:02:08
◼
►
There's things like subscripting, automatic synthesis
00:02:12
◼
►
of properties.
00:02:13
◼
►
These are all recent things.
00:02:15
◼
►
All of the improvements that they've
00:02:16
◼
►
been doing in LLVM in terms of some of the static analysis
00:02:19
◼
►
and all those kinds of things that they keep adding in.
00:02:22
◼
►
And often I'll hear from people--
00:02:24
◼
►
and this is especially people who've
00:02:25
◼
►
been developing for longer or do this as they have been doing
00:02:28
◼
►
it as their profession for longer--
00:02:30
◼
►
one of these new things comes along,
00:02:32
◼
►
and they'll kind of pass it off.
00:02:33
◼
►
And they'll be like, well, I don't know.
00:02:35
◼
►
I don't know.
00:02:35
◼
►
Maybe it's not ready for prime time.
00:02:37
◼
►
Maybe it's not quite there.
00:02:39
◼
►
And more often than not, whenever
00:02:40
◼
►
Apple ships something, in my experience,
00:02:42
◼
►
it's very ready for prime time.
00:02:43
◼
►
If it wasn't ready, they wouldn't ship it.
00:02:45
◼
►
And so putting it off is just kind
00:02:48
◼
►
of delaying the inevitable and often not really in a productive way.
00:02:52
◼
►
This is, in many ways, I think people who talk about ARC is something that often comes
00:02:57
◼
►
up this way where a lot of, I've talked to many developers, I've talked to or heard of
00:03:00
◼
►
many developers who kind of just ignore ARC and say, "Well, I can do retain release in
00:03:07
◼
►
my sleep, and so why would I bother picking up this new technology?"
00:03:12
◼
►
The reality is, I think you do yourself a disservice, even if you're not going to use
00:03:18
◼
►
it in your main production app, to not have experienced it,
00:03:21
◼
►
to not play with it, to not get an understanding of its
00:03:24
◼
►
benefits and its pros and its cons,
00:03:26
◼
►
I think you're doing yourself a disservice.
00:03:28
◼
►
And you're doing your code a disservice.
00:03:30
◼
►
One of the things that I like about most
00:03:32
◼
►
of the modern changes that they've been making to Objective
00:03:35
◼
►
C is that they reduce the amount of code, physical code,
00:03:38
◼
►
the number of characters per file, that I have in my apps.
00:03:42
◼
►
Arc was a great example of this.
00:03:43
◼
►
Subscripting does this.
00:03:44
◼
►
Automatic synthesis does this.
00:03:47
◼
►
There's huge swaths of code that I've
00:03:49
◼
►
been able to recently go through and just delete, just
00:03:52
◼
►
And for many of those, I think it's made my code better.
00:03:56
◼
►
Not necessarily because the replacement technology
00:04:02
◼
►
And many of them, they're just identical.
00:04:04
◼
►
They're just happy-- you know, compiler tricks and things.
00:04:07
◼
►
But moreover, the less sort of cruft that fills up my code,
00:04:13
◼
►
Like having these long functions--
00:04:15
◼
►
the classic for me was in the old days, was having these big D,
00:04:19
◼
►
you know, sort of having to have these comparatively large
00:04:23
◼
►
dealloc blocks that are just boilerplate that are just to me
00:04:26
◼
►
sitting there going through and as I get deallocated me going
00:04:29
◼
►
through and deallocating all the other or you know, releasing all
00:04:31
◼
►
the things that I used to reference and all this kind of
00:04:34
◼
►
stuff that, you know, is great that arc is doing and in my
00:04:37
◼
►
experience, I've been using arc basically since it was released
00:04:40
◼
►
with no problems. I think I've once had one of the weird gotchas
00:04:45
◼
►
that happens with Arc, but other than that, not a single problem.
00:04:49
◼
►
And the weird problem I had was just one of these weird things
00:04:51
◼
►
where if you move between a CG color and a UI color,
00:04:56
◼
►
you can have some weird behaviors where
00:04:57
◼
►
it gets released before it gets used.
00:05:00
◼
►
But it was basically very easy to solve and fairly obvious
00:05:02
◼
►
in terms of what the problem was.
00:05:03
◼
►
It was a very immediate crash, and I was pretty localized
00:05:07
◼
►
to where the problem was.
00:05:08
◼
►
So in general, I've been very, very pleased.
00:05:10
◼
►
And I think it's important that you do that.
00:05:12
◼
►
And whether that is just create a new project
00:05:15
◼
►
and try it out.
00:05:16
◼
►
I'm a big fan-- I have tons and tons of projects
00:05:20
◼
►
that never get shipped that aren't intended to be shipped.
00:05:23
◼
►
It would just be something like, huh,
00:05:25
◼
►
I wonder what it's like to use the new Twitter API to download
00:05:30
◼
►
a timeline and display it in a basic UI table view.
00:05:34
◼
►
It's just kind of like an afternoon project.
00:05:36
◼
►
And the purpose of that is to practice.
00:05:39
◼
►
It kind of reminds me a little bit of-- I think
00:05:42
◼
►
there's actually a movement on software development
00:05:45
◼
►
this, which I'm not really getting into exactly. But if
00:05:47
◼
►
you've ever done any martial arts, which I've done a little
00:05:50
◼
►
as a kid, but not a whole lot recently, there's a concept of
00:05:53
◼
►
what I think is called a kata, though my Japanese is not
00:05:56
◼
►
particularly good. But basically, it's a, it's a
00:05:59
◼
►
rhythmic pattern, it's a pattern or a series of movements that
00:06:03
◼
►
you do over and over again to get better at them. And so often
00:06:07
◼
►
when I think in development, there's a similar kind of thing
00:06:10
◼
►
that we have to the more often you're doing something often the
00:06:13
◼
►
the better at it you get. And you can just kind of getting used to the process of creating
00:06:18
◼
►
things, I think ultimately will make you better as you go. And then that's that's kind of
00:06:24
◼
►
how you embrace new technologies and improve your skills that way. And then the second
00:06:28
◼
►
thing or the next area that I wanted to talk about is learning from others. And it's an
00:06:34
◼
►
interesting thing in the way that the iOS community works, I would say it's a fairly,
00:06:38
◼
►
it's a very friendly community, in terms of it's a kind of place where if you have a problem,
00:06:42
◼
►
and you post it somewhere online,
00:06:43
◼
►
a lot of people will like to help you.
00:06:44
◼
►
You can go on Stack Overflow.
00:06:46
◼
►
There's tons of help.
00:06:46
◼
►
There's a lot of people talking there.
00:06:48
◼
►
And also, I would say it's really great to see
00:06:50
◼
►
the amount of people who post code on GitHub.
00:06:54
◼
►
And now that's a dangerous thing if you
00:06:56
◼
►
want to go and learn from somebody,
00:06:57
◼
►
because it has the presumption that what you're learning from
00:07:00
◼
►
is worth learning from.
00:07:01
◼
►
But that's just a question of, in my experience,
00:07:04
◼
►
of looking at the right people's code.
00:07:07
◼
►
And a great example of this is if you're not
00:07:10
◼
►
If you're not familiar with him, you definitely should be.
00:07:12
◼
►
But Matt Thompson, whose GitHub repository
00:07:16
◼
►
is github.com/mattt.
00:07:19
◼
►
And he is, I would say, probably without much exaggeration.
00:07:23
◼
►
He seems to be one of the best iOS engineers
00:07:27
◼
►
that I know of in terms of just quality code and output.
00:07:31
◼
►
He's developed a huge number of open source libraries.
00:07:35
◼
►
He works for Heroku, the cloud hosting company.
00:07:39
◼
►
it seems like basically his job, which is pretty awesome, is just to take interesting
00:07:45
◼
►
problems and solve them in open source libraries with, I imagine, the broad goal that a lot
00:07:51
◼
►
of these things are going to be backed up on Heroku, or I don't even know why Heroku
00:07:55
◼
►
pays him to make this awesome stuff, but they do. And going through and looking at a lot
00:07:59
◼
►
of his projects, you'll see just some really clean, elegant code. And it's just one of
00:08:05
◼
►
those important things if you can kind of learn a lot from that. He also actually has
00:08:08
◼
►
as a blog, NS Hipster, which I'll also be-- the links
00:08:11
◼
►
to all of this will be in the show notes--
00:08:13
◼
►
where he talks about specific areas of the language,
00:08:17
◼
►
different constructs, and often will teach you things
00:08:20
◼
►
that you may not know that are just part of the language
00:08:23
◼
►
and will help you write better code.
00:08:24
◼
►
And so I think learning from people like that is great.
00:08:27
◼
►
It's not like you want to be going into GitHub
00:08:29
◼
►
and just kind of like willy-nilly going crazy,
00:08:31
◼
►
kind of looking at people's code and understanding it.
00:08:33
◼
►
But I think you would definitely benefit from sitting down--
00:08:36
◼
►
and I have to do this every now and then--
00:08:37
◼
►
I'll just go down and pick, say for example, one of Matt's
00:08:40
◼
►
And I'll just sit down and I'll just go through file by file,
00:08:43
◼
►
just reading it and seeing how he structured it
00:08:45
◼
►
and looking at how he created nice clean APIs
00:08:47
◼
►
for a lot of what he does.
00:08:49
◼
►
And it's kind of cool to kind of pick that up.
00:08:52
◼
►
And then often even better, which I don't do nearly as much
00:08:54
◼
►
as I wish I did, but it would then
00:08:56
◼
►
be to go and try and sort of re-implement
00:08:58
◼
►
a lot of what he's doing, learning
00:09:00
◼
►
on those from those same lessons.
00:09:02
◼
►
And then the next area, which is very similar to that,
00:09:05
◼
►
there's a great page, github.com/languages/objectivec,
00:09:10
◼
►
which is a page that's just kind of one of their--
00:09:13
◼
►
I don't know what you call it-- dashboard pages,
00:09:15
◼
►
where GitHub posts what different people are
00:09:17
◼
►
doing in the community, what's most forked, what's most
00:09:20
◼
►
starred, those kinds of things.
00:09:23
◼
►
But it isn't necessarily as interesting in terms of--
00:09:26
◼
►
like from a leaderboard perspective of, oh,
00:09:27
◼
►
which repositories are hot and interesting?
00:09:30
◼
►
But I find it is a really good way to filter through kind
00:09:33
◼
►
of the overwhelming sort of volume of Objective-C code,
00:09:37
◼
►
and be able to kind of sit down and see
00:09:39
◼
►
what people are talking about, what's interesting, what
00:09:41
◼
►
technologies or frameworks or things are people discussing
00:09:44
◼
►
and using on GitHub, which is a pretty good proxy, I imagine,
00:09:47
◼
►
for in general use.
00:09:49
◼
►
So you'll see for the classic simps,
00:09:51
◼
►
I think actually maybe where I learned about AF networking
00:09:54
◼
►
back in the day, which has since developed and grown
00:09:57
◼
►
and done a lot of interesting things.
00:09:59
◼
►
But it's one of those places that I often--
00:10:02
◼
►
I'll just go there maybe once a week, just
00:10:04
◼
►
see what's going on.
00:10:06
◼
►
And I found that it's almost like going
00:10:07
◼
►
to reading the industry magazine or the old-- I don't know,
00:10:11
◼
►
the trade publications back in the day.
00:10:14
◼
►
It's just a place to kind of get a sense of what's going on.
00:10:17
◼
►
Where are people going?
00:10:18
◼
►
How are people writing code, and what are they doing?
00:10:21
◼
►
The next place that you definitely want to be plugged in,
00:10:24
◼
►
if you want to be constantly improving your skills,
00:10:26
◼
►
is to be connected to the community.
00:10:28
◼
►
And the best places for me that I found that
00:10:31
◼
►
is Twitter is probably number one. I think there's just a really vibrant iOS community
00:10:35
◼
►
there. I'm not sure. It's kind of a funny thing when I am aware of how Twitter is this
00:10:40
◼
►
wide vast ecosystem, but my use of it is very narrow. Almost everyone I follow or interact
00:10:47
◼
►
with there is in my ecosystem or whatever you call it of making apps and doing Apple
00:10:55
◼
►
development. And the result of that is that it's a really rich environment for me to learn
00:11:01
◼
►
a what's going on in the industry, as well as technically, you know, it's like following
00:11:05
◼
►
people like Mike Ash is a great example of someone who will often be talking about interesting
00:11:11
◼
►
topics. Or Peter Steinberger actually is the author of PSPDFkit, another fantastic person
00:11:17
◼
►
to follow online on Twitter to get a really good sort of technical sense that they're
00:11:21
◼
►
They're often just talking about really low-level interesting problems that I often find I really
00:11:26
◼
►
learn a lot from.
00:11:27
◼
►
RSS feeds is a similar kind of place.
00:11:29
◼
►
There's a lot of interesting ones.
00:11:30
◼
►
NS Hipster I mentioned before.
00:11:34
◼
►
And then a lot of it, the rest are going to be tailored to however you are and whatever
00:11:39
◼
►
And the best way to do that, as I find, is Twitter is a great place for collecting and
00:11:43
◼
►
filtering the content of what I want to know.
00:11:47
◼
►
And then these people are linking to blog posts, they're talking about things, and from
00:11:51
◼
►
From there, I'll develop what sites I like and what feeds I then subscribe to in my RSS
00:11:57
◼
►
And lastly, the best thing I can say for honestly, for me, I know it's for developing my skills
00:12:03
◼
►
is every year going to WWDC or as a first approximation, watching the WWDC videos.
00:12:10
◼
►
There's something that's really well thought out in the way that those presentations are
00:12:15
◼
►
put together.
00:12:16
◼
►
That if you sit down and really are trying to learn, you can learn a ton of stuff.
00:12:20
◼
►
not just here's this new framework, here's this, the new stuff in Iowa 6 or this year
00:12:26
◼
►
in Iowa 7. There's a lot of just technology that you can really learn from just watching
00:12:31
◼
►
a pro, the person who implemented the framework, using it. The classic example I always think
00:12:37
◼
►
about is every year, I think they do a mastering UI scroll view talk, I think is what it's
00:12:43
◼
►
usually called. It's something like that. If you look in WWDC videos for UI scroll view,
00:12:48
◼
►
you'll almost certainly find it.
00:12:50
◼
►
And every year, they do roughly the same talk.
00:12:52
◼
►
It's often very similar in something like,
00:12:55
◼
►
let's swipe through a set of scalable images
00:13:00
◼
►
or something like that.
00:13:01
◼
►
It's basic, just photo viewer.
00:13:02
◼
►
But you learn so much about architecting code well.
00:13:05
◼
►
You learn a lot about structuring,
00:13:08
◼
►
about how to use the Apple technologies in the way
00:13:11
◼
►
that they're intended to be used.
00:13:12
◼
►
And I think you derive a lot of benefit from that,
00:13:15
◼
►
that you can really learn how to make your code better.
00:13:18
◼
►
And I guess the last thing-- and this
00:13:20
◼
►
is kind of the meta point that I'll bring up--
00:13:21
◼
►
is that in order for you to get better at what you do,
00:13:24
◼
►
and hopefully you want to, hopefully you're
00:13:26
◼
►
not happy with your current level of skill,
00:13:29
◼
►
but in order for you to get better,
00:13:31
◼
►
you have to want to get better.
00:13:32
◼
►
It has to be something that you think about,
00:13:34
◼
►
that you're doing activities whose purpose is not
00:13:37
◼
►
necessarily directly related to what it is that you're
00:13:39
◼
►
trying to accomplish that day, that there are things
00:13:41
◼
►
that you're doing whose purpose is just self improvement. And if you don't have those areas
00:13:46
◼
►
or those projects or those side things, I think it's very hard to get better. And you're
00:13:51
◼
►
ultimately I think you're going to be stuck and it's kind of in a in sort of a slightly
00:13:58
◼
►
overbearing way, you're going to get kind of lapped by other people who have been putting
00:14:05
◼
►
in that effort. And so it's something that I really try and do to stay fresh. And it's
00:14:09
◼
►
difficult when I have large amounts of existing products and existing code that I need to
00:14:13
◼
►
update and manage and work on.
00:14:15
◼
►
But overall, it's something that has been paid off a lot from a lot of these small side
00:14:19
◼
►
projects that I've been working on whose purpose is to improve my skills and the way that I
00:14:25
◼
►
All right, that's it for today's show.
00:14:26
◼
►
As always, if you have questions, comments, concerns, or complaints, I'm on Twitter @_davidsmith.
00:14:30
◼
►
I'm on AppNet @davidsmith.
00:14:33
◼
►
The email for me is on the website developingperspective.com.
00:14:36
◼
►
Otherwise, I hope you have a great weekend.
00:14:38
◼
►
Happy coding, and I'll talk to you next week.