PodSearch

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.