Minimum Viable iOS Engineer

Parable of the Shrew

My father works at the Botany Department at UW-Madison. When he was a graduate student he worked as a naturalist at a state park in South Carolina. When I was growing up he told me a lot of stories about this park. One story that he told me in particular has stuck with me most of my life. I have been meaning to write a blog post about it, and I feel like now is the time.

One day while he was working at the state park, he found a shrew. A shrew is a small rodent that eats crickets. My dad captured it and took it back to the office with him. He knew it ate crickets, but wasn’t sure how many or how long it had been since the shrew had eaten. He wanted to be safe, so he put the shrew in an empty aquarium with a hundred crickets, figuring that would be enough.

He came back the next morning to find the shrew dead on its back with all four little furry feet in the air. It was surrounded by dead crickets. The shrew was so fixated on killing every cricket in the aquarium that it forgot to eat any of them and it starved to death surrounded by food.

Resist the Temptation to Be the Shrew!

Yesterday Apple had their announcement of the new tvOS, along with a lot of other new toys that made my head spin.

I noticed a lot of people dropping the watchOS stuff to pick up the new tvOS stuff because it was the new thing and they didn’t want to get behind.

I want to say something that is going to make you feel bad. Take a deep breath. Relax. Here goes.

We have reached a point with the platform where we can’t know everything.

When I started programming I figured I would learn a few languages to cover my bases and give me options for when I went looking for a job. I realized that this was a bad tactic so I picked the one I most wanted to work with. I have further specialized to more and more specific areas of Apple development.

Every time that something new and shiny is announced, I feel compelled to learn something about it. I have Ray Wenderlich’s WatchKit by Tutorial on one of my computers and I don’t know if I have ever opened it. I also have their Animations, Core Data, and several years of iOS By Tutorial in a folder on my computer unread. I feel an incredible amount of panic because no sooner do I hear an announcement about something, my Twitter feed explodes with people who have dug into the docs and are sharing what they read. I have barely processed that something new has come out and already people are doing something with it. It gives me tremendous anxiety and makes my head spin.

I have been working myself into a tizzy just trying to keep up with what I am doing at my job. I have not used the iOS frameworks in about a year. I have a book out on iOS development but I don’t use it every day and it’s basically gone from my memory. I know if I had to use it every day I would pick it back up again fairly quickly, but it still disturbs me that I just don’t remember this any more.

I keep feeling like I need to know Core Data and Networking to stay marketable. I have a list of things that I think I need to know because if I don’t know them then I am not a real developer and people will shun me when they find out. This fear leads me to work all the time. I regularly suffer from exhaustion. The last two weekends I spent two days in bed internally screaming at my body for giving up on me because I have deadlines I need to meet and I don’t want to let people down.

I can not continue this way. If you are going through this, you can’t do it either.

This year at 360iDev there were a lot of talks about the death of independent development. We’ve moved beyond the point where you can make an app in your free time on nights and weekends that is going to be a minimum viable product. Believe it or not, this is a good thing.

Back in 2009 when the platform was relatively new, you could know everything. It was possible. The reason it was possible was because the platform was incredibly limited. There were a lot of things you couldn’t do, or couldn’t do easily. Now we are living in an embarrassment of riches where almost everything is possible, which means YOU CAN’T KNOW EVERYTHING!! Stop trying!

What is the Bare Minimum You Need to Know

I celebrated my first work anniversary on Tuesday. Before that I worked at a start up for two months, worked on an OpenGL contract application for three months, coauthored a book, and did over a dozen conference talks. I have a shocking amount and diversity of experience for a developer who has less than two years of experience.

I don’t know Core Data. I don’t remember most of iOS. I haven’t worked with Interface Builder in a year even though I intended to specialize in graphics and design for iOS.

I think that the amount of things you need to know to be a beginning iOS developer is smaller than most people think.

I talk to students at the tech school I attended and all of them think they need to know a lot of stuff. I would argue that you don’t need to know a lot of stuff, but the stuff you do need to know you need to know well.

Here is my list of what I think you absolutely need to know to have an entry-level iOS job:

  • Some fundamental understanding of either Objective-C or Swift. Both of these languages have a lot of unique aspects and I would argue it is important to have enough of a grasp of one of these to understand why you don’t program them like Java or some other language.
  • The MVC design pattern. This is a fundamental pattern that permeates all of iOS. If you do not understand this pattern, you will not write good iOS code. It is vital to understand this.
  • Know how to use the Apple documentation to look up how the frameworks work. You can’t know everything, but you at least need to know how to learn what you need to know.

I think knowing Core Data or Networking or any of the other multitudes of things are nice career embellishments, but I think if you are looking to bring on an entry level person and train them, this is what they need to know.

I don’t know how to do Networking. I have never had to know it for any job I have had. Same with Core Data. I know a lot about things most people never need to use like how to connect to a FireWire camera and how to parse LibXML2. These are things I learned because I needed them for the job I have. If I were looking for another job I am sure knowing Core Data would make me more marketable, but I wanted to find the right job for me rather than being qualified for a lot of jobs that aren’t really a good fit.

I don’t think not knowing how to do NSURLSession or how to make an Apple Watch app makes me an impostor or a bad developer. They haven’t affected my ability to get a job yet and I don’t think they ever will. If I need to learn them for something I am doing, I know enough that I can teach them to myself and if I forget them again, then I wasn’t using them.

I worry about people spending so much time learning “superficial” stuff that lets them build an app but does not teach them how the app works so it can’t be applied to anything else. I think instead of creating an aura of fear at not knowing everything, we focus on what is the essential amount you must know and enable people to learn the things they need to know to specialize or that interest them.

Specialize

At 360iDev last year Saul Mora and I were discussing the possibility of setting up something like a co-op for developers. If you had an app idea where you needed to know something you didn’t know, you could post it on this message board and if someone knew how to do it, you could negotiate working with them on it. I don’t particularly want to learn a bunch of stuff I don’t care about to make something and I would love to work on someone else’s project only doing the things that I want to do.

Like all good ideas that are formed by committee, this got bogged down in a lot of implementation details and forgotten. I still think this is the only way for independent development to move forward.

If you have a group of four people with different technical skills working together, you can put out a really nice app in your spare time. The gold rush is over, but I would hope that some people are involved in app development because they enjoy it and have ideas they want to share with the world.

I feel that Ray Wenderlich has embraced this idea. He has a large team of people working together on the tutorials because it simply got to the point where he couldn’t do it alone. We have a large pool of knowledge and resources and we are able to accomplish more than any one person could. I think he’s a great example of what you can do if you start trying to think cooperatively rather than singularly.

I think we need to move away from the idea of the solitary developer working in their basement over a weekend and move towards the idea of having a team of friends you can work with and share ownership of a product with. Even if the app never earns a dime, the act of working with your friends to make something you are proud of is a goal in and of itself.

So, to everyone feeling shitty because you can’t keep up with the new and shiny, stop it. Go easy on yourself. We’re at a turning point where things are going to be different and you can’t hold yourself to those standards anymore. Focus on the fundamentals and what is important to you and you will be fine. The platform has matured and it’s a good thing.

Doctor Who: Series One- The Empty Child

Are you my mummy??

Are you my mummy??

Four words: Are you my mummy??

Three better words: Captain. Jack. HARKNESS!!!

Oh yeah, some other stuff happens and we get a far better two-part episode than our last attempt at such things. Something about WWII and a scary child.

Captain Jack Harkness

Okay, confession time. Captain Jack is my spirit animal. I have a collection of nerd culture characters that I deeply identify with and Captain Jack is one of them.

My ex-husband was rather annoyed with my Captain Jack fixation. He thought I had a crush on him and got annoyed that I had a crush on a gay actor. It isn’t like that.

Captain Jack is the person we all wish that we were like. He’s cocky and confident. He flirts with everyone and it’s totally okay. He is just very much himself and he doesn’t apologize for it. He’s daring and charming. And I want to be him. Well, a female counterpart of him.

This is John Barrowman covered in puppies. SQUEEE!!!

This is John Barrowman covered in puppies. SQUEEE!!!

I know that the actor, John Barrowman, is pleasantly surprised at how much of a role model he has become. As an openly gay actor he had some struggles with finding his place in the world and I know that he was very happy when this character who was comfortable with himself and his sexuality became such a prominent part of nerd culture.

I keep meaning to put together a female Captain Jack cosplay, but I forget until it’s too late to order the parts. I wanted to get a vortex manipulator replica to use as the band for my Apple Watch. I have a winter coat that is a feminized version of his, which is one of the only reasons I tolerate winters in Wisconsin.

Going to stop talking about Captain Jack before I start delving into my Ninth Doctor/Captain Jack fantasies…

Plot Overview

The Doctor and Rose are called to England during The Blitz to deal with a dangerous situation. They are stalked by a creepy little boy who is inexplicably in a gas mask asking, “Are you my mummy?”

There are aspects of the beginning of the episode that I had forgotten were important plot points. There is a nice scene of The Doctor asking around if anything has fallen from the sky with a large bang. This was an integral part of the plot that I had forgotten about.

Oh, when you asked if I wanted to come to your spaceship, it wasn't a euphemism?? Aw.

Oh, when you asked if I wanted to come to your spaceship, it wasn’t a euphemism?? Aw.

I also forgot that Captain Jack was introduced as a time-traveling con man. He was heroic in pretty much every other episode after this that it was hard for me to remember that he was responsible for the problems that were caused by the episode.

Trying to strike a balance about what to talk about in the first part of this episode. This is a rather difficult post to write because so much of the payoff from this episode comes from the end of the next episode. I am trying to make sure I talk about how the setup worked as opposed to its resolution.

Also, this seems like a parental horror story of perpetually being followed by a bottomless pit of need that will follow you to the ends of the earth and possess all your electronics.

Nancy

Don't answer the phone. It's a scam.

Don’t answer the phone. It’s a scam.

Nancy is a total bad-ass. I know that a lot of our kiss-ass female culture is predicated upon the idea that women shed their feminine and maternal characteristics because those things make them weak.

I disagree.

Nancy is fiercely protective of the children under her care. She is unwilling to put up with any greedy bastard’s shit when it stands between her making sure the orphans in the Blitz can have a hot meal at the table with proper manners.

When we think about bad-ass characters, they are ones that fight. Sometimes we don’t know why they fight other than they are the good or bad guys and that is what they do. We have a dearth of characters that are not particularly strong but are willing to fight for people who are weaker than they are and get away with out out of pure nerve.

Nancy is a good example of a true strong female character. Giving a girl a bow and arrow doesn’t make them a strong role model, so can we please get away from this cliche? Thanks, bye.

Conclusion

If anyone wants to recreate this as a first date...

If anyone wants to recreate this as a first date…

Again, this is a rather short review because there isn’t really a lot that I can talk about until the next episode. Half of this episode was Captain Jack sweeping Rose off her feet with champaign in his invisible space ship, which is loads of fun, but isn’t really conducive to literary analysis.

All work and no play makes Captain Jack a dull boy…

This was also a rather patriotic episode between Rose’s Union Jack shirt and the story revolving around the English resistance to the German war machine. I can imagine stories like this are to the British what Band of Brothers was to America. Sometimes we forget that other countries are just as proud of their heritage as we are of ours and it’s interesting for me to see.