Infinite Things to Learn

Thanks for taking the time, Natasha! Could you tell us a little bit of what you currently do in your job and in the developer community?

By day I'm an iOS engineer at Capital One, and we’re working on a bunch of exciting native apps in the finance space. Outside of work, I usually wake up really early and do blogging or learning or building something: morning is my time to grow.

Why did you get into iOS development?

I always wanted to learn, ever since I started developing. At my last company, I was doing Ruby on Rails. They had a hard time hiring iOS developers, so they asked if anybody wanted to learn iOS and switch. I started thinking about it, so I applied to the Mobile Makers bootcamp. After I got in, I went to my boss, and he let me go for a two-month sabbatical, during which I went to Chicago for an eight-week full-time course. I really liked this experience because I had instructors teaching me best practices and I learned at a much more accelerated pace, as opposed to just fiddling around on my own. When I came back I joined the iOS team.

Could you tell us a bit more about the bootcamp — what did you learn there?

We learned a lot of Objective-C, which was the biggest challenge to me initially, as it seemed pretty intimidating. Every morning we learned new stuff and immediately applied it in the afternoon, building small apps together with others. We built an app every week, and at the end of the bootcamp we had to release an app in the App Store.

How did you get into programming initially, and why?

It started when I came to visit San Francisco for a weekend. I absolutely fell in love with the tech scene. I went to a lot of meetups, and learned about startups, and, it was just a really positive and creative atmosphere. I moved here, and within a year I was working on a startup with some friends. I wasn't able to code at the time, but since I don’t like having my hands tied, I started learning soon after.

So you picked up enough Rails on your own to land a job as a Rails developer?

Yes. Initially I started with a Stanford course in Java. I just did that online, and then I started learning Rails. I could hack things together and make it work, but I knew that's not how I wanted to program. Around that time, Dev Bootcamp just came out. I applied there and ended up in the second class. That was an an opportunity for me to learn smarter approaches to programming.

What did you study in college, by the way?

Psychology, it's actually been the most useful major.

There's that stereotype of programmers, sitting alone in the basement somewhere. But in real life you have to work with people. Working in a team is a lot about group dynamics and group think. Trying to put in different opinions is very important sometimes, because often times when you all know each other, everyone just agrees on things, and that might not be the right thing. There are also a lot of things around leadership, like caring for other people and developing a relationship that’s outside of just your everyday coding.

With your background in psychology, do you have any tips how to deal with the ups and downs in programming? Those frustrating moments were you just don't know what's going on?

That's actually been the hardest thing about learning programming when I started, because I wasn’t used to that. In school, it was a very clear formula: you study hard and you get an A on the test. Or even in my jobs before programming, it was more of a linear learning process — it always gets better. But then when I started programming, one day I am on top of the world, and then the next day, I feel like I can't program at all anymore. The most important thing has been to learn how to debug, taking one step at a time, and questioning all your assumptions.

Apart from that, meditation — focusing on the breathing — helps me. Also just walking away, or taking a break. Sometimes, just going to sleep is the best option. The next day, the problem is solved much easier. To me, this part of programming has become a challenge that I love.

What do you think about all the new stuff that has come out recently, like Swift and WatchKit, and then iOS 8? What are you excited about?

Everything? I love learning. That's actually one of my favorite things about being a programmer. I missed that in my other jobs, but in programming there are just many more ups and downs with opportunities to learn. For example, Swift looks really easy on the outside. When it was announced, all the JavaScript developers were like, "Oh, I’m now an iOS developer." However, from working with it, I've found that it’s actually harder than Objective-C. Objective-C is very simple. You can only do so many things. But in Swift there's a whole new world of patterns, and there are no best practices yet — it’s kind of a Wild West. There are so many choices.

With regard to WatchKit, it's pretty simple at the moment, but the promise of it is really exciting. I actually just got one of those FitBit scales, and the way it syncs data so seamlessly is really magical. I’m excited about that aspect of the watch, of being able to track information and sync it seamlessly.

If I recall correctly, you were disappointed about it initially, but then got really excited about it, right?

Yeah, it's missing a lot of features that were advertised. For example, there’s no API for the Digital Crown or the taptic feedback. It’s very basic. For showing a map, the system takes a picture of the map and sends it to the watch. However, we had a WatchKit hackathon, and it was pretty cool to see what people were able to do with just the basic stuff that's there already.

When Swift came out, you suddenly became much more visible in the community. Was this a deliberate choice you made?

I've actually been blogging for a while. When I started coding, I started my blog. It's my way of solidifying my knowledge. At this point, if I learn something, I have to blog about it. It's just part of my routine. When Swift came out, it was just a natural extension of that. And because Swift is so new, there's a lot more to write about, since there are a lot more struggles on a daily basis that you can't find the answers to.

Did the visibility you got in the Swift community change something for you?

I just keep doing what I've been doing. I did start a Swift newsletter, but that's also part of my way of learning. The new part is that I've started doing a lot of speaking engagements. That's been really fun and works very well for solidifying my knowledge. When you’re teaching, you have to really learn your stuff. With the WatchKit hackathon, we gambled a bit, because the release date was not clear yet. In the end, I had to learn WatchKit in three days and then teach it. But I enjoyed the pressure because it forced me to learn it, whereas on my own I’d probably have taken a longer time, and then I wouldn’t learn it as well as when I had to actually be an expert on it after three days.

Right now, everybody's learning Swift, but maybe in a few years there will be established patterns. Do you think we can keep the community as open as it is now?

I'm starting to get the feeling with Swift that there will just be more options to solve particular problems in a good way. In Objective-C, it's pretty clear most of the time, but Swift just seems to allow more variety in style. Hopefully that'll open people up for learning different things and to keep their minds open.

We're almost at the end of the year. Do you have any ambitions or any concrete plans for next year?

Yeah, I do have a list. A lot of it is just keeping healthy. Swift has been so exciting that I've just always been learning and pushing myself. But I'm hoping to get back to a normal sleep schedule soon. I’ve found that when you sleep enough, you actually get a lot more done, although it might feel counterintuitive at times. Another main thing is just to double down on learning. Swift has opened up a whole other world of things I wanna learn. I am definitely missing some pieces in my programming experience, so I think I'll just be focused on learning those pieces, and then figuring out how to best fit them in to write better code.

Do you have big ambitions for the long term?

I don't like to think too long term because things change. It's kind of like code: you have to rewrite everything. For me, it's more about being in a good state every day versus having a big goal. Every day when I wake up I want to ask myself, "Am I happy?" And I know things that make me happy, like learning, being healthy, and traveling. Those are the big three things that I try to center myself around. I feel that there's still a lot to gain for me by learning more, and then maybe in a year or so, I'll focus more on really building and releasing things.

Could you also see yourself doing something completely different than programming?

Probably not. I really enjoy it. Maybe in 10 years, who knows? I don’t know if I can find a field where I have infinite things to learn. I’ve been interested also in learning more hardware stuff, but I think that goes together with software. As long as I keep learning new things, keep challenging my mind, I'm happy to continue what I'm doing. Being a little bit outside my comfort zone makes me very happy.

Did you have any mentors or people who really inspired you when learning iOS and Rails?

I learned a lot by pair programming with people who are more experienced than me. It really accelerates the learning process. Sometimes I'd have a problem or a bug and I find one solution that works and I'm really happy with it. But then a senior programmer looks at it from different perspectives — not only if it works, but also if it is a good solution in the long term. And now for Swift, I'm learning a lot from the community, because it’s so new. I'm trying to read more books and to always look for people who are better than me.

When you were pair programming, were there any big lessons you learned, or was it more about many little details?

I'm very detail oriented, so I do enjoy the tiny little things and tricks that I learn. For example, my coworker showed me that you could turn on the Clang analyzer in Xcode and get much better warning messages. If he wouldn't have told me, I would not have known to even google for this kind of thing. When you pair program, you learn these tiny things that people take for granted. Some of my blog posts about these tiny things are actually my most popular ones, although I initially assumed that probably everybody except me knew this already.

In terms of bigger things, one of my coworkers at Capital One showed me how to apply the MVVM pattern in a real world situation. I've heard about it, I heard Facebook talk about it, but I wasn’t really sure how it worked, so it was really cool to have him walk me through an actual implementation of it. Now, I use the MVVM pattern all the time in different apps.

Is there anything else that you want to share?

Yeah, it's a fun time to be an iOS developer. For anyone that is thinking of switching, it’s challenging, but it’s a very exciting time to be in this space.