Functional Programming in Swift: A Chapter by Chapter Analysis

I preordered the book ”Functional Programming in Swift” shortly after it was announced. I got a chance to meet Chris Eidhof at 360|iDev, which was a really awesome experience. He really knows his stuff and he is a wonderful person.

However, I have found it has been a little difficult to get into the Functional Swift book. I know there is a lot of really important content in here that I think is vitally important for people to be aware of, but I feel like it is being presented in a slightly obscure manner. This is not a beginning programming book and it can be a little difficult to break into.

I am trying to write more technical posts on my blog. I wasn’t doing this for a while because I was working on my book ”iOS 8 SDK Development.” I was so stressed trying to learn all the stuff we were writing for the book that the thought of going and writing technical posts for my blog was a little discouraging.

Now that the book is pretty much completed and I don’t have any conference talks to prepare for a while, I would like to spend more time writing technical blog posts. One series of posts I would like to do is analyzing the Functional Programming in Swift book.

I was a beginner not too long ago and I know how incredibly daunting it can be to be confronted with a bunch of technical stuff you don’t quite grok yet. I know that Chris is passionate about functional programming and I hope that he will not be offended by my efforts to spread the word about his work and to try to sugar coat it a little for people who are not as far along as the target audience for his book was.

I am going to try to tackle a chapter every week or two. If I am slacking on this, please harass me on Twitter so that I know that people are actually reading and getting some use out of my posts.

If people have things they would like me to write about, please hit me up on Twitter about it. I am happy to go out and figure something out that people want to learn more about.

I hope that doing this analysis will open new people up to things in Swift that weren’t possible in Objective-C. I know that right now it is very hip to hate on Swift. I was rather unhappy about Swift when it was first announced because I was under the impression that many things we do were going to be abstracted away. I didn’t like Ruby on Rails because you could write three lines of code and have a functioning website without understanding anything going on under the hood. I am an incredibly curious person who wants to have a deep understanding of how things work. When I was able to shift my perspective on Swift I became very excited about learning a new way of doing things. I hope that other people will do the same when they become familiar with how to effectively write Swift.

If you want to know what my current long-term project is, check out this blog post from my boss, Brad Larson. So far, we have not found anything we have wanted to do that could not be done more efficiently in Swift. We have had to use a few work arounds with the compiler, but we have not encountered any show stoppers.

I have been disappointed with all of the people who are claiming that Swift is broken and that it shouldn’t be used for serious projects. If Brad and I can use Swift on the Mac to communicate with an electronics board through a serial port, you can figure out how to use Swift to communicate with an API. It is just a question of working with the language, not fighting against it.

I hope over the next few months I can help others learn how to work with Swift. I think that is is a promising language and I hope that people can learn to open their minds to new ways of thinking about how to program.

Zen and the Art of Analog Synthesizer Maintenance

2014: The Year of Magical Thinking

You can take a picture of something you see
In the future where will I be?
You can climb a ladder up to the sun
Or write a song nobody has sung
Or do something that’s never been done

Last week I was in Atlanta for CocoaConf Atlanta. That conference was the cap on one of the craziest years I have ever had.

Exactly a year ago I had dropped out of school because I was having a nervous breakdown. I knew I needed to find a programming job but I had no idea where or how I would do so. I was completely broken and I had no hope that anything would get any better. The only thing that got me through that period of my life was the faith that something would happen.

I spent a lot of my time in 2013 sowing seeds, hoping one or two of them would take root. I attended several conferences and met a lot of people. Two of the people I met were Jonathan Penn and Chris Adamson. Jonathan mentioned he was writing a book and wanted to know if I would tech review it. Being a tech reviewer is an unpaid task, but I like and respect Jonathan, as evidenced from this blog post.

The editor for Jonathan’s book is Rebecca Gulick, who also happens to be the editor of my book with Chris. When he was looking for a coauthor and he mentioned me to Rebecca, she already knew who I was.

Before I was approached about writing the book, I reached out to Brad Larson about learning OpenGL. I knew I wanted to be a graphics programmer, but that it takes a long time to learn, especially for someone like me who didn’t have any programming experience until two years earlier. My reaching out to him resulted in me having the chance to work with him on a contract project for Digital World Biology. Even though we were working on this project, I hadn’t met Brad in person.

I happened to meet Brad in person a week after I signed the contract to work on the book with Chris. I didn’t know it at the time, but the book I was working on used to be the textbook used for the iOS programming class at MATC. That definitely made an impression.

Six months ago, I had a couple of conferences that I knew I would be speaking at. I wound up doing twice as many as I thought I would. My first conference talk was less than a year ago. This year I spoke at ten conferences total.

Between writing a book, traveling all over the United States, and getting a job with one of the best programmers in the world working on robots, my head is spinning. There are so many things I thought I might get to do a few years down the road. I just wanted a job to get some experience so that maybe one day in like five years I would be able to work with someone of Brad’s caliber. I hoped that maybe I would be able to work on a book in three years.

I looked back at the goals I set for myself at the beginning of the year. No, I didn’t wind up starting a podcast or buying my MIDI wind controller (however that is on the horizon). I set out six long-term goals that I wanted to do in the next 3-5 years. I have knocked half of those off in 2014.

Depression

Oh brother I can’t, I can’t get through
I’ve been trying hard to reach you, cause I don’t know what to do
Oh brother I can’t believe it’s true
I’m so scared about the future and I wanna talk to you
Oh I wanna talk to you

I am going to be honest. I had absolutely no idea how to proceed from here. Part of being alive is to strive to go further and do better. Once you get to where you want to be, what do you do? I always feel a bit of a disappointment when I finish my cross stitching projects because I keep feeling like I will feel a sense of accomplishment, but it’s always a letdown. I enjoy the process of making the thing more than the joy of accomplishing them.

Part of my excitement about these long term projects was the anticipation of all the neat things I would get to do between then and now. I was really looking forward to all the neat stuff I would get to do and all the time I would get to spend working on my craft.

None of that happened.

Things happened so fast that I haven’t had a chance to enjoy anything I have been doing. I haven’t had a chance to stabilize the ground under my feet. I haven’t had a chance to really dig deep into something than interests me because I am running around like a chicken with my head cut off rushing to the next thing.

I have honestly been depressed. I feel like I shouldn’t be depressed and that I am a terrible and ungrateful human being because I got everything I ever wanted. Not only did I get everything I ever wanted, I got it way faster than anyone else. I have it made and I have no idea how to get up each day and deal with my life. Plus I feel like I can’t talk about it because I know that there is absolutely no reason for me to be unhappy.

I had a lot of conference talks lined up for 2015 and I was thinking about doing a lot more stuff because I feel like I worked my ass off sowing these seeds. I hoped that one or two would take root but twenty did. Last year I had nothing but my stubbornness and refusal to quit and now I have the situation of having too much. It feels wasteful to me to squander opportunities I would have killed for a year ago.

But I have to.

It has been a tremendously difficult decision, but I am not doing any conference talks for at least six months. I do not plan to attend any conferences during that time either.

I love this community. I have made so many friends in so many places. I spent a lot of my life feeling like a freak who never fit in anywhere. Being welcomed into this community and treated with respect has meant more to me than I can ever express. One reason it took me so long to make this decision is because this community means so much to me and I want to make sure other people like myself have a chance to join and be welcomed as well. The Klein family has changed my life and I can never express to them what their kindness has meant to me.

I feel like my life is moving too fast and I need to take a step back. I need to focus on getting my feet back under me. I need to focus on doing my job well. I need to focus on sharpening my tools. I need to find something that gives me back the joy and meaning I had in my life back when I was struggling to break through.

The Zen of Sound

Are you lost or incomplete?
Do you feel like a puzzle, you can’t find your missing piece?
Tell me how do you feel?
Well, I feel like they’re talking in a language I don’t speak
And they’re talking it to me

Last year I felt like I had to spread a wide net to catch one opportunity. I spread myself very thin doing a lot of different things to try and get myself enough exposure to find a job. I am pulling back on a lot of these things.

Looking back at my long-term goals, the half that were not fulfilled all had to do with audio programming. I love sound. I wanted to be a sound designer before I became a programmer. Last year I wanted to write a synthesizer app as a portfolio project, but I had too much noise in my life that I couldn’t focus the way I needed to for this project.

Now that I can pull back on a lot of the things that are taking up my time, I can focus my free time on projects that personally interest me without worrying if they will get me a job.

I spoke to Brad when I began to feel overwhelmed about what I should focus on for the next year or so. He advised me to think of something that doesn’t exist and to try and make it happen. He talked to me about taking an impossible task and breaking it down into small, discreet parts that can each be accomplished individually.

Audio affords me a lot of opportunities to explore things that interest me. I became interested in electronics after I began working with physical hardware at my job. I also became interested in math after I started working with GLSL. Additionally, Apple introduced not only Swift, but AVAudioEngine. There have been audio programmers on Twitter who do not think you can do audio programming in Swift because Swift is not built on C.

When I tried to tackle this last year, I had no idea what I was getting into. I also placed a lot of chips on me being able to pull this thing off that caused me a tremendous amount of anxiety.

I am not going to make that mistake again.

I know it isn’t necessary, but I want to build a physical synthesizer before I tackle a software one. I want to get a feel for how all of the pieces fit together.

I also want to spend more time making music with my tools. You can’t really create a piece of software for a group of people if you don’t understand how they are going to use it. I used to play around with this stuff all the time years ago, but it’s been too painful to work with until recently.

I am not going to disappear. I am going to catalog my journey here on my blog. I hope that I can figure out how to do some things that will be helpful to the community at large. I plan to take everything I am learning over this time and present it at NSScotland, which I am still going to speak at. I could not let down Alan Francis again.

I hope that anyone reading this can understand and respect my decision. I hope that I am not the only person who has felt this way and that reading about my depression can help someone else. I am in this career for the long haul. 2014 was a sprint. The journey is a marathon. I can’t keep going the way I am because I won’t make it to the end. I am going to miss all of the amazing people I have met over the last year, but I need to take care of myself and focus.

Thank you everyone for an unbelievable 2014. I am looking forward to coming out of my self-imposed isolation a happier and healthier person. God bless and keep all of you. Don’t have too much fun without me.

You Kids, Get off my Virtual Realty!!

Over the weekend I was surprised with a gift I didn’t think I would ever get: New ports of a bunch of my favorite games from when I was in my impressionable tweenaged years. First among these games was “Sam and Max Hit the Road.” Closely following this cultural touchstone were “Indiana Jones and the Fate of Atlantis” and the “Legend of Kyrandia” trilogy.

I became acquainted with the point and click adventure game genre through my brother. When I was in junior high my dad bought my brother a computer for Christmas and bought me a wooden chess set. I am not bitter about this. Much…

Anyway, he was working through Day of the Tentacle. I would walk by and wonder what the hell it was he was playing. It looked weird and creepy. It is weird and creepy, but at the time it didn’t look weird and creepy in an endearing way.
Day_of_the_Tentacle_Founding_Fathers
One day I got curious and started asking him about what was going on. He was stuck on a puzzle in the game but he couldn’t explain to me what had happened up until then, so I went on the computer and started my own game.

Holy crap, this game was amazing! There are so many weird and surreal things going on this game that it may have irreparably warped my sense of humor. Possibly more so than it was warped before. A game with time traveling port-o-potties, a valley dude hanging out with George Washington, and a plot point that requires you to freeze and microwave a hamster is more than a little sick and twisted.

We worked in parallel on our game. One of us would make progress and we would share it with the other person. It took us a really long time to get through that game. It feels like it took months. It might have, I really don’t remember.

When an artifact comes along, you must whip it!

When an artifact comes along, you must whip it!

After polishing off Day of the Tentacle, we worked through Indiana Jones and the Fate of Atlantis. We thought there was only one path through the game and we had screwed it up by ditching Sofia halfway through the game. After working through the game a few times we realized that there were actually three successful paths through the game. That got us really excited to go through the game and replay it a few times to figure out how many different ways the game could be won.

I did want to make a brief mention of my bewilderment about the death of the Indiana Jones franchise. Fate of Atlantis proved that Indiana Jones could be a great franchise where you have a nice formula that is infinitely customizable without getting overly stale. I am saddened that the last few films felt like they had to do like character development or something. Indiana Jones totally could have been James Bond with archaeology. Such a missed opportunity.

The Tunnel of Love from Hell!

The Tunnel of Love from Hell!

It took us a lot longer to get through Sam and Max. There was a point in the game where you had to go into the Tunnel of Love and hit a specific place on the wall at exactly the right moment in order to find the Mole Boy who wanted pecan flavored candies. We went crazy trying to get past this point in the game. We knew something was there, but we never hit the wall at the right moment. I think we worked on this game on and off for months. I think we restarted the game just to be able to play the game up until that point because we enjoyed the twisted sense of humor so much. In fact, we replayed up until that point so many times that there is a full two thirds of the game I barely remember because I played it all the way through just once or twice.

I don’t remember which one of us got past that point or if we did it together. I do remember we were both elated that we could finally continue on with the game and we celebrated that moment together.

The summer between seventh and eighth grade I encountered two games: Myst and Legend of Kyrandia. Legend of Kyrandia was another SCUMM-based adventure game created by a company other than LucasArts. Our school had a summer enrichment program that many of us quickly realized meant that we could hang out at school and play computer games all day.
the-legend-of-kyrandia-screen-4
I don’t remember who found Legend of Kyrandia, but it very quickly became a favorite of everyone in the group of about ten of us. We were obsessed with this game. There is a point in the game where you get lost in these caves and if you don’t light them properly you get eaten by animals. We all worked together to piece together a map of the entire cave, along with all the objects that are hidden that you needed. When someone would make progress in the game we would quickly spread that new information to everyone else in the group. It took us a few weeks to work through the game and it worked as something of a bonding experience for all of us that immediately was forgotten when school started up again.

My experience with Legend of Kyrandia was vastly different than my experience with Myst. I had to work through that game alone. I played it a lot because I thought the graphics were pretty. Myst is in fact one of the things that got me interested in 3D graphics and texture mapping. I really wanted to know how the worlds were made. Unfortunately, I didn’t get as far into the game as I would have liked. I didn’t realize you could leave the island until I bought a strategy guide. I thought you were just supposed to wander around and look at all the pretty scenery. I couldn’t understand why everyone thought the game was so amazing. After figuring out you could leave, I was far more excited about the game.

At this point, you may be wondering why I am rambling on about my lost childhood gaming experiences. I have a point. If you read through this spiel, you will notice that not once did anyone ever check the Internet to see what to do when we got stuck. If we got stuck, we just didn’t progress in the game.

Pro tip: Don't stick your hand in a crack in the wall on an alien planet. Just don't.

Pro tip: Don’t stick your hand in a crack in the wall on an alien planet. Just don’t.

The only games I was able to get all the way through were ones that I worked on with at least one other person. I found a simulated version of Legend of Kyrandia and I tried working through it on my own, but I quickly got stuck in the caves, got bored, and just downloaded a map off the internet.

I find it mind boggling that my brother and I literally spent YEARS when I was a teenager working through these games. We would be stuck on puzzles for months. Yet we would sit there and just keep trying anything we could think of to get through the game.

When was the last time anyone ever spent a month working through a game? The last game my husband bought was Legend of Zelda: Skyward Sword. He spent about a week playing through the game, beat it, then threw it in a box and forgot about it.

Back when I used to work at Target I would bring my Nintendo DS to work. I had Lego Harry Potter to play on my breaks to blow off steam. I would only play that game when I was at work as something to help me get through my day without going insane. After I had been working on it for a month one of the back room guys came over and said, “Wait, you’re still working on playing that same game?!” It’s inconceivable that anyone would spend a month playing a game without either giving up or beating it.

I don’t pretend to be any kind of gamer, but are games easier than they used to be? It seems to me like people used to spend weeks or months working through games. I read a blog post by a guy talking about working through one of the first Zelda games by coming home from school and being glued to the TV for weeks.

Waiting for the smoke monster to show up with the polar bear.

Waiting for the smoke monster to show up with the polar bear.

I am kind of sad that I don’t really see games out anymore that take months to get through. I am also really sad that I don’t get to work through a game with other people anymore. That summer working through that game was a really awesome experience. I have felt rather isolated from my classmates in school. I always did group projects on my own. Having an experience where we all worked together on something that we were excited about was a gift.

I don’t have this experience of working through games anymore, but I have found that I can get something like it when I talk to people about code. Right now my boss is working through functional Swift programming using Haskell design patterns and syntax. Sitting with him looking at the stuff he is doing and trying to catch up so that I can help out is surprisingly emotionally fulfilling.

I wonder if people who grew up with the internet will ever get a chance to work through a problem with someone where the answer isn’t instantly available online. One reason I am finding working on the Swift problem so exhilarating is that there isn’t a “right” or “wrong” way to do things yet. Coming from a school background, I’m used to the idea that the person who knows more than I do has a right answer to the problem we are supposed to solve for class. Being in a situation where that answer isn’t known yet is somewhat freeing. It gives these things we are doing meaning. We aren’t just doing mind games or mental exercises. This is it. This is why I learned to code, to solve a problem.

Working through those silly adventure games really gave me tenacity to keep working at something that I knew there had to be an answer to, even if it wasn’t immediately available. It also taught me how important sharing knowledge and collaborating is. None of us would have gotten through the game in the time we did if we hadn’t worked together and pooled our knowledge.

Giving information to someone who doesn’t have it costs us nothing. Working together we can do things we couldn’t do separately.

I haven’t opened any of my games yet. I am afraid I won’t remember how to do anything and I won’t have anyone to play them with. Maybe I’ll find someone to play with. Maybe not. Either way, I’m sure they will be harder than I remember them being.

So are we, Bernard. So are we.

So are we, Bernard. So are we.

Your Pipeline is Broken

Yesterday I had lunch with a friend of mine who is smart and talented enough to have gotten an internship at Apple and is planning to go out there for a permanent position at the end of the school year.

We were catching up about all the stuff we have been doing over the last few months and I can’t remember how this topic came up, but she mentioned to me that a company in town was desperately anxious to hire every mobile developer our school produced.

She is not the first person to tell me this. I am very puzzled and confused by this information because it does not correlate with my own experiences.

I started in the mobile development program two years ago. I was at school as a mobile development student for three semesters. Each semester we have an IT Job Fair where local employers supposedly send representatives to connect with students looking for jobs or internship.

I noticed that every semester I went to this job fair it got progressively worse and worse. At the first job fair people would actually talk to you and answer questions. The second one people would avoid eye contact with you and were incredibly unhelpful.

I went to the last one purely out of spite. I simply wanted to see just how bad it had gotten over the last year. I was not disappointed.

Each booth has a sign on it saying what they are looking for. I found one company looking for a mobile developer. Every other company that was looking for developers was looking for someone who knew VB.Net. VB.Net was eliminated from our curriculum around the time I went back to school full time. No one there had ever even taken a class in it. There was also a shocking amount of people looking for COBOL programmers even though I have no idea how long ago that language was eliminated from the curriculum.

The only people even looking for Java, which I had assumed was a pretty safe language to learn, were recruiters. Yes, there were recruiters at the job fair. I guess they really don’t want to miss an opportunity to capture someone before they know better than to hand over their soul, I mean, resume.

So, back to this company that is supposedly desperate to hire people. They have a booth at the job fair. Back when I was just starting out I talked to people there about what I should study if I want to work for their company. They handed out data sheets and seemed happy to talk to me. At this last one there were two women at the booth gossiping. I was feeling like a troll, so I went over to talk to them. They ignored me. Having nothing better to do and being curious about what was going to happen, I stood there and watched them while they tried to pretend I wasn’t there.

When it became obvious that I wasn’t going to leave, one of them sighed and snapped at me, “What do you want?”

I told her I was looking for a job. She sighed again and rolled her eyes at her friend. She said, “Yeah, we don’t hire people. If you want to work here, go over there and talk to Robert Half and leave us alone because we are busy.” She then went back to ignoring me and picking up her conversation with her friend.

Aw, isn't that cute. She wants a job. Doesn't she know she has to fill out form BZ/ST/486/C and defeat the Minotaur to get a phone screen?

Aw, isn’t that cute. She wants a job. Doesn’t she know she has to fill out form BZ/ST/486/C and defeat the Minotaur to get a phone screen?

Yeah, I am not talking to Robert Half. Robert Half is evil and incompetent. Actually, I could replace their name with any number of other recruiters in Madison and it would still be true.

I have spoken to recruiters (back when I didn’t know any better) and I have been told that no one in town wants entry level developers. No one wants to hire someone who just got done with school. I was told that no jobs ever came up, but if in the unlikely chance they ever did, I needed to sign an exclusivity contract with one of the recruiters to even have a shot at it. I was speaking to about five recruiters as part of my unemployment obligations back before I decided to go back to school full time and each recruiter was only interested in getting dirt on what the other recruiters were talking to me about.

I stopped looking for jobs on job sites because every job posted is a fake job created by a recruiter to trick someone into sending them a resume so they can fulfill some quota. I have seen the same job posted over and over again, but it someone miraculously never gets filled.

I have tried applying for a job directly at this company. I have applied for jobs that I fit perfectly and I have never made it past the HR screening criteria to even receive an email written by an actual human being.

I found it was easier to get tech conference talks accepted, get a book deal, and find a job at a weird esoteric small company that builds fluid printing robots that is run by one of the best programmers in the world than it was to even get to first base with this company in town that is supposedly desperate for developers.

I thought that maybe things had changed since last year. Things in tech change very rapidly and it was possible that this company had gotten their heads out of their asses and actually fixed their problems.

I asked a current student if he went, and he verified my tale that no one there was actively seeking out mobile developers. He saw lots of people looking for COBOL, but no iOS or Android.

I am actively telling people attending school not to bother with this company because it is too hard to perforate the layers of bureaucracy protecting it from ever actually hiring a competent person for work they supposedly need done.

People, your pipeline is broken. I believe that it is possible that the executives talking to our school actually want to hire some of our students, but they are setting up impossible obstacles to prevent us from ever actually getting there. Sending representatives from your company to a job fair to basically tell anyone who wants to work for you to fuck off is not going to convince anyone that they really want to work for your company.

I guess I should thank these guys for making it so hard for me to get in. When I went back to school in 2010 I wanted to work there and have a nice, stable, mundane existence. I think if I had done that I would be bored to tears. Things worked out fine for me. I guess maybe they were doing something right by trying to keep people like me out. I will see what I can do to help the other people like me avoid being trapped by the endless recruiter bureaucracy.

My plea to the current students studying programming: Don’t fall into this trap! This leads to misery and despair. Build a portfolio. Reach out to experts in your field. Go to conferences. Do things that don’t pay you a lot of money immediately but build your skills and establish your credibility. Push yourself to do things that are hard and be comfortable with feeling that you are stupid. Be willing to learn better ways to do things. For the love of God, do not give your resume to a recruiter! They will hound you to the grave with four month contracts in Boise, Idaho programming in a language that died ten years ago. Choose your own adventure.

Don’t Tread On Me

I booked my flight for 360|iDev Min. I know if you read my last blog post you’d be under the impression that I had an epic road trip planned. I did. I don’t get to go on it.

Once again, I was pressured by my family to not drive my car. I was told it was too long. I was told my car was not reliable. I was told that it wouldn’t be cost effective.

If it were just this one incident, that would be fine. I found a reasonable flight and the impulse was probably a stupid one anyway. I am just annoyed that I am constantly being pressured to do things I don’t want to do by people who bear no consequences of the decision.

When I decided to go back to school for programming, my father was adamantly against it. He had a bad experience with a computer science class twenty-five years ago, so he hates programming. He pressured me very strongly to go to law school. He told me that I would never find a programming job and that I would suck at it.

My programming degree was a hundred bucks a credit. A law degree sets you back six figures. I paid for my programming degree. If I had caved to pressure from my dad, I would be six figures in debt and probably wouldn’t have a job. Or if I did, I would barely make enough to cover the student loan payments.

Why do people feel like they need to impose their world view on me? If I had done what my father wanted and fallen on my face, he wouldn’t bear any of the consequences of that action. I would. I would be the one holding the bag for the debt. I would be the one who wasted three years of my life that I could have spent doing something else.

Now that I am beginning to see my labors bear fruit he is more than happy to take credit for my success even though he fought me every step of the way.

Back in 2008 I realized that I had to take control of my life. I let my parents and other people talk me into doing things because it was easier to just go along with what other people wanted than it was to not only fight them for the right to do what I wanted, but to also then have to accomplish it on my own. After limping along like that for nearly a decade of my adult life, I realized I couldn’t do that anymore.

I am so tired of fighting my parents and my husband to be able to do the things I know I need to do. I despair that this is ever going to end. I am sick of being treated like a child who is somehow incapable of knowing what I want or how my world works. There is more than one way to live your life and just because I want to live my life differently doesn’t mean my way is wrong. I don’t think I will ever get to a point where I will be treated with respect or have any of my accomplishments acknowledged by my family. But you know what, that’s okay. I am not doing this for them. I am doing it for me. If I was doing this for them, I would be an underemployed lawyer right now instead of a moderately successful software engineer.

Programmer’s Math Call for Proposals

I am working on creating a talk about all of the math that I learned in high school, forgot how to do because it had no “real world” application, only to discover that I really need to remember it now.

I am asking anyone who follows me on Twitter, App.net, or reads my blog to please contact me about any math concepts you have encountered that made your brain shut down like Zaphod Beeblebrox’s sunglasses because it was too terrifying to deal with.

I want to get an idea of concepts people either don’t really understand or, if you are a math person, what concepts you think I should cover.

I don’t allow comments on my blog because I got sick of spending hours deleting all the spam that got through my filter. If you already have my email address, feel free to email me. Please ping me on Twitter if you don’t have my email.

I am trying to write this talk to address what issues our programming community has. The more feedback I get from people about what they find confusing and what they would like to see covered, the better I can do at helping all of us do better things.

Thank you.

For the Love of Math

I want to ask everyone a question. Am I the only one who remembers that at one time they really loved math?

I didn’t always love math, or reading. I found both of them rather difficult my first few years of school. I had classmates who went to preschool or had older siblings or stay at home moms who had a small head start on me for reading. I was determined to learn to read and I quickly caught up and surpassed many of my classmates.

Square One Television

Square One Television

It wasn’t until second grade that I discovered my love of math. There used to be an educational program on PBS called Square One Television. I became obsessed with this show because it took all these arithmetic concepts I had trouble grokking and explained them in a way I could understand.

They also talked about such advanced topics as Cryptography and Tesselations. (I do want to apologize for the dated content, this was created in the 1980’s.)

This show taught me what a googol was before the spelling changed and became a search engine/Big Brother. Even today when I see a number that is the same backwards and forwards I get really excited because I know it is a palindrome.

Yes, that is James Earl Jones.

Yes, that is James Earl Jones.

Notable people like James Earl Jones and Weird Al Yankovic appeared and lent their talents to making math fun for kids. If you do watch any of the clips I have linked to, please to watch the Weird Al one, it is full of Monty Python homages.

So, if I loved learning math so much and I enjoyed being challenged, why did I major in journalism rather than something math related?

My first major in college was engineering. I was bullied a lot in high school and I had a year where the highest grade I got on my report card was a C. As such, I wasn’t accepted to any of the schools I really wanted to go to. I went to the University of Wisconsin-Platteville to major in engineering. The male to female ratio at the time was two to one. After attending a tech conference where the male to female ratio was fifty to one, that seems positively progressive, but at the time, it was a bit of a shock.

I did not fit in with my classmates.

Every class I had I was the only girl. No one would sit next to me. I had a circumference of empty seats around me. If I tried to talk to anyone, they would literally cry and run away.

I took calculus my freshman year and due to a lot of stress and social issues, I received a D. I don’t really remember anything we were supposed to learn after the first week.

Contrariwise, if it was so it might be, and if it were so, it would be, but as it isn't, it ain't. That's logic.

Contrariwise, if it was so it might be, and if it were so, it would be, but as it isn’t, it ain’t. That’s logic.

I felt like a failure. The thing that got me through high school was this mythological idea that I would go off to college and find my people who would love and accept me for who I was. Going and discovering that things were even worse there than they were in high school was a massive shock and disappointment.

I temporarily dropped out of college. I tried working at Border’s for a while, but that went badly, so with nothing else to do, I went back to school. I went to Madison Area Technical college to take some entry level classes to get my grades back up enough to get back into the UW system. I transferred to UW-Whitewater, where I graduated in 2006.

Trying to jump over the negatives to get to the positives.

Trying to jump over the negatives to get to the positives.

I bounced around majors a lot, but I knew for a fact I was not going to do anything math related. I thought I was too stupid to learn calculus. I thought my success with algebra and trigonometry was a fluke, that those things were useless anyway, and that I needed to pick something easy just so that I could get through college because I was told that having a degree in anything would get me a job. *insert hysterical and bitter laugher here*

Journalism didn’t work out. Neither did video editing, sound design, or doing commodity white collar work. Back in 2012 I felt beaten. I had no idea what to do with my life and I contemplated ending it.

Then a miracle happened in a place I did not expect.

I have spoken about how the worst job I had was one where I was told to pretend to do work. I wasn’t allowed to ask any questions and I was supposed to act like I knew a bunch of stuff I had no way of knowing. It was miserable. However, there was a silver lining.

While trying to find something to do that looked like work, I discovered Codecademy. Codecademy began at the beginning of 2012 with the promise that you could learn to code in a year. I had it on my radar, but I was too discouraged from trying to learn programming to give it a try. When I had to find something that looked like work, it fit the bill.

I discovered that all the things that had stymied me for years while I was learning to program all of a sudden went away when I was doing things over and over again and doing them for long, concentrated pieces of time. I could do something I gave up on ever being able to do. I felt joy, and more importantly, peace while I was sitting at my computer feeling the code flow through my hands and onto my screen.

When that job ended I made the radical decision to go back to school full time rather than find another job. I was tired of running. I was tired of feeling stupid. I was tired of being afraid of failing. I wanted to learn to code because I wanted to know I could do it.

The two biggest motivators for me learning to program were Core Audio and OpenGL. I studied 3D modeling and animation along with audio engineering. I wanted to understand how the programs I used worked. I learned all the low level stuff I could find to help me with this quest.

Then I hit a wall.

What on earth does this stuff mean?! Mark Dalrymple knows Greek, right??

What on earth does this stuff mean?! Mark Dalrymple knows Greek, right??

I wanted to program and audio synthesizer. I was lent some Digital Signal Processing books by a friend, but when I look through them, it’s all Greek to me. And yes, I literally mean Greek because there are all kinds of symbols that I remember somewhere in the back of my head writing out and drawing in notebooks back half my life ago that I had buried because the memory of them was too painful.

I am in between conference gigs right now. Got home from CocoaConf Columbus and immediately went to That Conference.

It has been something of a whirlwind and I am still processing a lot of the adventures I had on these trips.

One of the talks that I was most looking forward to was at talk on the Accelerate framework by Mattt Thompson. I really wanted to know more about it, but I walked away disappointed. Mattt said that you couldn’t really utilize the framework unless you understood the math behind it. My talk on GPU programming also had the caveat that you have to understand math in order to fully utilize shaders. I went to no fewer than three talks and one keynote talking about math and our lack of knowledge of it.

I want to do something about it.

My favorite book in seventh grade and my introduction to logic.

My favorite book in seventh grade and my introduction to logic.

I asked the Klein family if I could replace my poorly attended Debugging talk with a talk on math. I want to figure out the most common stumbling blocks people have with the various frameworks and try to explain math to people the way it was explained to me, in a fun and relevant manner so that it doesn’t seem so forbidding and scary.

I am slowly going back and trying to immerse myself in the math that fascinated me as a teenager. I am not doing this because I think it will get me a job somewhere, I am doing this because I miss how I used to feel when I got exposed to something amazing. There are so many secrets and wonders of the universe that are a mystery to me because I shut off a part of me that I couldn’t bear to look at any more. I am sick of being that person. I don’t want to be afraid anymore. I want my love of math back.

My Life in Stitches

So I have an embarrassing thing about myself I want to confess. I have an incredibly terrible and subversive hobby. I have been living in fear of people finding out about it and judging me. Here goes…

One of my favorite hobbies is cross stitching.

At the point, you might be wondering why I think this is some subversive thing to confess to. I will tell you why.

I have been cross stitching since I was seven. Pretty much my whole life I have been lead to believe this is something I should be embarrassed about.

My collection of projects finished but not framed over the last six years.

My collection of projects finished but not framed over the last six years.

My father would continually tell me that I should stop my cross stitching hobby and take it back up again after I retire. Looking at how tiny all the holes and the patterns are, I am highly skeptical that this is a good course of action.

I would bring my cross stitching to school to do during study halls and I would be constantly ridiculed by my classmates for doing it. So, like a good teenaged girl, I caved to peer pressure and hid my hobby away.

When I got married I had several very large and complex pieces that I worked years on framed. My husband wouldn’t let me hang them in the house for several years because he hated them. I still have a multitude of projects that I have finished and thrown into a bag that is slowly getting larger and larger over the years.

I have always felt like I was a weird, socially aberrant person because I have had a fascination with filling in little boxes with color and making a pattern out of them. I hide my carefully organized and structured projects in metal lunch boxes and pray that no one asks me what is inside.

So what does this have to do with anything?

Over the weekend I attended CocoaConf Columbus. Our first keynote speaker was Mark Dalrymple. During his excellent keynote, he talked about people embracing their hobbies. One of the hobbies he threw out was cross stitching. This threw me for a loop. Cross stitching has fallen out of favor over the last ten years. Also, this was a tech conference! People don’t talk about sewing at a tech conference!

I have painfully learned over the years that tech people are not supposed to cross stitch. Back when I was less experienced, I would go to interviews and be asked what I did for hobbies. I would say I cross stitch and there would be an immediate reaction on the face of the interviewer. I could tell that they mentally determined that I was not a tech savvy person.

There is this stereotype that women who cross stitch (and it is mostly women) are usually stay at home mothers or elementary school teachers. I am a British history buff and one very painful memory I have was reading about an attempted coup of Mary, Queen of Scots. Mary was an accomplished needleworker. When she was locked up in the tower, one of her captors sneered at her that she would have plenty of time for her needlepoint now. Society see needlework as something inherently tainted. People who enjoy doing needlework can’t possibly be fit to do anything important like run a country. Leave that to the other people who are more able to take on that responsibility.

You don’t see a lot of tech people talking about their cross stitching projects. Hell, knitting is much more socially acceptable than cross stitch! That might be because a lot of men do it, but that is a topic for another time.

Dragon project requiring over 50 threads, including metallics and beads.

Dragon project requiring over 50 threads, including metallics and beads.

Cross stitching is a far more concentration heavy task than knitting is. Cross stitching, specifically counted cross stitch, requires a tremendous amount of organizational skills. I regularly complete projects that include fifty different shades of thread and can include over a hundred symbols that contain some combination of those colors. You learn very quickly to get organized or you give up. Over the years I have learned to organize my thread to prevent it from tangling or becoming confused.

Counted cross stitch also requires you to look at a symbol on a grid, translate that symbol into a color, and render it onto a fixed rectangular surface of squares. Does this sound at all familiar? It is very similar to the process that takes place on the computer to render an image, except instead of bits I am using thread. I have been a human fragment shader for 25 years.

Do it yourself Doctor Who lunch box sewing kit! *Not guaranteed to be bigger on the inside.

Do it yourself Doctor Who lunch box sewing kit! *Not guaranteed to be bigger on the inside.

Every skill that makes me a good programmer is a skill I learned from counted cross stitch. I learned to be patient while working on a very large project that takes several years. To give an idea of scale, the dragon picture in this post is a project that I draped over my 15-inch Mac Book Pro and the edges spill over the sides by several inches. I learned how to mentally break down the project into manageable parts so that I did not get overwhelmed and confused. I learned how to organize my space and my tools to optimize my time. I learned to “debug” my designs because no matter how hard you concentrate, you will make mistakes. If you just keep following the pattern like a robot, your design won’t render properly.

This weekend was the first time I brought a counted cross stitch project to a conference and worked on it while listening to a session. I find that I can focus far better while cross stitching than I can while I have a computer in front of me because I get so focused on the screen that I tune out what is being said. I have been told it is rude to cross stitch in class or at conferences even though it is not considered rude to chat on Twitter.

I want to thank Mark D. for giving me the courage to write this post. I am tired of feeling ashamed of a hobby that has been a large part of my life for 25 years that has given me all the tools I need to continue to do what I want to do. I hope that one day people won’t be judged on their hobbies or how they decide to spend their free time, because often those are the things that shape us into the people we are.

Final Countdown to CocoaConf Columbus 2014

After months of prep work and a roller coaster of changes, I am in the final day before heading off to the first of my three August conferences.

I have encountered more issues with Metal than I was hoping to find. This is the first time I have had a paid developer account during the beta period. Prior to now I was so busy just trying to establish a foundation that I somewhat ignored the new stuff that was coming out. This is the first time I have participated in the early release of not one but two new groundbreaking technologies on the ground floor.

I had to move more of my GPU programming talk over to OpenGL ES than I was planning to. I don’t think that is a bad thing per se. The most important thing I wanted to do was to answer a very specific question about one aspect of OpenGL programming. The fact that Apple came and changed everything about that made my talk both easier and harder. A lot of time was spend explaining why Metal is necessary and that fit into the parameters I wanted to address.

I will be giving this talk again in December. There will be a golden master of Xcode 6 at that point in time. I hope that it will be stable enough at that point that I can speak more about how to do things in Metal specifically rather than just ambiguously saying “This is how this would work if it were working, but it isn’t.”

I am giving my talks later today at Bendyworks. Bendy has been very kind to let me come and practice my talks there. I have found the feedback I get from them to be invaluable. I have also found that I am far less nervous once I have performed the talk at least once in front of real people and not just my pugs.

Speaking of my pugs, I am not going to see them for a week and I am very sad about that. I am going to miss my little buddies. Such is life.

I still have not packed. I need to pack sometime today. I also have to go to our Swift user group meeting to make arrangements with the people I am carpooling to Ohio with.

So I have a half dozen tasks to do today. Just need to take them one at a time to avoid feeling overwhelmed.

This is really stupid, but I keep forgetting that I do these talks because I love traveling to the conference and meeting new people. It’s hard to remember that this is going to be an amazing and awesome experience because I am putting a lot of pressure on myself to do a good job with my talks. I need to make sure I take some time to chill out and not worry so much about what I am doing.

Don’t panic.

Looking forward to seeing all my peeps at CocoaConf Columbus and That Conference in Wisconsin Dells!!

The Importance of Style

I don’t remember a time in my life where I did not own a computer. I was three when my parents went to American TV in Madison, WI to buy an Apple IIe for my mother. My mom was pregnant with my brother and wanted a computer to do work on that would not bother the carpel tunnel syndrome she developed while pregnant. Oh the irony of that belief.

I was in fifth grade an I was creating a book report for a class. I discovered our word processing software allowed you to do some neat formatting on your document, including putting a border on it.

This was an amazing discovery to me. I was excited that I found this new functionality in a program on my own and I ran to go tell my dad about it.

My dad chastised me very harshly. He told me I was wasting my time trying to jazz up my book report and that I must not feel very confident in my work if I felt the need to use a gimmick like a border on my book report to distract the teacher from my research.

I remember at the time feeling very hurt and wounded by this statement. I had discovered something cool and I wanted to share it with someone and I was smacked down for figuring out that my report didn’t have to be boring.

Fast forward twenty years or so.

I am in the process of working on several tech talks that I will be presenting next month. One of my talks is on debugging. I know, debugging sounds like the most boring thing in the world. But it doesn’t have to be.

I spent a decent amount of time creating a custom template for my talk. Since it is about bugs, I thought a nice bug theme would liven up my slides somewhat. I am very proud of the work I did customizing my slides for this talk.

I think that there is an unfortunate attitude in tech that talks don’t have to be interesting. I have lost count of the number of droning, boring talks I have heard at various tech conferences. It’s like some of the speakers are thinking, “Yes! I have a captive audience! They have to listen to everything I say!! Bwahahaha!!!”

I have found that the less work people do to make their talks interesting and relevant the less I care. If the person telling me about this stuff doesn’t find it interesting and exciting, then why should I?

People buy Apple products because the engineers try very hard to make objects that people love to look at, hold, and touch. A great deal of care is taken to make using an Apple device a joy. Their design is one of the major reasons they are as successful as they are today. No one should make the argument that making something look and feel nice is a waste of time. It isn’t. It’s a sign of dedication to the craft.

I think my father was wrong. I don’t think people style things in order to distract the audience from its lack of quality. I think if you care passionately about something you will put a great deal of effort into trying to make sure it is interesting and exciting for other people too. I think putting work into making your stuff looks nice is an indicator that you care about your work and that other people should care about it too.