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.

Elementary

I have been taking some time off recently and catching up on some much needed rest. Part of my regime has been finding a bunch of TV shows I have been meaning to watch and going through them.

One of those shows is Elementary. I am a huge Sherlock Holmes addict. The recent versions with Benedict Cumberbatch and Robert Downey Jr. have been interesting, but Jeremey Brett will always be my Sherlock.

Besides updating to modern times, one of the big selling points of Elementary has been gender switching several of the more prominent characters in the Holmes canon, namely the role of Dr. Watson.

I want to talk a bit about something I feel that they did right with this that I would like to see more of in the future.

Mentorship

In the original Holmes stories, Watson is Sherlock’s roommate and side kick. He acts as the reader’s eyes and ears reporting what a “normal” person would see and generally most of the resolutions in the crimes come as a surprise because Watson does not observe what Sherlock does, which makes it difficult to guess what the resolution of the stories will be.

CBS_ELEMENTARY_406_LOGO_IMAGE_702765_640x360In Elementary, Watson starts out as a sober companion for Sherlock, but eventually transitions to being his protégé. He sees potential in her and he helps her cultivate it.

This Watson is a dynamic character. Her skills grow and evolve. This is different than the static Watson character in the original stories who is purposely kept somewhat dumb to allow the reader to enjoy the story.

A lot of this dynamic spoke to me on a personal level.

Programming is a rather new field that is primarily male-dominated. All of my mentors have been men. I often wonder if men ever get to be mentored because there is an inherent social dynamic that seems to make it easier for men to mentor women. Our society assumes that women take a subordinate role and it’s simply easier when you are a woman to approach a man and ask for help and for guidance. This can have a pleasing feeling for both people because the man feels important because he gets to instruct and train a subordinate and the woman feels important because someone she respects and admires has chosen to take time out of their life to pass on knowledge and wisdom to them that they aren’t passing down to anyone else.

When you’re first starting out, this can be a very comfortable and emotionally rewarding relationship. However, like all things, this can’t last.

Partnership

At some point, the protégé starts to bump up against the edges of the relationship. The protégé wants to be acknowledged. They want to have their new skills be recognized and leave the nest and be seen as an equal.

This can make the mentor very uncomfortable. Their entire relationship is predicated upon being the source of knowledge. Once the protégé catches up to the mentor, it can cause a lot of issues.

Elementary-season-3-promo-watson-holmesIt can make the mentor feel very upset because they feel they’ve lost their identity as the person who knows everything. Sometimes the mentor succumbs to the urge to try and cut their protégé down to keep them in the subordinate role because that is where they feel comfortable.

Other times the mentor can become upset that the protégé wants to be seen as an equal. The mentor has spent decades honing their craft and this upstart person wants to be seen as an equal without putting the work in.

This relationship is very reminiscent of a parent/child relationship. At some point you realize your parents don’t know everything. Our relationships with our parents change as we get older because they must. Sometimes our parents cut us down to try and maintain the control over us that they have gotten used to. They want us to succeed, but not too much because it threatens their sense of self worth.

A mentorship relationship is more fragile than a parental relationship because of two reasons. One, our parents will always be our parents. As much as we might argue and fight with them, there is a blood tie that can’t be broken. The second is the one I mention at the beginning of this post, the gender thing.

Professional Respect

One thing that I respect Elementary for is the fact that, as far as I have gotten, there has been no effort to force Sherlock and Watson into a romantic relationship. All of their conflicts have been able to explore the mentor/protégé relationship without having to stoop to the cliche of putting them together in a romantic relationship.

I greatly admire the fact that the writers have been able to craft a compelling story about the mentorship conflict in a completely platonic context.

1355273194905.cachedAs the person who has been in the protégé role, I want my mentors to see me as an equal. I want to show them that they were right in sharing their wisdom with me and I would like to show I can manage on my own without being dependent on them. Joan Watson is similar. She wants to be a detective in her own right.

Sherlock doesn’t want her as an equal. He wants to keep her as a subordinate. They fight over her need to be her own person and not an extension of him.

Both characters have had romantic relationships with other people, so this isn’t a generic, Aspie asexual stereotype. The relationship between Sherlock and Watson is based on professional admiration and respect. Watson gets frustrated when Sherlock won’t give her the professional respect she feels she has earned.

I have found it incredibly compelling to watch this relationship being explored. It’s a painful situation for both Sherlock and Watson. Both of them are right. Both of them have been hurt by their evolving relationship. But it’s a necessary pain for them to experience so both of them can grow and change.

Lessons From Sherlock

I spoke about mentorship at CocoaLove 2015. I wanted to give advice to both mentors and protégés. I want to reiterate some of it now.

If you are a protégé, at some point you need to step out on your own. It’s comfortable and safe to be under the wing of someone with a lot of experience, but at some point you need to succeed or fail on your own. You will stumble a lot, but that is how your mentor learned. They stumbled and have given you advice about how to avoid the same stumbles they took. You will learn best through your own stumbles than you will hearing stories of your mentor’s stumbles.

If you are a mentor, please understand that this is a temporary situation. Don’t become so attached to the idea that you have to know everything that it creates a situation where you lash out at your protégé when they want to be seen as an equal. Your protégé has a lot of affection for you that can quickly turn into a toxic situation if you put them down in an effort to keep them subordinate to you.

The best way for a mentor/protégé relationship to go is if both parties go in wanting the protégé to become independent. If you’re a mentor and your protégé doesn’t seem to want to walk on their own, try to push them to take risks and fall and learn from their experiences.

Above all, remember that part of the reason you both entered into this relationship was because you like and respect one another. Just because your relationship changes as the protégé grows in experience doesn’t mean those feelings go away.

Why I am Trying to Give Up Drinking

Anyone who follows me on Twitter or knows me in real life knows that I am quite fond of my evening glass of wine. It’s at a point where it’s almost a personality trait, along with my pugs.

I am vaguely aware of the fact that it’s not really a good thing to be known as the person who drinks a lot. I had the problem of thinking that people like Dorothy Parker and Lucille Bluth are super cool and have lead me to attribute this as a positive personality trait.

I wasn’t always like this.

How I Started Drinking

The first time I ever got drunk was at my bachelorette party. It was a very interesting experience for me. It felt like having a migraine only it didn’t hurt. It put me into this weird, almost meditative state that I found very stimulating.

I never partied when I was in high school or college. I used to spend my Saturday nights watching public TV with my parents. When I was in college I would spend all night alone in my apartment doing cross stitching while watching Law & Order marathons.

I felt kind of like I missed out on my youth and I wanted to make up for lost time. I figured I would get tired of it and I didn’t worry about it too much.

I went back to school to learn programming. I had a lot of anxiety about how I was going to find a job because I knew that the tech industry was very youth-centric. I knew as a woman in my 30’s with no experience it would tricky to break into the industry. I knew my best chance was to work my ass off and try to increase my skills as fast as possible. I stopped cross stitching and doing all the things I used to do to relax. The easiest way to get myself to relax was to drink. I half heartedly tried quitting a few times, but I was so stressed out that I figured I would deal with it later.

Then my marriage started falling apart.

The last year I was married I gave myself alcohol poisoning five times. Two weeks into my first job I was out for New Year’s and I drank so much so quickly that I could not keep water down for a few days. I didn’t want to tell any of the young guys at my job that I got so drunk I couldn’t keep water down, so I just kind of got through it.

After I left that job I worked from home and worked on a book. I used to keep boxes of wine outside where they would freeze overnight. I would bring them in and by the time noon rolled around the wine was thawed enough for me to drink it.

After the divorce I went through a massive depression that I did not expect to go through. I had to commute sixty miles a day to and from my job. By the time I got home I was so spent that all I could do was open a bottle of wine and drink in the bath tub. I deluded myself into thinking I didn’t have a problem because I stopped giving myself alcohol poisoning.

I am painfully aware that these behaviors that I am describing are really unhealthy. But I was stressed out and depressed and this wasn’t at the top of my list of things to worry about.

Why I Am Going to Stop

I am honestly trying to remember what triggered this most recent decision.

The last few months I haven’t been able to go for walks because of the weather. I used to walk 45 minutes a day. It was therapeutic. I wasn’t doing it to lose weight, it was just to get away from the computer and try to clear my head.

I hit 34 and started noticing things like lines around my eyes. I feel like I have put on a bunch of weight over the last few months. I bought larger jeans that used to be loose that are now not anymore.

I recently was able to start doing my walks again recently. I realized that even though I was jogging two miles a day I probably wasn’t going to lose any weight because of my drinking habit.

For some reason, this really bothered me. I don’t want to be a person who is obsessed with losing that last ten pounds, but I am at the point where a bunch of this crap is really bothering me.

I have cleared out enough other emotional baggage from my queue that I now want to deal with this.

I don’t want to feel this way anymore. I have had enough periods of my life where I was out of shape and not feeling particularly well. I know that inevitably at some point I am going to be old. It will be harder to lose weight than it is now. My joints will bother me. I can’t keep this from happening, but I can push it off a while longer by making changes now. It’s better late than never.

What I am Trying To Do

My initial thought was that I would do things in moderation. I would limit myself to one glass of wine a night. I then realized that was not going to work. I always think I will have one, but then after the first one I feel really good and the evening is still early, so I have more.

I also decided not to try and replace alcohol with another sweet beverage like fruit juice. I want to be healthier and lose weight, so replacing alcoholic sugar with non-alcoholic sugar was not a great idea.

I am trying to go cold turkey on most sugar.

I did this a few years ago. I drank nothing but water for like two weeks to retrain my palette not to expect everything it encounters to be sweet.

I am restraining my beverage intake to just water, sparkling water, and tea. I am putting some honey in my tea in the mornings because I am also putting lemon in it and I need something to ameliorate it. I know honey is sugar and sugar is bad for you, but I am confining it to that one thing and I have no allusions that it’s healthy, so don’t lecture me.

I am taking this one day at a time. I know from watching people fail at diets that I am going to have bad days. I will have days where I simply can’t deal with it and I will drink. I will not throw in the towel and give up on the experiment. I will just try to do better next time.

Things I have Notice So Far

I am only on my third day of this, so in a few weeks this might be a laughable blog post. But I have noticed a few things so far.

Nights are Boring

My routine used to be that I would finish work, take a bath with a glass of wine, get warm and comfortable, then go to bed.

I can’t do that anymore.

I used to think that after I got done with work, that I was spent for the day. I would basically drug my brain to get it to relax and calm down so I could sleep and work the next day.

The last few days I have realized I can take a bath and be refreshed enough to work on something else that I actually want to do.

It’s really disconcerting. I know I am tired and I need to sleep, but my brain gets a second wind.

This might be a temporary thing and I will probably crash in a few days. At that point I need to figure out a better way to relax. I never thought I would forget how to relax. It was so hard to do any work when I was younger that I never thought I would be stuck in the mind set that I had to work all the time.

Sugar Withdrawal Really Sucks

I think part of the reason I was drinking as much as I did was because I trained my brain to associate sugar with work being over.

I knew that alcohol had a lot of sugar in it, but I didn’t think about the fact that I was slowly increasing my intake over the last few years.

Yesterday I wanted to stab someone for a drink, not because I craved the alcohol, but because I craved the sugar. I ate a few pieces of dark chocolate and I felt better and the craving went away.

The long term goal isn’t to replace one source of sugar with another. I know that cutting back on all sugar is the goal, but it takes some time to get there. At least the chocolate provides some satiation. Alcohol is an appetite stimulant. I will not be hungry, but then I will have a glass of wine and suddenly be famished. Cutting back on the alcohol not only cuts those calories, but also all the ones I would eat after getting the munchies.

I am hoping the cravings get better the longer I stick with this.

Not Exercising Bothers Me

My Apple Watch got pretty passive aggressive with me over the winter because I wasn’t going on my walks. It was annoying, but I didn’t feel super compelled to do anything about it.

The last few days I have been crawling the walls if I can’t do some kind of exercise.

I wanted to go for a walk yesterday and I almost jumped out of my skin trying to find a time I could get out of here. It was too cold to walk, so I did a strength training exercise for half an hour and even that didn’t feel long enough.

Sitting at my computer today drove me crazy. I am going to try to find a way to do a standing desk of some kind. It’s harder to do with the retina iMac than it was with the laptop and the robotics boxes.

Moving Forward

For me, the biggest test of how this will go is when I got to my first conference this year in two weeks, RWDevCon. I need to decide if I am going to forgo drinking altogether at that event or try to limit myself to one drink. If it were right now I would forgo it completely, but I will see how I feel then.

I wish I could see this in an optimistic light. Yay, I can work on side projects after work. I can work out and lose weight and be healthier. This is going to be super awesome.

But I can’t think of it that way. This is going to be a huge and difficult adjustment. I know I used to live quite happily not doing this every night and I can probably do that again. But it’s going to take some time and effort to relearn how to relax so I don’t burn myself out. I feel like I have taken the fail safes off of myself that kept me from doing too much. I knew I could force myself to relax by basically drugging myself. Now that I am choosing not to do that anymore, I am not sure how I am going to function. I guess I will find out.

Are you a Developer or an Engineer?

Last month my boss, Daniel Pasco, posted this thought on Twitter:

developerEngineer

Developers focus on making great code.
Engineers focus on making great things.

This really struck a chord with me. I have observed a few behaviors that I didn’t really have any context to express and I feel like this quote sums up a lot of things that trouble me about the programming community.

Hipster Coding

“Nobody goes there anymore. It’s too crowded.”
– Yogi Berra

I went back to school in earnest to learn programming in 2012. I wasn’t sure what I wanted to do, but I knew I wanted to find whatever would work best for me in the long run. I initially went for Java because I knew there was a lot of demand for it, but I didn’t realize there was also a lot of supply and it was difficult to find an entry level Java job because most of them demanded 3-5 years of experience. I couldn’t break through the layers of bureaucracy and I just stopped trying.

I initially got involved with the Ruby community. I knew a lot of people who were active there and it seemed like it was the new up and coming thing.

I would talk to people about how to get into Ruby and I would be asked what open source projects I worked on. I didn’t really understand open source and would ask for help about how to get into open source. Their looks would immediately change to a combination of disdain and pity and they would stop talking to me because I wasn’t a contributor.

I struggled with this a bit trying to break into Ruby, only to discover that all the people who had been doing Ruby had moved on to Clojure. Then they moved on to Haskell. I think they were interested in Swift for a bit, but I have lost track of whatever the new hot language is. Might be Go…

I think a lot of people feel like they missed out on the Gold Rush of the iPhone. I know that I do. By the time I started taking iOS programming classes in 2012, the whole point of having an app out on the store was to use it as a resume builder to find an actual job. We were being prepared for the world as it exists now/over the next few years where there is less contracting and more enterprise development.

I feel a sense of chasing after something that doesn’t exist anymore. We still have the dream of writing a killer app and making mad bank, but that is growing more and more difficult. I feel like any time Apple releases a new piece of hardware, like the Apple Watch or the Apple TV, people feel like they need to immediately mark their territory on it because they think that if they get there first, they can strike gold and move on before everyone else gets there.

This has created a situation where we have platforms that seem to be abandoned by developers because there is something newer and shinier that has come out and everyone wants to be the first one there.

I Have a Screwdriver and Everything is a Screw

My introduction to programming was back in 2008. I was kind of loafing around unemployed because I had no idea what I was doing with my life. My dad would take me to work and I would go and hang out with the weird IT guy. My nickname for this guy was Jesus because he looked like Jesus if Jesus wore a shirt and tie.

He was really into programming and told me that learning programming was a valuable skill. He set me up with a book and a laptop in the corner. He showed me where the Terminal was and taught me how to write code in TextEdit and compile it on the command line.

All of this was done in Perl.

The book he gave me was the Llama O’Reilly book from I think 1998. He told me that the language was stable and didn’t change, so it was okay that the book was old.

I started telling people that I was learning Perl and I got horrified looks from people telling me no one uses it anymore. I was told to learn PHP because that was the future.

I talked to Jesus about that, and he told me not to bother learning PHP because everything that I want to do I can do in Perl. Perl does everything.

Replace “Perl” with “JavaScript” and that is exactly what we have now for a fairly large portion of the programming community.

I am not going to get into an argument about whether JavaScript is “real” code or not. That isn’t the point I am trying to make. JavaScript is a tool. It has its uses. If I want to write a website, I can’t do that in Swift with the Cocoa frameworks.

What worries me is that I see a lot of people treating JavaScript the way my friend Jesus treated Perl. It’s the thing they know, so they want to make it work for every single possible thing that exists.

There was a great blog post I read recently saying that the state of web development is static right now. Large companies like Yahoo are basically rewriting their websites over and over again in whatever the new hot JavaScript framework is.

I think I read recently that someone created a framework on top of JQuery, which is it’s a framework on top of JavaScript. I think someone tried to create a JavaScript framework to do server back end work. It’s a web language! It was designed to do one thing and one thing well. It’s being convoluted into weird, abstract shapes because people don’t want to learn new things.

Fleeting Fame

fleetingFame

“ObjC culture carriers were people who’d been building products for years using it. Swift culture carriers see a chance for fleeting fame.”
– Graham Lee

When Swift first came out, there were a lot of prominent members of the programming community that were incredibly anti-Swift. They had invested 15 years in Objective-C and saw no reason to pick up this goofy new language and get knocked back the the beginning of the board with everyone else.

A lot of us scoffed at these people and told them to get with the program because Swift wasn’t going anywhere.

It’s nearly two years later, and we’re now seeing that a lot of these people have come to terms with the fact that this language isn’t going anywhere.

This doesn’t mean that they are sitting back and figuring out the language. On the contrary. Many of them are just as loud and opinionated about it as they ever were, but now they’re actually trying to use it.

I have noticed a shift in the last six months or so where the people talking about Swift aren’t the early adopters who were coming from Haskell backgrounds who wanted to share their functional programming knowledge. Instead, we’re getting people who feel like they need to have an opinion about Swift to feel important.

Lots of people want to post tirades about how Swift should be done. They don’t want to listen to people who have been working with it for the last few years. That defeats the purpose. They want to be the one who can go and write a convoluted piece of code to break the compiler and have everyone tell them how clever they are.

A lot of the sense of community that I felt back when we had Objective-C has evaporated. Back then, new people could enter the community and have seasoned professionals give them a hand with understanding things. Now, everyone feels like they have to establish themselves as an expert and no one is willing to ask actual questions that would make them better Swift programmers. Their shouting is drowning out everyone else’s thoughts and opinions and making it even more difficult for beginners to actually learn Swift.

How We Should Be Doing Things

I worked for Brad Larson for a year. We spent that year porting a legacy code base from Objective-C to Swift. There were two important reasons for doing this:

  1. The code base was fragile and at a point where we could not go in and add or change anything without breaking it.
  2. There were problems that we had encountered over the years that would not have happened if we wrote the code base in Swift.

There was a point when I was working with Brad where he showed me this crazy code that was full of functional programming stuff. I felt very depressed because I didn’t think I could ever come up with something that interesting or complex. It bothered me, so I kept talking to him about it.

After doing this for a while I figured out the right question: What problem is this code solving?

When he started to tell me about how unsafe our previous code was because of the constraints of Objective-C. He had spent years trying to figure out a better solution for his problem and he understood what needed to be done intimately.

Brad is an engineer. He didn’t set out to use all the new toys in Swift because he was looking for an excuse to use them. He had problems he needed to solve and wanted to find the most elegant way of solving them. That solution just happened to include a lot of functional programming concepts. I think he actually rewrote the code a few times because he realized there was a better way to solve the problem.

Code exists as a tool to solve problems. It isn’t an end in and of itself. You can write the most insane Rube Goldergian piece of code imaginable that will work, but why bother?

Writing an app or an open source framework or anything is a little like adopting a puppy. It’s a long term commitment. I don’t think that the people who released the first apps for the iPhone realized they might be on the hook for supporting them for close to a decade. No one anticipated that.

Now that we have a better understanding of that, it’s important to spend time thinking about what your app will solve and how to maintain it long term when it stops being cute and starts peeing on your floor.

One of my goals this year is to release an app. I have done other projects like books and talks, and as such you can take what I say with as many grains of salt as you want. I have been hesitant to produce anything because I worry about the long term maintenance of what I am doing. I know I should just put something out there and learn from my mistakes. We’ll see.

I want to find one, solid piece of functionality that I want to see out in the world. I want to start with whatever the smallest bit of that is and work out from there. I want to keep the scope small and make sure that each piece works and can be built off of to add functionality.

I know that I want to be an engineer. I want to solve problems. I don’t care if no one buys my app or if it is just a tree that falls in the woods where no one can hear it. I just want to know that designed and implemented something well. The problem I need to solve right now is getting over my fear of fucking up and to just do something.