who is this for, anyway?

Ending Irrational HULK SMASH


Laura Savino gave a wonderful talk at CocoaConf in Seattle about about getting physically angry at bad code and how that’s not a good thing. That struck me particularly hard because I too get irrationally angry when I see bad code. If I’m lucky a long walk around the track at work is enough to calm down, but more often than not it seems like my whole day is shot and I go home grumpy.

I spent a lot of time last week reflecting on why I get so angry. Half the time it’s not code that I’m ever going to see again or have to maintain. Why am I upset? I didn’t get upset at the terrible code my fellow students wrote in the CS397 capstone class in college when I was grading. What changed in the last 10 years?

For me I think my intense irrational anger came when I rotated into my last group at my previous job. Up to that point everyone I had worked with before was either good at what they do, or at least still trying to learn and improve. What changed in my last group is that I discovered a new type of programmer. Ones with don’t-give-a-fuck-itis. They typically had 20-30 years of experience with the company, and were really just trying to hold onto a paycheck until the next round of layoffs would hopefully give them a chance at early retirement. I saw the absolute crap that DGAFites produced, and it was maddening.

Because I knew their grade level and the company’s pay scales, I generally knew about what they were supposed to be making. I was furious that these people were getting paid 2x-3x more than me to make mistakes a student would point out as obvious. Or claim a new technology they were investigating isn’t panning out while I watch one sit and read slashdot all day.

I stayed in that group for nearly six years. Over time my specific rage toward those people and the system that enabled their behavior translated to anger at bad code in general, regardless of the source. This is a problem. I’m supposed to be a senior engineer now at a company that hires mostly recent grads. When you’re new, making mistakes IS learning. It’s my job to mentor them. Show them not only what is wrong when they screw up, but why it’s a mistake in a supportive way. It’s my job to make sure they don’t end up the 30 year-old burn out with anger management issues. Step one is empathising with the newbies. I need to remember what it’s like to try something new and fail miserably. AFAIK no one at my current employer is just hanging on until pension time, and even if they were the pay gap between myself and them is much smaller. Anger at bad code is completely irrational and improper, and I musn’t see its author as a bad person who should feel bad for sucking, but just another human trying to grow and do better. As Daniel Steinberg said in his opening keynote, I need to try and Be Nice.

Read more ⟶

2014 CocoaConf Seattle Recap


I just spent this weekend at CocoaConf in Seattle, and it was great. From Daniel Steinberg’s Swift Kickstart, to Gus Mueller and Chris Adamson discussing Core Image, to Paul Goracke’s CoreData tips, there was a lot of technical content I can apply directly to either my day job or my side projects. It was also neat to finally meet some people I had previously only known through their twitter avatars. But I think the real personal value I got out of CocoaConf this week were a pair of keynote-style talks from the Khan Academy’s iOS developers.

First was Andy Matuschak’s Value and State: Functional and Imperative. I have been aware of a growning functional programming community for a while, but as with any new movement the die-hard extremists killed any enthusiasm I may have had into looking into. Plus, my cave-man brain actually LIKES C and C++, and one day I may finish the half-written post about why higher-level languages are hard for me. But Andy did an excellent job of breaking down what object and value types are useful for, and why separating action from logic is an important goal. He didn’t try to convince the room that we should write everything in a functional style (you can’t write useful software that way). Instead he advocated splitting objects into a thick value layer, and a thin imperative shell to handle responding to inputs from the system and tracking the change in versions of the immutable value layer.

The night before I had an idea for a new iOS side-project, and I had planned on starting in Objective-C, and sprinkling in Swift whereever it made sense. That is not how I’m going to learn and grow. Instead, I’m starting in Swift, and I’m only going to break into Objective-C when I can’t get something done in the current version of Swift. I with the standard library being almost entirely value types (structs), it will help me design my own software to act in a more functional way, without jumping whole-hog onto the crazy train.

As an asside, Brent Simmons had spoken the night before about (not) shipping Vesper for the Mac yet, but gave an impassioned arguement on why we should be writing Mac software. So this new side project is going to be written in Siwft, on iOS and Mac.

Finally what hit me the most was Laura Savino talking about being ANGRY at bad code, and how unhealthy and damaging that is to our relationships with other people. I have much more to write about my personal struggles with code hate, so I plan on breaking that out into a separate post instead of squeezing it in here.

Beth, Sam, and I are heading out tomorrow for a little vacation this week. I had planned on bringing 2 laptops and getting started on both my new project and some work-work I didn’t finish before CococaConf. Instead I’m going to leave them both at home, delete Tweetbot and Facebook, and spend a little time in reality. If you really need to get ahold of me this week just call instead.

Read more ⟶

Developer Conferences


I just read an article on a tech news site that I generally respect which took shots at GDC for its code-heavy treatises, as compared to other industry events like E3 or PAX.

For those who haven’t been, GDC stands for Game Developers Conference. It’s explicit purpose for game and game-adjacent developers, programmers, designers, artists, to share notes, compare techniques, and get into the nitty-gritty details of game development.

If your complaint about GDC is that it’s taking a more intellectual route compared to E3 or PAX, it’s because its not for YOU, game journalist. The other events you mention exist explicitly for your purposes. Stop dumping on the one event designed for game developers to get together and talk shop.

At least developers can still buy tickets to GDC. I think this is at least in part because they have a separate ticket just for the show floor/keynote hangers on like this article’s author. WWDC has failed in this regard because they insist on bundling major product announcements with what is otherwise a perfectly civilized developer conference. I would wager that WWDC tickets would be accessible to more actual developers if Apple sold a separate keynote-only ticket, or even had the big product-announcements the week before so WWDC could also have the reputation for being a code-heavy treatises like GDC.

Demand for and Apple centric developers conference is so high that several independent conferences have sprung up over the last few years. NSConf, Úll, and Çingleton all look to be doing good work, although they are very indie focused. It’s hard to get approval and funding for these smaller non-mothership based conferences for corporate devs. These smaller conferences are also missing the extreme press scrutiny of the bigger official xDCs, but I think that’s a good thing.

Read more ⟶