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 Great TV Binge Quest of 2016

The last few days I have been asking people for suggestions for shows to binge. When I am cooking or doing something where I am not just watching TV in a dedicated manner I want something on in the background that I can tune in and out of without missing too much stuff.

My go-to default for most of my life has been Law and Order. I have seen most of the episodes so many times that once when I was waiting to go to the airport from a conference I saw the end of an episode with the sound off and I not only knew every detail of the story, but I knew that was the season finale of Season 14. That’s incredibly pathetic.

Law and Order was great because for a period of time in the early 2000s it was on ALL THE TIME. There were three cable channels that had it on. There were three iterations of it in NBC. If you were trying to kill twenty minutes with the TV on, odds were pretty good you could just throw on an episode of Law and Order.

Since I cut the cord and apparently cable TV has moved on to other shows, this is no longer the case. I have spent a good portion of the last six years trying to find a replacement for Law and Order. It isn’t that I think Law and Order is the greatest show that ever existed, it just had the right combination of characteristics that made it ideal for the purposes I had.

What makes an Ideal Crappy TV Show To Binge

Here are my criteria for what makes a good background TV show:

  • Must be at least five seasons long
  • Can’t be too engaging
  • Has to be somewhat repetitive
  • Has to have procedural elements

So far the best show I have found that meets these criteria is Grey’s Anatomy. I started looking for shows on Netflix that had at least five seasons and even though I really didn’t want to, I gave it a try. It’s actually quite a good replacement for Law and Order. It’s been on for a long-ass time and it’s going to keep going for a while. It has serialized elements in being a soap opera, but each episode has procedural elements where there will be some patient or case people are working on. There will be some kind of surgery. You can walk away for five minutes and still be able to kind of figure out what is going on.

Top Chef and Project Runway have worked pretty well too. Since they’re game shows the generalized structure of each show is the same so you can figure out what is going on if you stop paying attention for a while.

Shows That are Too Good

One problem I am having is people recommending shows that I should sit down and actively watch rather than garbage I can just have on in the background.

Breaking Bad is not a good candidate for my purposes.

Supernatural is also one that I can’t binge on. I have slowly worked my way up to season five, but it’s not something I can just passively have on for five hours.

Pretty much anything that has been on cable with abbreviated seasons like Mad Men and Halt and Catch Fire are not good candidates because I want to actively watch them.

Any prestige TV is not a good candidate for my purposes. Prestige TV is something you watch to be actively engaged. There is a time and a place for Prestige TV, but when I just want a steady stream of macaroni and cheese I don’t want to deal with prime rib.

Shows That are Too Engaging

There are so many shows that are disqualified because they require you to pay attention. One of my early candidates to replace Law and Order was NCIS. That stupid show is way too intricate for what it is. You have to pay attention to every single thing people say and do to know what is going on. I listened to an audio commentary from the actors where they got distracted for a minute about something and were like “Wait, what just happened? Why are we in this basement now?” It’s not worth the mental capacity to pay attention to what is going on to get through the entire series.

The West Wing is nothing but people walking and talking. You have to pay attention to every bit of dialog and after a while it gets incredibly preachy and irritating because it’s the world as Aaron Sorkin wishes it would be rather than the world that it is and it just makes me angry and thinking about politics and then I can’t deal with anything anymore.

Shows I have Already Seen

People have suggested some really good shows. The issue is that I have already seen those.

These include, but are not limited to, the following:

  • Battlestar Galactica
  • Futurama
  • Buffy the Vampire Slayer
  • Scrubs
  • Firefly
  • Doctor Who
  • Lost

Part of the issue is that I don’t want to just get into a rut where I watch the same show over and over again. There is scary amounts of stuff out there that I haven’t seen or read. Even if a book is shitty or a TV show goes off the rails, it’s still good to explore and absorb new things.

I find myself coming back to shows I have already seen like Alias and Chuck, but I would like to contemplate the possibility that there is an amazing show I haven’t seen yet.

That is what happened with Fringe. I tried to get into it a few times, but the first season was kind of slow. My affection for Walter got me through the rocky first season and I discovered a show that I actively looked forward to watching to see what would happen. When it was over I was so happy with how it wrapped up. It was like finishing a great book. But then I was sad that it was over and I can’t see it for the first time again. I want to hope there is something else like that out there and I won’t find it if I just keep watching Grey’s Anatomy over and over again.

Potential Binging Shows

Here is an informal list of shows that I keep forgetting exist that meet my criteria:

  • CSI (I watched it up through Season 7, so technically haven’t seen most of it)
  • Medium
  • Crossing Jordan
  • The X-Files
  • Star Trek: Deep Space Nine and Star Trek: Voyager (saw DS9 all the way through when it aired but not since, could never get into Voyager)
  • Stargate:SG1, Stargate Atlantis, Stargate Universe
  • Person of Interest

A lot of these are older shows. I think that with Peak TV come with the death of the kinds of shows I am looking for. Peak TV is similar to what is going on with film. There are lots of incredible prestige shows that demand constant attention and prompts rabid fan discussions on the internet. Then if you’re not a prestige show, you’re something like The Big Bang Theory. There is a huge amount of really bad, not funny or smart TV that is too bad to be good for having on in the background because when you do pay attention to it, you recoil in horror at the sexist, homophobic garbage being spewed.

There does not seem to be much of a demand for shows without vast mythologies and serialization that is fairly repetitive. Ironically, I am basically looking for the TV equivalent of the Marvel Movie franchise. Those movies are awesome. They are basically the same story over and over again with some variation in the setting and the primary hero.

I realize that by writing this huge blog post complaining about not finding bad TV to watch that it makes me seem like a couch potato neck beard who never leaves my parent’s basement. I think of this stuff as white noise going on in the background. It’s like trying to find a good radio station to listen to while you work. It’s hard finding music that helps you focus and doesn’t just make you flip through stations going “Nope, nope, hell no, aw this is the end of my favorite song and now they’re playing something I hate!”

I will continue my mission to explore strange new worlds. To seek out new shows and new storytelling. To boldly go where lots of other people have gone before!

Minuet in G

A few weeks ago I read this article about the right way to practice. The gist of the article is that we as human beings are able to do extraordinary things that we weren’t able to do a hundred years ago. The world record for a marathon a hundred years ago barely qualifies for a competitive marathon now. It isn’t that we have somehow evolved tremendously over the last hundred years. It’s that we’ve gotten better at learning and doing productive practicing.

Part of this resonates with me because of my experience with playing the piano as a kid. I was naturally good at it and no one ever made me practice or showed me a way to practice more effectively.

I progressed to a certain point and would play songs for fun and I just never got any better. I went to college and started taking music theory classes and I got overwhelmed by a bunch of stuff and shut down and just stopped playing.

I was still very interested in music and sound, but I abandoned music as a hobby. I moved out of my parent’s place about seven years ago and never brought my piano with me.

This topic interests me because I am seeing similar patterns of behavior with myself and programming. I am not going to say I feel I had the same aptitude for programming as I had for piano. I always felt incredibly stupid and out of my depth, which ironically is why I got good at it because I worked on it all the time.

I did targeted practice with programming where I would write a difficult piece of code over and over again until somehow my brain would process what it did and I would have an understanding of what the code does.

Unfortunately, there is not a lot of material out there for people who are not beginners. There was a great blog post about why programming is hard. When you’re a beginner, there is a lot of hand holding. There is a multitude of learn to code sites, including the one I used to learn to code, where you get walked through targeted practice that makes you learn better.

Once you get past learning the basics, however, you’re kind of tossed off a cliff to fend for yourself. My observation of the programming community has been that most people plug along until they reach a level of competency that allows them to be employed. We as a community assume that if a person has been programming professionally for 10 years then they must be better than someone who has been programming for three, but that is not necessarily the case. We tend to reach a level of proficiency and we don’t get any better unless we continue to push ourselves to improve.

But how do we do that? How is that measured?

It’s easy to see how you have improved with the piano. If you can tackle and master a difficult piece, then your results speak for themselves. If you aren’t getting any better in spite of hours of practice, then you’re doing something wrong. It isn’t that you have naturally hit your level of expertise, it’s that your not practicing effectively.

I also think that we tend to write off that we, as adults, are capable of learning extraordinary things. This other article talks about how impossible it is to take up chess at a later age because young children have vastly more potential to learn than adults do because their brains are flexible.

My reaction: So what?

I remember being a kid. I had no disciple. If I was good at something I didn’t work really hard at it and if I was bad at something I just avoided it altogether. I sucked at sports and running and I never thought that I could do anything to change that by working at it.

I basically squandered all of my childlike potential to be a super genius because I was stupid and didn’t do stuff. I refuse to believe that I am not capable of pushing myself now to be better than I was a year ago. I would rather believe in the first article about the effect of productive practice than be told that if I don’t start something by the time I am five that I am screwed and will never be great at anything.

So What Does This Have to Do with Minuet in G?

I am at my parent’s place today for Mother’s Day. One of my goals this year is to get my piano moved back to my house.

When you can't find sheet music...

When you can’t find sheet music…

I was curious about trying out this targeted practice thing with something I hadn’t done in a while, which was playing the piano. I was curious about why I never got any better. What did I do wrong besides not practice enough?

I picked Minuet in G because I believe it was written as a learning piece by Bach and I knew it was a relatively short and simple piece of music. I figured it was something I could sit down and get close to mastering in a few hours.

After hacking a solution to try and actually get the music in front of me, I sat down to practice for about an hour.

The first ten minutes of shaking off the rust were kind of demoralizing, but after I had warmed up a bit things got better.

The biggest thing I noticed while I was playing was that my fingers liked to overcomplicate things a lot. In the first half of the piece, the left hand does very little. It basically holds notes for long periods of time and doesn’t need to move around to hit the notes. I noticed that I had a strong urge to reposition my hand constantly even though there was no point in doing so. I would make a lot of mistakes because my hand was positioned in a place where it could not reach the notes.

Then, in the second half of the piece, where the left hand has more to do, my hand could not plan out where it needed to be. It would get very confused and keep hitting wrong notes. I think my brain felt like the only fingers that it had to work with were the thumb and first finger. Using the last two fingers on the hand always feels quite strange to me.

I also noticed that when I was working on the easier parts my brain would get distracted by being bored and I would stop paying attention and then I would make mistakes. This fits into what I remember as a kid. I liked fast pieces with a lot of movement on both hands because I would screw up easier stuff where I didn’t need to do as much because I would get distracted.

After I realized these issues, I was able to fix them. I would practice with the left hand by itself a lot and plan out how to avoid moving my hand as much as possible. I would get distracted and move it and I would force myself to only think about what measure I was currently playing.

By doing these things, I was able to improve much more quickly than I would have if I had just sat down and tried to play over and over again until I didn’t make a mistake.

How Does This Apply to Programming?

I don’t know yet.

I know there has to be some way for me to apply to programming what I did to the piano. I think it’s different in that with piano you know if you’re doing poorly immediately because you get the feedback of wrong notes. It is more difficult to know when you are programming badly because at a certain point you stop getting weird compiler warnings and stuff builds, but it’s not necessarily the best or fastest you can do.

I am going to continue to drive people nuts with my blog posts about the learning process because I find it fascinating and I don’t want to resign myself to the fact that I will never be a great programmer because I didn’t start when I was five. I think I can train myself like chess grandmasters and Olympic athletes can do. I don’t know how yet, but I have faith that it’s possible.

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.

Stir Fry My Way

This is a giant, pointless, first world problems rant about food. If you’re looking for insight into tech, this isn’t a post for that.

My dad has a lot of weird control issues, especially about food.

My dad does all the grocery shopping and cooks all the food in the house. He keeps insisting my mom can’t cook and has taken it upon himself to do all the cooking in the house. He has told me that he sees it as a source of pride that he provides for his family and makes sure we have food.

I can only imagine this is why he controls things the way he does.

One thing that he does that drives me completely insane is that he won’t let anyone serve themselves.

When it’s dinner time, everyone lines up at the counter and he serves you. He cuts giant chunks of overcooked salmon and steamed brussels sprouts and deposits them on the plate and unceremoniously hands it to you.

Prepping stir fry ingredients.

Prepping stir fry ingredients.

Being handed a large plate full of food you know you’re not going to finish is really upsetting, especially when you get yelled at for not cleaning your plate. My dad will make enough food for ten people and tell my mother to eat heartily but that he doesn’t want to eat too much because he’s watching his weight. Then he yells at her for wasting the food he made too much of that he didn’t want to eat himself.

I don’t eat a lot. I never have. I also hated both salmon and brussels sprouts until I got out on my own and found out that if they were prepared properly they could be delicious.

One of the things that drove me absolutely crazy (besides being handed the wrong fork and having to fish the right fork out from the silverware drawer) was how he would dish out stir fry.

I like to put the rice on the plate first and then ladle the stir fry over the rice. That way the rice can absorb all the sauce. Dry white rice is miserable and soulless and the only way it’s tolerable is as a sponge for sauce.

My dad would never let me plate my own stir fry. He would dump the stir fry on first then place it next to the rice. The sauce would flow all over the plate and be lost forever, leaving three quarters of the rice naked and unsauced.

I know this sounds really fucking stupid to complain about how food is presented to me. I didn’t have to pay for it. I didn’t have to cook it. I should just be grateful and shut up and eat my food without complaint.

It just bothers me to see people not paying attention to details and aesthetics. Salmon does not have to be disgusting. If you cook it properly and put some garlic and salt and pepper and some butter or sesame oil it can be awesome. Cooking it for an hour with no seasoning takes almost as much work but it completely destroys the fish.

This stir fry tastes of freedom. And ginger.

This stir fry tastes of freedom. And ginger.

It doesn’t take that much thought to think that maybe if you put the stir fry on the rice it will absorb the sauce. I have known my dad for 34 years and every single time he has plated my stir fry I have had to fix and and go grab the right fork out of the drawer.

I feel like it’s almost a battle of wills. I feel like he purposely doesn’t remember that I don’t use a large fork and that I don’t like salmon and I like my rice under my stir fry. I wouldn’t need him to remember if he would just treat me like a god damned adult and let me serve my own food.

So tonight I made stir fry. I was trying to figure out how to get the rice and stir fry ratio proper when I realized that it’s my food and I can control it and do it however I want.

So I mixed the rice and the stir fry together so that none of the sauce would go to waste and I wouldn’t have to deal with the last parts of the rice being unsauced. And I ate it with the right fork and served myself as much as I knew I could eat.

I know this is a really stupid thing to complain about, but being able to mix my rice and stir fry together is one of those things I get to do that makes me feel like an adult and makes me feel awesome because I have control over something in my life and I can do whatever I want. Whenever being an adult seems too overwhelming and I worry about paying my bills or losing my job, I try to remember stuff like this to remind myself that it’s all worth it.