Category Archives: Career

The End is the Beginning is The End…

September 9th (and the days around it) has, for better or worse, become an important day for me. I got married on September 9th, 2009. I found out later that September 9th was my first ex-boyfriend’s birthday. I started working for Brad Larson two years ago on September 8th. And this year I am completing an important contract on September 9th. It seems fitting.

I feel like I have accomplished nothing of importance over the last year.

I am not blaming anyone besides myself for this. I don’t know what’s wrong. I don’t know if I have been suffering from depression, which has prevented me from fully engaging in anything. I don’t know if I am trying to do too many side projects and am getting distracted with blog posts and conference talks and tech books. I don’t know if I jumped into the deep end too early and I haven’t learned to deal or cope with things yet. I don’t know.

I just know that a year ago when I looked back on everything I did in the year I worked for Brad I was really proud of what I had accomplished and the person that I was becoming and I honestly can’t say that about myself right now. This was a wasted year.

I am tired of feeling like nothing I do matters. I’m tired of being a cog in a system and not seeing anything I work on ever get completed because it eventually gets passed on to someone else and I never see it again and feel no ownership of it. I am tired of feeling like I am chasing after the wrong things. I am tired of not saving enough of my money because I am buying stuff to fill the empty, meaningless void in my soul.

I want to do something important and significant. I want to do work I am proud of. I don’t want to look at code I wrote a year ago and go “Damn! I used to be smart. What the fuck happened??”

I need a change. I don’t know how I am going to do this or what I am going to do, but I do not want to keep living this way. I am tired of this. I want to make something that matters. I want to push myself to be more than I am right now. I do not want another wasted year. I want to look back on September 9th, 2017, and go “This was a good year.”

I am putting this year behind me. Nothing is irreparably broken. It sometimes takes a lot of time and patience to fix things that are broken. It takes some time to backtrack and get back on the right path when you’re lost. It’s easy to give up and walk away. I am not going to do that. I am going to find something that matters to me and I am going to do it. I am going to hold onto that and keep it close and use it to motivate me to keep pushing. Because I don’t want to live like this anymore and I don’t want another wasted year.

The Cassandra Effect

Back when I was a sixteen-year-old high school student, I had a boy behaving in ways that made me very uncomfortable. Any time he saw me in the hallway he would flinch in pain. He started telling everyone in the school that I was the Queen of Darkness and Evil and been sent by Satan to tempt him.

I was a teenager and I had absolutely no idea how to deal with this behavior. The year previously one of my teachers saw another student harassing me and reported it to the vice principal and this person was dealt with immediately. I felt like I could trust the vice principal, who had told me if I ever experienced anything like this ever again that I should go to him and he would take care of if.

So I did. A meeting was called between me and this other student. The vice principal came in and gave me a warm look. Then he saw that the student I was reporting was an honor student and all the warmth drained from his face. He grew very cold and rigid.

He informed me, in front of my abuser, that he did not take spurious reports seriously and that any other reports of harassment about this individual would be ignored. This gave him carte blanche to make my life miserable.

I have gaps in my memory of my sophomore year of high school because of the stress from this situation. I was misdiagnosed with a learning disability and eventually bipolar disorder all because this authority figure did not believe me when I told him I was being abused. This moment had an impact on my educational and eventual professional career because I went from being an honor student myself to getting D’s and F’s.

This was not an isolated incident.

I have encountered a version of this so many time over the course of my life that it is driving me crazy and I can’t take it anymore.

I have had situations where I have known a group of people for years, then I will notice someone starting to sabotage me. It’s always someone who is either in a position of authority or someone who has been there longer than I have. Either I will directly see them having conversations with authority figures above them or I will just see the evidence of it.

People I have known who used to be friendly will immediately grow cold and distant. There will be conversations in the halls that will stop the second I come into view. They will turn around to avoid passing me in the hall. Eventually they get angry and hostile.

Then it’s always a matter of time before I am asked to leave. The clock starts ticking and there is absolutely nothing I can do about it because no one will talk to me directly about it. I have gotten good at recognizing the signs so that I can set up an exit strategy, which is usually fine with the people I am among because they don’t want me there anyway.

I feel like I am trapped in a video game where there is a level I can never beat. I see it over and over again and it makes me angry that there is nothing I can do. It’s a nightmare I never get to wake up from. I feel like maybe this time I will disable the bomb before it goes off and it never happens.

It is incredibly difficult to get men to understand that this is happening because it doesn’t happen to them. Being a man gives you a degree of credibility that you do not have as a woman.

No matter how progressive or aware you are of sexism, I have not had one man believe me when I tell him about this happening.

I get good natured, “Now, now, you’re being paranoid. You’re seeing malice where none exists. It’s probably a misunderstanding.” A man they have never met get the benefit of the doubt over a woman they have known for years, and THESE ARE THE GOOD GUYS!!!

Being a woman means you are always in a position where you have to prove yourself and your version of reality. I have had two separate professional instances where I have worked with men who were making incredibly bad design decisions for the code architecture because they fundamentally did not understand what was happening under the hood. I have presented a carefully constructed technical walkthrough of what these decisions would do and why they cause bugs and crash apps, and the response I have gotten was always “Well, I am just doing what Apple wants me to.”

Guess whose side gets taken. Hint: Not mine.

You are not allowed to make any mistakes. I talk to guys who tell me they made a mistake they thought for sure would get them fired but that they were allowed to fix it and everything was fine. This never happens to me.

I still don’t know the reason why I was fired from my first programming job. I know I got a call right before dinner on a Saturday night telling me that everything I did was terrible and that when the CTO looked at my code he felt like I grabbed him by the hair and punched him in the balls. He would not tell me what the problem was. I lingered there for a few days while they consulted with a lawyer to see if I could sue them. The only changes that I saw to the project I was doing before I was let go was that someone changed the color, which would have taken me all of ten minutes to do. I don’t know if they saw an earlier version of the project, which was a train wreck, because they refused to speak to me about what the issue was. They had been primed by the guy I worked with to think I was incompetent and after they got confirmation of it they looked for any excuse to get rid of me.

People talk about gossip like it’s the weapon of mean girls in junior high. It’s not. It’s the weapon of men.

We place so much pressure on developers to be “the best.” Everyone has to be an 10x engineer. Everyone has to be a code ninja. This has created an incredibly hostile environment where a lot of people feel there is a zero sum game. Having a better developer than you on your team means they are taking away something of yours and you must get rid of them. Women are especially susceptible to this because we have to prove our credibility and it’s not just a given like it is for everyone else. This works so effectively because people are already predisposed to thinking we’re not as good to begin with.

I have also been on projects where I could see an iceberg coming a mile away. I try my best to establish that something bad is going to happen and that things need to be fixed. I try to cover my ass because I know that a problem is coming and I don’t want to be blamed for it when no one does anything about it. They don’t do anything about it, then I get yelled at for not alerting them to the problem earlier even thought that is all I have been doing for months. It’s instantly forgotten or it was never remembered or taken seriously because it came from me.

This makes it difficult for women to establish a base of trust and credibility to be able to rise through the ranks of a company. There are a lot of jobs where I would not make myself a manager because I know that no one on the team will do what I tell them. I have basically given up on that career path because I know it will be filled with failure and disappointment.

I would like to start a product company in the next three to five years, but I know that if I want to do that I need to find a male co-founder to talk to people for me because if I want to have any chance of success I need to work with a man who will give me a degree of credibility that I will never get on my own. I need to find someone who will respect and believe me and back me up when I tell him something. Fat chance of that happening.

When we talk about sexism in tech, we talk about women being asked if they’re designers at conferences. We talk about women being asked to get coffee because someone assumes they are the secretary or just because they’re the woman so they should be the one to fetch coffee and take notes.

We need to have a conversation about this bullying and gas lighting behavior. All it takes is one person on a team to drive great developers away. If you have a team of 20 people and 19 of them are great but you have one foul ball, that one does so much more damage than you can see. All this person has to do is tell a few people that someone is incompetent, who tell other people that too, and before too long everyone on that team “knows” that someone is shitty developer. This is how social crap works. Having a team mostly comprised of men means that most of the time they don’t understand this because they have not been forced to figure out the rules of the game to master basic survival skills the way that women have been forced to.

I am angry. I am tired of this happening over and over again. I find it absurd that I am trusted to write a book on a topic and flown all over to talk about technology but that the second I have a disagreement with a man on my team that I instantly have no credibility. This fucking sucks and I don’t want to take it anymore.

Balancing Act

I spent this past week out in California. I spoke at Forward Swift, which was my first conference in San Francisco. This week was one of the first times I have ever actually spent time in San Francisco. I can see why so many tech companies require you to relocate to it.

I got pitched by my first venture capitalist, which was crazy to me coming from a rural town in the Midwest. I am going to spend some more time out there this weekend with a friend to try and make the most of the time that I am out here.

There is one thing that I just became aware of that I would like to talk about in this post. I was chatting with some friends about going to work for one of the big tech companies out here. I recently got one of my dogs registered as an emotional support animal and I was pondering if any of them would let me bring her to work with me.

ESAs do not have the same legal rights as full service animals. They can be taken on planes and kept in hotel rooms. Landlords cannot forbid ESAs from staying in apartments and condos, but beyond that they do not have any legal rights. I can’t bring an ESA into a restaurant or a workplace and have it be legally protected. A lot of places are willing to accommodate ESAs if you have proper certification and paperwork, but they’re not legally required to.

When I mentioned having an ESA and wanting to bring it to work, I heard many people say that they had never seen an ESA. In fact, most places they worked at didn’t have any service animals. At all.

This struct me as being kind of worrying. We, as a community, have been talking a lot about wanting to have better diversity. We primary talk about it in terms of having more women in the workplace, but there are lots of shades of diversity.

I am guilty of not seeing outside my own bubble. Earlier today on Twitter I made a generalized comment about how it’s socially okay for men to express anger and my good friend Basel reminded me that it’s only okay for white men to express anger. Black men are not socially allowed to be angry. So I totally get that if you are not personally disabled or do not spend a lot of time around people who are, then you would not really notice the lack of service animals and other accommodations for people with disabilities.

The only explanation that I can come up with is that these companies don’t hire people with disabilities.

It’s possible that people with disabilities don’t even bother applying for those companies. I know that is one thing preventing me from doing so.

In the interest of trying to raise awareness and trying to do advocacy, I would like to share some of the things that I do to try and cover up and cope with my personal limitations in regards to mental health issues.

I suffer from depression and PTSD. I was misdiagnosed with bipolar disorder when I was 16 because I was being stalked and harassed by a fellow student and it was easier to just say I was nuts and put me on medication than to tell him that his behavior was unacceptable.

I spent ten years being told that my version of reality was not accurate and that I couldn’t believe anything that I perceived. My freshman year of college another student handcuffed me to a bed and tried to rape me. A few years later a different one actually did and I now have PTSD as a result of that.

Ten years ago I finally figured out that I was not crazy. My perception of reality was not wrong. I decided to stop letting other people tell me what was real and what wasn’t and life has gone a lot better since then. However, there is still a lot of residual damage from that period of my life.

There was a period of time where I never thought I would be able to hold down a full time job. Being able to write books and travel to conferences and work the amount that I do is astonishing to me. But the only reason I am able to do that is because I have to follow a lot of strict rules based on trial and error about how I personally function.

I hate medication. I was on medication for ten years. It made me gain weight. It had terrible side effects. It would completely destroy my energy levels. It messed with my head. I had far less mental and physical energy to use to actually put towards doing cool things. Not being medicated means I can be a programmer. Being on medication means I can work at Target. I would rather be a programmer.

To cope with my emotional issues, I have pugs. Delia sleeps on me all day and she helps even out any emotional issues I have before they reach a point that they interfere with my ability to work.

A lot of places won’t let you bring dogs to work, which makes sense because you’re there to work and dogs can be a distraction. So I work from home.

I have an office I set up in my home. It is a room that I use only to work. I get up in the morning, I get dressed, I make tea, and I sit down to work. When I reach a point where I feel I can no longer work, usually around 5:00, I close my computer and leave that room and don’t come back until I am going to work again.

Sometimes I have bad days. I have days where I go to sit at my computer and I feel a veil of despair fall over me. Sometimes I feel the urge to harm myself. I know that when I feel those things I need to step away from the computer and take a really long break. Sometimes an hour break works, other times I have to take the whole day.

Because I have gotten better at maintaining my mental health, these days are usually few and far between. They’re basically sick days. I only have a few of them a year when I am able to do all of the things I need to do to maintain my mental health.

I find cooking helps my mental health. I get depressed if I sit in front of a screen for too long. I keep trying to find analog hobbies that keep my brain engaged without having to deal with reading or writing words. I find cooking soothing because I can chop veggies and sauté things with TV on in the background and rest my brain so it doesn’t hurt anymore. One reason I am interested in electronics is because I want to work with something that has no words.

When I worked for Brad Larson on robotics stuff, we had things that we did besides just programming. If I had a day where I simply could not deal with sitting at my computer, I could build a robot. I was doing something to actively contribute to the company when I had days I couldn’t code. It was fantastic to have different kinds of work that could be done so I could take a less mentally demanding task on days where I could not deal with it.

One thing that drives me absolutely crazy about a few jobs I have had is this idea that there is only one task, and that is coding. It isn’t even that things are divided up into easy and hard coding tasks. Everything is hard. If I have days where I can’t deal with code, I either have to tell my boss that I am taking the day off, or they tell me to just try my best and I have to sit in front of my computer and cry. These are the things that lead to more frequent bad days. They wear down my mental and emotional reserves until they are gone and they cause long term damage.

I took several months off this year because I got pushed too far and stripped my reserves and nearly quit programming altogether. I have been going to therapy once or twice a week for the last few months. That is another thing I can do since I work from home. My therapy appointments are on Monday afternoons. As long as work gets done, no one needs to know that I take half a day to go and get therapy so that I can be productive the rest of the week.

Most of the things I do to keep myself productive are things I could not do in most offices at most companies.

Everyone is asked to conform to certain acceptable modes of behavior. Some people can deal with that. Others can’t.

We have accepted burn out as an inevitable thing. I feel a lot of start up want to hire young people who have not burned out yet so they can run them into the ground. Those people leave this community and don’t come back. We’re preventing ourselves from having a deep bench of experienced people for the short term gain of having people write bad code eighty hours a week. Huzzah for technical debt!

By not talking about this and by trying to force everyone to fit into a round hole, we are burning out a lot of really talented, intelligent people who damage themselves trying to fit the mold.

I think it’s incredibly frustrating to talk to people who want to change the world but then they want to exclude anyone who is different. What is the point in changing the world when so many people are excluded from the opportunities we have here?

If we don’t accept people with different backgrounds and abilities and ways of seeing things then we will stagnate. I don’t think being told to either go on medication that affects my ability to think or, god forbid, pretending to be normal, is the best long term strategy for resolving these issues. I think acceptance of how people work best and compassion and understanding are the way forward. They’re not easy, and apparently not visible, but they are important and we can do better.

Streaming WWDC 2016

I have never had the privilege of attending WWDC. Most years (including this one) I never bothered to apply to the lottery because I couldn’t afford to go. The one year I could afford to go, I didn’t win a ticket and I decided I would rather have the money as a buffer than go out to WWDC. This was the correct decision.

I attend a lot of conferences. I speak at a lot of conferences. Unfortunately, I have had some difficulty actually attending sessions at conferences. I have panic attacks when I am trapped in a room full of people and I can’t get up and walk around. This was one reason I was never super disappointed about going to WWDC the last few years. The idea of being stuck in a room for a whole week makes me feel like curling in a ball and crying. I go to conferences to network and drink with my friends. Now I am at the point where it’s just networking since I gave up drinking.

One thing I had forgotten about was discovering new things by attending sessions I hadn’t thought to go to. When I went to my first CocoaConf, I encountered a lot of interesting things because I wanted to watch Jonathan Penn and Josh Smith present.

When Swift was introduced two years ago, most of the conference sessions revolved around talking about Swift. I like Swift, it’s a neat language, but I am sick of talking about it. I am tired of hearing people talk about side effects and protocols and immutable state. I miss the first few years I was an iOS developer when people talked about frameworks and weird little nooks and crannies of the Cocoa architecture.

Taken together, this has created something of a perfect storm where I got burned out on iOS development. I got sick of talking to people about it because it always boiled down to Swift and arguing about code purity and a bunch of other bullshit.

I saw the Keynote this year and I had absolutely no enthusiasm for anything this year. I was irritated and cranky and didn’t want to deal with anything. But I noticed that this year Apple decided to stream most of the sessions live. The sessions were always available online later and last year they started showing select sessions. I watched the Swift ones because it was for my job and was still new and exciting. But I rarely watch the sessions afterward because when I watch the sessions, I sit there and pause every few minutes to try and process the vast amount of information that is being presented. There is a massive backlog of lots of sessions I think would be nice to watch but I never get around to watching. I did not think I would do anything this year.

I was wrong.

Streaming the sessions live has completely changed my life this week.

I work from home and so I just kind of threw the live stream on while I worked on stuff. I have it on in the background. I can’t pause the live stream, so I am not poring over every second of each video minutely. I am getting an overview of what they are talking about so I can go and research things later. I also have a team of people on various Slack channels who are watching it with me that I can chat with about the things we find new and exciting.

There were five whole sessions on Metal this year. The last two years I only got through the first Metal video because I felt like I didn’t understand it well enough to move on to the next video. This year, since they were just on, I could passively leave it on and get through all the videos. If this was a normal year, I would not have encountered the thing that has excited me the most this year, which is doing neural networks in Metal. That was introduced in “What’s New in Metal Part 2,” which was the fourth Metal video streamed. I did not need all the context from the first three videos to get excited about the new stuff in Metal.

I got to watch all the videos about GameplayKit, Photos, SpriteKit, etc… All of these technologies that I have been interested in but in a passive way were all just there for me to listen in on. I got introduced to so many things I didn’t know about in obscure frameworks that don’t get a lot of love because most people need to pay the bills and so they don’t do sessions on SceneKit.

This is what it was like at the beginning when I started going to conferences. I would discover so many new things that I would go home excited to get working on something. I haven’t felt this way for the last two years.

I worked for Brad Larson for a year. He told me that the reason he got into making Molecules and got into OpenGL and doing GPUImage was because he had a free period at WWDC and just decided, on a whim, to watch a session on OpenGL. It’s crazy to me about how things you do on a whim or by chance can completely change your life. By not being exposed to these sessions over the last few years, I have been cutting myself off from these chance encounters to find something truly special that I can learn and make my own.

It has been a great gift to get to participate with WWDC from home. Being able to get up and walk around during a session and cuddle with Delia while listening to people give their talks has helped me tremendously. I can talk to people on Slack from all over the world about the sessions as they happen so we can all be excited together. I know that people get something out of being there and getting to talk to the engineers, but for someone with mental health issues that prevent them from being able to be comfortable with massively large amounts of people, this has been a godsend.

I am planning in the future to go back and watch all the videos from previous years that I never watched because they took too long. I can have them on in the background while I work on other things. I can pick out the parts that interest me and look into them further.

For the first time in a really long time, I am excited about iOS development. Thank you Apple for giving that back to me.

The Value of a Liberal Arts Education

Ten years ago around now, back in 2006, I was beginning to realize I had made a terrible mistake.

I graduated from the University of Wisconsin-Whitewater with a Bachelor’s degree in Journalism with a minor in English composition. I declared this major two years earlier. I attended my first journalism class and the teacher told us to look to our left, then look to our right. He told us that ten years after leaving college only one out of fifty journalism majors were still working in journalism and everyone else had moved on to something else.

I looked around me with a smug expression thinking “Man I feel sorry for the other forty-nine people here who are wasting their time!” Clearly I was not the brightest college student as I should have heard this statement and thought “Run for your life!!”

Here we are, ten years later, and I am one of the forty-nine. I don’t even really know why I chose a journalism major. I knew I wanted to write and I knew I didn’t want to be a high school teacher, so that kind of left journalism and getting a PhD in English and praying that by some miracle I found a tenure position or wrote a best seller. I think the best seller would probably have been the easier goal to achieve.

I kind of wanted to learn a trade, but universities don’t do that. Trades were for people who were too dumb to get into “real” college. I had a Photoshop class with a dude who was forced to retire from his paper because he was so old. He had been a film photographer for forty years so they figured he would be the guy to teach Photoshop. Another student introduced him to the Layers property. There was no hands-on anything. There were plenty of hipsters in skinny jeans gushing about Ayn Rand, however.

I got really good at writing research papers and getting on the bad side of professors who did not like being reminded that they were wasting their lives teaching MacBeth to a bunch of brain dead just barely adults who wanted to drink and didn’t really know what else they were doing with their lives.

Besides the not drinking part, I was also one of those brain dead kids who didn’t know what I was doing with my life. I knew when I was in grade school I was supposed to be learning how to make straight A’s so that when I went to high school I would have a good GPA. I was supposed to do well on the ACT so that I could get into UW-Madison and get an engineering degree, even though I didn’t know what engineers actually did. When that did not pan out, I was supposed to attend another UW system school and get a degree in something, because if I got a degree in something, then there would be a job waiting for me at the end of college.

After I was informed that I had in fact completed all of my course requirements I dutifully went down to the job placement office and asked them what I do now. They said “How are we supposed to know?”

“Um, this is the job placement office. What do you do here?”

“We tell you to put your resume on Monster and connect with the people who you did an internship for, if you did one.”

“I didn’t do an internship. Don’t you have, like, companies that reach out to you to help you place recent graduates with them??”

“Why would you think that?”

I found out later that this stuff existed, but the people I talked to had zero interest in helping me out. I was easily deterred because I didn’t know any better. I also realized I was very screwed.

I didn’t have a demo reel to show prospective employers. I hadn’t done an internship. I wanted to work for NPR, but NPR’s Madison hub was at UW-Madison and they would only hire interns from UW-Madison and if there were jobs after that they would only hire people who had already worked there.

I realized that not only was I missing a lot of requisite skills, I also was missing a network of people to call on to help me find a job.

I had been raised by my dad to believe that personal connections were completely meaningless. If someone was looking to hire, they would put out an ad in the classifieds. They would impartially look at the resumes of everyone that applied and if you had a better GPA than someone else, you would be picked.

This is complete and total bullshit.

I spent a decent chunk of time being incredibly angry that I did not get picked over less qualified people simply because the company already knew this person because they were referred or had interned there. I realized very quickly that if I wanted to get jobs I had to be that person that people knew rather than getting angry about how “unfair” things were.

I also realized these placed wanted people who actually knew how to do technical stuff that I didn’t know how to do. I hadn’t learned any of this stuff in college and I didn’t know how to learn it, so I held my nose and enrolled at a for-profit technical college specializing in audio and video technology.

I spent two years there getting to touch real sound boards and real cameras. A lot of our classes were working through the Adobe Classroom in a Book for things like Illustrator and After Effects. This is technically something I could have done from home, but I would have had to convince someone to buy copies of these programs for me and I would have had to have had the discipline to just sit my ass down and work through the book without the threat of a failing grade hanging over my head.

This place also exposed me to something I couldn’t get at my first college: Connections.

My mentor at this school was the guy that got Slipknot signed to a record label and engineered their first album. Another guy was a guitarist on a Nine Inch Nails album. Yet another worked with Michael Jackson.

This was the school where I also learned how to learn on my own. Halfway through my time there, there was a massive upgrade to both the Adobe suite and Apple’s Final Cut Pro suite. I didn’t know how to work with the new software and so I asked a teacher for help. He sat down and worked with me and showed me where everything moved.

I looked at him and asked, “How do you know this? Who taught this to you?”

He looked at me kind of confused and said, “Well, nobody. I got a copy of this a few days before class started and I taught it to myself because I had to know it to teach you.”

That was the first time it ever occurred to me that one day I was going to be on my own. That technology changes and you can’t just keep throwing out money every year to keep taking classes to learn all the changes. When you’re a professional, you’re responsible for knowing your own stuff.

After that I quit asking as many questions. I tried to find out the answer for myself before I would ask for help. Slowly over time I stopped needing to ask for help altogether because I could find any answer I needed.

I worked really hard to try and connect with these people, but I ran into a wall that would prove insurmountable: I was a woman.

As much as people bitch about how sexist the programming community is, it’s nothing compared to the music industry. There were companies expressly telling the school not to send them female candidates because they would not hire women. The guys in my class kind of treated me like a talking dog and would never take me seriously. They would all hang out at strip clubs after school and it was very clear that I was never going to be welcome into their ranks.

Well, actually, it’s possible I might have, but I think I would have been raped and drugged and generally abused for a job that pays ten bucks an hour. No thanks.

After doubling down on this bad bet, I had to find yet another thing to do, which was how I got into programming. I learned my lessons from these previous experiences in that it was really stupid to try and break into “prestige” jobs where there are fifty qualified people for every job out there. Even in something like programming, where there is supposedly a lot of demand, you have to know people and they have to know you. You can either do that by dropping close to six figures getting a computer science degree from UW-Madison or you can work your ass off networking with people and making public contributions on places like GitHub (or this blog).

Even though I never got paid a dime as a journalist, the training I received for that has proven invaluable. I learned how to distill down a lot of information into its most important parts. I learned how to ask good questions and figure out what the root of an issue was. I learned how to write very clearly, effectively, and concisely. My experience doing radio helped me tackle conference speaking, which gave me the kind of visibility I needed to break into programming.

I learned to hustle and work my ass off. I did not want to be in a position like I was ten years ago when I assumed the world owed me something just because someone gave me shitty life advice.

Life doesn’t owe you anything. People will pay you if you can do something for them that is more valuable than what they are paying you. People are more likely to pick whoever is the first candidate that is good enough and if you’re one of the first people they consider you’re more likely for that person to be you.

In spite of all the pearl clutching about how writing as a skill is going in the crapper, there is a lot of opportunity out there for people who can write effectively, especially in highly technical fields. I think it’s easier to learn the tech after the writing because if you learn the tech first, you’ll find someone to pay you enough money to not bother with learning the writing. That is never the case the other way around.

Even though things were pretty bleak ten years ago, failing spectacularly was a wonderful learning experience. I am happy I failed early so that I could have enough time to process that experience and pivot to something else before it was too late. I see people who never struggled with anything suddenly hit road bumps in their thirties and have no fucking clue what they’re supposed to do. I am proud of the person I have become and the life I have built for myself.

That is the value of a liberal arts education.

What Makes an Advanced Programmer?

Right now one of my side projects is learning C++. I want to write game engines and program micro controllers on robotics projects and do a lot of other work that requires a lower level language like C and C++. I already do a decent amount of work with graphics and audio programming where most of the resources are C/C++. I eventually want to learn assembly language, so if anyone has any suggestions for that, I would greatly appreciate it!!

For years I have heard people warn me away from C++. Everyone says that there are a lot of sharp edges and it was a poorly designed language and how much better a language Swift is. I haven’t delved into this enough to determine if that is the case.

What I do notice is that there are a lot of learning materials out there for beginning developers. Right now I am working through a book called Beginning C++ Through Game Programming. Even though it’s going over a bunch of concepts I already understand like “for” loops, it’s still helpful for me to actually type out the code. For me, I learn by doing stuff. I learned iOS programming by doing the tutorials in the Big Nerd Ranch book over and over again. Having some C++ typing exercises helps me to just get a feel for the language.

But this has made me think further about the nature of this book. It’s an introduction to C++. It goes over all the basic stuff you would go over in an introductory programming class. How do you go from this to advanced programming?

I know there are a multitude of books by Bjarne Stroustap about C++. There are books on C++ for the impatient, the fearful, and the overly optimistic.

I don’t understand what makes something an advanced book for a language. My starter language was Objective-C with the iOS frameworks. Any general iOS book, by its nature, is a beginner book. There are books on Swift, but we don’t have advanced and beginner Swift books. Most of the “advanced” books I see on iOS/iOS related technologies are all on frameworks and APIs. There are books on OpenGL for iOS, AVFoundation, Core Data. There is no Advanced iOS book. What would that even include anyway? The whole point of iOS is to get the programmer familiar with UIKit, one of the languages used for iOS programming, and how to look at the documentation for any other framework they would need to understand.

How do you have an advanced C++ book? How do you become an advanced C++ developer? Do my experiences with working on sustainable software implementations apply to my experience level with C++ or is there some magic thing I have to do that is C++ specific? What projects do I work on to be a better C++ developer? Is C++ like iOS and Java where it’s all about the libraries that come with C++? Are there books on the C++ libraries like there are for iOS?

I feel like we, as a community, are very competitive about who is or is not a good programmer. I think we feel that the longer you’re a programmer, the better you will be. It doesn’t matter if you haven’t progressed at all in the last five years and you don’t think introspectively about how to do better. We all want to prove that we’re a 10x developer. We spend so much time talking about how great we are at programming that I don’t know that we have any kind of consensus about what a great programmer knows how to do and how they’re different than a beginning programmer.

For a while I thought that having a great understanding of design patterns made you a great programmers. I don’t think they hurt, but I don’t think that is the be all and end all of programming. I am now in the camp of saying that having a good understanding of the problem you’re trying to solve and making sure your code is readable by beginning programmers is the mark of a great programmer, but as I grow and evolve that might change as well.

I know you can’t package experience in a book like you can a tutorial on how a “for” loop works, but couldn’t we at least have a general direction we can send people in to develop these skills on their own? What makes a great developers? Having a project that has more than ten classes in it? Maintaining a framework for five years? It used to be publishing an app on the store, but I don’t think that is the hallmark of a great programmer because I notice they tend to get abandoned after a year and so you’re not around long enough to be pissed at yourself for putting singletons everywhere and then deciding to go back and rewrite the code in a more maintainable way.

I find my skills do not develop when I am thrown on a project for two weeks where I am just trying to not break the code until I am pulled from that project and put on something else. I am not developing skills when I don’t have a problem I am trying to solve or a cohesive project with victory conditions to complete. I had those at my first programming job and I don’t have them anymore and I feel completely adrift. I have no idea how to get myself back on track and do those things for myself. Anything I do on my own feels too small for me to really learn from or else it’s entirely too large and becomes daunting to me.

I would like a project or a framework or something with a great deal of complexity that I have to maintain for a number of years and possibly have to coordinate with other people. I am trying to find an open source project I can do this with so that I can try to push myself to be a better programmer. I would like to understand why everyone hates C++ and be able to just get to the point where I can work on something and go “Oh, so THAT’S what everyone was warning me about!” I can’t do that with the abstracted books out there and I don’t think I can get a job doing C++ without having actually demonstrated knowing how to avoid getting bruised by it and I don’t see any way to get experience with it except to find a job.

If someone has a simple solution I would love to hear it. Sometimes I feel like nothing ever changes and we’re just doing the same thing over and over again in different flavors of C.

TeachYourselfProgramming21Days

My First Year Being Alone

One year ago today I went to a court house to dissolve my marriage. I was married for a little over five years to a man I have known since I was a kid. I don’t remember how we met because it was so long ago. We gave things a try and they didn’t work out.

This last year is the first year of my life where I have really been on my own.

I didn’t really have a lot of relationships. When I got engaged to my ex I hadn’t had a boyfriend in over ten years. I didn’t date at all when I was in college. When I married my ex I didn’t really have any career prospects and I was afraid that I had missed my opportunity to meet anyone and to get married.

I lived with my parents until I was 27 years old. I had been diagnosed with bipolar disorder when I was 16. I don’t think I ever had bipolar disorder. I was being sexually harassed by a number of people at the school I was attending (including the priest who taught our religion classes) and basically instead of doing anything about it, everyone just decided what I was saying couldn’t possibly be true and I must be crazy. I spoke to some of the people I went to school with over the last few years and they agree with me that something was terribly off about our school and that it wasn’t just me.

I spent ten years being medicated for an illness I don’t have. Those medications clouded my mind and destroyed my ability to function. I spent ten years being told that anything that I felt or observed that was inconsistent with what other people wanted to believe was wrong and I could be discounted because I was crazy. I was sometimes actively targeted by people who knew they could bully me and people would let them because I was the weird crazy girl. I was told to hide who I am and pretend like I was normal to avoid all the trouble people cause me. I was told not to set my sights too high because I was never going to accomplish anything and that just getting through college or holding down a job were high enough aspirations.

I am not recounting this to get sympathy or whatever. I am simply trying to explain why I didn’t have a job or live on my own until recently. There was a period of time where I didn’t think I would graduate from college. I never thought I could hold down a full time job. My self was slowly being hacked away over the years and I lost track of who I really am.

I married my ex-husband so that I could have a future. He seemed like a stable person and I had no stability in my life. He had direction and I wanted to have a better life. So I married him and we moved into our house six and a half years ago.

Things did get better. I got my first full time job. It was working at Target, but I did that job for a year. Then I got a better job and held that for a year and a half. Then I got a miserable job that eventually lead me to programming. I went back to school, I networked, and I now have a really great career.

Sometimes I forget where I came from. I forget how miserable and hopeless everything seemed in my twenties. I forget there was a period of time where I missed half of my classes because of various mental health issues. I forget that a teacher told me not to set my sights too high and I should just focus on finding a nice little town with a nice psychiatrist to settle in. I forget consistently being told I will never amount to anything and won’t do anything special or important with my life. I have a life I never thought was possible. My highest aspirations when I was 25 was to have a quarter of what I have now. It’s a miracle to me that my life exists.

Even though it’s a miracle, I still have felt a great deal of depression over this last year. I feel like I have no right to feel this way. I should be grateful for what I have, and I am. I shouldn’t want more, but I do.

This past year has been incredibly upsetting. I have never had a time where I had to figure out who I am. I have never had to pay my own bills. I didn’t know if I would run out of money because I did something stupid like buy too many books and so I wouldn’t have heat. I was afraid I would forget about paying my property taxes and lose my house. Those were the first insurmountable things.

After that, I found other things insurmountable. I am just now starting to figure out what I want to do with my house. I never decorated it or organized it because it was simply too overwhelming. I also wasn’t committed to staying here since there was nothing keeping me here anymore. I was deeply ambivalent about it. I also had a worry that if I started treating the house like it was mine that i was precluding the possibility of letting another person into my life. I know from my experiences with my ex that he treated the house like it was his house. He begrudged me any space in the house because he thought of it as his. I know that if I paint the house and bring in all of my bookshelves and I fill all the space in the house, I am basically enforcing that I have no room in my home for anyone else except me. I am afraid that the longer I am by myself, the less likely it is that I will ever feel comfortable letting another person in.

I don’t want to be alone forever. Being alone right now is fantastic. I can do whatever I want. I haven’t put my laundry away in over a year. I don’t have to coordinate what I cook with anyone else. I don’t have to spend my weekends being dragged around by my significant other when I would rather be at home working on my electronics projects. Being alone right now is great, but I don’t want to be alone for the rest of my life.

One thing I didn’t count on with the divorce was the deep depression I felt. I had fantasies about spending long glorious weekends programming and working on electronics projects. I thought that if I could control all of my time that I would have this golden productive period where I would get so much done. A lot of days it was a struggle just to get out of bed.

I miss being touched. I don’t think my husband and I were particularly physically affectionate, but apparently it was enough that I didn’t feel the overwhelming ache that I feel every day now from not being touched. I sometimes will lay on my stomach on the floor because the weight being applied helps with the pain. The pugs help with the pain too. One reason I adamantly wanted to work from home the last year or so is that if I can’t touch the pugs I fall into a massive depression because of lack of physical contact with another living thing.

I read a while ago about some company talking about doing cuddling as a service. I would be all over that. I keep having people telling me I can get guys to take me on dates so I can be touched, but that tends to lead to things I am not ready to do yet and I think it’s fraud to pretend to be into someone just because you miss being hugged. I would like it if I could just pay someone to cuddle with me for an hour and leave and know it’s not going anywhere.

People have suggested online dating, but I really don’t want to go there. I have spent a lot of time and energy avoiding the vast awfulness that is The Internet that I don’t want to open myself up to unsolicited dick pictures and verbal harassment from guys who are mad at me for not responding to their dick pictures. I would like to find someone through networking like I did with my job, but in spite of the reputation that programmers have for being antisocial neckbeards most of the men I encounter in our community are married and in long term relationships. That being said, DON’T ASK A WOMAN OUT AT A PROGRAMMING CONFERENCE!! EVER!! Those are professional events and I go to them for professional reasons, not to meet men.

So why am I writing this blog post? I am writing it partially because I have had a number of people over the last year come to me to talk about their pending divorces. I wanted to share my experiences with depression after my divorce because those feelings are normal. Even if you were the one who wanted the divorce, you’re going to feel sad. It’s okay to feel sad. Don’t beat yourself up because you have days you can’t get out of bed and the world seems hopeless. Don’t beat yourself up if you don’t do all the stuff you thought you were going to get done once you were alone. You’ve gone through a trauma and traumas take time to heal.

Also, don’t necessarily rush into a relationship immediately after getting divorced. Even though it’s painful and difficult, it’s important to be alone with yourself for a while. It’s important to know who you are and what you want from life. If you immediately jump into another relationship with someone, you don’t have time to process why your last relationship failed. I think we’re all so eager to avoid being unattached because it’s somehow socially deviant that we’re setting ourselves up for failure because we are treating being in a relationship like being in a job. You can’t be unemployed. If you are, then there’s something wrong with you. There’s nothing wrong with being alone and deciding that you’re not going to give up your freedom for someone unless they’re special. Also, get a pug. Pugs are great at snuggles.

Last thing I want to do is thank this community of people. I would not be here right now if it wasn’t for the people in this community. I thanked everyone for being awesome this weekend and someone thought I was leaving programming. That’s not the case at all. Programming has given my life meaning and direction over the last few years.

I want to thank Eric Knapp for teaching me how to program and letting me ask him the same stupid question over and over again because there was some nuance I didn’t understand that was bothering me. I want to thank Emily Van Haren for holding me in the hallway at school when I broke down sobbing because I didn’t think I could continue on anymore because life was too difficult. I want to thank Josh Smith for getting me to talk to Dave Klein about speaking at CocoaConf and changing how I thought about myself. I want to thank Chris Adamson for being one of my first mentors and for helping me fulfill my lifelong dream of writing a book. I want to thank Brad Larson for helping me to solidify my programming skills and for giving me the job I needed to be able to leave my ex-husband. I want to thank all of the conference organizers who let me speak at their conferences when I was nobody and unemployed so that I could network with people and have a future. Lastly, I want to thank everyone I have met, everyone who follows me on Twitter, and everyone who reads this blog. I spent my whole life being told to hide who I am because no one would ever accept me. The amount of support and acceptance I have received from this community is something I never thought was possible. I would not be here without that. So thank you.

The Fig Tree

I have been doing some soul searching for the last six months or so. I have written on my blog about suffering from some massive burn out. I had reached a point a few months ago where I honestly didn’t think I could cut it as a programmer and thought about leaving the industry to do something easier.

I took some time off to regroup and figure out what I was going to do.

During that time I happened to have a lot of conference talks and trips that I had lined up a long time ago. While the constant travel was exhausting, it was genuinely wonderful to see so many members of the community. I got to see old friends and make some new ones.

I also had a chance to calm down and actually see what life was like if I wasn’t programming every day. Honestly, life without programming really sucks.

When I wrote my first shader program and debugged it I felt like I had come out of a coma. I knew that this was something I could do, but I knew I wasn’t approaching it properly.

I thought the problem was that I was programming too much. It isn’t that I was programming too much. I wasn’t actually programming enough in the right way.

Before when I was having emotional crises I would sit down with a programming book and actually work through the exercises. The summer I couldn’t find an internship my ex-husband lost his job. He was home all the time and that along with another situation lead to me having a nervous breakdown.

I went to a friend of mine, Stephen Anderson, and asked if I could squat at his company for a few days a week so that I would have a calm and quiet place to work. He was very kind and allowed me to work out their office for two months.

During that time, I worked through Chris Adamson’s “Learning Core Audio” book. I would come in, set up my computer, and type through all the exercises in the book. Doing that refreshed my soul and helped me learn a lot and get through that horrible period of my life.

I hit a point where I felt like I was too “advanced” to keep relying on tutorials and I tried to transition over to working on projects. But by that point I was working for people full time and working on various books and projects and sometime never came.

One of my goals in 2016 is to release an app. I quit my work at Ray Wenderlich, withdrew from my book obligations, and I put down the podcast so that I could focus all of my energy on this task. It’s May and I have nothing. So what do I do?

Focus

First thing I need to do: FOCUS!!!

I named this blog post after a quote by Sylvia Plath. The gist of this quote is that there is a woman who is privileged to have many different futures and opportunities. However, she can only choose one. Choosing one means giving up all the others and she can’t decide. As she sits indecisively she loses her opportunities because she waited too long.

This feeling of so many choices and none of them being real is a theme in many things. This theme shows up in the Harry Potter movies as The Mirror of Erised.

One of the things I have never publicly admitted before is that I do Tarot card readings. One of the cards is the seven of cups. This card symbolizes a person looking at many different goals and interests and possibilities but none of them are real because the person in the card hasn’t manifested them yet.

I talk a lot on here about my various interests. I like electronics. I like graphic design. I like audio and graphics programming. I like Swift.

I can’t do everything I want to do.

I talk about wanting to be an audio programmer or a graphics/Metal programmer, but if I am honest with myself I am not those things. I don’t have the right to label myself as such because I am not focused on it.

It feels good to say you want to do something. It feels good to buy books and put on various trappings of a person doing something. But the only way to manifest what you want is to put in the work and just fucking do it.

All of the things I am interested in require deeply focused effort and knowledge. I had a similar revelation when I was learning programming. I spent at least sixty hours a week for over a year just coding. I dropped all of my other hobbies and interests. I would have fights with my ex-husband because he wanted to go to a movie and I didn’t want to be torn away from my screen.

I miss that. I want to get back to that on something. I want there to be something that is so vitally important to me that I focus everything I have on it to the exclusion of all other things.

I had to step back for a while to figure out how to heal myself so that I can go back to being that person and to figure out how to avoid feeling like I did earlier in the year.

Work Efficiently

The biggest thing I can do is work efficiently. I need to avoid doing things that feel like work but aren’t. I need to code a lot. I need to make sure my focus is not fractured.

I also need to learn to disconnect from the keyboard. I am doing better in this regard. I bought a bunch of analog books that have nothing to do with programming. I have (mostly) stopped taking my iPhone with me to the bath tub.

I am deeply sad about abandoning my electronics shop in the basement. This post came about because I saw someone on Twitter posting a picture of their new Raspberry Pi setup and I really wanted to go out and buy a new Pi and a bunch of other stuff to do what they were doing. However, I have done this before. I have a giant nest of electronics components and Arduinos and Pis in the basement that are basically untouched.

I keep telling myself that I can work on it as a hobby. I spoke to my teacher Eric Knapp on Twitter yesterday about setting up a wood working shop in the basement. I have a weird obsession about setting up some kind of shop in the basement because somehow I think that having a non-programming hobby will solve all of my problems and life will feel meaningful again.

It’s all just me running away from reality.

I keep thinking there is some easy answer or escape from how I feel right now and there isn’t. Well, there is, but I don’t like where that route takes me.

If I want to go where I want to be, I need to embrace the hard road. I didn’t prepare myself for it last time and I ran out of food and had to go back home to lick my wounds. I know more now and I think I can do it.

I have to simply my life and just pick something and stick with it. I have to know that it’s going to be a long road and that I can’t let myself be distracted by the new shiny thing. One good and bad thing about programming is that there is not just one right choice to make. Someone who chose to learn something like Node.js isn’t kicking themselves because they didn’t learn Swift. There is a lot of opportunity in the programming world for a lot of people with a lot of various skill sets.

I talk to people who feel like they have to know everything because someone might need them to know PHP or Java or Perl.

You don’t have to do this. In fact, there are better opportunities out there if you specialize in something. I guarantee you there is a job out there for someone with deep knowledge of Perl. Choose your own adventure. Pick a path. Stick to it. Make something. Own it. Stop dreaming and manifest.

Practicing Scales

I have been rather discombobulated over the last several months. I had a number of upheavals in my life. I left a job and started another. I traveled to a new place every other week. I spoke at many conferences.

I have been running ragged for a few months now and I am trying to get myself back into a better mental state. Since I get to stay put for a while, I am trying to figure out a better routine for myself to help me shake off the last of my burnout and to prevent future burn out.

What I Do For a Living

One thing I have been struggling with is making time to code. I know this sounds incredibly stupid considering I am a professional programmer. Don’t I spend at least 40 hours a week coding? Isn’t that what I am being paid for.

Well… not really.

A lot of my job over the last year has been looking at other people’s code and debugging it. Or looking at other people’s code to learn how they did something. Or reading documentation to make a sample project to show how to do something.

I had a few large projects over the last year such as wrapping libXML2 in Swift. This project took between two and three months. The first month, at least, of this project consisted of me staring at code I did not understand and then staring off into space waiting for my brain to compile it. I had panic attacks that it would never click and I would fail and all hope would be lost. Then at some point I woke up in the morning and I understood the code. This happens to me a lot and I find the process quite terrifying. I keep worrying that it won’t all pull together for me this time and I am just living on a prayer.

Regardless, during this compile time, I did not code very much. I didn’t understand the code I was supposed to work with, so I couldn’t write anything. I couldn’t work on a tutorial or something else because it wasn’t what I was supposed to be working on. So I spent a good chunk of time walking around outside with headphones on waiting for my brain to make sense of things.

I don’t like this process.

Right now I want to learn C++. I am interesting in game engine programming, audio programming, and other low level programming that at this point is only being done in C++.

I went on Twitter and asked for some advice for resources. I got these responses:

  • Why are you learning C++? Why not just do it in Swift?
  • You can’t learn from books. You can only learn from projects.

First off, not everything can be done in Swift. It just can’t. It would be nice, but we’re not there yet, so this is a non-starter.

I have written about my personal experiences from not learning from books so it isn’t that I completely disagree with this statement. I just think that there is a happy medium between “learn from books” and “learn from projects.” That medium is the tutorial.

In Defense of Tutorials

I have heard a lot of people talk about learning code from videos and podcasts. They put a podcast on their iPhone or just take the audio track from a WWDC video and throw it on while they go for a jog.

I envy those people.

I know this is ironic from someone who used to do a podcast (and plans to get back to doing so soon, I promise!), but I don’t like listening to podcasts or videos. It drives me crazy. I need something interactive. Listening to someone else talk and not being able to have a back and forth and ask questions makes me completely insane. I have no idea how anyone learns this way.

I went to school for programming twice. The first time I dropped out because I followed the “Just learn from projects” line of advice. I would do a bunch of research into how to do my homework. I would do it once, then I would never do it again. I never learned or retained anything I did. I aced my exams but I had no fucking clue how to code.

It was only when I had the worst job I ever had that I learned to code. I was told that the team lead didn’t know what we were supposed to be doing and so he told all of us to look like we were working. To avoid having a nervous breakdown, I started doing tutorials on Codecademy.

By just typing code forty hours a week, I learned so much more than I had when I spent most of that time thinking about what I was doing. Mindlessly typing code like a monkey for a really long time was a far more effective learning tool than anything else I did.

By typing code a lot, my brain processed how it worked. It didn’t work on the first try. It took doing it three or four times before my brain processed it.

I feel incredibly worried because even though I am a professional programmer I don’t get to code enough hours in a week for me to feel I am still proficient at programming. I keep having good intentions of working through code after work, but I usually am tired and want to cook dinner and take a bath, so it never happens.

I do not want to try to learn C++ by reading the code base for the Unreal Engine. Most of C++ looks alien and terrifying. I can’t just do a project with it because I have no idea how to begin. It’s like telling someone who is interested in architecture to just build a house. You need to have some kind of practice so that you know what the fuck you are doing.

Programming is one of the only skills I have heard of people doing where we don’t emphasize practice. If you want to be a great pianist you have to do scales. A lot. You don’t just do them once and assume you’re done with them. You keep doing them. You keep practicing the pieces you want to play. You don’t become a better piano player by just reading sheet music or listening to recorded songs. You get better by putting fingers to keys. A lot.

What I am Doing About It

I have spent the last year getting more and more depressed by trying to adopt the learning style I see everyone else around me adopting and getting more and more frustrated when it doesn’t work for me.

I had my epiphany about how I learn. I learned programming by doing a lot of tutorials and practicing my coding by just typing code a lot. Just because everyone else around me tells me this isn’t the way to learn doesn’t mean that I have to listen to them. It’s possible my way would work better for them and they’ve never tried it. It’s also likely that we’re all different people and we are all capable of learning differently. I should stop trying to conform myself to another person’s learning style just because they think they are “right.”

One thing I have done since I have tried to establish my routine is I set aside two hours each morning to code. Right now I am working through Beginning C++ Through Game Programming. Each chapter has about half a dozen programs in it that you can either download from their website or you can code yourself. I have been coding each exercise and I am already feeling far less freaked out by C++. Yes, I know how conditional logic works, but just getting used to typing out all the double colons and the semi-colons at the end of each statement is really helping me mentally process how the language feels.

This is one of many things that I have not been assertive about when I go to a job. I feel like working through my scales doesn’t count as part of my job because the code I am working on isn’t production code. But it does help me keep my skills sharp and makes me a more productive worker. I may not tell people that I am doing this, but I do hope to make this a normal part of my routine in the future. I want to be an amazing programmer and you can’t do that if you don’t code. A lot.

Self Destructive Tendencies

I have a problem and I am writing about it because I want to know if anyone else has the same problem.

When I start a new project I get really overwhelmed.

My dream project for the last few years has been to write a synthesizer application. Every time I start to think about writing this application I get incredibly overwhelmed by a lot of things:

  • How much math do I need to know how to do?
  • What kind of synthesizer do I want to write?
  • Oh shit, everything is in C++. How much C++ do I need to know?!
  • Can I use this audio programming book that’s in C++ if everything in it assumes you’re using Windows?
  • How do I do the user interface?
  • How do I fit all these little elements on an iPhone? Can I lay it out differently?
  • Do I need to know OpenGL to do a decent user interface?

So I get super overwhelmed and I sit down to try to figure out one of these things.

I sit down to learn C++ so I can read the book on audio programming.

I figure out that I don’t understand the math and I get freaked out and I try to learn the math.

Then at a certain point I get overwhelmed, feel stupid, and curl up on the floor crying because I am stupid and will never amount to anything and I should just give up on programming because I am a failure and should just go back to working at Target.

This doesn’t just happen with my personal projects. Sometimes this happens at work too.

At my previous job I had to learn a bunch of stuff about network programming. I have never done network programming and I honestly never want to do it ever again. I had people telling me to play with Paw to learn network programming. I don’t know what Paw is supposed to do. If I don’t know what it is doing, how do I play with it? I have no context for anything I am doing, so I wind up in this creepy, paralyzing mental mode where I am grappling with a bunch of unfamiliar terminology that has no context and if I can’t do my job I will get fired and I can’t pay my mortgage and I will be homeless and it makes me curl up on the floor breathing into a brown paper bag.

How do I avoid this?

Learn by Doing

I know from my own personal experience that I learn better by doing.

For a really long time I learned by doing a lot of tutorials. The first time I would do a tutorial I would have the overwhelming paralyzing feeling of not knowing what I was doing, but then I would do the tutorial over and over again a few times until I got the feel for what I was doing.

Back when I was a full time student and had the luxury of time, I could do this 60-80 hours a week. It was kind of magical about how by the third or fourth time I totally understood what I was doing.

Then I went out into the job market and started to mentally feel like I couldn’t do this and have tried to find ways around it. I used to keep trying to do tutorials, but I would only have time to do them once and I would be stuck in the paralyzed overwhelming stage, so I stopped doing that.

The only way to learn and grow is to write code.

You start with a blank project and you ask yourself how to make something work. That gives you the first step you have to take to find your answer.

I know this. I have experienced this. So why does it always take me by surprise when I figure this out for the fortieth time??

Lazy Information Initialization

I noticed I tend to get overstimulated and unfocused when I have to start on something. I tend to shave yaks.

I think that I can read a book on math for 3D graphics programming and learn all about that before I start a project rather than going in and just learning what I need to know to do what I need to do.

I do things that seem like work but aren’t actually productive.

I know on some level that trying to learn this difficult way by reading math books in the bath tub is not helpful and actively causes me mental harm. But I feel guilty if I am not working and I have adopted a lot of destructive behaviors that feel like work and make me feel like I am being productive that are making me less productive.

As I have gotten more and more burned out I have worked harder and harder on these self destructive tendencies because I haven’t known how to break out of them.

I have noticed at most of my jobs there is an implicit feel that working on code that does not directly go into a project is considered wasteful. Saying I am going to set up a sample project to learn a concept sounds unproductive and people would really rather that you work directly on the code base or read documentation. (Except when I worked for Brad. He did this stuff all the time and this is where I got this idea from and I finally started getting it through my thick head.)

In my experience, those things don’t work nearly as effectively.

I am trying to be better about asserting what I need to be a productive programmer even if it’s not what people want to hear. It’s not enough to just say “I need to do these things.” I also have to put them into practice.

And part of putting those into practice is to stop doing these destructive behaviors that make me feel like I am doing something when I am actually destroying my ability to function.

I think it’s important to understand how we learn and to stick to it even when other people don’t want to hear about it. It’s really easy to do a bunch of things that make you feel busy but aren’t getting you anywhere.

I am sick of feeling tired and burned out all the time because I am doing things that I know don’t actually help me. I am trying to figure out how to be a more productive person because my career and my mental health depend on it. This is too important to ignore and wait to resolve itself.

So I am not going to exhaust myself reading programming and math books with no context. I am going to do more sample projects and I will only learn what I need to know to solve a problem with my code. I am not going to expel a lot of energy on something that causes mental friction and generates heat that burns me out. I will only use energy on things that are actively productive. I will be less tired and less hurt this way.