PodSearch

Under the Radar

6: How to Become a Programmer

 

00:00:00 ◼   ► Welcome to Under the Radar, a show about independent iOS development.

00:00:03 ◼   ► I'm Marco Arment.

00:00:04 ◼   ► And I'm David Smith.

00:00:05 ◼   ► Under the Radar is never longer than 30 minutes, so let's get started.

00:00:09 ◼   ► So today, as a little bit of a tie-in to the Hour of Code organization program that's being

00:00:19 ◼   ► celebrated this week about trying to get people into programming, we thought it would be kind

00:00:23 ◼   ► of an interesting episode to talk about our origin stories as developers, where we learned

00:00:30 ◼   ► how to -- how we learned to program both originally, back whenever that was, and then probably

00:00:36 ◼   ► also more specifically on Apple's platforms, on iOS and the like. Because it's a question

00:00:43 ◼   ► that I get more often than -- you know, fairly consistently. I'll get a question from somebody

00:00:48 ◼   ► who says, "I see that you're a developer. I like your work. How did you get there? How

00:00:52 ◼   ► How would I, you know, where should I start?

00:00:55 ◼   ► And it's, you know, I get enough of those that I thought it'd be an interesting place

00:00:59 ◼   ► for us to just to talk about it and hopefully make it a little bit more accessible for,

00:01:05 ◼   ► you know, coding isn't necessarily this big scary thing that you have to get into.

00:01:09 ◼   ► I've actually been working with my kids who are four and six years old on basic programming

00:01:15 ◼   ► concepts and so it doesn't have to be particularly scary.

00:01:18 ◼   ► But it's something that, you know, I think if you don't know where to start, it can be

00:01:22 ◼   ► kind of overwhelming. And so, you know, we can't tell you where you should start, but

00:01:25 ◼   ► this is where we started. So, Marco, where did you first learn to program?

00:01:30 ◼   ► So I was, as soon as I learned of just the concept of programming, and I don't remember

00:01:36 ◼   ► when this was, but I was always very into technology and computers, even before I had

00:01:41 ◼   ► a computer. And I didn't get a computer until the sixth grade, so I don't know what age

00:01:46 ◼   ► that it was maybe 12, 13, something like that.

00:01:49 ◼   ► And so before that, I would only have experience

00:01:53 ◼   ► with friends' computers occasionally,

00:01:55 ◼   ► which you get for like two seconds

00:01:56 ◼   ► and you wanna play a game,

00:01:58 ◼   ► and occasionally computers at school,

00:02:00 ◼   ► but I went to a pretty poor elementary school

00:02:02 ◼   ► that only had one room that had computers in it,

00:02:06 ◼   ► and it was old Apple IIs that had been donated,

00:02:09 ◼   ► and you could not do much on them

00:02:11 ◼   ► except play Oregon Trail.

00:02:13 ◼   ► So I knew of programming though,

00:02:15 ◼   ► and I would get books out of the library that were also ancient, donated books that were

00:02:21 ◼   ► like, "How to program in BASIC." And I used to sketch out programs on paper, you

00:02:28 ◼   ► know, just like ten lines that didn't do anything, but I would just write down programs.

00:02:33 ◼   ► I was trying so hard to program and couldn't do it because I didn't have a computer.

00:02:38 ◼   ► Eventually I got a computer and I didn't even know how to program on the computer I

00:02:43 ◼   ► I got like a Windows 3.1 PC and I had it for about a year I think before I ever knew that

00:02:50 ◼   ► it came with QBasic in the DOS prompt area. I had no idea. I wasn't an expert in computers,

00:02:56 ◼   ► I didn't even know how to find such things. And one day I had, back when they used to

00:03:01 ◼   ► print source code in children's magazines to be like, "You type this into your computer

00:03:06 ◼   ► and you can play a paper airplane game or something." There was a source code print

00:03:12 ◼   ► out in, I think it was 321 Contact magazine, and they would do this every month, and I

00:03:18 ◼   ► would just look at them and, "Man, someday I hope I can try these," but I had no idea

00:03:21 ◼   ► how. And one month it had like a little sidebar in that article that said, "Here's how

00:03:26 ◼   ► to do this on a Mac, do whatever on a PC, type in QBasic at the prompt." And I tried

00:03:33 ◼   ► it and I was like, "Oh my god, I have BASIC on my computer. I've had it all this time."

00:03:41 ◼   ► And from that point forward, I just started programming.

00:03:43 ◼   ► I just taught myself through occasional ancient books

00:03:47 ◼   ► in the library and mostly just trying stuff

00:03:50 ◼   ► and looking into the QBasic help screens

00:03:52 ◼   ► to look up functions that were available

00:03:54 ◼   ► and how to use them and stuff.

00:03:56 ◼   ► It basically went from there.

00:03:58 ◼   ► Eventually, we had a friend of the family

00:04:01 ◼   ► who was a programmer who eventually handed me down

00:04:05 ◼   ► what was comparably ancient at the time,

00:04:08 ◼   ► Visual Basic 1.0 for Windows.

00:04:10 ◼   ► it came on I think two floppies, it was two or three floppies and

00:04:14 ◼   ► you know he had long, this was like at the time when like 3.0 or 4.0 was actually

00:04:18 ◼   ► available

00:04:18 ◼   ► so version 1.0 was useless to a working programmer at that point

00:04:22 ◼   ► so he just gave it to me, here kid, you know, try this

00:04:25 ◼   ► I installed that on Windows eventually and learned Visual Basic

00:04:29 ◼   ► and actually those same Visual Basic 1.0 disks

00:04:33 ◼   ► I took to upstate New York that summer where my family went every summer

00:04:37 ◼   ► on vacation, and I shared those disks with Casey Liss.

00:04:41 ◼   ► And Casey was this other young teenager

00:04:46 ◼   ► that I would play with up there and waste time with,

00:04:49 ◼   ► and his dad had an IBM ThinkPad,

00:04:52 ◼   ► and so we would waste time on his dad's ThinkPad

00:04:55 ◼   ► using Visual Basic 1.0.

00:04:57 ◼   ► And that's how I met Casey Liss.

00:04:59 ◼   ► - There you go, and now he's a programmer too.

00:05:01 ◼   ► - Exactly.

00:05:02 ◼   ► So anyway, it just kind of built up from there.

00:05:05 ◼   ► I was really self-taught in most concepts, most fundamentals, functions, control flow,

00:05:13 ◼   ► things like that, basic GUI construction through Visual Basic. I didn't experience anything

00:05:21 ◼   ► like the low-level languages like C or even web languages like PHP really until college.

00:05:27 ◼   ► College taught me C through the curriculum. I majored in computer science, and then I

00:05:31 ◼   ► I kind of picked up PHP on the side to do,

00:05:33 ◼   ► like, you know, kind of fooling around on the web.

00:05:36 ◼   ► And really just kind of became self-taught from there.

00:05:39 ◼   ► Like, I learned more and more C through college,

00:05:42 ◼   ► and then my first job after school

00:05:44 ◼   ► was entirely written in C, so I learned a lot more C there.

00:05:48 ◼   ► And then I always was kind of self-taught

00:05:50 ◼   ► in web stuff and other stuff,

00:05:53 ◼   ► and then eventually I got the job at Tumblr

00:05:54 ◼   ► and became really, had to become really good at web stuff.

00:05:56 ◼   ► So it's basically, like, I basically started from scratch

00:06:01 ◼   ► kind of just like messing around as a middle schooler. I did it because I just kind of

00:06:07 ◼   ► had to. It's one of those things like if you ask a writer like how did you learn to

00:06:12 ◼   ► write? And I think a lot of them would just say, you know, A, I've been writing a lot,

00:06:17 ◼   ► but B, like I just kind of have to write. Some people just have this inherent drive

00:06:21 ◼   ► to do the thing they do and they just kind of have to do it. That's how I am with programming.

00:06:26 ◼   ► I just have an inherent desire to do it because programming, and I tell people this whenever

00:06:32 ◼   ► they ask me how to get started or what it's like or whatever, programming is incredibly

00:06:38 ◼   ► boring and frustrating and obtuse to most people and you have to really love it.

00:06:46 ◼   ► I do really love it and when you really love it, you see the good side of it which is the

00:06:51 ◼   ► incredible feeling of joy and of pride when you build something from scratch. Like you

00:06:58 ◼   ► create something out of nothing using nothing but time and the thing that you want to exist

00:07:05 ◼   ► now exists. And that's an incredible feeling. It's incredibly satisfying. It's incredibly

00:07:11 ◼   ► intellectually satisfying. And I just, I cannot get enough of that feeling. The problem is

00:07:16 ◼   ► is that most programming actual time spent

00:07:19 ◼   ► is not doing things that are that satisfying.

00:07:22 ◼   ► Most of it is like kind of grunt work or debugging

00:07:26 ◼   ► or just kind of moving stuff around,

00:07:29 ◼   ► making a boring screen you don't feel like

00:07:31 ◼   ► you need to make anymore like a login screen,

00:07:33 ◼   ► Code Monkey reference, but most of it can be very tedious.

00:07:38 ◼   ► So you have to love it enough during those good times

00:07:42 ◼   ► to get you through the tedious times

00:07:43 ◼   ► and the frustrating times, like if something's breaking

00:07:45 ◼   ► and you can't figure out why.

00:07:47 ◼   ► And some people just have that internal drive,

00:07:50 ◼   ► and I definitely do, and I bet you do,

00:07:51 ◼   ► but if you don't have that,

00:07:54 ◼   ► I can imagine it would be pretty frustrating.

00:07:57 ◼   ► Because, and the way you usually learn,

00:07:59 ◼   ► the way I have learned,

00:08:00 ◼   ► and the way I think most people I know have learned,

00:08:03 ◼   ► you basically come to a point where you want to achieve

00:08:05 ◼   ► some next thing in your programming experience

00:08:08 ◼   ► or experiments.

00:08:10 ◼   ► You want to achieve something, you have no idea how,

00:08:12 ◼   ► so you just kind of like try,

00:08:14 ◼   ► or maybe these days you search the internet

00:08:16 ◼   ► and you hit a bunch of walls constantly

00:08:18 ◼   ► and things don't work, things crash, things break,

00:08:22 ◼   ► and you kind of stumble through

00:08:23 ◼   ► until you figure out how it actually works

00:08:26 ◼   ► and then you do it and then it finally works eventually.

00:08:28 ◼   ► But the process of stumbling through and figuring it out

00:08:31 ◼   ► can be pretty frustrating to a lot of people.

00:08:32 ◼   ► So you have to feel that payoff at the end.

00:08:37 ◼   ► That has to really matter to you.

00:08:39 ◼   ► That has to really resonate with you

00:08:41 ◼   ► if this is gonna be the kind of thing that you do.

00:08:43 ◼   ► And if that's the case, that can usually alone be the driver to push you through the bad

00:08:48 ◼   ► times and to really make you keep coming back to this as an activity.

00:08:51 ◼   ► >>COREY Yeah.

00:08:52 ◼   ► So I think my background started, I think, in QBasic, same as you.

00:08:58 ◼   ► But I think we had a slightly—I always growing up always had computers around me.

00:09:02 ◼   ► That was—I don't exactly know how my dad did it, but it was just something that I think

00:09:06 ◼   ► he knew this was going to be important.

00:09:09 ◼   ► and even perhaps at times that economically that was a pretty big ask. It's like as long

00:09:13 ◼   ► as I can remember, we've always, I've always had a computer in my life, and it's like old

00:09:17 ◼   ► Sinclair Spectrums, I think it was, where you loaded the programs off audio cassette tapes,

00:09:22 ◼   ► like playing back from a tape deck. And like, I mean, it was a very different world, but

00:09:27 ◼   ► it was always something that I was around, and I think he knew that that was something

00:09:31 ◼   ► that was going to be important. And it's had a similar sort of experience where it's like,

00:09:35 ◼   ► At some point, I became aware of QBasic.

00:09:39 ◼   ► I remember the thing that had this very...

00:09:43 ◼   ► When you think back on your youth, you often only have these few little flashbulb memories.

00:09:47 ◼   ► But I remember when I first discovered in QBasic, one of the programs that came with

00:09:52 ◼   ► it was an app called Gorillas, I think it was?

00:09:56 ◼   ► Oh yeah, Gorilla.Bass.

00:09:58 ◼   ► And it was just this really silly sort of app where you had these two gorillas that

00:10:04 ◼   ► would throw bananas at each other.

00:10:05 ◼   ► And that was the app.

00:10:07 ◼   ► But I remember this very distinct memory of this moment where I realized that this text

00:10:14 ◼   ► file in front of me created that app.

00:10:22 ◼   ► The person who wrote it just sat down in a text editor just like I was at and put in

00:10:27 ◼   ► all these commands in this order.

00:10:28 ◼   ► I didn't understand half of what was going on, but conceptually they just wrote this

00:10:33 ◼   ► thing and then this game that I can play and have fun with appeared. And I think for me,

00:10:39 ◼   ► that was the spark that this is not -- programming isn't this thing that is completely inscrutable.

00:10:50 ◼   ► That before that I'd only ever really seen the outside of it, where I'm interacting with

00:10:55 ◼   ► the software that other people had made, and then it's like, "Wait, I can come in here

00:10:59 ◼   ► and I can edit it. I'd horribly break the Gorillaz game. At some point, I'd better

00:11:06 ◼   ► go back to the original version. But I had that feeling of sort of like when you get

00:11:11 ◼   ► a toy, and I think some people's instinct is to want to take it apart and see how it

00:11:17 ◼   ► works. And I think I eventually got that same kind of instinct around software, where I

00:11:24 ◼   ► look at something and once the curtain had been pulled back and I was like, "Wait, this

00:11:30 ◼   ► piece of software is behind the scenes just a series of text files. I wonder what those

00:11:36 ◼   ► text files would look like. I wonder if I could write a set of text files that would

00:11:39 ◼   ► create that same thing." And it just sort of grew from there. But there is definitely,

00:11:44 ◼   ► I think, something to it where, in some ways, I think anybody could learn to program. I

00:11:50 ◼   ► I went to a high school where it was mandatory that every student had to take computer science.

00:11:56 ◼   ► It was one of the required courses that everyone had to do a basic computer science course.

00:12:02 ◼   ► Some people, like myself, that was one of my favorite courses that year. I took it freshman

00:12:08 ◼   ► year as early as I could so that I could open up all the advanced computer science classes

00:12:14 ◼   ► later on in high school. But for some kids, it was their dreaded thing that they had that

00:12:19 ◼   ► like, "Well, I gotta do it," or they'll try and squeeze it in some, you know, over

00:12:23 ◼   ► the summer or all kinds of other ways to sort of just get through it.

00:12:27 ◼   ► And for some people, though, I knew people who would go and do that class, and it was

00:12:31 ◼   ► like, "Wow, this is awesome!

00:12:33 ◼   ► I love programming!

00:12:34 ◼   ► I didn't even think, like, I never thought of myself as a programmer."

00:12:37 ◼   ► But when I actually got into it, like, they do.

00:12:39 ◼   ► Some people, it was like the complete opposite.

00:12:41 ◼   ► Like, they just found it really frustrating.

00:12:44 ◼   ► And I think there is kind of this thing about programming, because in programming, you are

00:12:49 ◼   ► You have no one to blame but yourself for a lot of things.

00:12:53 ◼   ► The program is, other than OS bugs and things, what you wrote down is exactly what the app

00:13:00 ◼   ► is going to do.

00:13:02 ◼   ► And the number of times then that the app does something that you don't want it to

00:13:05 ◼   ► do or in an unexpected way, and you look at it and you're like, "Huh, I guess I wrote

00:13:12 ◼   ► the wrong thing, and it's doing exactly what I told it to do, but what I'm telling

00:13:15 ◼   ► it is wrong."

00:13:17 ◼   ► And that can be very frustrating for you, or it can be very encouraging and kind of

00:13:22 ◼   ► stimulating to be like, "Can I do this better?

00:13:25 ◼   ► How could I make this faster?

00:13:26 ◼   ► How could I solve this problem in a newer or better way?"

00:13:30 ◼   ► And if you kind of have a mind that loves that, then programming is extraordinarily

00:13:36 ◼   ► satisfying because the core things that you need to start programming are, especially

00:13:43 ◼   ► especially in the modern world, are very straightforward. You can do basic programming on probably any

00:13:51 ◼   ► device if you wanted, on your phone, on your tablet, on a computer. There's a ubiquity

00:13:58 ◼   ► there that if this is something that works for you, you could probably just dive into

00:14:01 ◼   ► it and it won't even have to be. You or I discovering that we accidentally had QBasic

00:14:08 ◼   ► on our Windows 3.1 computers back in the day.

00:14:14 ◼   ► And whenever anyone asks me how they could get into programming, I always just say, "You

00:14:18 ◼   ► just need to start."

00:14:21 ◼   ► Whatever language, whatever platform, whatever it is that is most accessible to you, just

00:14:26 ◼   ► start it and see if that works for you.

00:14:29 ◼   ► See if you get a thrill out of the first time you ever do print line "Hello, world!"

00:14:35 ◼   ► Run your program and it says "Hello, world!"

00:14:37 ◼   ► that's exciting to you, then you're probably going to keep going. If you're like, "Huh,

00:14:41 ◼   ► that's kind of boring," maybe it's not for you. It doesn't have to be for everybody.

00:14:45 ◼   ► But there's something kind of thrilling about, like you said, starting with nothing. When

00:14:51 ◼   ► I go to open up Xcode and I say "File New Project," and then a few hours later, something

00:14:57 ◼   ► functional is appearing in the simulator.

00:14:59 ◼   ► Well, for you.

00:15:00 ◼   ► Okay, or a few hours, a few days, whatever.

00:15:03 ◼   ► You could finish an entire app in like three hours.

00:15:06 ◼   ► I don't know any other developer who works as fast as you do.

00:15:12 ◼   ► We all have our skills.

00:15:15 ◼   ► But however long it takes to get from filing a project to something working in the simulator,

00:15:20 ◼   ► that process is really, like, there's just something really fun about that, where it

00:15:24 ◼   ► didn't exist, and now it does.

00:15:25 ◼   ► And it's doing this thing that I had in my mind and now exists in the world.

00:15:30 ◼   ► I don't think there's that many other careers where you can have a professional desk job

00:15:35 ◼   ► that has quite that same sense of creation.

00:15:38 ◼   ► - As they're like, you know, you really,

00:15:40 ◼   ► you kind of make it from nothing except time

00:15:43 ◼   ► on your computer, and so you don't even need

00:15:45 ◼   ► like special materials, any additional equipment

00:15:49 ◼   ► that you didn't already have, like so many hobbies

00:15:51 ◼   ► and creative fields require stuff and possibly money

00:15:56 ◼   ► that, you know, to be spent on things,

00:15:58 ◼   ► supplies, equipment and everything.

00:16:01 ◼   ► And while programming does require a computer,

00:16:04 ◼   ► you probably already have one. And it doesn't require a great computer, it just requires

00:16:09 ◼   ► a computer. And almost all the software tools that are needed for programming, almost all

00:16:15 ◼   ► of them are free. And in fact, if you want to go entirely free stuff, you can. So it's

00:16:22 ◼   ► very pure in the sense that all you need is time and a will to do it. And if you have

00:16:29 ◼   ► time and a will to do it. And you know, I've heard a lot of people say, people who are

00:16:34 ◼   ► not programmers, a lot of people have said to me that they don't think they're smart

00:16:38 ◼   ► enough to be a programmer. And the fact is, you don't need to be a genius to do it,

00:16:43 ◼   ► you need to care. That's like, if you care about programming, you can be a programmer.

00:16:50 ◼   ► There are a lot of people working in the field who are not total geniuses, and they're

00:16:55 ◼   ► fine. I'm not even that good of a programmer. And you know, people who are listening to

00:16:59 ◼   ► the show might assume that because you know one of us and you know our work, you might

00:17:04 ◼   ► assume that we are great programmers. And I'm just a decent programmer, I would say.

00:17:10 ◼   ► I would not say I'm a great programmer. I've seen the code of great programmers. I've

00:17:15 ◼   ► seen what they make. I am not at that level. And it's fine. It doesn't really matter

00:17:20 ◼   ► for the purposes of what I'm doing, the kind of products I ship and what I do for

00:17:24 ◼   ► a living. It doesn't really matter that I'm not the great programmer level. It's

00:17:27 ◼   ► So it really is very accessible. It's the kind of thing where really all you need is

00:17:34 ◼   ► a will to do it and the time to do it. And those aren't necessarily easy for some people

00:17:38 ◼   ► to get, but if you have those things, you can do it.

00:17:41 ◼   ► Yeah, and the nice thing too, on that note, is that programming, I feel, you can tailor

00:17:48 ◼   ► what you're doing to your personality and your intellect and your aptitude. Like, there

00:17:54 ◼   ► There are many different types of programming that you can do that may appeal to you in

00:17:59 ◼   ► a very different way.

00:18:01 ◼   ► I know people—I remember when I went to college for computer science—some of the

00:18:05 ◼   ► people there were just the ridiculous academic geniuses.

00:18:10 ◼   ► The things that they were interested in were solving really complicated and nuanced algorithmic

00:18:15 ◼   ► problems.

00:18:16 ◼   ► Like, "How can I do these really crazy, sophisticated things in new and novel ways?"

00:18:23 ◼   ► never really worked for me. The academic side of computer science never really appealed

00:18:26 ◼   ► to me, like, "What's a faster way to sort a list?" That doesn't really appeal to me.

00:18:30 ◼   ► And so I just intend--instead, I focus on pragmatic programming. I just want to make

00:18:37 ◼   ► stuff, and how can I make it quickly? How can I make it simply? And that appealed to

00:18:42 ◼   ► me, and so that's where I went. But it's a very varied field that you can probably find

00:18:48 ◼   ► something that fits for you. Like, are you more graphically oriented in the design and

00:18:54 ◼   ► visual side of things or the backend side of things? There's a lot of breath in the

00:18:59 ◼   ► field to find something that sort of suits you. And the key is probably not pretending

00:19:05 ◼   ► that you're someone you're not. You're not thinking, "Oh, programmers need to be stuffy

00:19:10 ◼   ► and academic and worry about algorithms." Like, no, they could do whatever. I don't

00:19:16 ◼   ► about algorithms hardly at all. That's not my job. My job is making apps. And only every

00:19:22 ◼   ► now and then will involve inventing some kind of new algorithm to solve a problem.

00:19:26 ◼   ► Yeah, and that's a good point too, pointing out that it is just such a big field. Nobody

00:19:32 ◼   ► can keep up with all of the programming field because it's just too big. And it's bigger

00:19:37 ◼   ► than you think because almost everything uses software these days. Almost every field has

00:19:42 ◼   ► software. There's all the different levels at which you could work in software. It is

00:19:48 ◼   ► so large, it's such a massive field, that if you are at all interested in being in it,

00:19:53 ◼   ► there's probably a place where you fit very easily.

00:19:55 ◼   ► Anyway, this episode of Under the Radar is brought to you by NSScreencast. Go to NSScreencast.com/headphones

00:20:02 ◼   ► because I love their URLs. NSScreencast features short, focused screencasts on iOS development.

00:20:09 ◼   ► Every week you're gonna find a new,

00:20:10 ◼   ► fantastically produced episode that will help you

00:20:13 ◼   ► build and enhance your development skills.

00:20:15 ◼   ► Perfect sponsor for this episode.

00:20:17 ◼   ► Now, they have all sorts of videos up there

00:20:19 ◼   ► and these are great 'cause they're really like these

00:20:20 ◼   ► like kinda bite-sized videos so it's not like they're like

00:20:23 ◼   ► nine minutes, 10 minutes, 15 minutes, like it's not,

00:20:26 ◼   ► these aren't massive time commitments each time.

00:20:29 ◼   ► They're small chunks that teach you what you need to know

00:20:32 ◼   ► and can help you keep your skills updated,

00:20:34 ◼   ► can help you develop new skills.

00:20:36 ◼   ► They're recently doing a series on Apple TV development now

00:20:38 ◼   ► Now you can develop for Apple TV.

00:20:39 ◼   ► So they have these three new videos

00:20:41 ◼   ► about Apple TV development that I was looking at.

00:20:44 ◼   ► These are great videos, really great.

00:20:46 ◼   ► You can watch these videos on the web.

00:20:48 ◼   ► You can also watch them on the Apple TV

00:20:50 ◼   ► if you have the new Apple TV

00:20:51 ◼   ► because they made their own tvOS app

00:20:53 ◼   ► to kind of show off what they could do.

00:20:55 ◼   ► And of course, you can watch the web stuff anywhere.

00:20:58 ◼   ► So NS Screencast costs just $9 a month or $100 a year

00:21:03 ◼   ► with team plans available too.

00:21:04 ◼   ► And you can get 30% off your first month

00:21:06 ◼   ► by signing up using our link,

00:21:08 ◼   ► NSScreencast.com/headphones.

00:21:10 ◼   ► These are great videos to learn development

00:21:13 ◼   ► within the Apple world, you know, iOS, Mac, TV.

00:21:16 ◼   ► This is the great videos for this world.

00:21:18 ◼   ► NSScreencast.com/headphones.

00:21:21 ◼   ► Thank you so much to NSScreencast for supporting this show

00:21:23 ◼   ► and all of Relay FM.

00:21:24 ◼   ► So I guess for the last few minutes,

00:21:27 ◼   ► I wonder if maybe we can give specifics

00:21:29 ◼   ► of like kind of where new programmers should start.

00:21:32 ◼   ► If for some reason they're listening to this show

00:21:33 ◼   ► and they aren't programmers yet,

00:21:35 ◼   ► Where should they start?

00:21:37 ◼   ► Like languages, tools, apps, I don't know.

00:21:39 ◼   ► What do you think?

00:21:41 ◼   ► - Yeah, so I think the first place to start,

00:21:45 ◼   ► at least, it obviously depends a little bit on your age,

00:21:49 ◼   ► and I get a lot of questions too about teaching your kids,

00:21:51 ◼   ► and so I think I might start talking about

00:21:53 ◼   ► a good accessible place to see if you,

00:21:56 ◼   ► sort of programming is interesting to you.

00:21:59 ◼   ► Like I've been teaching my kids programming

00:22:01 ◼   ► using an app called Lightbot,

00:22:03 ◼   ► which I'm sure we can have a link to in the show notes,

00:22:05 ◼   ► which is all about, because programming at its core, like the first step that you have

00:22:11 ◼   ► to understand is it's about creating a recipe of commands that you then issues, that you

00:22:18 ◼   ► can then like you say run, and then something happens. And understanding the disconnect

00:22:23 ◼   ► between the creation part and the action part. And so like the Lightbot's one of these,

00:22:30 ◼   ► I mean, when I was a kid, it was Logo, I think it was, was sort of the app like this, we

00:22:36 ◼   ► had a little turtle that you made move around the screen.

00:22:38 ◼   ► But like this one, there's a little character who runs around and jumps, like you have to,

00:22:42 ◼   ► you know, you're solving little programming puzzles, which my kids love.

00:22:45 ◼   ► But like an app like that, it's something that will let you just understand that concept

00:22:50 ◼   ► of, you create a set of recipes, and then you do something.

00:22:53 ◼   ► And just like, programming at its core is about separating, like the direct input from

00:22:59 ◼   ► the output because you have to write a program, compile it, and then run it in a way that

00:23:04 ◼   ► the user will interact with your program, but the programming doesn't interact while

00:23:08 ◼   ► it's running in the same way.

00:23:10 ◼   ► That's a great place that I've found to start.

00:23:12 ◼   ► There's a lot of apps like this.

00:23:13 ◼   ► Things that you're going to think, I think Hopscotch is one I've heard about, a lot of

00:23:16 ◼   ► people have had success with.

00:23:18 ◼   ► Something like that is a great place to start for getting your head around that concept.

00:23:22 ◼   ► And then once you sort of get there, you just kind of have to pick a language, a platform,

00:23:30 ◼   ► something that makes sense to you. I recently had a friend who wanted to get into programming,

00:23:34 ◼   ► and she was asking me, "What's the right place?" And I was like, "I don't know, it just depends

00:23:39 ◼   ► on where you want to go." I think I ended up pointing her towards Ruby, which is a language

00:23:42 ◼   ► I have a lot of familiarity with and I think works well. It's a fairly accessible language,

00:23:48 ◼   ► And there's a great book called "How to Program, How to Code," which I'll have a link in the

00:23:53 ◼   ► show notes to, that I pointed her to.

00:23:55 ◼   ► It's a really nice methodical, just like, this is how control flow works, what an if

00:24:00 ◼   ► statement is, what a for loop is.

00:24:03 ◼   ► And the thing that you also have to understand when you're first learning out, or starting

00:24:07 ◼   ► out in learning, is the details of that language are only sort of important.

00:24:12 ◼   ► They're important for where you use a language.

00:24:15 ◼   ► Like you can't write apps for one platform in all languages, there's usually some kind

00:24:22 ◼   ► of specialization.

00:24:24 ◼   ► But generally speaking, once you understand the concepts, that's 90% of the battle.

00:24:32 ◼   ► And then the last 10% is just learning the nuances of each platform.

00:24:36 ◼   ► At this point, when one day I eventually learn Swift, I don't expect the difficulty to

00:24:43 ◼   ► understand Swift conceptually. It's just going to be understanding the

00:24:48 ◼   ► nuances and the approaches that it prefers. Once you wrap your head

00:24:52 ◼   ► around the basics, like the basics haven't changed since I was like 11

00:24:57 ◼   ► years old in writing apps in QBasic. At its core, programming is just having

00:25:02 ◼   ► variables that you put things into and then you have conditional statements to

00:25:07 ◼   ► determine which path to go down and then you have some kind of looping mechanism

00:25:10 ◼   ► to keep doing things over and over again.

00:25:13 ◼   ► And once you wrap your head around that,

00:25:15 ◼   ► like that's programming,

00:25:16 ◼   ► the rest is just all the details

00:25:19 ◼   ► that are actually relevant for your platform.

00:25:22 ◼   ► - Yeah, and I will say, to expand on one thing you just said,

00:25:25 ◼   ► not every language can be used to write every kind of app,

00:25:29 ◼   ► and I think people always ask,

00:25:31 ◼   ► what language should I start with?

00:25:33 ◼   ► And the answer is, because, as we talked about earlier,

00:25:35 ◼   ► because programming is so dependent on your own motivation

00:25:40 ◼   ► and interest to push through the hard stuff

00:25:43 ◼   ► and to get to something that you want,

00:25:45 ◼   ► I think you have to work backwards and say,

00:25:46 ◼   ► well, what kind of apps do I wanna make?

00:25:49 ◼   ► And so if you, or what do I wanna program?

00:25:52 ◼   ► So if you want to program something like an iPhone app,

00:25:55 ◼   ► then what language can you use to make iPhone apps?

00:25:58 ◼   ► Well, there's all sorts of weird tools you can use

00:26:00 ◼   ► to cross-compile different languages,

00:26:01 ◼   ► but the language you should be using

00:26:02 ◼   ► to write an iPhone app in today is probably Swift.

00:26:05 ◼   ► So I would say like, take whatever outcome

00:26:08 ◼   ► you want to have, work backwards from that

00:26:12 ◼   ► to determine what language would be

00:26:14 ◼   ► the most appropriate language for that.

00:26:16 ◼   ► And you might have to ask people like us if you don't know,

00:26:18 ◼   ► but for iOS apps, it's Swift.

00:26:21 ◼   ► Today, if you're gonna learn from scratch,

00:26:24 ◼   ► today you're learning Swift.

00:26:25 ◼   ► And so that's how you pick.

00:26:27 ◼   ► You don't pick a language first and then decide,

00:26:30 ◼   ► oh, I wanna actually make an iOS app out of this.

00:26:33 ◼   ► Because the easiest way to learn is to have

00:26:36 ◼   ► a specific, simple and achievable outcome that you want to make, like a specific kind

00:26:42 ◼   ► of app you want to make. Let's say, "Oh, I want to make a really simple game," or

00:26:48 ◼   ► something like that. Something specific that you want to construct that is doable for a

00:26:52 ◼   ► beginner programmer, that will keep you motivated to learn, to keep going. And so then work

00:26:58 ◼   ► backwards and learn whatever language and tools are required to make that happen in

00:27:03 ◼   ► the most straightforward way.

00:27:04 ◼   ► Yeah, because in my experience the only like the best way to learn is to start making something

00:27:09 ◼   ► It doesn't matter what it is. My first iOS app was a tip calculator

00:27:13 ◼   ► that was awful and it never shipped, but that's how I learned and

00:27:17 ◼   ► I don't think I would have been able to learn if I didn't have something tangible that I was trying to accomplish

00:27:23 ◼   ► When I was trying to be like, well, how would I display a number onto the screen?

00:27:28 ◼   ► How would I make a button? Like if you don't have something that's motivating you to ask those questions

00:27:33 ◼   ► You're never gonna get over that first hump of actually sitting down.

00:27:38 ◼   ► Reading a book is great, but sitting down in front of a text editor is where programming

00:27:44 ◼   ► really starts.

00:27:47 ◼   ► Every new technology or new language or new anything I've learned in programming has

00:27:52 ◼   ► been because there was something specific I wanted to achieve, and that was the way

00:27:56 ◼   ► to get it.

00:27:57 ◼   ► All right.

00:27:58 ◼   ► - All right, well I think that's it for today's show.

00:28:01 ◼   ► And you know, I hope if you don't already,

00:28:04 ◼   ► that you get out and try programming

00:28:06 ◼   ► and see if it's for you.

00:28:08 ◼   ► - Yeah, that would be very satisfying to us

00:28:10 ◼   ► if people actually tried it, that'd be awesome.

00:28:13 ◼   ► Anyway, thanks a lot for listening.

00:28:15 ◼   ► Please recommend us on Overcast, tell a friend.

00:28:18 ◼   ► Also our network, Real AFM, just launched memberships

00:28:21 ◼   ► where you can, if you'd like, you can optionally

00:28:23 ◼   ► give money directly to the shows that you enjoy

00:28:25 ◼   ► or to every show on the network.

00:28:27 ◼   ► So if you wanna do that, check it out.

00:28:28 ◼   ► And yeah, thanks a lot for listening

00:28:30 ◼   ► and we'll see you next week.

00:28:32 ◼   ► [ Silence ]