Developing Perspective

#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:51   get rid of.

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   was better.

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   the better.

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   projects.

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:38   you like.

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:56   reader.

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:24   work.

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.