Content tagged personal

Grief and recovery

posted on 2023-07-11 09:43:00

I hardly know how to write anymore. The last 13 months have seen the funerals for my dad and both his brothers. My stepmother is also in the hospital for a mass on her pancreas. In short, it has not been a quiet year. I've always had a troubled relationship with my dad and that extended to his side of the family because I thought how I fit in to the rest of the family depended on him and our relationship. I am grateful at least to have finally realized that isn't the case.

Uncle Mack was the Butler I felt closest to. In part because he reached out and had me come stay on the ranch in Bozeman with him a week or two in the summers when I was 13 and 14 and Terry wasn't around. I can't remember any specific conversation we had but he made me feel seen and that meant a lot in a family where I felt like I didn't fit.

I'm taking Mack's death rather hard ... but not from missing him. It makes me ask "what am I doing?". You see, Mack was a cowboy and a lawyer. He worked for Ted Turner's legal team for a number of years, made partner, and at some point took a vacation to Montana. Within months of that vacation he stopped himself from walking into a board room, resigned, moved to Montana, and started a new life. In short, he said "fuck this".

Mack was a larger than life character and there are a ton of ways that I don't think I'm much like him. But in this one aspect, I would like to be. I think I've been too safe these past few years and I'm not sure what it looks like for me to say "fuck this" and lean into something more meaningful to me. I haven't been as financially successful as Mack that I can start over quite so easily. And there's a lot about my life as it exists that I'm not unhappy with. Norma and the house, honeymoons in Morocco and driving a silly car, this year has had its good points. But I spend more time worrying about the future then focusing on what excites me. I've got my grip so tight at this point that I can't hear my gut when I listen. I could be overreacting but I think something has gone wrong here.

Burnout Update

posted on 2023-02-27 12:40:00

Well, it's been 2 weeks. Dad died 11 days ago. I'm headed to Morocco for my 3-year delayed honeymoon on Friday.

I think I'm starting to come back a little bit. For most of this year, I haven't been able to convince myself that my hobbies were worthwhile. Why did Lisp or emulators seem important? Why were videogames interesting? Do I really think I'm going to ever do anything useful with my modular synthesizers?

I'm still moving slowly but some life is coming back. I'm really glad I've had spin as something to keep pushing myself to do, just for endorphins and getting out of the house if nothing else. The rest has been hard. One of my favorite parts of myself is discovering new things and sharing them with others, the pursuit of passions. When I'm low energy like I have been, it's harder to like myself than usual.

I can tell I'm starting to get my energy back because I got sad when I realized I almost certainly won't take a laptop on my honeymoon. Sure, it's 12 planned days of travelling around Morocco but I finally have energy to hack, to write, to think! It's okay. I have never in my adult life taken a vacation without a laptop and it's been ten years since I was off work more than a week. It will be good for me. And I will still find the energy to care about my projects, even if they are silly and uniquely mine, not meant to influence the arc of industry.

Milosz is speaking to me as always:

Earth Again

They are incomprehensible, the things of this earth.
The lure of waters. The lure of fruits.
In rouge, in vermillion, in that color of ponds
Found only in the Green Lakes near Wilno.
And ungraspable multitudes swarm, come together
In the crinkles of tree bark, in the telescope's eye,
For an endless wedding,
For the kindling of the eyes, for a sweet dance
In the elements of the air, sea, earth and subterranean caves,
So that for a short moment there is no death
And time does not unreel like a skein of yarn
Thrown into an abyss.

... later he writes in Consciousness

I think that I am here, on this earth,

To present a report on it, but to whom I don't know.

As if I were sent so that whatever takes place

Has meaning because it changes into memory...

... and elsewhere in Unattainable Earth

What use are you? In your writings there 1s nothing except immense amazement.

It is all a single thread.

Spiritual Burnout

posted on 2023-02-13 20:20:00

It's been remarkably difficult to figure out what to hope for lately.

My dad is dying again (not that one, the other one) and it's hard to tell how long the process will take. It has been decades since we had a good relationship and he wasn't the one to teach me how to shave or ride a bike. He's in a nursing home being cared for and I believe he is at peace. I don't know what more to hope for than that. It has been strange in that Terry has been notable mostly for his absence from my life even with me keeping him at a distance. His suddenly taking up space has been confusing and hard to adjust to.

Everything has taken on a dull hue so far in 2023. I'm unable to remember why I wanted to write, or learn about, software. Unable to remember why video games were fun. Unable to come up with an answer to what I want to do with the rest of my life.

Some things are still good. I'm enjoying spin with Norma a few times a week. I'm still finding a little time to hear some new albums and find music I enjoy. I understand being depressed too. It's natural in the face of Terry's decline. But I miss dreaming of the future and can't help but feel that I've forgotten in the past 3 years what sort of futures are even interesting to me. Hopefully with time I will change. For now, I'm treading water.

My 2022

posted on 2022-12-31 18:00:00

Somehow it's already New Year's Eve. I've got two more days off but I'm already distracted by work to do in January. So now seems like an ideal time to step back and reflect on what happened in 2022, what I loved, and what I'll let go of as I move forward. I also feel I should shout out Manuel Uberti's wrap up which inspired me (and he has great posts on emacs).

(See also: Last year's reflections)

Things to Celebrate

Traveling

I took a trip to see Aaron on Vancouver Island and then James in Santa Barbara. They were two glorious and much needed weeks out of the house. While I wasn't off the whole time, I was able to focus on spending time with people I love very much and get myself out of a rut. In fact, I've made pilgrimages to go see James and Rachel in California 4 or 5 times in the last 18 months. Yet to regret it. Need to squeeze in a NYC trip next year to see Justin and Kelly and Roni.

Exercise

I started running in the summer. I've barely exercised for a decade. It wasn't really intentional. I used to love skateboarding with Burke or around the apartment complex. After Burke moved away and Norma and I settled down, it just wasn't the same. I started running in the spring but had a hard time staying motivated. In late October, I started going to a nearby spin class with Norma. At first I thought it wasn't for me but here we are two months later and I love it. I'm going 3-4 times a week, sometimes with Norma and sometimes on my own. It feels wonderful to be pushing my body again and just get out of the house and move.

My Partner

I had some really wonderful experiences with Norma this year. We took a trip to Austin to see dear friends. We took a week off together at the end of March and just lounged about and went on lunch dates. We're doing spin together and early in the year we made a different cookie recipe every weekend for a few months. I feel closer to her than I have before and in January we will have been dating 10 years. It's hard to believe but it's something I'm very happy about.

Family

I got closer to the Butlers. I've always had a ... tenuous relationship with Dad's side of the family. In a lot of ways, I thought my relationship to them was determined by my relationship with my dad which has never been very good. To a large degree, I still think of my step dad John as dad and I miss him dearly. But I went to Uncle Eddie's funeral earlier this year and started to realize that my relationship with the Butlers is just plain separate from my relationship to Terry. I haven't figured out what I want to do with that but I'm grateful for it. I also attended my niece Caroline's wedding and have gotten a bit closer to my half-sister Renee between that and Terry's recent health issues.

Hacking

A few different things have brought me joy this year on the hacking front. I've done effectively no programming for work now that I'm an Engineering Manager and a year on I'm happy with that decision. I struggle to recognize and appreciate my contributions as a manager because a lot of relational work ... doesn't really seem like work to me. But that's a separate issue. On the hacking front, there are 3 things I've really enjoyed this year:

  1. Advent of Code. Most recently, I organized a slack channel at work (#fun-advent-of-code) where about 15 folks participated in daily slack threads working through and discussing the different puzzles posted over the month of December. I coded my solutions in Common Lisp and enjoyed getting practice playing with new libraries. While I didn't get quite as far as I wanted, I got further than in past years and really enjoyed the camaraderie of it. I also had a few particularly elegant solutions. More literate puzzle writeups to come!
  2. Streaming Clones Hacking. During my week off with Norma at the end of March, I knew I missed hacking so I wanted to try reworking my emulator. Working alone in the garage is discouraging for me. I like having people to discuss my projects with. So I decided to take a risk and stream a rewrite of my NES emulator from scratch on twitch. I made a ton of progress and while I stopped at the end of July and some bugs remain. Super Mario Bros is playable and the codebase is generally in good shape. I got a lot of joy from this.
  3. Sourcehut. I started paying for Sourcehut and hosting my emulator hacking there early in the year. Drew Devault seems a bit divisive but I have a lot of appreciation for the way he has built sourcehut and the principled stance it takes on prioritizing open source and community-oriented projects over for-profit corporate software. I have greatly enjoyed being a user of this service.
Records and VOTD

My favorite hack of the year wasn't Advent or Clones. It was actually a bit of emacs lisp I wrote in under an hour to help me randomly pick music to play on my twitch stream from my record collection. The satisfaction of hitting Super+N and being shown album art of a record to play is hard to beat. I've been purchasing most of my music on bandcamp or discogs. As someone who enjoys archiving or curating things in general, this has been a lot of fun. The current collection and VOTD code lives here.

Things to Come

I'd love to do a separate post about some cultural things I enjoyed in 2022. Favorite TV, movies, music, that sort of thing. There are also some things I'd like to change in 2023 and pieces of myself I'd like to work on. But for now, I'll close with a few things I'm looking forward to.

Norma and I are finally going on our honeymoon. We'll be going to Morocco for 2 weeks in March. I can't wait. I've never traveled overseas with Norma and I think it'll be a wonderful time.

The final Strangeloop is happening and I'll be going with James and also a wonderful former Iron Yard instructor, Tim. Strangeloop is always a great conference and St Louis is always a great adventure. This time will be no different.

Last but not least, Aaron is coming to Atlanta at some point. I've been hoping to take Aaron to some of my favorite local haunts, and Kimball House in particular, for years so I can't wait for him to visit. We're gonna have a blast.

For now, I'm grateful that I made it through the crazy year, that Calendly has been a good place for me to grow in my career, and that I'm as close to my beautiful partner as I've ever been. Here's hoping that 2023 is an opportunity to have more adventures, grow healthier, and learn something new. Cheers. 🥂

Staycation

posted on 2022-04-03 21:15:00

Norma and I are at the end of a lovely week on vacation at home. It was extremely welcome, quite relaxing, and over all too soon like any vacation. I often struggle with breaks but I think a few things conspired to make this one feel different.

  1. I had about an hour of work or chores each day to give me a little structure.
  2. Norma was also off so we could hang out together.
  3. I was able to alternate between friends, Hollow Knight, and streaming emulator hacking.

Historically, Norma's work in non-profit means she gets less vacation, or has a harder time taking it, than I do. Streaming has also been an interesting experiment. For most of our relationship, I have struggled to pull myself away to work on coding projects. I spend so much time sequestered with my computers, I hardly want to do it more when I could be with her. But then I can get frustrated or down on myself because I haven't made more time to learn or experiment. Streaming helps me feel like I'm not just wasting time alone in the garage.

I'm going to try to continue streaming every Sunday and see how it goes. It's also been interesting to work on an emulator again. I'm reminded that the workflow with Common Lisp and Sly or Slime is as good as any I'm familiar with. I still love the language. But I was disappointed today to realize that after almost 20 hours of streaming, I wouldn't finish the CPU of my emulator this week. I don't think it's the fact that I'm not finished ultimately. I think I'm surprised that I still haven't been able to solve the problem to my satisfaction. Sure, I haven't gotten scrolling working on previous attempts. More than that though, the code still feels awkward and messy in various parts and the hard bits are still hard. Writing a reasonably accurate and efficient emulator in a high-level language is still fairly tricky it turns out. Or it is for me anyway.

I don't entirely know why this task continues to be something I want to tilt at. But until it isn't, I'll keep trying. Cheers.

Deliberate Action

posted on 2021-12-31 15:15:00

2 years in a blink

I hardly know how to count the time. In the past ~2 years, I left Flatiron after helping start the Atlanta campus, started working at Calendly, been a best man, got married myself, weathered a global pandemic, and recently became an Engineering Manager.

A tremendous amount has happened, but I feel like I've lost the boy I remember from college a little. He was excited about things: video games, music, common lisp, poetry. This blog has also atrophied for nearly a decade, torn between being an outlet for personal interests and reflection and a more serious place to cultivate a professional(-ish) voice.

Focus on Habits

I was talking to my close friend James recently about working in tech. James is probably the sharpest engineer I've had the pleasure to work with and he was discussing getting better. I asked him what it mattered, or more precisely, what he would be able to do if he got better that he couldn't do now. His answer surprised me. He said, "I really don't think about outcomes."

There was a little more to it than that but the short version was, he keeps an eye on how much he's learning and places bets on what will be interesting and provide good opportunities to grow. Then he just walks in that direction.

By contrast, I have an almost total inability to pursue things without thinking about the outcomes in advance and evaluating my progress after every minute step. I doubt I'll ever be able to suppress those urges completely, but picking a direction and moving without so much analysis paralysis is something to work on.

Rather than worrying about the past or where a certain choice will take me, I hope to pick a direction and just walk. I'll form a habit, live with it for a while, and try to feel it out. I'll know soon enough if I want to continue.

Goals for 2022

With that in mind, these are some things I'll pursue in the coming year. There are two overarching themes: allow myself to goof off when needed, and pick just a few things to chip away at instead of debating 100 projects. I.e. Do more, deliberate less.

Waste Time

It's time to pursue the childlike joy I remember that college kid having. I'm not sure exactly what form this will take. One thing I'd like to try is getting back into video gaming again. I haven't allowed myself to play many (single-player) games for the last few years. I make up stories about how they're a waste of time and I "should" do more productive things. But then I waste time in other ways to avoid being productive. Games are good. Maybe also some things like trying to learn Chess or mess with emacs.

Use the Internet Less

Social media is a wasteland and it's all too easy to simply fritter away time. I've read the internet enough and while there are some high quality blogs I enjoy, my time would be better spent reading books, writing code or prose, or goofing off with games or Norma or friends. So, use the internet for work, pushing code and blog posts, getting new music, and chat/slack. The end.

Write More

I used to blog more. I blogged about all kinds of things. I was (and am) a culture nerd. I wanted to talk about Music, Movies, TV, Games. It wasn't just code all the time. I also wanted to talk about code and, in particular, I relished in things that seemed cool but I really knew nothing about. And that is one of the uses of my computer that I've never regretted. Writing somehow always winds up feeling like an at least decent use of time. (I probably just like the sound of my own voice too much. I did teach after all.)

I hope to keep experimenting without aspirations, without outcomes, and writing about what delights me and what I take away from my dabbling. I hope I write more here in general about everything! To preserve a record for future me, or for anyone else who might be interested.

Crafting Interpreters and then other technical reading

I've got such a long list of programming or CS texts I've meant to work through. And it's hard! After working at a software company all day, even though I still want to know more about various aspects of computing, it's just not appealing. However, I'm pretty disappointed that I still haven't written a toy language implementation, finished an emulator, worked with C more, etc etc.

Crafting Interpreters is a great place to start in terms of technical topics I'm interested in and I have a friend who is also interested in working through it. Community always helps. After CI, there are certainly other things I'm interested in. I don't have a strict list of priorities but a proper algorithms book (Vazirani/Dasgupta or Erickson probably) or a good "systems" book like CS:APP would likely be next on my list. I'd also consider a look at Software Design for Flexibility or Lisp in Small Pieces of course. :)

I'd also like to read some non-technical books. The Elegant Puzzle would be good to get a better grasp on engineering management and I've got a few books on Chess that might help improve my play as well. But Crafting Interpreters first, then I can worry about "what's next".

Wrapping Up

I can always list plenty more I'm interested in but if I can focus on these three things, I think I'll have a lovely year ahead. Here's wishing for a return to normalcy from the hell years of COVID and joyous new discoveries for us all.

Heaven is a Place

posted on 2020-04-14 14:35:00

NIM

Songs of the Day:

  • Pixies - Velouria
  • The Sea and Cake - Four Corners
  • Blood Orange - You're Not Good Enough
  • Soccer Mommy - Circle the Drain
  • Wild Nothing - Midnight Song

It's been a bit of a week. I'm on vacation from work, thank goodness. I had really run out of steam on my projects. It was difficult to focus and I was berating myself a lot which only makes things more exhausting.

There's so much I want to work on.

I have a really, really hard time making myself happy. In a lot of ways, I think I don't know how to play by myself. You would think as an only child that it would come naturally, but it really doesn't. I mean, I can list things I think I'd like to do: read books, play video games, write code, etc. I just struggle to do any of those things or feel good when I actually do them. I think this is why the quarantine has reminded me of what summer break felt like as a kid. There was an initial elation at this sudden freedom in your schedule ... and then a gradual despair as nothing seems to matter without someone to witness it.

I've been rewatching Halt and Catch Fire and very emotionally attached to it. I think one of the reasons is that it's about these characters who obsess and get fixated on projects but really struggle in their relationships. I feel like I'm pretty happy with my relationships but hate myself for not moving forward on the projects I fixate on. I identify with multiple characters on the show and I think I struggle emotionally because they wind up alone, both romantically and in terms of collaborators. In many ways, the show is about failure and how the characters deal with it. And after seeing them grow as people, work so hard, and love so fervently, it's heartbreaking to me to see that failure.

I've been struggling with a need for external validation my whole life. I think there are a few components to that:

  1. I don't really trust my own evaluation of myself and my contributions. This is mirrored in HCF when Joe asks Cameron "What is it that I do?". He honestly can't convince himself that his contributions make people's lives better rather than worse.
  2. Because I get very fixated on what interests me or how I think things should be done, I need to have a fair amount of autonomy or executive function to be happy and have fun. But if I'm doing anything (project or recreation) purely alone I lose steam and belief that it's worthwhile. The need for both structure and validation from collaborators while choosing not only the activity but also most of how it's carried out makes it really hard for me to find people that will come along on adventures with me.

Two different relationships in my life stand out as being unusually good for me by playing to these challenges.

  1. The Iron Yard was probably the happiest I've been at a job ever. I had a tremendous amount of freedom and responsbility in how I ran my classroom. But thanks to the other staff and the students, I never really felt like I was "on my own". I rarely got into that crazy "does it matter, is it really worth anything" headspace. I had external validation (mostly students), collaboration and friendship (staff), and autonomy in how goals were pursued. There was some tension because I sometimes wished I could change the broader educational goals or thought we weren't honest enough with our students about the challenges they would face, but this was dwarfed by the rest.

    I think this is one of the reasons teaching has often been a good job fit for me. Quoth the showrunners from Halt, "I think teaching is a way to spread your love of a thing without needing to be the victor in that particular arena." In a lot of ways, I struggle to to be an engineer instead of a teacher because I either genuinely don't think the technical problems at the company are interesting or because I think I need to be the victor to prove my worth. In teaching, the problems aren't the important thing, getting people to connect with themselves and their curiosity is most important. Tech is just the setting. That feels almost perfect to me.

  2. Ben Minor was my roommate both in college and after and is one of my dearest friends. Ben is a very easygoing guy and happy to do most whatever you want to do all the time. It helps that we have some overlapping interests (aside from code) but in 15 years of friendship, he's rarely not been open to doing whatever I feel interested in doing.

    I often have a hard time working on things on my own. Even if I'm legitimately interested in them, I struggle to make myself believe that they matter or generate forward motion pursuing them. I desperately want collaborators. But frankly, I'm pretty difficult to collaborate with because I have both pretty specific ideas about what we should do and how we should go about it. This makes me relate to Cameron from Halt and Catch Fire because she is genuinely terrible at working with others even though she would love to. She needs to be the special brilliant child a bit too much.

    But this also extends to how I relax and have fun. In an interview with the actor who plays Joe Macmillan, he said: "He wants his friends to play his game. I guess that's his flaw. He wants to be in the sandbox with his friends, but he wants his friends to be building the same sandcastle."

I don't know how to fix this, or even how to work on it really. Norma mentioned recently that when something makes me unhappy my reaction is to stare at it until I feel I understand or can move past it rather than to be avoidant. It results in a lot of unhealthy feeling "stuck time" where I feel anxious and spiral into my unhappiness. Hopefully one day I can find a little more peace, knowing that I'm valued in the world for loving people in spite of being a little hard to work with. I'm still a bit worried that I'm not a great software engineer because I'm more interested in studying, learning, and sharing, than building things. But one thing at a time.

So sure, this week I would love to:

  • Work through Crafting Interpreters
  • Rewrite the graphics layer in Clones
  • Work through more On Lisp, SICP, CS:APP, or Algorithms
  • Investigate tools for literate programming / publishing programs
  • Start using org-mode
  • Make a great mixtape

But I have to take care of myself first. And today, that might just mean doing laundry, missing dad (and wishing I could listen to music with him), cuddling the dogs, and writing. Maybe I'll spend some time in the hammock. All for now...

Five, Seven, and Ten

posted on 2020-01-05 14:30:00

10 years ago, I was studying CompSci at SPSU. I had just gotten my first smartphone, a Nexus One. I had started contributing to my first open source project, Paktahn. Dad had died about a half year earlier.

7 years ago, I had just met a woman I would fall in love with, Norma Nyhoff. I was living on my own for the first time at Arts Center Tower in Midtown. I was a Senior Engineer at Rentpath and not very happy about it. I had written and open sourced Coleslaw.

5 years ago, I taught my first class at The Iron Yard, a bootcamp where I helped over 100 people become programmers. I was living with Norma and our two dogs. We were about to rent a house in East Atlanta.

Last year, I got married. I taught another 100 people to program at the Flatiron School. I joined Calendly as a Senior Engineer. I made substantial progress on rawbones, an NES emulator written in ReasonML with one of my best friends, James Dabbs.

Somewhere I read that "Unattainable Earth", the title of my favorite Milosz book, is most closely translated as "Earth too huge to be grasped". In a similar way, these events feel like they surpass my understanding. In the last decade, a life has grown. I foolishly tend to think of my life as something that is planned or designed, but that is not what happens to us. We take a step and a new world blooms as our feet land.

I hope I can be excited and curious more than fearful in 2020. I hope to write more here and perhaps listen to myself again, the way I used to.

I came up with some resolutions but won't share them. The important thing is the shift in focus. I want to pursue programming for artistic purposes, generative graphics and sound. And maybe learn to solder and build a keyboard. Hardware seems fun, graphics and audio seem fun. The web is powerful but not exciting. So I'll work, spend time with the people I love, and see where my passions lead me.

The Right Thing

posted on 2015-05-09 03:35:00

I've been programming for 8 years now. Only half that time professionally. It seems like a long time to me but is a drop in the bucket compared to many in this industry.

If I had to pick two big lessons from the past 8 years to tell someone getting into Software Development for the first time, I would probably say:

  1. Software is never finished.
  2. Software is never "right".

Software is Never Finished

Software is never finished because it exists in a social context. Software is an accessory to daily life and life changes. As our needs evolve, and the context around software shifts, so must the software itself.

Not to mention the fact that the teams working on software and the organizations around it shift. We cannot forget Conway's Law!

I often cannot imagine how the Software industry will ever settle with regards to tools and practices, when I see our tumultuous past 50 years. But even if our techniques and tools settle, I don't imagine our codebases will.

Software is Never "Right"

You might imagine that this section is redundant. Certainly it sounds similar to "Software is Never Finished". But I mean something different. I mean that there isn't a single right way that all software should be written or made.

The internet would lead you to believe otherwise. Programmers are nothing if not evangelists, even zealots, about their tools and techniques, their pet styles and practices, their esoterica.

The most important thing you can do is ignore this. Ignore the hate, Ignore the hype. Do not second guess yourself.

Tools, practices, and domains of knowledge are just that. Even if Software wasn't a moving target (see: Never Finished), we still do not have a single methodology understood to always produce the ideal code. Indeed, there isn't some ideal code we're after. The code is not the most important part, it's just the part we're paid to obsess over.

So don't sweat the folks who insist everyone should follow their "better" way. At the end of the day, good documentation and happy customers are probably more important than most particulars of your codebase.

By all means, don't stop learning and write the best code you can. But chart your own path through our tangled maze of lore. And remind yourself that it's okay to be an average programmer. We've got to find time for families and lives, after all. Speaking of which ...

The Right Thing

It's tough to try to plan for retirement. I'm still too young to think confidently on decade plus time scales.

It's tough to decide how to teach my students and gauge assignments. It's tough to decide what to learn next to become better at programming. It's tough to decide what I want from my career, how to nourish it and have it nourish me. It's tough to decide what's worth doing in general, when our lives are so busy and full.

But there's one decision I make that's really easy, even when it makes my life harder.

It's coming up on six years since Dad died. I cannot measure the amount I've grown since then. I know he'd be proud. But I'm proud and that's even more important. The biggest lesson I learned from John Glenn is probably this:

Loving other people is so obviously the right thing.

I cannot think of a time when I am as confident in my decisions as when I am loving and supporting others.

I'm not proud of my programming skills or code, though cl-6502 is kind of neat. I'm not proud of my job or relationship, though I am thrilled with those aspects of my life.

I'm proud that I handle hard situations with all the grace I am able. I'm proud that I treat others with respect and care because I didn't used to.

Most importantly, I'm proud that when I see someone struggling, I love them.

We do not get to have many easy decisions in our adult lives. But loving those around us, pleasant or unpleasant, in good times or bad is an enormous undertaking. I certainly fail at it, but I never regret it.

It's unfortunate that with our busy lives, in the sea of our alerts and notifications, it is so difficult to focus on the simple and important things. But I truly believe loving others is the most important thing that I do.

I have failed many times before and in many ways and modalities. I have character flaws. I have shortcomings. But if I have helped those around me through difficult periods in their lives and supported them when they were in need? Well, then it's all probably worth it.

Confronting Impostor Syndrome

posted on 2015-03-10 19:57:00

For the bulk of my professional career as a software developer, I've felt like a fraud. To some extent, I think various aspects of tech hiring practices and tool fads/fetishes in the software industry create or exacerbate this feeling in most of us.

I read Joel Spolsky's Java Schools article way back when, before I was really programming. I looked down on Web Dev for a long time. I played with lisp, played with emulation. ... But I've been a professional web dev. Why am I fighting it and being hard on myself for not being a systems programmer?

I flogged myself for some time, a little voice in my head saying that web devlopment "isn't real programming". I would flog myself for not being good at web development when I hadn't embraced it. I would flog myself for not being knowing systems programming when I haven't put any time into it.

Sure, there's plenty I still don't know. But "I don't know but I can figure it out" is the right instinct to have. Trying a bunch of stuff and not finishing is vastly better than paralysis. Exploring any ecosystem and building better apps is better than misguided elitism.

I'm a hacker, through and through. I want to learn, want to improve, want to synthesize new things from my understanding, grow, share, and change. I looked up to the hackers of lisp lore and AI Labs. But that hero worship has become negative, is distracting me from just building things.

Part of the reason that little voice is in my head (and I listened to it for so long) is because I thought I didn't have a chance in this industry.

I've been a successful developer for years but often unable to enjoy my jobs because I've been too uncomfortable to embrace them. Then feared I'll be found out as a fraud, not a "real programmer".

I've been telling my students that since they understand the major components in web development and have some understanding of how they fit together, their real focus to grow should be practice. Constantly building bigger things, trying to make each piece more cleanly than in the past, gradually knowing how to solve harder and harder problems.

I stopped taking my own advice at some point. It's time to build new things again. Bigger things. Not the prettiest or the best, but real.

Goals for 2015

posted on 2015-01-01 17:50:00

2014 was a huge year. Notably, I moved in with Norma, switched jobs from writing code to teaching how to code, and learned more about how to manage myself.

I've got plenty of things to work on in 2015 so I'm breaking this into a sequence of posts based on subject. I'd like to broadly note that for my first semester (roughly January through March) I might barely get anything done and that is okay. I've never taught before and I expect that learning curve to take up most of my time until early April. Now without any further ado ...

A Few Goals for 2015

  1. Personal (forthcoming)
  2. Technical
  3. Musical (forthcoming)
  4. Competitive (forthcoming)
  5. Recreational

Starting Again

posted on 2014-11-30 21:20:00

A Fresh Start

I've been struggling a lot this year. I got stuck in a hole and it took me a while to find my way out. But I learned a few things along the way and I'm very excited about what's coming next.

I've accepted a job as a Ruby on Rails instructor at The Iron Yard. I'll be training people to become engineers in a very short timespan. For over a year, I've been whispering now and then about an interest in teaching, to Norma and friends. Starting January 5th, I'll have my first students. I'm equal parts nervous and exhilarated. I can't wait.

Learning How to Quit

A lot of my happiness and self-worth is tied up in making visible progress on things I care about. Over the past 10 months I lost faith in what I was doing at work and enthusiasm for my personal projects. Rather than recognizing that I should find a job I was passionate about or spend time on projects that excited me, I dug my heels in. No longer.

At one point, I said a Nintendo emulator was my forever project. I'd still like to see it taken further but I'm not going to work on that now. Belligerently sticking to those guns has been limiting my own potential. The only purpose of personal projects is to learn and to grow. They are mine and no one else's.

So until further notice, the emulator is on the backburner. Coleslaw will still get maintenance work but probably not much feature development. There are new things I'm fired up about and my focus will be on deriving as much momentum from them as possible.

Going Forward

I'm playing with Renoise and trying to pick up some music theory. I'm still not really making songs but I'll get there. I'm continuing to learn melee and now that I have a real training regiment in place I'm seeing much faster improvement. Hopefully I'll make it out to local tournaments every now and then.

I want to become more structured about practice. That includes starting to chip away at the stacks of CS and programming books I own that I haven't gotten around to reading. And experimenting with new tools like Ocaml, OpenMirage, and Ansible. And making room for play where nothing gets done.

I need to learn how to love and care for myself in spite of how much I get done, in spite of visible progress made or unmade. Part of that is going to be taking back my online presence, away from the more cultivated space of the last few years. There's a lot I want to accomplish over the next year or so. I'm sure plenty of what I learn won't be according to plan. But it's time to get going. It's time get organized. It's time to dig in.

Dear Hackers

posted on 2014-07-16 12:33:00

(In which I talk about my feeeeeeels)

Disclaimer: This post comes in the middle of an existential crisis. I'm struggling a lot with programming as a career choice and feeling disconnected from a community of excited hackers. These feelings and opinions are my own and I think it's totally fine if you don't subscribe to them or want to write me off as an F-ing idiot.

Love First

A lot of the ideas in this post have been buzzing around in my head since I saw Jen Myers deliver her keynote at Strangeloop last year.

I've been keeping my thoughts in my head mostly because I'm already an established programmer. A lot of the motive for the talk was to be more welcoming to newcomers and minorities that struggled to be included in our communities. But I think this problem affects all of us, every last one, regardless of gender, race, or class.

The short version is that I think the tone of programming communities, especially online ones, is horrific. It's filled with religious debate over things less important than getting people excited about and interested in computing. For me, whether it's smart people posturing for social status or individuals genuinely trying to enlighten others is irrelevant.

Our first reaction to any comrade, any other person passionate about and interested in building things with computers, any human crazy and masochistic enough to try and expand the capabilities of these absurd machines, should be empathy and love.

This may seem ridiculous at first glance. It's harder than it sounds.

The Same Old Arguments

You already know the religious wars I'm talking about. They're silly little things. Are static or dynamic types better? (For some, is there even such a thing as being dynamically typed?) Is Vim or Emacs better? Should I learn programming with PHP or Haskell? Should my app use JSON, XML, or a self-describing binary format? Is programming math, art, or craft? Can code be literature?

For a host of reasons, these are questions we have a vested interest in. And I think, more often than not, our motive is to encourage more learning and exploration. But the conversation is almost always full of condescension and judgment, especially if the medium for response is limited. We simply cannot let supporting curiosity become secondary to proselytizing "the right thing".

Plain and simple, turning a prompt for exploration into a right-or-wrong religious debate is curiosity destroying. And that's precisely the opposite of our intent, the opposite of what we as a community should aspire to.

Our opinions are important, and I'm not precluding the existence of a right answer. But someone pondering a tricky subject isn't best met by bludgeoning them over the head with a conclusion. As long as the principal motive of those we interact with is the fractal question "Why?", we are together.

This connects to a lot of things. It connects to people wondering if they're good at programming, or how to know such a thing. It contributes to impostor syndrome. I've struggled to hack on hobby code for fun because I don't feel like I can be proud of it. Not smart enough, not groundbreaking enough, not important enough. And I know that's silly, because there are more important things to worry about.

So the more we can get away from emphasizing that the most important thing in programming is being right, the better that will be for newcomers, for hobbyists, and I believe, for all of us.

Epilogue

I'm reminded of an Alan Perlis quote in SICP:

"I think that it's extraordinarily important that we keep the fun in computing. ... We began to feel as if we really were responsible for the successful, error-free, perfect use of these machines. I don't think we are.

I think we're responsible for stretching them, setting them off in new directions, and keeping fun in the house."

I'm not perfect at this either. It is difficult to never be dismissive, let alone to always be gentle. But sometimes people are just trying to make it through the day. Not use the best tool, not come up with a groundbreaking solution, not fix the world. We need to try to meet other programmers where they are. Not move them to our habitat before empathizing, before loving.

Ironically, I know this has been a bit of a high-horse diatribe. At least let me give you a gift for coming so far and listening to me ramble so much. Here, have something I love, bits of Milosz:

To whom do we tell what happened on the earth,
for whom do we place everywhere huge mirrors
in the hope that they will be filled up and will stay so?

I think that I am here, on this earth,
To present a report on it, but to whom I don’t know.
As if I were sent so that whatever takes place
Has meaning because it changes into memory.

To find my home in one sentence, concise, as if hammered in metal.
Not to enchant anybody. Not to earn a lasting name in posterity.
An unnamed need for order, for rhythm, for form,
which three words are opposed to chaos and nothingness.

What did I really want to tell them? That I labored to transcend my place and time,
searching for the Real. And we could have been united only by what we have in common:
the same nakedness in a garden beyond time, but the moments are short
when it seems to me that, at odds with time, we hold each other's hands.
And I drink wine and I shake my head and say: "What man feels and thinks will never be expressed."

Dozing Off

posted on 2014-05-07 15:13:00

Life is going pretty well. Norma and I have moved into a new apartment. I'm figuring out how to balance work and my other goals. My student loans will be paid off by my 28th birthday in August.

I decided to work from home today. I slept poorly, I think it's the pollen. I've been thinking a lot about what I want lately. Neither Academia nor Industry quite seem to fit. Academia only cares about work that advances the state of the art in specific subfields, Industry only cares about work that advances the bottom line.

My goals don't quite fit in with either of those things. I want to write software to help people understand how other software works. Specifically, a Nintendo Emulator and set of tools for observing and modifying old games on the fly. And so I find myself thinking about how to work fewer hours so I can find more time for my 'art projects' without sacrificing hobbies, relationships, and a social life.

I've been too drowsy today to get meaningful work done on work or hobby projects, but here's what I thought about in the shower:

  • I should add a proper JIT compiler to cl-6502 that uses the "compile-to-closures" technique described by xach.
  • I should fix trowel so that it can correctly compute the control flow graph of simple (NROM) NES games that aren't self-modifying. Like I meant to do last summer.
  • I should implement the UNROM mapper for famiclom using neth, sprocketnes, or tenes for reference if needed. That way, I could play with Mega Man 1 and its annotated code in addition to Super Mario Bros.
  • I should start on a lispy macroassembler/compiler to 6502 because there are idioms to capture in these games and neslisp isn't gonna cut it.
  • Also, I thought about adding crossposting support and 'embeddables' to coleslaw briefly but that doesn't count. That's my one halfway 'practical' piece of software. People do like to blog.

Seriously, is there somewhere I can do an MFA but really just write weird artsy software for 2 years?

Oh, well. Time to take a nap and then try to write some code to find Biconnected Components in C again.

2014, Day One

posted on 2014-01-01 14:49:00

What's new?

I've been away for a while and I needed it. My priorities in the past 6 months have shifted pretty drastically from the last few years "hacking, blogging, hacking, blogging". It was a long overdue shift to grow in new ways, form new relationships, and rediscover old hobbies. So, here's the latest:

I Love Smash Brothers

For years, traditional competitive sports haven't clicked for me. I compare myself to others reflexively but avoid active competition. I'm trying to compare myself to others less, bad habits die hard. But I encountered a documentary series about Smash Brothers back in October and was reminded that a video game is the one place I've found competition fun, win or lose.

It's crazy how much free time I've spent since then learning about a game I'd already put a few thousand hours into in college. There is incredible depth to the game and while I grant that calling a video gamer an "athlete" sounds ridiculous on its face, I now believe eSports are deserving of a mainstream audience even if they never find it.

Personally, I'm enjoying getting better at the game and learning to be patient with my own progress. I've gained some appreciation for how people get so excited about traditional sports. I'd strongly encourage you to watch the first episode of the documentary if you have any interest in competitive gaming whatsoever, even if you think the very notion silly.

I Love Electronic Music

I've told myself for a long time that I would try to make music one day. I've played the guitar and the drums though am self-taught at both and never got serious enough to develop a real aptitude. I also have a long held love of electronic music, particularly sample-based wizardry such as Amon Tobin's Supermodified.

I'm finally pursuing this passion. I've purchased a copy of an old-school "tracker-style" software called Renoise. While I'm not composing actual songs yet, I've been greatly enjoying sampling music and video games from my youth and constructing odd melodies and instruments. I've also been learning the basics of sound synthesis from my friend, Matt Simpson. Sound design is a crazy, crazy thing.

I Love My Job

I've been working for Emcien since May and it's been a great environment to grow as a software engineer. Aside from me, there are 5 engineers and I've been able to pair with people to quickly get up to speed on the products and learn new tools and techniques. In particular, I've enjoyed doing my first serious C hacking ever on the engine that powers Emcien's data analytics products.

Epilogue

I've also spent a huge amount of time this year with my beautiful girlfriend, Norma, and her two dogs. I've tried to see friends in town a bit more, I've played video games and read sci-fi novels a bit more. I'm remembering what leisure feels like and I have no regrets. I still want to finish the Lisp NES emulator and other projects but I'm branching out for a little while ... and my timeframe is flexible. Good luck with your 2014.

Beloved Games

posted on 2013-10-19 14:49:00

I'm still on a break from recreational programming. I've been gaming a bit to remember why I was writing an Emulator in the first place and got the idea for this article. Here are 16 games that left a major impression on me (and 4 honorary mentions) presented in something close to Autobiographical order:

Elementary School:

Middle School:

High School:

College:

Present:

Certainly there have been other titles/series I've enjoyed putting hours into: Naughty Dog's Uncharted, Bethesda's Skyrim, Borderlands, and so on. But the above are the games which uniquely effected me. Each holds special nostalgic value, many represent discovery of a genre or fictional setting that I've come to love. Hell, the Tony Hawk's Pro Skater series got me skateboarding in real life and I'm not sure I would have owned an Acura NSX if not for Gran Turismo.

It would be fun to do a similar list for Movies (would I have become a programmer without Hackers?) or Music. I'll call this good for now. :)

Finding Time

posted on 2013-09-16 10:23:00

My Recent Absence

You may have noticed it has been two months since I've done any serious hacking on my open source projects. That is no accident. It has been a little over 5 years since I decided that programming would be my future.

That decision worked out far better than I could have hoped. I find programming immensely rewarding and, for someone who has only been doing it for 5 years, I think I'm doing reasonably well. I have a steady job that I'm happy with and rewarding friends and hobbies.

But I'm tired. I'm stepping back and trying to take stock of how I use my time at a high level. I'm not micro-optimizing. I'm asking, for the first time in quite a while, how I want to divy up what free time I have and what my priorities are. I'm not sure when I'll come back to programming. I am sure that when I do, my focus and enjoyment of it will be improved. But there is so much I want to do besides code.

It's been a big year. I had two jobs before my present one. I briefly had a supercar. I started a new relationship for the first time since 2007. So perhaps it is no surprise that I haven't found as much time for hacking. That other forms of creation have fallen by the wayside a bit.

I miss the huge chunks of time I had in college. I want to both consume and create. To consume music, video games, MOOC courses, books I've been meaning to read for ages. To create code, mixtapes, music of my own, and who knows what else. But even though its hard to think of all that I get done versus all that I want to do and each weekend flies by like a screaming jet, I have to admit that things are going pretty well.

To New Beginnings

On Inaction

posted on 2013-03-04 16:28:00

Seeing Value

I've been experiencing the Dunning-Kruger effect a lot lately. At least, I've been feeling like a fraud. And while I could list reasons I'm not a great programmer, asking why I felt like a fraud has led me to something more interesting. I don't think I've worked at a company where I knew "where the money is coming from". What does that mean exactly?

  • I haven't worked for a company whose revenue comes from a product I use or want to use.
  • I haven't worked for a company in an "obvious" growth market.
  • The software I write generates revenue indirectly through customers I never interact with.

All of this creates a surprising problem for me: The value I add is opaque from my perspective. I take it on the word of my superiors and peers that any value is present. This makes it essential that I trust and enjoy working with those people.

The Mythical Customer

It might not be immediately apparent why this is a problem. Find a company with decent people and culture and you don't need to be directly connected to the product or customers. Just churn out code and have fun. Advertisers will foot the bill. While it's true that you can sustain a business this way it certainly isn't ideal. The issue comes from just how decoupled the product becomes from the revenue. When it's time to grow revenue, you have to do it by attracting more eyeballs. Here's how that works:

  1. A Product Manager decides on new features or a UI overhaul to increase site traffic.
  2. Programmers implement those features with small tweaks and adjustments.
  3. The changes are released and traffic is measured for an increase. A good shop will use A/B testing to try and at least ground these decisions in data.
  4. Improved numbers are sent to advertisers to garner more customers and/or revenue.

But Product Managers are not users. Programmers are not users. Advertisers are not users. Sure, we use the product some to verify the code works during testing but we're not invested in it. A/B testing is not the same as user input. There is also no requirement that you correlate traffic with actual perceived value. Many companies just read traffic AS perceived value. Frankly, that's bullshit. Our loyalty is necessarily to the advertisers. They pay us...but the users are the real customers. The product just happens to be paid for by collecting data about how they use it.

So What?

Thus far, none of this should surprise anyone who has worked in the tech industry. Hell, this shouldn't surprise anyone with a Facebook account. It points however to a serious cultural problem in many tech companies: not letting (or demanding) your technical experts be, well, technical experts. A friend of mine calls this "{} for $". Many people rant about this as "Taylorism in software". It cannot be overstated that no programming paradigm nor software engineering methodology will eliminate the need to connect engineers to the product. Similarly, letting the engineers take the reigns is not anathema to good product design or improved value to the business. And this is not new. Quoth Don Eastwood in a 1972 Status Report on MIT's Incompatible Timesharing System:

"In general, the ITS system can be said to have been designer implemented and user designed. The problem of unrealistic software design is greatly diminished when the designer is the implementor. The implementor's ease in programming and pride in the result is increased when he, in an essential sense, is the designer. Features are less likely to turn out to be of low utility if users are their designers and they are less likely to be difficult to use if their designers are their users."

Earlier in the report, Eastwood says, The system has been incrementally developed almost continuously since its inception. Hello, agile kids. I'll say it again. Any company pretending that software engineering methodology or a given technology replaces the need to connect engineers with what they're building deserves to be skewered. The reason knowing "where the money is coming from" is so essential is that software is different than any other product in history. Because the design in a fundamental sense is the product. If you don't know what I'm talking about, I'd encourage you to watch Glenn Vanderburg's talk from RailsConf 2011. If your engineers don't understand the reason for what they're building, then the product can at best accidentally support the business. If you think you or your company can just scrape by for your whole career without getting eaten, I'd encourage you to reevaluate that assumption.

Finding Alternatives

One big reason most companies are hierarchies more concerned with maintaining market position than creating value is the inherent risk. Real growth comes from bets and empowering people to change what's needed to find "a better way" or "The Right Thing"...and that's terrifying. Few individuals or institutions have the guts, bravery, and stamina for continuous reinvention. It's exhausting. Not to mention that it puts the focus squarely on a company's employees. It seems our best chance at winning big comes from those kinds of risks though. Github and Valve's experiments in distributed management are a brilliant step in this direction.

In the Interim

A lot of what has had me feeling like a fraud is remembering how much I have to learn. Learning is a kind of reinvention itself though and one of the reasons I've loved computers since the beginning. So I'll keep learning and next time I'm in a programming interview, I look forward to asking the other hackers, Do you know where the money is coming from?

Welcome to the Future

posted on 2012-12-13 21:12:00

It's late 2012. I'm writing this in a gaming bar watching hopefuls for the next National Street Fighter Tournament practice. The FBI have lost track of a modern political dissident, a hacker vagabond by the name of Commander X. Last night I attended an escapist lightshow of a concert, where kids burned their brains out "like neon novas". Drones police the New York skies. My online handle is more crucial to my professional career than my "True Name". I drive a veritable supercar knowing that once self-driving cars are commercialized, classical driving could be a luxury if not slowly phased out altogether. I was born in the sea of information and raised by the sound of dial tones. The cyberpunk aesthetics of the 90s are quietly, imperceptibly interleaved into modern life. But like Alan Kay, I believe the computer revolution hasn't happened yet. My 10 year old self has everything he ever dreamed of. Time to come up with bigger dreams and see what's next.

Stalling in India

posted on 2012-10-16 18:10:15

I've been in India almost 10 days now and I'm still not really ready to say anything about it. I return October 20th. I am enjoying the trip immensely however. I've spent time trying to experience India, shopping and being a sightseeing tourist, reconnecting with old friends, and resolving a longstanding personal question. At some point there will be pictures but for now, since I'm having trouble finding my own words, here are some from my favorite writer:

"They are made of amorous dough. As soon as they turn twelve, love has begun to take them somewhere. They see its glowing torch from afar and follow it through the half-light of childhood..." - Carlo Gozzi, Memorie inutile

Elegy for Y.Z.

A year after your death, Y.Z.,
I flew from Houston to San Francisco
And remembered our meeting on Third Avenue
When we took such a liking to each other.
You told me then that as a child you had never seen a forest,
Only a brick wall outside a window,
And I felt sorry for you because
So much disinheritance is our portion.
If you were the king's daughter, you didn't know it.
No fatherland with a castle at the meeting of two rivers,
No procession in June in the blue smoke of incense.
You were humble and did not ask questoins.
You shrugged: who after all am I
To walk in splendor wearing a myrtle wreath?
Fleshly, woundable, pitiable, ironic,
You went with men casually, out of unconcern,
And smoked as if you were courting cancer.
I knew your dream: to have a home
With curtains and a flower to be watered in the morning.
That dream was to come true, to no avail.
And our past moment: the mating of birds
Without intent, reflection, nearly airborne
Over the splendor of autumn dogwoods and maples;
Even in our memory it left hardly a trace.
I am grateful, for I learned something from you,
Thought I haven't been able to capture it in words:
On this earth, where there is no palm and no scepter,
Under a sky that rolls up like a tent,
Some compassion for us people, some goodness
And, simply, tenderness, dear Y.Z.

Swanky Developments

posted on 2012-09-04 13:22:05

Now that the i's have been dotted and the t's crossed I'm pleased to announce I've accepted a new job. Starting September 17th, I'll be a Senior Developer working for Primedia. I'll be helping them migrate from ruby to clojure. I've been meaning to spend more time hacking Clojure as it is. I'm particularly delighted that I'll be in something of a teaching role and able to share my knowledge and experience with lisp with interested hackers.

CMGdigital has been a phenomenal place to work for the last year and I'll miss everyone there dearly. I wasn't looking for a new job but Primedia found me and this was in many ways the right opportunity at the right time.

I'm also very excited for the arrival of Leiningen 2.0 and happily running the latest preview. After using quicklisp, I disliked having to setup a mock project to experiment with arbitrary libraries in Clojure. Leiningen 2 uses a library called pomegranate under the covers which allows modifying the REPL classpath. Thus, dependencies can be easily added to a running REPL and experimented with!

In other lispy news, the dream of endless swank backends and SLIME on everything has died. Previously, I had coerced SLIME into running Clojure, Scheme, and Common Lisp simultaneously and knowing which filetypes to associate with which repls. It took a lot of fiddling. I actually had a rant against the proliferation of swank backends for other languages like Chicken Scheme and Clojure happening outside the main SLIME tree. Anyway, between Emacs 24 shipping package.el, marmalade, nrepl.el for Clojure, and Geiser for scheme, the situation has resolved itself even if the infinite SLIME dream is dead. And ultimately, that's better for hackers everywhere...so who am I to complain? :)


Unless otherwise credited all material Creative Commons License by Brit Butler