Monthly Archives: April 2017

Legitimate Complexity and The Art of Teaching

I have been working on a book on Metal for the last several months, since October. I am entering one final push and trying to complete the rough draft of this book by the end of June. That gives me about a week to write each chapter, which is really stressing me out and upsetting me tremendously.

The thing that is stressing me out is that I feel like learning Metal is like zooming into a fractal. Every time I think that I have a good grasp on the material, I realize there is a much more complicated layer of complexity underneath what I just learned. The complexity grows exponentially.

Metal is multi-disciplinary. It’s not just the framework. It’s all the things around the framework that you need to understand in order to actually create something useful. There are a lot of math concepts and a lot of 3D graphics concepts that most books on OpenGL don’t focus on because no one wants to write a 2000 page book that contains everything you need to know that absolutely no one will read.

I am frantically trying to edit myself enough to present a coherent chunk of information in each chapter without getting overwhelmed with all the things I don’t have time to explain or learn.

I’ve been an iOS developer for the last five years. I learned a lot of programming from Ray Wenderlich tutorials. Those tutorials are fantastic, but I feel like they give a false impression that anything anyone wants to do can be broken down into a 3,000 word step-by-step tutorial.

Right now I am trying to work through their 2D Games by Tutorials book. This book is a monster. It’s nearly 700 pages long. I have only ever gotten through the first 150 before I got overwhelmed and given up. I managed to get further than I had before, but it’s still incredibly dense. If you asked me what they could have gotten rid of to make it less overwhelming, I would be hard pressed to tell you.

A lot of things we do, especially when we’re starting out, are small and easily encapsulated. This lulls us into a false sense that everything we do will be simple and easily encapsulated. We develop sound byte memories where if something can’t be spoon fed to us in ten pages or less, then we get muddled and confused. This severely limits our ability to work on anything more complicated.

I am absolutely not picking on Ray’s site. It’s an amazing resource and the reason the tutorials are set up the way they are is because of this issue of us only being able to handle a certain amount of complexity. His site is working with how we process information rather than being a source of bad habits. I have nothing but admiration and respect for the writers on that team and I do not want this to come off as me bashing them or saying people who learn from that site are not real developers. I am simply talking about how for the last few years I have lulled myself into believing that everything can be broken down into easily digestible chunks when not everything can.

At this point I am trying to figure out how to expand my brain’s bandwidth so that I can tackle more complexity than I am used to. It’s incredibly difficult to do so. Not only am I trying to figure out something incredibly complex, I am also trying to process and package it into a digestible chunk by another person.

I have been reading a lot of graphics books and gotten frustrated at how abstract they are. I get frustrated that certain things are assumed and that nothing seems to be explained. I am now beginning to understand that once you reach a certain level of complexity there is a limit to how well you can convey that information.

This is an issue we are currently dealing with in our political sphere. Take the tax system for example. The tax system is an incredibly complex system that most people don’t really understand. When we go to vote for our representatives, it sounds good to say “Reform the tax system to make sure everyone pays their fair share,” but how to actually implement that is complicated. Something that is simple and sounds fair usually winds up being worse that the current system that is too complicated to explain in a 30-second sound byte on the evening news.

In programming we talk about precision and elegance. Those are concepts that do well in incredibly controlled and contrived situations. When you have to deal with things in the real world, stuff gets messy. There are edge cases. Things don’t behave predictably.

For a “simple” example, look at dates and times. There are 365 days in a year, 24 hours in a day, sixty minutes in an hour, and sixty seconds in a minute. Except when there aren’t. Every four years our year has 366 days. Then you get into leap seconds. Then you have Einstein’s Theory of Relativity where clocks that are shot into space are slightly off from their counterparts back on Earth. Things get wibbly wobbly awful damn fast and this should be a straightforward example.

I get that the world is so hopelessly complex that if we tried to understand the full scope of just how little is standing between us and total anarchy our heads would explode. We simplify complex systems as a means of being able to just cope with every day.

Right now I am frustrated because I am just beginning to grasp something that is hopelessly complex, but I don’t know how to package it in a way that is accessible to a group of people. I want to write a Rosetta Stone where someone can read through my book and totally understand a complex system, but that really isn’t possible. It would take a hundred pages to walk a reader through creating every piece they need to get a minimum useful thing up and running.

I am doing the best I can to present the information to someone in a way that will help them figure things out. I am trying not to be hard on myself for not being able to do an impossible thing. I know with several years of practice and working with this, that I can master it. I have to accept that there is no magic book that will intuitively teach you everything you need to know in order to do something legitimately complicated. I can just try to do my best to present what information I think your brain can handle and hope that you can find the next step to figure out the rest for yourself.

Moneyball: The Art of Scouting Programming Talent

Back when I was in London I suffered from a nasty bout of food poisoning. I wound up spending a lot of time in bed hiding in my hotel room. I got bored and looked for something to watch on TV. A channel was playing the movie Moneyball.

I am not a huge baseball fan, but I am interested in data and statistics, so I started watching it not really knowing if I was going to like it or not. It wound up captivating me in a way I didn’t think it would.

It was less about the statistic and more about the story of the central protagonist, team manager Billy Beane. Billy was scouted for the major leagues as a high school student and signed to join the Mets at age 17. His career was lackluster and he never really lived up to his potential.

The movie only briefly covered this backstory, but it fascinated me. Why had he not lived up to his potential? Did he just peak too early? What happened?

I finally bit the bullet and bought the book the movie was based on and I got a better overall explanation of what happened. Billy Beane was one of the most intelligent kinesthetic learners of the century. He was capable of doing things no one else thought possible and making them look easy. His physical talent and capabilities were beyond question.

The issue was his mind.

He never learned to cope with failure. As a high school student, he was always so much better than everyone else that failure was never something he thought much about. When he started playing against people older and more experienced than he was, he would strike out and his batting average dropped. He was unable to cope with this failure, so it manifested in explosive rage and he developed an inability to perform. If his first at-bat went poorly he was done for the rest of the game. He was afraid of embarrassment. He modified his batting to try and not strike out as often, but it worked against his natural athletic gifts. The only person keeping Billy from being a super star was Billy himself.

This story really strikes a chord with me. I speak somewhat openly about having mental health issues. I have had multiple jobs over the last few years where the work environment destroyed my ability to function. I would sob because I knew the programming knowledge to do a task was locked away in a safe somewhere in my mind and I could not access it because my mental health was in shambles. It’s so hard to tell someone that this isn’t you. You know you can do better, but you just can’t right now because your mind is interfering with your ability to function.

Over the years I have learned some coping skills. I know how I work best and I try as best I can to tell people I work for how I work so that they don’t break me. Some of them respect that. A lot of them don’t. I honestly don’t understand why a company would spend so much money on programmers and then make dick moves that destroy their effectiveness. The only explanation I have is that they don’t think of programmers as people. We’re a disposable resource. We’re like race horses. They are all excited about us until we break a leg, then they take us out back and shoot us and go out and buy a new one.

There was another aspect of the book that resonated with me. I have had very bad experiences with jobs where I feel like the people who hired me are waiting for me to fail. They look for any indication that I misrepresented myself or that there is some reason I can’t do what they want and they cut their losses and let me go. I see other people who are completely incompetent who linger forever and continue to get another chance in spite of their past record of failures.

One of the points of the book was talking about how baseball scouting has always been done. A bunch of guys will travel around watching high school baseball games looking for talent. They have a preconceived notion of what a star baseball player looks like. He has to be tall and muscular and have the right look. He has to have the right tools. He has to have a presence.

There was a whole chapter about the scouts sitting down with the economist who did the statistics going over who the scouts wanted and who the economist wanted. Most of the players the economist wanted horrified the scouts. They were all too fat, or not tall enough, or they would throw funny. It didn’t matter what their past statistics said about their ability, they didn’t have the right look. The scouts couldn’t imagine them being the next big thing.

Billy Beane was allowed to languish in baseball for ten years in spite of a poor track record of success because he had the right look. Everyone was waiting for him to shake off whatever was wrong with him so that he could be the player everyone imagined he could be. Baseball scouting is less about what someone has done and more about what you can imaging them becoming.

This applies so much to technology as well. We have the myth of the 20-year-old programmer in a hoodie who writes code that changes the world. We have ingrained in ourselves what we think a programmer is and how they’re supposed to look and act. If you’re a venture capitalist, you’re not looking at a track record of past success, you’re looking for someone that feels right. You look at what you imaging that person can be rather than who they are.

Having several failed start ups is seen as a bonus, but only if you’re the right kind of person. People are willing to keep giving you chances because they have a gut feeling that you are going to become something even though you have no past track record to back it up.

If you’re black, or female, or trans, or some other underrepresented minority group, it’s harder for venture capitalists to imagine what you could become. It doesn’t matter as much if you have a solid business plan or if you’re doing something no one else is doing. If it’s something that is outside of their scope of understanding, you’re not going to sell them of the fantasy of being Peter Theil investing in Facebook.

This is a larger problem even beyond the scope of who gets funding and who doesn’t. We are sold on the idea that a programmer looks and acts a certain way. Everyone has to be a 10x programmer. Everyone has to work 80 hours a week. Everyone has to be passionate. Everyone has to keep learning the next hot thing because if you don’t you’ll be left behind. Everyone has to be under the age of 30 because young people are smarter.

No one can ever be wrong. No one can ever admit to not knowing something.

I think one reason we have so many toxic hostile arguments about code is for many of the same reasons Billy Beane did not pan out as a baseball player. People can’t ever be wrong. People can’t fail. Our self worth is wrapped up in being the smartest guy in the room. We can’t tolerate ideas that are different from our own because if we’re wrong, then who are we? Are we those losers who refused to learn object-oriented programming in the 90’s who can’t find jobs now? Are we those people we make fun of who write JavaScript and copy and paste code from Stack Overflow?

I think we make the mistake of thinking that a lot of the toxic behaviors we see come from a place of strength. It’s quite the opposite. It comes from a place of fear. We fear being displaced. We fear being wrong. We lash out at minorities because we benefit from looking like what a programmer should look like and the fewer people we have to compete with, the easier it is to be at the top of the heap (or the stack).

I have had people who are less talented than I am sabotage me at work because they see their job as a zero sum game. You are either the smartest person at the office or you are not. It’s a competition. If someone knows more than you do, then it diminishes your sense of self and you must get rid of the person who is challenging your identity.

We are limiting what people are capable of by forcing them to put on a facade that they are never wrong. We are creating a more toxic environment by conforming to these ideas of what a programmer is supposed to look like. We think we’re special unique snowflakes, but we’re not. This is a problem everywhere.

We need to stop breaking people by trying to force them to conform to a mold that was set fifteen years ago. We need to be open to people who look different and have different ideas. We need to stop making people feel inadequate if they are not the smartest person in the room. We need to stop being hostile to people who are different and waiting for them to fail while giving a pass to the people who look like us because we imaging what they could be. That’s a fantasy, not reality. They’ll never become what they’re capable of if we don’t challenge them to think differently.

Helping Hands

Back in November I disconnected my Facebook account. I had hoped that when the 2016 presidential election was over that people would be able to go back to talking about life as we knew it. I missed talking about computer programming and science fiction. Every single day was filled with anxiety by everyone about what the future would bring. Things got progressively worse after the election in a way I didn’t think was possible. I had people who voted the same way I did viciously attacking me for not completely supporting their views 100%. It got too demoralizing to deal with everyone anymore because everyone was so angry that I simply quit. I couldn’t deal with it anymore.

This left me rather lonely. I started writing a book back in October. I find it difficult to leave my house regularly without completely exhausting myself. I certified my pug Delia as a service animal because I found dealing with the outside world too difficult to cope with. I don’t have any local friends anymore and it’s difficult to find people to hang out with.

Back in March I had two rather intimidating conferences I was attending. One was GDC. The other one was iOSCon 2017. This post is about my experiences with these conferences and how important our community is to me.

GDC 2017

GDC is by far the largest conference I have ever been to. I was fortunate enough to be accepted as a conference associate. I got to attend the conference in exchange for helping to make sure the conference runs smoothly. My first conference was Snow*Mobile in Madison. The organizers of that conference let me attend the conference in exchange for volunteering to help run the conference. I got to hand out conference badges and meet the speakers and it was an invaluable experience. I always prefer to not just attend a conference and I was incredibly grateful to be accepted as a conference associate.

Delia and I greeting at GDC. People asked where the pug was later and were sad she wasn’t a fixture at the front.

I was also afraid.

I was afraid if I told them that I had a service animal that they would think I would be unable to perform my CA duties. I should have been up front and told them immediately, but I figured if it wasn’t okay to bring Delia that I would leave her home and try to find a way to cope.

I didn’t need to be worried. Everyone in the CA program was absolutely fantastic about having Delia there. She and I were accepted by everyone. A lot of people took comfort in having her around and it really made that conference special to me. I love my pug, but I am biased. I worried that people would think that I was pulling a con and I wasn’t really disabled because I don’t have a physical disability. I worry that people think I am like Paris Hilton carrying my dog around just because I have privilege rather than her being something that helps me cope with crowded noisy situations. Having so many people enjoy having her around really touched me in a profound way.

Someone was spoiled with all the pettings.

Getting to attend GDC was a life changing experience for me. I met some of the greatest people ever. I feel incredibly blessed to have been able to connect with such a fantastic group of positive and accepting people. One of the big things they look for in a CA is someone who is friendly and positive. A lot of people there acted as mentors to students trying to break into the game industry. The CAs were a creative and colorful group of people. I felt like I could completely be myself and that it was just fine. I take pride in my weirdness and my craziness, but I do feel a lot of pressure to tone it down and conform at iOS conferences.

When I got home after the conference I felt surprisingly energized. I realized when I got home that I hadn’t heard anyone talking about politics or arguing about it for the past week. Everyone I interacted with was positive and happy to be there. I made a lot of new friends. I got to be in a completely non-toxic environment for a whole week and it was amazing.

Someone drew a picture of Delia and put it on the bulletin board. I may have cried a little.

iOSCon 2017

iOSCon was a different experience. It was not as large as GDC, but it was in London. This was my first overseas conference. I had concerns about the flight over and getting around. I also could not take Delia with me. I was afraid that I would not fulfill all the correct paper work and she would be taken away at the border or I would be denied entry into the country.

I also did not have any cellular service. I am not comfortable with public transportation because I live in rural Wisconsin. I was terrified of getting lost and not being able to get to and from my hotel. I have wanted to visit England forever, but I was terrified of trying to actually visit anything.

One of my friends, Paul Hudson, was going to speak at the conference and lives in Bath. He invited me to take the train out there and visit the sites. I was terrified of getting lost on the train. I had no idea how to get anywhere. Paul sent me incredibly detailed directions about where to buy a train ticket and how to get there. His directions helped me figure out how to get around Paddington Station when I arrived off the plane and was suffering from jet lag. I would have freaked out more than I actually did had I not been forewarned about navigating around.

When I got to Bath, he showed me around. I didn’t have to worry about referencing a map or getting lost. Getting to visit Bath was the highlight of my trip. If he had not reached out and taken the time to make me feel comfortable about going out there I never would have gone. I would have spent even more of my time in London hiding in my hotel room watching Law & Order reruns that miraculously still play on British TV.

I fulfill my life’s purpose by visiting one of the world’s oldest baths in Bath.

Helping Hand

I have trouble doing things that don’t bother most people. One thing that frustrates me when I go to San Francisco is that people invite me to go out to dinner and don’t do anything to help me get there. Sometimes they don’t even tell me the name of the restaurant they’re eating at. I wind up staying in Cupertino a lot, and the idea of hopping on the CalTrain and trying to figure out the MUNI and the BART to get to a location that no one will even tell me about throws me into a shut down.

I don’t like that I can’t do the same things everyone else can. I feel embarrassed having to explain that I curl up in a ball crying if I encounter multiple public transportation systems in one place when I don’t expect to. Everyone else knows what they’re doing and they get aggressive when you’re in their way because you’re freaked out and don’t know what is going on.

If people want me to do things with them they need to do a little more to help me get there. I need explicit directions. I need addresses. Having the name of the place is helpful too. It’s not that I am incompetent or lazy. I just need more help.

I don’t expect people to make the extra effort to help me spend time with them. Whenever someone does, it always means a lot to me. I know our community values being able to go off on your own and do things without help, but social stuff is really hard. It’s hard to go to a place you have never been and to deal with a system you don’t understand. Having a modicum of empathy for someone else and reaching out to do slightly more for them when they have trouble doing it for themselves is always unexpected and greatly appreciated.

There are so many small things that people can do that take just a few minutes out of their day that can mean the world to someone who has trouble doing things for themselves. My experiences this year are making me more aware of what I can do to be a positive influence on the world around me. With so much negativity out in the world right now, small acts of kindness really mean a lot. We’re all in this together.