Category Archives: Career

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.

Thoughts on Being Single for the Second Time

About two years ago I went through a divorce. I had known my marriage was over years before I was able to finally pull the trigger on it. I had actually tried leaving once a year earlier, but I was forced to go back to my husband because I wasn’t able to sustain myself quite yet and he promised to change. He didn’t and we followed through on the second attempt.

My ex-husband had an OKCupid account set up months before we filed for divorce the second time. He had his first date less than a week after he moved out of our house. A year after he moved out he had already replaced me with another woman with long red hair, two small dogs, and mental health issues.

During the year or two after our divorce I was a complete wreck. I was in much worse shape than I thought I would be. I had wanted the divorce. Our marriage was over. I thought I would feel free to finally do all the things I wanted to do. Instead, I felt like a death had happened. I had never been responsible for balancing my own budget and I had no idea how much money I earned or how much my bills were.

I had multiple rooms in my house that I simply never went into. My house felt incomprehensibly large even though it’s actually quite small. I used to have dreams that I was walking through my house and it was a giant labyrinth of gardens and piano rooms that I never knew were there because I only stayed in one small corner of my house.

The idea of trying to date anyone during this time seemed absolutely incomprehensible. I consistently see men who have recently gotten out of relationships try to get back on the horse and date again immediately. I don’t understand how they can do that.

I haven’t been on a date since I was 16 years old. I was diagnosed with bipolar disorder and was put on medication that made me gain sixty pounds in less than two years. My medication triggered panic attacks and caused a lot of mental health issues alongside the ones they were supposed to actually treat. I was a chubby, socially awkward woman with no social skills trying to navigate a social environment run on alcohol, which I couldn’t drink because of my medications.

I felt like having a boyfriend would give me some kind of validation that I was actually a person worthy of being liked. I used to develop crushes on other socially awkward guys who were less attractive than I was because I thought that they were low enough that I could get them. Most of them were either too socially awkward to return my advances or were appalled that a chubby socially awkward girl thought she was good enough for them while they drooled over anorexic teenagers with daddy issues.

Boys in college had been sold on the idea of the hook up. They had been told all through high school that when they got to college it would be a never ending stream of pussy. None of them wanted a relationship. They wanted to have sex with you and never speak to you again. I literally had guys come up to me and say to my face, “I hate you. I know you hate me. We should have sex. It will be fun.“

I was too priggish to give into any of these situations, but other girls I know did. They slept with guys to give themselves a sense of personal validation and were always disappointed when things never went any further.

I left college without having a boyfriend. I also left college without having any kind of stable career path. I was faced with a future alone with no meaning. Then I met my husband. We’d known one another since we were children. We were both tired of trying to find someone. I needed health insurance and to move out of my parent’s house. I thought I knew everything about him. I was terribly wrong and if you ever meet me IRL ask me about it and I’ll give more details than I am willing to give here!

After my misadventures in college, this seemed like as good as it was going to get. Sure, we weren’t really attracted to one another, but he would look me in the eye and talk to me. That was an improvement.

Things were fine for the first two years. Then he got weird. He started spending money we didn’t have on shit we didn’t need. I decided to go back to school for computer programming. I wanted an actual career and not just the menial white collar jobs I had held since we got married. I wanted a sense of self worth and to do interesting work I was proud of. I told him that if he would support me for two years that I could start bringing in four time more money than I had before. We could start a business. We could be partners. We could have our freedom and independence from The Man.

He wanted his freedom, but he didn’t want to work for it. It was the biggest disappointment in his life that he wasn’t born wealthy. This ate at his soul. He was bitter and resentful of having to go to work to earn a wage. He was always scheming about how to get rich quick without any effort. He would bully me about how I wasn’t developing the next Candy Crush. He would come to me in tears and tell me that he just needed me to earn a million dollars a year. He could find a way to be happy on just a million dollars a year.

He got incredibly paranoid. He was convinced I was cheating on him. He would follow me to networking events he previously had no interest in. He would skulk around behind me nursing a glass of scotch, watching me as I tried to network. He would go over and yell at me in front of people I was trying to connect with professionally. Once I came home from a business meeting to find him in the garage activating the GPS on my phone so he could track me down and physically bring me home. He would lay on the ground behind my car to prevent me from leaving the house.

He was jeopardizing everything I had worked so hard to accomplish and I simply could not tolerate his behavior anymore.

I feel I have been left in the lurch. I talk to other people who have built their careers on writing books and doing conference talks. I ask them for advice about how I can build this as a sustainable career while still paying my bills and I always get sheepish looks and the response, “Well, my wife has a really good job with benefits.“ I hear that and my heart sinks. I keep seeing and hearing that the career path I want to take can only be sustained by having a supportive partner who is willing to shore up the other person’s financial deficits.

I feel a great deal of anger at my ex-husband for destroying our marriage because he was unwilling to give up his $10,000 a year vacation habit. I have been borderline unemployed since September and I am just now reaching the end of my savings. We were $30,000 in debt with two incomes and bringing in over six figures while we were married because my ex couldn’t do without picking up an expensive hobby every couple of months. I had a plan that would have been mutually beneficial for both of us and now I am spinning plates frantically hoping that I can achieve what seems like the impossible all by myself.

I have no illusions about my book. I am writing about an incredibly niche topic that has almost no job prospects. I keep hoping if I develop skills around graphics programming that I can break into that area of expertise and have a long, stable career build on something most people don’t know that doesn’t fundamentally change, but I don’t know if I have enough time or runway to slog it out. I’m afraid of taking a dead end job and waking up seven years from now to find I didn’t keep up with the new changes in tech and that I am unemployable. Having the buffer of another person in case I made a terrible mistake and failed eased my mind. Having no safety net and throwing myself into a chasm right now is deeply worrying to me and I don’t have anyone I can even talk to about my anxiety because I am completely alone right now. Except for my parents. They have been fantastic, but I hate having to go to them with my hand out.

Being single at this point in my life is markedly different than it was when I was younger and I had no career. I am doing my best to not see getting remarried as an escape route for the path I have chosen to take. I would love to have a supportive partner around to help me out so I don’t have to do this alone, but having survived an unsupportive one, I know it’s better to be alone than live through that again.

I keep feeling like I am supposed to move on. Join OKCupid or Match.com. Go to speed dating. Relocate to San Francisco or Seattle to get access to a larger pool of eligible men. But I keep getting this nagging feeling that things have not fundamentally changed much since I was in college. Reading horror stories about how Tinder has basically supercharged the college hook up dynamic worries me. Seeing how many men are basically jumping into relationships to avoid being alone worries me too.

I like working. I see so many people doing frivolous crap all the time that I worry if I did move to a city and started trying to be social like everyone else that I would stop dedicating myself to my work. I would stop pushing and get left behind. It’s so hard to find another person who also likes working who is willing to just be in the same space I am while we’re both working.

I want to be with someone who wants to be with me. I would love to have someone to cook for besides just myself. I would like to have someone to build robots with me in my basement and then cuddle on the couch watching Star Trek. I don’t want that badly enough to grasp onto anything with a dick that comes along because I don’t want to be alone. I feel I have progressed from my college aged self who felt like having a boyfriend would be a validation to someone who is comfortable with themselves but would like to find another person to share things with.

I’m not willing to be with someone who did a visual assessment of me that I am just hot enough that they’re willing to have sex with me but they think I am unattractive enough to be approachable. I don’t want to be with someone who thinks that relationships are parking spaces and that you are supposed to always be parked somewhere or on the lookout for one.

As it looks increasingly like this will never happen, I am trying to accept being alone. I won’t settle for anything less than someone who likes me as a person and who I actively want to be with. There might be no one out there like that and I need to be okay with that.

Being alone sucks. But being with a destructive and unsupportive partner who doesn’t love you sucks more. It’s important to have a creative and fulfilling life rather than waiting for it to just happen to you. For better or worse, I am living a life I want to lead. I have no idea how sustainable it is in the long run, but for now I’m being true to myself. I am trying to have faith that if I do that then things will work out. Doesn’t mean I don’t indulge in feeling sorry for myself every once and a while.

Enough whinging. Back to work.

You Can’t Fix Other People

I started working on programming contracts three years ago. I started my first contract all bright eyed and bushy tailed. I was eager to prove myself and get things done and show myself to be a 10x programming ninja.

That didn’t happen. At least not right away. Things were really disorganized. There were broad ideas about things people knew they wanted to fix, but no real strategy about how to fix them. Depending on what day you were talking to the client, you would get different answers about what something should do or look like. It changed constantly. It was impossible to sit down and complete a task because it was likely the client would change their mind and it would need to be changed or scrapped altogether. On another contract I worked on the entire concept of the app changed three times over the course of five months.

I had a more senior developer I was working under that gave me some really valuable advice. I expressed my frustration at not being able to get anything done and my worry about being fired. I asked why someone would hire a contractor to work on a project if they didn’t know what they wanted to get done. He told me that is exactly why people hire contractors. They hire them when they are at a loss as to what they want to get done. They think the contractor will be some magic bullet who will somehow read their minds to figure out all the things that need to get done for the client so they can break through the mental berries they have preventing them from doing things.

I have talked a bit about my mental health issues. All of my mental health issues stem from this phenomenon. Inactivity is corrosive to my mental health. I have had several jobs/contracts/projects I have been brought onto where people didn’t know what they needed to get done. Sometimes I have dealt with the client directly, other times I have had managers “shielding” me from the client. Once I had an abusive manager who would bully the team into not talking to anyone else at the company because he was lying through his teeth about everything we were doing and he didn’t want to be found out.

It all starts the same way. I come onto a project enthused to get to work. Either from the beginning or after the initial rush to get things done disorganization sets in. People get behind. People stop communicating. People start second guessing themselves and changing their minds. I start to panic. I don’t want to be fired. I want to do my job. I can’t do my job. I am being paid to sit around all day doing nothing. No one is going to keep paying me to sit around all day doing nothing. I need to find something I can do to contribute. But I can’t. I don’t know what people want. I start to shut down. I can’t keep motivating myself. I feel trapped. I start crying for no reason. I can’t go into my office anymore because it triggers flashbacks.

Last year I had the worst nervous collapse I have had in years because of this situation. I had a period of months where I couldn’t do any work at all. I had to paint and remodel my office before I could work in there again.

One thing I have learned from these experiences is that it’s important to take care of myself. I need to make sure I don’t melt down.

I now have a queue of work I can give myself. I am working on a book. I have a few side projects I want to accomplish. If the client doesn’t have anything for me to do, instead of sitting in front of my work computer slowly burning myself out, I do something else. I don’t bill the client for that work, but I make sure that I take care of myself. If the client can’t figure out what they want, they’re going to fire me no matter what I do. I can’t force them to do anything. I hope when I have even more experience I will be better at getting the client to listen to my advice, but right now any attempts I make in that direction cause resentment and anger at me, so I avoid it like the plague.

It’s hard to make yourself work on other things or step away from the computer. It’s like being in school. You feel obligated to sit through the boring grammar lecture because you’re supposed to be there. Your mind wanders and you fight with people on Twitter because you don’t feel like you can get up and take a walk or read a book on something else or do anything else that will preserve your sanity.

Some of these situations remind me somewhat of my relationship with my ex. My ex kept thinking that stuff would fix him. He thought if he got married that having a wife would magically make all of his problems disappear. He used to yell at me for not fixing him. He thought if he was earning a lot of money it would solve all his problems, but he was always angry and resentful that other people were earning more. He thought if he could be his own boss, he would be happy, but he realized how hard he had to work for a lot less than he was getting and soured on that as well.

You can’t fix other people.

If you have enough experience in dealing with people plagued by indecision, you can start to help them organize their thoughts, but only if they let you. You can’t by force of will make someone happy if they don’t know what they need and they can’t tell you. All you can do is take care of yourself so that when you eventually move on (which you will because these jobs are always terrible) you’re able to help the next person you work with who will hopefully have a better understanding of what they want than this person does.

Quality over Quantity

Back in December I was approached about contributing to the Pragmatic Magazine. I was told the theme of the issue was Swift and I was asked if I had any good Swift posts that I would be willing to share.

I had a number of Swift posts that I was very proud of and I sent the links to the editor. Then I had a sinking realization that these posts were all from 2015.

Last year was a difficult year. I made a lot of mistakes and had a number of mental health issues. On paper my year seemed like it was incredibly successful, but I felt at the end of 2016 that I had not grown as I would have liked and I was not in a place I wanted to be.

One of my resolutions toward the end of last year was to have more technical content on my blog. I am in the process of writing a book. I intended to have companion blog posts where I share a number of things that I learned while I was writing the book. I have one post that has been partially written since November. It’s nowhere close to being done.

I keep wondering what’s the matter with me. I would like to produce more technical content. I keep meaning to, but things keep coming up. I know if I don’t make time to produce technical materials for blog posts or conference talks or to post on GitHub that I will be left behind. People always want examples of your work and you can’t keep pointing to work you did three years ago.

This morning I found a link to this article. The author talks about a lot of strategies about how to have a long and successful career in tech. This article helped to crystalize in my mind about why I am not producing more technical content.

Those blog posts that I submitted to the magazine were based on problems that took me months to solve. Each one of those posts and every project that I have written about that I am proud of all started the same way. I took something that was hopelessly unfamiliar and tried to force myself to learn it. These were all projects I did for Brad Larson when we were rewriting our code base in Swift.

One of these projects was wrapping libxml2 in Swift. The sample code was all written in Pascal. There was only one post written by anyone for this topic for the iPhone. That person was Jeff LaMarche. I was going to link to his blog post about it in this blog post, but it’s been taken down. So I had an incredibly undocumented technology that no one was using that it was my job to figure out.

I had about a week of complete and total panic and despair. I felt that I had been hired by mistake and that Brad would find out I was an inexperienced idiot and I would be fired in disgrace and I would never work again. I wondered about how hard it would be to find a nice easy call center job where I could cross stitch while talking on the phone all day answering the same questions over and over again. I thought this was hopeless, but it was my job to figure it out, so I had to try.

I spent a lot of time walking. I couldn’t look at my computer without getting a complete headache. I spent some time building robots. I would look at the docs periodically, but not for too long because doing so would cause a migraine.

After several weeks of doing this, suddenly things started to become clear. Instead of looking at a bunch of gibberish and having no idea about how to approach it, I finally had questions. I wondered what this one thing did. I wondered what the difference was between one object and another. I started to understand how to approach the problem.

I completed my task by learning all of this stuff over the course of about two months and I wrote my post. I was incredibly proud of the work that I did on that project and for finally figuring out how to solve it.

I never would have done that project if I wasn’t working for Brad.

First off, I never would have known what libxml2 even was. I would have just used the built in Cocoa framework and fought with it, but found plenty of sample code that I could copy and paste and go about my merry way. More importantly, if I had been doing this for myself, I would have taken one look at the lack of support, said fuck this, and done something else.

Forcing myself to confront something that seemed impossible and pushed me close to my breaking point mentally and emotionally. I have a faulty, tin-plated emotional system. If I get pushed too far I can’t function or learn. My brain shuts down. I had to confront my panic and my fear and force myself to approach this logically. At the beginning of Dune the main character has to take a Human Test. He is forced to put his hand in a box of pain and not remove it. Having mental health issues is like taking a Human Test. You have to think your way through your emotional issues and find some way of logically dealing with them so you don’t remove your hand and get scratched by the Gom Jabbar.

By being placed in a position where I could not simply give up, I was able to push through the initial phase of not knowing what the fuck I was doing to be able to see that there was an end to the Desert of Despair. I understand now that a lot of things I want to learn that seem difficult or impossible are not. I have been trying to teach myself Metal and 3D graphics math for the last two years. I know that even though the symbols seem incomprehensible and there are not a lot of approachable resources out there, I can bash my head against it enough to figure out a starting point. I can look at those symbols long enough over a long enough period of time that I can grasp some kernel of what I don’t understand that I can figure out.

I feel like our community doesn’t reward people for solving hard problems.

It pisses me off every year when Tim Cook announces some amazing new thing at WWDC and some jack ass in the audience gets some version of “Hello World!” working on it because everyone wants to be first. Everyone tries to cherry pick some easy problem that they can solve and post about so that they can show they’re keeping up with the Lattners. I have seen so much pressure in this community to pretend like you know everything. Companies place a lot of emphasis on what do you “know” not “how do you learn.” I admit that it’s a lot easier to test knowledge as opposed to problem solving and learning. I know that we’ve generally used knowledge of data structures and sorting algorithms as a proxy for how we learn. But memorizing some tips and rules doesn’t prepare you for the complete and total helplessness you feel when you confront something you must figure out that you don’t know how to do. You either rise to the occasion or you flee and become a Scrum Master.

I am realizing that most of the things I find interesting are difficult. I am in the process of learning some things that are complicated and poorly explained. I am hoping that after I push through everything I will have a wealth of material to write about on this blog. But I have to accept that what I want to do is hard. There is going to be a lot of invisible work that I do that isn’t being seen. There will be a lot of time spent thinking and processing and waiting for things to click.

Dan Barber is a prominent farm-to-table chef focused on sustainable food production. He wrote an article a while ago that really stuck with me. The gist of his article is that farmers are stripping their soil by only growing the most high profit crops. The soil gets progressively poorer and the food grown on it grows more and more tasteless because it’s nutritionally vacant. He found a farmer who grew an heirloom variety of wheat for bread flour. He thought the reason the flour was so delicious was because it was some heirloom variety, but it was because the farmer rotated his crops. He grew some less lucrative crops on his land that enriched the soil and only grew this wheat on the soil every three years.

I think one reason we have such a high burnout rate in tech is that we’re approaching development like we do farming. We will keep stripping our mental soil because it’s more lucrative to do so than it is to have furlough periods where we push ourselves to achieve truly difficult things. Start ups want to churn and burn developers because they don’t care about a person’s long term viability as an asset. It’s our responsibility as developers to take control of our careers.

Right now I am taking some time off to write a book. Even if the book is wildly successful I won’t make nearly as much money off of it as I would if I had worked somewhere during that amount of time. But taking this time to learn these things that I have wanted to learn for so long has been an extraordinary experience. The process of taking something that seems impossible and being able to make some traction with it makes me feel like I can conquer the world and anything is possible. Compared to a year ago, where I felt like I had to pretend I knew everything and I worked myself into a nervous breakdown.

Last year was a furlough year. I needed it to recover from some bad professional decisions. This year is a soil enriching year. I have so many projects I want to do and write about, but they’re going to take some time to figure out.

I would like to write more about tech on this blog, but I have to accept that I want to learn some difficult things that take a lot of time to figure out. I am not going to have a new post here every week that I am proud of. But if I can get four difficult technical posts on here this year, that’s not so bad.

Special Announcement: The Metal Programming Guide

Hello all. For the last few weeks I have been hinting that I have a new project that I had not yet announced yet. I wanted to make this announcement at MacTech, which I did yesterday, so I am now publicly announcing this.

I am working on a new book: The Metal Programming Guide. If you are familiar with the OpenGL series of books like the OpenGL Red Book and the OpenGL Blue Book, this is going to be The Red Book for Metal. The publisher for this project will be Pearson/Addison Wesley, so this is not a self-publishing effort on my part. I will have technical editors and people breathing down my neck if I miss deadlines!

Back in 2014, when Metal was announced, it excited me tremendously. I did a series of conference talks on it throughout that year, but a little thing called Swift kind of got in the way of my learning path for Metal.

This year has been something of a disaster for me on a personal level and I didn’t get to accomplish what I had hoped to this year. Being given an opportunity to finally get to master Metal and write a book about it has given me hope for the future. I have always felt like Metal was something I was meant to do, but I wasn’t really ready to tackle it until now.

Right now I am trying to balance doing some short term contract work with attempting to work on the book. I hope to not run out of money before I finish the book, but I also want to avoid doing full time work that would prevent me from making progress on the book. We are very early in the process right now, but I am giving it everything I have to try and get this done in a reasonable amount of time.

I am hoping to be able to make weekly posts on here and my podcast about various aspects of Metal programming that I am not able to include in the book due to lack of time/space/things being out of scope.

Even though I have been a co-author on a number of programming books already, it has always been my dream to do an immersive book on a topic such as Metal. I am excited to learn this amazing framework and share that knowledge with everyone else.

I’m announcing it here on this blog because I have absolute confidence that this project will be successful. I’ve been waiting to do this for a long time. I do not plan to drop the ball on this. Bring it on!

Why I am Discontinuing my Algorithms Series

I have spent the last week doing some soul searching and I have decided I am going to discontinue the planned algorithms and data structures series I was going to do on this blog.

My calculation was if I attempted to solve one problem in Cracking the Code interview each day it would take me about six months to get through the whole book. That was before I encountered several road blocks with attempting to implement a custom data structure that was not really intended for this use and required me to greatly extend its functionality.

I made the mistake of reading the beginning of Cracking the Code Interview and to my horror, found a lot of the same things I was saying in my post about the algorithms of discrimination, except they were being touted as features and not bugs.

The author indicated that companies know you probably won’t use algorithms on a day to day basis, but that they’re being used as a proxy to see if you got a computer science degree. They’re assuming if you got a computer science degree you’re a good programmer.

I am a hacker. I love to build things. I love to wander off into unexplored areas of our field to figure out how something works because I enjoy doing it. I love to craft code and make things work. I am fascinated by how to actually grow a complex code base in a way that is sustainable. I am interested in figuring out how to break up a seemingly insurmountable task into pieces that can be accomplished. I am interested in figuring out how to make my code better and I am willing to write absolutely terrible code initially that I know I will go back and fix to get to that point. I am interested in how my user interacts with my code and making sure it’s seamless and intuitive.

I know that not all companies are the same, but my experience of interviewing at companies that use algorithms screening is quite bad. I feel like I am being treated like a criminal whose guilt is assumed and I have to prove my innocence but I don’t get a chance to call a lawyer.

I have never had an interview at a company doing an algorithm screen where anyone has bothered to read my resume. Most of them ask me how they’re supposed to know if I know how to code or not without this screen. Well, I have written books that are published and available. I write about code on this blog. I speak about code at conferences. I post code on GitHub.

A lot of these companies are also ones where they expect relocation. Relocating is a massive deal for me. I have a stable and cheap living situation at the moment. I have parents to watch my second pug while I take the first pug with me to conferences. I have issues with depression and other mental health that are exacerbated by being in urban areas.

If a company is going to demand that I uproot my life, greatly increase my cost of living, and give up the stability of working from the place I feel most comfortable, I want them to not treat me like a criminal. At the very least read my resume. Don’t put me in a situation where I don’t get to speak to an actual human being until I jump through some hoop to prove that I got a computer science degree.

I heard a lot of people telling me that I am shitty developer because I am refusing to spend a few months learning data structures and sorting algorithms.

I disagree.

I feel learning this stuff without context is yak shaving. It’s future engineering. It’s learning something before you need to know it. It’s important to know it is out there, but it is not vital to learn it before you need it. If you spend all your time learning things before you need them, then you won’t build anything.

I learned so much about my code after I started implementing it. I wrote what I thought were solid data structures until I tried to work with them in my code. I found I had underlying assumptions about it that were wrong and I had to go back and add functions and properties to correct for my assumptions.

We like to think that the world can be simplified with algorithms in text books, but they rarely account for the complexity of the real world. You wind up adding bits and pieces to deal with edge cases and your artfully crafted algorithm turns into a house with pieces tacked on. Why not go into it knowing that you’re doing something complex and ugly rather than simple and elegant but imaginary?

There is the argument that I won’t understand how programs work if I don’t learn data structures and algorithms. Again, I disagree.

There are so many things we could use as a proxy for actual engineering knowledge. Why not ask candidates to write things out in assembly language? Why not ask them about computer architecture? Why not ask them how they would break out a large project into smaller pieces? Why not ask them about how they would test their code?

How many people have used a disassembled on their code to look at what the machine is actually doing? I just found out this is something I can do and it’s magical to me. It’s far more interesting to me than memorizing the difference between a bubble sort and a quick sort when I will always just use the sort() function on collection types in Swift anyway.

For whatever reason, this is the thing that we use as a proxy for being a good developer and I am not doing it.

I am interviewing companies and ones that behave like this are ones I don’t want to work for. If this is a small component of a larger hiring process, I am willing to engage in it, but not as a barrier to entry to even get to talk to a human being.

So instead of trying to please large companies and shave all my edges off and submit to conformity, I am going to build things. I am aware that there are algorithms and solutions out there that could make my code cleaner and work better. Once I get something working I will go back and refactor it to resolve many of the issues that I know are there. My understanding was that refactoring was part of being a great developer too. If you disagree with that, then I really hope I am not stuck maintaining your legacy code.

I have faith that if I keep learning and working on cool projects and contributing to the programming community that there is a place for me somewhere. It may not be one of those big companies on the West Coast, but I think the world is big enough to accommodate a lot of different kinds of people.

The Algorithms of Discrimination

This is a cross post between this blog and my podcast. I realized that this blog has more reach than the podcast does because it’s new, so I am posting the script from that podcast here.

Transcript

This is a special episode of Janie Rants.

I have been asked a lot of questions about a series of tweets I posted on Twitter last night. In these tweets, I said that this was the first time I felt like I was unwelcome in the iOS programming community.

Like many things on the internet, this is a long and complicated story and it was not really conducive to the short format and tempers of Twitter, so I will try to do my best to explain myself here.

At the moment I am between jobs and I am trying to figure out how to proceed. I am trying to see if I can make it as a contractor but I have also been looking into obtaining regular work as well.

I posted a blog post a few weeks ago about an experience I had interviewing at a rather large and well known company that had a white board interview where I was being asked to implement a linked list in Java.

I expressed that I felt this was a useless task.

I got a lot of pushback from people on Twitter about this. A lot of older programmers chastised me that you can’t be a great programmer if you don’t understand data structures and algorithms. I tried to make the point that if you are an iOS developer that most of your job is to have knowledge of the iOS frameworks and that the language is secondary. Someone who had never owned a Mac or opened Xcode could theoretically get a job as an iOS developer.

I continued to get pushback about the absolute importance of algorithms and how someone implemented a linked list once in their career. I asked whether it was more important to be able to answer a question about something you might do once in ten years or about something you would use every single day. I don’t think I got a response to that.

I did a phone screen where I was once again told that the tech aspect of the screen involved doing an algorithm test. I expressed frustration on Facebook about once again being asked to do an algorithm test for an iOS position.

One person on there told me if I spent all the time I used complaining about algorithms to actually learning them I would know them by now. He also criticized me for not being willing to implement well known algorithms and structures that are simply not part of the Swift Standard Library. This hurt my feelings because this was a person I considered a friend.

Another person made the comment that really prompted my series of tweets last night. He said that he asked algorithm questions because he wanted to make sure he worked with the “right” people who has the “right” skills and could talk “his” language.

I know that to most of you listening out there, you probably hear that and don’t give it a second thought. Let me decode this for you.

Algorithm questions are not a way to make sure you’re hiring someone who is capable of coding. Algorithm questions are a way to discriminate against certain kinds of people.

I know, you think I am paranoid. You think this is some kind of conspiracy theory or that I am somehow claiming sexism because I am a bad programmer or I am too lazy to learn these things. Please hear me out.

My first experience learning programming was from Code Cademy online. I accepted a terrible job that my ex-husband would not let me quit where our team lead did not know what we were supposed to be doing, so he told everyone to pretend to work and to look busy.

To keep the suicidal thoughts at bay, I went on Code Cademy to learn programming. I had taken some programming classes, but had only coded things once and subsequently never practiced it enough to understand it.

I discovered that if I wrote code forty hours a week that I could learn programming. I could type code as easily as I type an email and the logic finally made sense. This was a revelation to me. I had given up on programming because I thought it was too hard and I could never learn it. I found that if I put in enough time and effort I could learn how to code.

I got myself fired from that job and went on unemployment. In the state of Wisconsin, if you’re on unemployment you can stay on it as long as you’re going to school to learn a trade. I re-enrolled at the local tech college and started taking iOS classes to learn iPhone programming.

A lot of people learn programming from sites like Ray Wenderlich or from the Big Nerd Ranch books. Lots of people spend thousands of dollars going to code bootcamps.

President Obama has talked about how he wants all kids to know how to code. Apple has added Swift Playgrounds to the iPad to teach kids to code. We’re inundated with messages everywhere that learning programming will lead to a better life. We’ll get better jobs and earn more money and be able to start companies.

None of these paths to programming include algorithms or data structures.

I spent two years trying to scrape up enough iOS experience to be able to get an entry level job. It was brutal learning Objective-C. It was brutal learning about the Model View Controller design pattern. Asynchronous closures. Memory management.

iOS is not a simple framework to learn. There are a lot of moving parts and there is a tremendous barrier to entry to get to a point where you have accumulated enough experience of working with the frameworks and the devices and the compilers to be able to be somewhat proficient with iOS.

So why the fuck do we quiz people of fucking algorithms?

We do that to keep people like me out.

If you have a six week coding boot camp, you’re going to teach people the bare minimum that they need to make something useful. You’re not going to spend weeks talking about data structures and algorithms.

The only people who know about data structures and algorithms are people who got computer science degrees or have been around for so long that they learned it on their own.

This discriminatory practice is written off as a meritocracy. Anyone can learn this stuff if they’re ambitious and smart, so it’s the standard against which all people are held.

Let me tell you about another standard we don’t think about: The SATs.

We think of the SATs as being fair. Everyone receives the same test. Everyone has the same time limit. Everyone has the same equipment. It’s fair, right.

Nope.

If you come from an upper middle class family, you probably had some help with the SATs. I went to a private Catholic high school that specialized in college prep. My parents bought me books that helped me figure out how to get better scores on the SATs. I had practice tests I could take with instructions about what the right answer was and why. It explained to me how to see a trick question and gave me strategies for getting around them.

Both of my parents had college degrees and were in education. It was expected that I would go to college. I didn’t have to have a job because my parents paid for my college, so all I had to do when I was in high school was study. When I didn’t like the score I got on the first test, I took it again. I could take the test as many times as I wanted and each time I took it my score got better because I got practice.

I can stand by my scores and talk about how I earned them through hard work and how the system is a meritocracy because I did marginally better than a few other people with the same privilege I had. But that’s not a complete story.

Take a student living in a poor community in Mississippi. This student might go to a school where they teach creationism instead of evolution. This student has no expectation of ever going to college. This student doesn’t know that there are resources out there to help them do better on the test. They don’t know about the trick questions. Their school doesn’t offer algebra because no one would take it anyway.

Does the test honestly reflect this person’s potential?

This theoretical person could be a genius. But they don’t have the cultural context to know what they are supposed to do in order to move from the sphere they are now to the better one brought by money and education.

I know so many of my classmates from my school who have trouble finding jobs. There are so many road blocks that are set up to keep the wrong people out. You have to have a GitHub repository and a Stack Overflow account with a certain amount of points. You have to contribute to open source. You have to present at meet ups.

We create so many barriers to entry for people who are culturally unfamiliar with what the community expects and we set these up to keep people out. We like to feel like we’ve earned our place in the community and we don’t want to deal with helping more people enter that we have to compete with.

Knowing algorithms and data structures means that you were privileged enough to get a computer science degree. It means you had enough free time that you learned this stuff on your own if you’re self taught. This assumes you have the money to take time off to learn something that will help you get better jobs.

If you’re struggling to make ends meet because you’re a single parent who can’t get past the velvet ropes to the land of coding opportunity, you do not have time to learn these things. You are told you’re not welcome and you give up.

None of this would bother me so much were it not for how completely useless this exercise is. Yes, knowing data structures and algorithms makes you a better programmer at some point, but if you’re interviewing someone for a job doing iOS development, there are so many other things that are iOS specific that no one ever asks about because for the most part these places don’t know them. You’re getting interviewed by people who don’t know anything about what we do who for some reason are in charge of determining whether you understand things or not. It’s bullshit.

The people who have the privilege to get through this red tape just kind of shrug and accept it’s a necessary evil. Some of them even embrace it and will fight with you tooth and nail about why it’s important for someone to know something they haven’t used in five years.

Yes, I could go and learn algorithms and data structures. I am holding my nose and accepting that this is probably something I must do in order to get better jobs, but that doesn’t mean that I should endorse them because I have the privilege of being able to take a few months off of work to learn something that’s nearly completely useless.

By filtering out anyone who comes from a non-traditional background, we’re ensuring a monoculture in programming. We want diversity, but only if the people we bring in think the same way we do. That’s not true diversity.

We need people who never went to college. We need people who learned by hacking and being tenacious and getting something working. We need people who come from diverse backgrounds who can bring new perspectives to what we do so that we can use technology to make people’s lives better and not just find more invasive ways to gather user data for targeted marketing.

Over the last year I have not felt that this community values those voices anymore. I went into iOS over web and Java because I felt that this community was welcoming to anyone with a curious mind and drive to do better and based on the responses I am getting from people I don’t feel that way anymore. I want there to be opportunity out there for people who are like I was four years ago. In order for that to happen, we need to change how we do our hiring practices or we’re all going to be poorer for it.

Thank you.

Follow Up to How Not to Hire an iOS Developer

I got a lot of feedback from my post yesterday. One aspect of that feedback was people letting me know that I didn’t necessarily express what I was thinking and feeling quite properly. Wanted to clarify some of my ambiguous statements so that I don’t just come off as an entitled special snowflake.

First off, I did not mean to imply that I was doing this as a practice interview where I had no intention of ever taking the job. I talked to a recruiter a week earlier and was incredibly enthused about the job. I want to work on connected hardware/software products, which is still a rather niche field. I have realized that I will have to consider bigger companies with budgets large enough to do research and development in that area and a lot of what I heard sounded fantastic and right up my alley. But after I had a chance to look into this company I had some deep reservations about going to work there.

The recruiter said all the right things. I have several things on my list of things that I absolutely need to have if I accept a job. Some of those are easier to fulfill than others. I have accepted jobs based on the word of the person I was talking to that those needs would be respected and a lot of times they were not. I actually had someone say to me “Oh, you were serious about that? We thought you were joking.”

In the past I have had more freedom and flexibility to walk away from a bad situation. I live in a relatively cheap area where my burn rate is really low. I could go back to working in customer service or doing something that isn’t programming if need be to pay my bills. I could even swallow my pride and go to my parents with my hand out and ask for a loan, but that would be the absolute last resort. I would prefer not to, but that is preferable to me to moving to the West Coast. My monthly expenses here including my house and my car payments are significantly less than rent anywhere in any of the cities on the West Coast.

I feel that a lot of companies use the relocation stuff as a means of control. There are places where you’re expected to sign a two-year lease on an apartment. Companies pay to move you out there with the understanding that you stick around for a few years or else you’re on the hook for your moving expenses. You think you’re getting paid an awesome salary, but it doesn’t go as far as you think it will and you wind up living paycheck to paycheck. This puts you in potentially abusive situation where your company knows you can’t quit and that gives them carte blanche to abuse you because you have no choice.

I do not like being in situations I cannot leave. I would prefer to be in situations where I don’t want to leave, but I do not want to be trapped in a city thousands of miles away from my support structure with no way to leave if I am being abused.

I would like to move into integrated hardware/software products and design. The nature of hardware, especially proprietary hardware, means that you generally have to be on location. It is the nature of things. However, I will not sacrifice my physical safety and well being to pursue something I can just do as a hobby in my basement.

I acknowledge that if I want to do the things I am interested in doing, I will probably have to relocate at some point. I just do not want to settle and accept the first position that comes along without any assurances that doing so will not result in me jumping off a cliff. I can afford to wait things out and wait for the right thing to come along, and I am going to do so, even if it means taking a non-programming job to get by.

We’ve been conditioned to believe that abuse is a normal cost of doing business. If you want a tech job you have to tolerate being treated badly and run ragged in order to pay your dues to get to the next thing. That’s bullshit. It is not a necessary cost of being a programmer. This isn’t the Hunger Games. We supposed to be working towards creating a product, not trying to survive the harassment and abuse of our coworkers and managers while still putting on a show in the Productivity Theater while not progressing our skills any further. Fuck that. I am speaking out against it because it’s wrong and it is destroying our community and we need to fight back against this and insist upon being treated like human beings worthy of respect. If that makes me a diva, then so be it.

Another worry I have about moving is dealing with my dogs. I have one of my dogs certified as a service animal for emotional support issues. The other one is just certifiably insane. She can’t be left alone for long periods of time. One reason I have tried to get remote jobs is so that I can receive the benefit of therapy time with the service dog while not neglecting the non-service dog or letting her destroy my house.

Talk to anyone who lives in the Bay Area and they will tell you that no one wants a tenant who has animals. I can force the issue for Delia because of the law around service animals, but I can’t for Olive. Finding a suitable living space for both of my dogs would increase my housing costs tenfold.

I will not abandon my dog. When I adopted her from the pound I made a promise that I would keep and love her forever until she died. You don’t just dump animals at the pound when they become inconvenient. That is sociopathic and horrible.

Additionally, by living where I do, I have parents who can watch her while I travel for conferences, which is something I would give up if I moved to the West Coast. I would also have to find another doctor that I don’t hate. I went without a regular family doctor for five years because I could not find one that would actually listen to me. One told me that I probably fell down the stairs and forgot about it when I had weird bruising I was coming in about. Another one violated HIPPA by gossiping in the hallways with other doctors about a local patient who had to be taken to a mental institution. It’s a really stupid, small thing, but it’s that and a million other small inconveniences that make moving to another city a real pain in the ass that you don’t think about until you get there.

I also did not mean to imply that somehow understanding how the computer works is somehow useless. I am not a script kiddie. I care deeply about computer and software architecture. I am learning assembly language. I am learning how integrated circuits and computer chips are designed. I literally want to go all the way down to the metal to understand how things work.

However, I honestly don’t think asking people to implement algorithms in Java is the best way to gauge how good of a programmer someone is.

Code is a tool to solve problems. By focusing on people who are memorizing a list of common questions we use to filter people out of programming, you’re not getting a good feel for how they approach and solve problems.

Maintainable software is a problem I hear almost no one talking about. There are books by people like Michael Feathers and Martin Fowler talking about how to refactor and support long term projects, but we don’t talk to people about that.

Algorithms are especially a stupid thing to ask an iOS developer. I would say 90% of the work out there involves pulling data off of a server and putting it into a table view. You need to have a good grasp and understanding of UIKit and NSURLSession. Those are things you will use every day. Asking how to implement a linked list shows you have some knowledge of computer science but does not demonstrate that you know jack shit about the iOS ecosystem or its architecture. It might be a good programming question, but it’s not a good iOS question.

When you go and interview at a company, it’s a two-way process. I keep hearing people yelling at me about how the company has to do something to make sure I know how to write a for loop and I am not just a poser. It’s about protecting the company from hiring a fuck up.

There is more that I could do to establish myself that I am working on. I know I need to put more code out on GitHub. I know that I have been writing more about the social aspects of programming this year than on actual technology. I want to rectify that.

I have done as much as I can to show that I am not a fuck up. I am the coauthor on several books on programming. I write about tech on my blog. I present at conferences. Those credentials are clearly displayed on my resume. If you Google me there is a wealth of information about the projects I have worked on.

The fact that this company did not take five minutes to look into anything I have done (or even bothered to look at my resume before interviewing me) signals to me that this is not a good place to work. If they’re not willing to do the bare minimum to find out anything about me then I find it offensive that I have to prove to them that I know how to code.

I do not want to work for a company like that. I especially do not want to disrupt my whole life to move to another city to work for a place that does not do the bare minimum of having an interviewer who has a modicum of understanding about the job they are interviewing me for. If the guy interviewing me knows nothing about what I do then how can they make a determination about whether I am a good candidate or not? None of their candidates might be good. I have lived through that experience and it sucked.

When you get a bunch of programmers together who are all pretending to know what they’re doing, it results in a toxic situation where the incompetent people try to sabotage the competent ones who know they are full of shit. I do not want to risk moving my life to another city where an incompetent blow hard can sabotage my job and my career in a misguided attempt to save their own neck.

Taking any job, especially one that requires relocation, is a massive risk. There is a lot of potential for long term personal and professional damage by taking any job and I have been bitten in the ass often enough to be incredibly careful about fully vetting any company I think about working for to make sure I will not be quitting in two months and looking for something else.

This past year I have taken a lot of jobs that did not work out the way I wanted them to. I did not accomplish what I wanted to. I do not want another year like this. I want to do work I am proud of and not just collect a paycheck. I will not stop looking for that or demanding that the people I work for believe in what they are doing.

This company is probably thinking they dodged a bullet by not hiring the girl who doesn’t know what a linked list is. I am thinking I dodged a bullet avoiding a company where I would be miserable. Isn’t that the point of an interview, to figure out that you don’t actually want to work together after all?

How Not to Hire an iOS Developer

So my current contract ends on Friday. I have spent the last year bumping around figuring out what I don’t want to do and I now have to figure out what I do want to do.

As of this moment I would really like to make a real go of setting off on my own as a contractor and eventually producing my own products, but I know enough people who have not succeeded in doing this to be wary about my chances of success. Recently my father got drunk and trapped me in a car for an hour telling me to stop trying to be special and to attempt to find a real job with a 401k and health insurance.

So, in the interest of figuring out what I want to do with my life, I applied for a corporate job. I figured that it was stable and they pay regularly, so it might not be as bad as I had been lead to believe.

I had a phone screen with someone from a company today and I would like to share my experience with this.

The first part of the interview was awkward, but manageable. The guy asked me about some other projects I worked on. He asked me about a time that I didn’t agree with a manager and how that turned out. I probably should have come up with a different example than one where I got into a blowup fight and was fired, but it’s too late to fix that now.

At no point in this process was I asked anything specific about iOS. He did not ask me about my books or any of the other credentials I have on my resume. I realized that he did not look at it. Awesome.

Then we got to the part of the screen that I didn’t realize we were going to do: The Whiteboard Interview.

I have never done a whiteboard interview in my life. Never. I think they are bullshit and I decided a while ago that I would never participate in one. If you’re reading this and thinking of hiring me, I am not doing a white board interview. Be forewarned!

I had deep reservations about doing this. I know I know how to code, but code isn’t something you just regurgitate on command. It requires context and problems that need solutions. I decided before the interview even began that I did not want this job because it required me to move, but I thought I should at least attempt to get through the interview. I was beginning to deeply regret this decision.

We used a software application to do the white boarding. There was a drop down list of languages. I went to select Swift, but there was no Swift. Strangely, there was no Objective-C either.

Huh. You’re interviewing me for a job without being able to let me write in either of the languages you need me to be an expert in. Interesting.

I looked through the list and tried to find the next one I was most familiar with. After some deliberating, I chose C over Python.

“Don’t choose C.”

The interviewer did not want me to choose C. I asked why not.

“I’m an Android guy and I would really prefer that you pick Java because that’s the only language I know.”

You’re interviewing me for an iOS position and you only know Java. You won’t let me write in the language I am comfortable with because you don’t know how it works. Splendid.

He told me to write a linked list. I told him I didn’t know what a linked list was. I said I never got a computer science degree and that I was a hacker who learned programming by writing applications rather than learning algorithms and data structures you only use to pass code interviews at corporate entities that you forget and never use again.

At this point the interviewer was like, “Oh, so you’re not a programmer. You’re more of a management type.”

I have written books. I have presented technical talks at conferences. I have held down a programming job, more or less, for the last two years. I spent the first half of this interview explaining hardware software integration and architecture to this guy, who still at this point decided to tell me I am not a programmer.

At this point I had had it. I ended the interview as best I could. I told him I was not interested in the job and I got off the phone and had a good laugh.

I am writing about this on my blog because apparently these places don’t read my blog anyway, so it really doesn’t matter.

If you’re going to hire an iOS developer, let them write in their own language. Also, the power of iOS isn’t in the language, it’s in the frameworks. Don’t make someone write a fucking linked list in Java to see if they know how to write an iOS application. Ask them what frameworks they’ve used and how they find information and have them talk you through how something works.

This call annoyed me, but it also made me feel a lot better. As bad as I feel about not being as good a programmer as some of the other people in my circle, at least I am not a Java guy interviewing iOS people for a large company that clearly doesn’t know what it’s doing. I’m sure they’ll find someone who memorized “Cracking the Code Interview” to fake their way through the interview and panic on the job when they realize they don’t know what they’re doing. Hopefully they’ll buy my book.IDontKnowWhatImDoing

Depression and Engagement

One of the major issues I have dealt with so far in my short career is lack of engagement on many of my projects. My managers, for whatever reason, are not around to see what I am doing. They are on business trips. They are swamped with entirely too many other responsibilities. The product owner is ambivalent about what they want to do so we’re waiting around for them to make a decision about something. Not poking at anyone in particular, this has been an issue I have seen a lot of places.

As programmers we’re supposed to be self motivated. We’re supposed to be given a problem and we’re supposed to run with it and get it done. We complain about micromanaging and how it’s hampering our ability to get anything done.

When you get left alone on a project, initially it can feel freeing. You can work without being disturbed. But then at a certain point you realize that you have been given no guidance on what is wanted. It’s like creating an app with no auto layout. You kind of know that there are some components that someone wants, but you don’t know how they want them arranged.

This is the point where things start to affect my mental health.

I start to encounter mental friction where I can’t make any decisions because I don’t know what people want. I know that there is one way they want something but they’re not around to tell me what that is or they don’t know to begin with.

This triggers feelings of depression and despair. I start to feel that success is impossible. I try for a while to do my best, but at a certain point I shut down. I am overwhelmed by choice because I don’t know which one is right. I can’t function. Nothing I do is going to result in success, so why bother?

I feel tremendous amounts of failure and self loathing. I think that I can’t hack it. I should give up on programming. I should go back to working at a call center where there is a script and no decisions to be made. There is no pressure from coworkers trying to sabotage you or pretending like they know more than you do because no one gives a shit and they’re just there to collect a paycheck. You don’t have to pretend like you care about anything other than not getting fired. It’s soothing and restful.

I have had this happen often enough that I can see it coming. I try to engage but so far that has never been successful.

What I need to pull me out of this state is to have something I can solve or get engaged in. I have noticed I will be on the verge of a complete shut down when something will catch my attention. A small light will appear in the darkness and my deprived attention will fixate on trying to solve it. Then my brain comes alive again and I wake up and everything is okay again if only for a little while.

I want to talk about mental self defense here.

I have learned to find things I can do that will pull me out of this state. Usually it’s working on a tutorial. It’s a set of directions with an end goal. You feel like you’re getting something done. It will engage my tired and exhausted brain and lead it like a trail of breadcrumbs back home. It’s not open ended so I don’t get overwhelmed trying to get something working from scratch. I know other people can do that and I can too sometimes, but not when I am engulfed in mental darkness.

Managers don’t want you doing stuff like this. I have tried to talk to them about what I can do to pull me out of this state. I can’t work on the current project. It is causing me to shut down. Is there anything else I can work on so I can mentally recover?

They will purse their lips and say they really need me to keep working on the current project. It doesn’t matter that I am unable to make any real progress on it or that anything I write is going to be buggy as fuck, they want the illusion that I am working on their project.

If you’re working with a manager who isn’t giving you enough constraints to figure out what a successful end condition is, don’t mentally collapse. Try to recognize when you’re starting to shut down. Find things that can pull you out of it.

I know it’s hard to do. You feel yourself getting further and further behind. You’re in a mental terror that you’re going to be fired for not finishing your project. You need to calm down. You need to prevent yourself from going under at all costs. If you break yourself your project is not going to get done. You’re no good to anyone if you can’t function.

If you do break, it will take a while to recover. I see a Reiki therapist who helps me recover from my breaks, but she always tells me to take it easy after she helps me.

I have gotten better at going back to my “analog” hobbies to get away from a computer screen when I feel myself going under. Cooking and doing cross stitch are tactile and engaging and give me a project that I can see progress on so that I don’t go completely insane. It can feel like doing projects is a dodge or a waste of time, but it’s vital time that I need to help my brain recover so I can keep working.

I never think that I am going to feel better. I think that there is no point in trying to do a tutorial because I should just give up and accept that I am a failure. Sometimes I am too broken to work on it, but when I have had a chance to rest, I come back and I feel my brain slowly wake back up and I feel better.

The biggest reason I wrote this is to try and give hope to anyone who feels consumed by mental darkness. I have felt that a lot over the last few years. When you’re in the middle of it you feel there is no hope. You feel you can never do anything great ever again. You feel broken, like everything has been stripped from you and it can be hard to try and engage in something because you’re convinced you will fail.

Please know there is hope. Rest mentally and take baby steps. If you can’t engage in anything, then you’re burned out. Sleep, rest, hike, whatever. Then come back and pick up something structured and engaging.

Engagement is so important to what we do. We mentally need to feel a sense of accomplishment. We need to have tasks that we can complete and see progress in the work we are doing. Creating those meaningful milestones and discrete tasks takes time and mental energy, but it’s necessary to maintain mental health and stability.

A developer career is a marathon and not a sprint. If you injure yourself you need to rest and work your way back up to training again. You don’t want to force yourself over the finish line and wind up in a wheel chair.

Know that you’re not alone. There is a way out of the darkness. It’s not just you.