Note from Ray: At our recent RWDevCon tutorial conference, in addition to hands-on tutorials, we also had a number of “inspiration talks” – non-technical talks with the goal of giving you a new idea, some battle-won advice, and leaving you excited and energized.
We recorded these talks so that you can enjoy them, even if you didn’t get to attend the conference. Here’s our next talk – Contributing, by Ryan Nystrom – I hope you enjoy!
Transcript
Thank you everybody for coming out here. It’s really exciting for me to be here and to be presenting to you guys.
I think our iOS community is something really special, in particular the raywenderlich.com community, and really I’m happy to be up here and giving back to the community that helped me get started.
Let’s clear something up really quick. You might think that because I’m a speaker and I’m up here, I’m an awesome engineer and I write awesome code. Let me show you just something I wrote like 2 weeks ago:
var photos = [PhotoModel]() let options = [(kCGImageSourceShouldCache as String) : false] if let imageURLs = fm.contentOfDirectoryAtPath(path, error: &error) as? [String] { for fileName in imageURLs { if let URL = NSURL(fileURLWithPath: path)?.URLByAppendingPathComponent(fileName) { if let imageSource = CGImageSourceCreateWithURL(url, nil) { if let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, options) as? PropDictionary { if let exif = imageProperties[kCGImageProperityExifDictionary] as? PropDictionary { if let OriginalDateString = exif[kCGImagePropertyExifDateTimeOriginal] as? String { if let date = df.dateFromString(originalDateString) { photos.append(PhotoModel(title: fileName, imagePath: url, dateTaken: date)) } } } } } } } } |
Look at that. That sucks. It’s doing some Core Image stuff. It’s dumb. It’s hacky. It works. Whatever. I’ve written other crappy code and I’ve written code that’s worse than this, and I’m willing to bet you guys probably have too.
But I’ve written better code. I’ve written code that I’m really proud of, and I bet you guys have too.
I bet you’ve written code that if you were to show it to me, I’d be like, “Whoa, that’s awesome. That’s really good.”
That’s why I’m up here, because I have written things that I’m proud of and I know you have, and I want you to share them.
Like Ray mentioned in his keynote, our community is really special and we should be contributing to it. So I’m going to be up here trying to convince you why you should be doing it, how you can be doing it, and maybe give you some tips on how to get started.
Why Bother?
Is this just to become internet famous and get thousands of Twitter followers or something? Not really.
Take a look at all the leaders in our iOS community. They’re speakers. They contribute to open source. They blog. Maybe they do have thousands of Twitter followers because the things that they tweet are kind of important. :]
This is all about building a better community and strengthening the one that we’ve built so far. Whether it’s writing or giving a talk or building an open source project, there are a ton of benefits.
Personal and Professional Benefits
There are personal benefits:
- I’ve made a lot of friends.
- I’ve learned from a bunch of different unique experiences.
- Whenever I do an open source project or I give a talk, I’m reiterating things that I’ve learned before and I’m strengthening that knowledge of it.
There are also professional benefits:
- You build a network.
- You might find other resources with people or companies or tools that’ll help you out.
- You might actually find a way to get help when you’re stuck somewhere.
Awesome Tools
Another important reason we should be doing this is just take a look at the tools that we use every single day.
- FreeBSD, which powers OS X
- LLVM, which powers tools like Xcode
- WebKit, which we’ve probably used before
- Swift, which fingers crossed it’s going to be open source, but this is a tool that we’re going to be using, probably for a long time.
These are all awesome projects that you might be telling yourself, “These are amazing, built by really talented super smart people. How in the world could I ever contribute something and build something like this?”
Your Experience Can Help Someone
Last year I was at a conference called NSNorth and a guy by the name of David Smith, who does a podcast called Developing Perspective and writes a blog with the same name, said something that really struck me. He said:
Now think about that. Think about when you were 2 days into doing iOS development. You probably thought, “Everything that I could say has been done before. Nothing that I say would really matter.”
But there’s somebody out there that’s been doing iOS for just 1 day.
Think about all the things that you learned on that second day:
- Those Xcode shortcuts you learned
- How you got that app to run on a real device
- And how much of a pain in the a** that actually was!
Think about how you could share that to that person that’s still been doing this for just 1 day – and really teach them something and help them get moving faster.
How I Began Contributing
Jumping in to just contributing to our community might sound a little intimidating, so as an anecdote, I’m going to share how I got started.
Back in 2010, I was still in school. I was interested in learning how to build iOS apps.
I stumbled upon this little known website that had some pretty cool tutorials at the time and decided to start learning. In fact, this is actually a screenshot of the very first tutorial that I read:
It is burned into my memory because of that freaking ladybug. Ray’s site really helped me get started.
When I got started, a lot of my colleagues and friends would ask me, “Hey, what you’re doing looks pretty cool. I like that animation or I like that you can make your own app to send a tweet.” They started asking, “How can I get started? How can I do this?”
I had enough people interested that I decided to build my own class while I was still in school. It was a little volunteer class.
I called it iOS 101 and the attendance was awful. Single digits, people rarely showed up multiple times, but I had a core group of students that actually kept showing up.
These students were really interested and really wanted to hear what I had to say, and I really got hooked on that feeling of teaching somebody something.
It really reinforced the basics when I was building these presentations and slides and stuff, like having to remember what the actual difference between an integer and a float was at the time.
On the very last day, I was fortunate enough to email Ray and ask him to Skype in and give everybody a “Where to go from here?” talk.
Meeting Ray had opened amazing opportunities for me. I soon after started tech editing for him, then I started writing, then I started writing books, and now I’m up here.
Enough about how I got started. Let’s talk about how you can get started and the different ways you can do that.
You Can Do It! – Writing
Let’s start with writing.
I’m going to preface with writing is super hard. It’s easy to just spew out words and fill up a page, but it’s really hard to actually write something and communicate effectively.
As engineers and developers, we’re stereotyped as introverts. We might be really logical with our brains but we might not be so eloquent with our words.
But think about how many emails you send, think about how many estimates or quotes you fill out, or how many times you have to explain to your manager, “That’s not a bug, it’s a feature.”
Writing and practicing writing helps you communicate better.
A Writing Example
As an example, for me in my day-to-day work, if I run across something interesting, I usually will copy and paste some notes and keep moving on.
I’ll return to those notes and maybe put something … Maybe something will stand out and I’ll think, “You know, I should probably share that. That’s kind of interesting.” I’ll turn it into an outline and then I’ll eventually write it out as a real blog post.
For instance, when I was working on AsyncDisplayKit at Facebook, we ran into this really weird NSURLSessionTask issue, sort of like a iOS 7, iOS 8 compatibility thing. It’s really weird. The debugger had this in the output when I was done and fixed it.
I thought it was interesting. It was like a little weird class hierarchy difference between iOS 7 and iOS 8. Threw it into Day One, the app I use to take notes, and then I just moved on.
A week or 2 later, I came back to it. I saw this again and I was like, “Man, that was kind of cool.” This was useful. I whipped together a really simple outline and then after looking at that, I filled out all the bullet points into paragraphs and I published a blog post:
It’s not the most perfect blog post. It’s not even that super interesting, but it was kind of cool. A couple of people reached out and said, “Hey, thanks. That’s pretty neat.”
My process isn’t perfect, but it’s simple. If you decide to start writing, whatever process you use should be really simple too.
You Can Do It! – Tweeting
If writing is a little bit intimidating because filling up blog posts with words is kind of a lot and takes a lot of work, I want to tell you about this awesome place that limits everything that you say to just 140 characters.
Twitter’s awesome! I love Twitter. I can immediately get in touch with peers in my industry, chat, talk about new tools or trends.
I can find out about new conferences or upcoming conferences or when tickets go on sale, except not WWDC. If you use Twitter for WWDC, they’re already sold out. :P
Sometimes I’ll find out that somebody’s nearby and I’ll just invite them to grab a beer, or other sort of tools and technologies when they come out.
You Can Do It! – Stack Overflow
There’s other online communities too. I don’t know if you guys have heard of this one, but Stack Overflow is an awesome place. I’m sure that we’ve used it to just Google answers and that’s great, but the community, the online community here, is kind of awesome.
If you’re really good at answering questions, if you’re thorough, you can actually build a reputation, and I’m not talking like vanity internet points. I’m talking about being The Core Data Guy and that’s pretty cool.
Honestly, if you’ve never sifted through some of the unanswered questions on Stack Overflow, you should, because they’re all a bunch of 5,000 piece puzzles and all I want to do is solve them. If you’re a puzzle solver, get on here.
You Can Do It! – Conference Speaking
If you like actually talking to somebody or you’re stuck behind a computer too often, there’s what I’m doing, actually speaking.
Again, engineers and introverts and all that stuff, maybe we’re not that good at speaking, but I never liked getting up in front of people and speaking myself. It took me a while.
I started really small. At my last company, there’d be a group of four or five people, non-technical people, that were interested in iOS. They just want to learn how Apple works, how the App Store works, so I put together a 10 slide presentation and gave it to them.
I got interested in doing that and eventually moved on to meetup groups, where there’d be a group of industry peers. I would give my presentation to them and be able to get some really good, critical feedback.
Moving on from that, I decided to get in touch with some small conferences. I’m sure Ray can attest that conference organizers are probably a little bit busy, so when you reach out to them, you might not hear back immediately. Sometimes you might not be able to get a spot, but be persistent, build a relationship, and eventually you’ll be invited out to speak.
If you really need help with speaking and you want to be doing this, I can’t recommend this group enough. It’s a meetup group called Toastmasters.
They don’t really care about what you’re talking about. They’re just there to help you get better at talking and putting together presentations.
Speaking of meetups, there’s meetup.com. You can go on here, search for interests, and find local meetup groups. Usually they’re professionals and hobbyists that get together, really non-committal.
This is a picture of me with some of the guys from Ohio at 360|iDev last year.
I still keep in touch with these guys. I went to NSCoder and a CocoaHeads meetup group. It’s awesome, really good friends. I love just showing up and getting into arguments about Interface Builder versus code.
Sometimes I’ll bring my laptop and be like, “I can’t figure out this bug. I need some help,” or “Hey, I’ve made this really sweet animation.” Somebody will look at it.
One of the things I loved the most was inviting or introducing new people, either new to the area or new to iOS and getting them up to speed, because there’s nothing like face-to-face interaction.
You Can Do It! – Open Source
One last thing that you could be doing is open source.
Now open source to me is kind of a personal subject. I think that my contribution to open source has led to me getting better as an engineer and it’s really contributed to some of the opportunities that I’ve been presented with.
At Facebook, working on AsyncDisplayKit, I learned so much in the past 2 months. I’ve actually been able to apply computer science skills that during university, I would have never imagined I’d ever use any of this theory stuff again.
I’ve learned about collaborating with other engineers and I’ve actually learned a bit about public relations, communicating publicly with other people external to your organization.
Open source, just like speaking, was not something that just came naturally. It’s super intimidating.
When I write a line of code, I write that line my way. I name my variables my way, my methods.
Other people out there could write that same line of code. They’ll do the exact same thing thousands of other ways, but I wrote it like that because that’s how my brain works.
Then I publish that work, I’m publishing my brain. It’s like a window into how I think. That makes me super vulnerable, especially when people are going to throw criticism.
But it’s a healthy exercise. You get better at it. You learn to take feedback and criticism and you learn from other people.
Honestly, right now is probably one of the best times to be contributing to open source, especially in iOS. These guys, CocoaPods, have set the iOS open source world on fire.
It’s so easy to build something and let somebody else install it, try it out, and integrate it with their project. Just think about how many working hours AFNetworking has saved the world.
Whenever I do an open source project, for me personally, I’m an interface guy. I like shiny things.
Here’s what I’ll do:
- Get Inspired. I’ll find something on this designer social network called Dribbble, some sort of animation or something.
- Build it. I’ll pull it down, I’ll build the project in a weekend or 2, and then I’ll publish it.
- Release it. I’ll write a readme and make some fancy gifs that catch people’s eyes or something, and then release it.
- Maintain it? Sometimes I’ll come back and maintain it, or sometimes I won’t.
I really love doing this. I love doing interface work, because that gets me excited.
That’s really important about whatever you decide to do, is that you should love it. You don’t want to be releasing mediocre work, because if you release mediocre work, that could be harmful and that’s not what we want to be doing.
Especially when anybody in our industry asks, “What should I be doing to boost my portfolio and get better,” because maybe they’re going out to interview or something, I always say,
Tips and Tricks
Enough about all the different things that you could be doing. Let’s talk about some tips.
Do the simple thing first
Specifically at Facebook, I work on Instagram. One of Instagram’s values is to do the simple thing first. I think that’s really important.
If you’re going to be writing, don’t edit for weeks on end. If you’re going to be building an open source project, don’t write unit tests into the ground.
Just get it out there and think of it, your project or your blog post or whatever, as a minimal viable product. Focus on shipping.
Set goals
It’s really important to be setting goals for yourself, setting dates.
My wife would be able to tell you that if I don’t set a date on something, I will never do it.
Don’t burn out
Don’t be aggressive on this. If you’re going to be building an open source project, just limit it to 2 weekends. If you’re going to be going to meetups, just go once a month.
You’ve got priorities. You’ve got a job. You’ve got a family. Don’t burn yourself out.
Be authentic
Be your authentic self. Phonies suck. I’m sure we’ve met them. It’s not fun. It feels like an impostor. Don’t be that guy. Really care about what you’re doing and release good work.
Have humility
Lastly, remember to always have humility in whatever you do. It’s really, really important that our community remains humble. Remember that there’s always somebody out there that’s going to have less experience than you do, and there’s also always going to be somebody that’s smarter than you.
Just keep that in mind whenever you’re releasing work. Don’t put too much stress on it. Don’t burn yourself out. Be patient, and remember what they say when you teach a man to fish.
Jeff Atwood has a pretty nice quote. “No matter how much ‘karate’ you know, someone else will always know more.” Paul Graham has another great quote:
I’m really excited to be here and I’m really appreciative that you all came to hear my talk. I’m really happy to be giving back to this community that helped me get started.
Start Contributing
No matter what you do, if it’s tweeting or speaking or open sourcing, just remember that your experiences are uniquely valuable.
Remember I wrote this:
var photos = [PhotoModel]() let options = [(kCGImageSourceShouldCache as String) : false] if let imageURLs = fm.contentOfDirectoryAtPath(path, error: &error) as? [String] { for fileName in imageURLs { if let URL = NSURL(fileURLWithPath: path)?.URLByAppendingPathComponent(fileName) { if let imageSource = CGImageSourceCreateWithURL(url, nil) { if let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, options) as? PropDictionary { if let exif = imageProperties[kCGImageProperityExifDictionary] as? PropDictionary { if let OriginalDateString = exif[kCGImagePropertyExifDateTimeOriginal] as? String { if let date = df.dateFromString(originalDateString) { photos.append(PhotoModel(title: fileName, imagePath: url, dateTaken: date)) } } } } } } } } |
…but I’m up here. Writing that doesn’t stop me from getting up here and it shouldn’t stop you either. I want you to get out there and start sharing your ideas.
I can’t wait to hear what you have to say.
RWDevCon Inspiration Talk – Contributing by Ryan Nystrom is a post from: Ray Wenderlich
The post RWDevCon Inspiration Talk – Contributing by Ryan Nystrom appeared first on Ray Wenderlich.