posted on 2021-12-31 15:15:00
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.
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.
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.
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.
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.
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.
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".
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.
posted on 2020-02-01 22:45:00
I often tend to judge myself, at work and outside of it, on my output. Old habits are hard to escape. But there are a lot of reasons this is an instinct to be resisted. First of all, if you're tackling suitably interesting projects it may be hard to predict progress or even define good stopgap goals. Many people experience cultural pressure to measure themselves in terms of their output or to be efficient in all things they pursue. That distortion in what we value often leads to a lopsidedness in our goals and pursuits. There are two defenses that have stuck with me lately against such ideas. So I want to tell you about them in the context of last Sunday when I was unfocused and then anxious about having spent my time that way.
In a single Sunday I got excited about: 90s techno (Tri Repetae, Hard Normal Daddy), new techno (Djrum, HVL, John Talabot), Smash Bros Melee both for its depth to competitors and my choice to be only a semi-serious player, a study group I started at work to go through Crafting Interpreters, making music with Modular synths, making music with Renoise instead, Open hardware efforts like Pine Phone and MNT Reform, Grammatech's open source SEL project for doing Binary Analysis and modification with Common Lisp, InterimOS, and a slew of other odds and ends.
Even if these cluster around nerdy themes, that's an awful lot to enjoy in a single day. It's easy to lament that nothing was produced, that there is no output to share, but that ignores the fact that being plugged in to so many things often means forgoing total immersion in a single piece of subject matter. And there are network externalities at work too. Discovering music means I can play it next time I co-host The Mobius on GA Tech radio with my buddy Matt. Being aware of software and hardware projects means I can share resources with other hackers.
But all that wasn't enough to keep me from worrying that I don't focus enough. Or I focus on the wrong things. I had a performance review coming up at work so that might have had something to do with it. Even though the company has a relaxed culture, I'm a worryer and a catastrophizer by nature. I was getting worked up over the fact that I don't ship as much as some other members of my team. I was trying to imagine exactly where the bar was and what objective, quantitative measures would be used to evaluate my performance. I was thinking about how I had never felt like I was the developer doing the most challenging or glamorous work at my past jobs and I still had a slower rate of shipping tickets than those taking on that challenging work.
After a little while, I thought especially about Emcien. Emcien was a great opportunity for me and a cool Ruby/Rails shop to work at. I was there from early 2013 to late 2014. More so than other jobs I've held, I think of things at Emcien as having gone sour even though I left in decent terms. I got into a negative headspace about the value of my work and its perception in early 2014 and that re-inforced until I was dragging my feet constantly. I wound up putting in my notice because I was unhappy, but the work environment didn't do it, I did it to myself. So, did it end in failure?
Here's the really interesting part. After I left that job, where I assumed I was a waste of money and possibly resented for not being a bigger contributor, I wound up becoming the best man of one of the engineers and a good friend and confidant of another. There were 5 devs total, including me. The 2 jobs I got immediately following Emcien were working with those two individuals and they both had positive things to say about me during the interview process.
How do we explain this? There are a few possibilities I can think of. One is that I actually was just as productive as everyone else. Another is that even if I was less productive I was working on things others were not excited to work on and that freed them to do what they were passionate about. But the explanation I like is that while I shipped less code than my peers, I made sure they felt great every day. As much as I was able, I shared energy with them and supported them in their efforts while still making progress on my own tasks, even if a bit slowly. I just loved on them.
It's easy in software to get fixated on people working on the most impressive or high profile projects. I can get tunnel vision thinking about career growth as only coming through huge expertise. But even as a software engineer you can be as valuable for how you support others as for your individual efforts. It could be more important to your career goal to be energizing and well liked than productive. Which isn't to say you should go be popular and ignore your work, just that focusing only on output distracts from a more realistic view of how people function as part of a team.
I sometimes struggle with my instinct to be unfocused, or am ashamed I'll be thought of as a dilettante or dabbler, as if the only respectable option is to be myopically focused on one area of knowledge. To have one project of grand scope. I need to remember, and I imagine I'm not alone, that embracing my varied interests both nourishes me and is a valid choice that can enrich the communities I particpate in.
And that's enough of my soapbox for one day. Happy Hacking.
posted on 2015-02-21 15:18:00
For years, I've been focused on production. Even my "relaxing" activities aside from throwing dinner parties or going to concerts with friends have been productive in nature.
You get the idea. For the past 5 years or so, I've been terrible at doing things purely for recreation and fun. I struggle not to think of it as "wasting time". I'm always anxious about my technical abilities, my ability to find employment, my preparedness for the future. Rationally, I know that's all pretty ridiculous but I struggle to unwind all the same.
Work life balance has for a while seemed a relic of a bygone era. But I want to turn that around this year. Ironically, I've worked more 50 and 60+ hour weeks this year than any previous one. It turns out becoming responsible for the education of 15 people in a 12-week programming bootcamp is pretty demanding. That's why I'm listing these purely recreational goals to try and commit myself to doing some things just for fun.
posted on 2015-01-01 18:15:00
I've been in a technical rut for a while. Sure, I learned new things at my job but limited myself outside of it by sticking to projects I wasn't motived about and only working with tools I was familiar with.
As much as anything, 2015 is going to be about playing with new projects, experimenting with new tools, and focusing on fundamentals again. Seeing as I have 3 big goals here, I might just try to tackle one each semester. :)
To that end, my primary goal will be to learn Ocaml and build something cool with it. I'm leaving that just as open ended as it sounds.
I'm interested in Ocaml for a variety of reasons. Its origin dates from a time before Intel and Microsoft created a 20-year dominant platform. It was envisioned as a systems language, much like Lisp, to compete with C++.
That said, it employs pattern matching and a strong, static type system like Haskell. Unlike Haskell, it has a fairly simple runtime and compiler built to give very clear intuition about code performance. While Ocaml is strongly functional, it provides for use of imperative state without monad machinations (sorry @James).
There are other reasons but I think this is a good start. I'd be interested in everything from writing an IRC bot, to scripting tasks, to NES reverse engineering tools (i.e. lots of graph manipulation), to OpenMirage toys.
I've leaned towards backend work in my career where possible. After helping TA Tim's Frontend engineering course last semester I finally want to pick up some front end skills. I'm not angling to get much better from a design or HTML/CSS perspective, but have a definite interest in mithril and Clojurescript's om. Elm also seems really cool but I'd prefer to stick to slightly less alien tech for the time being.
I'm considering porting my Nintendo emulator to Clojurescript and getting it to use canvas but I worry about getting bogged down as I did with the Lisp version. It was fairly painless getting a rough cl-6502 port up in Clojurescript in a few days though.
To be honest, my algorithms chops have never been terribly good. I think one thing that's intimidated me working on trowel is a lack of confidence in my algorithmic reasonining. So I'll be working through the latest edition of Sedgewick's Algorithms with a particular focus on graphs. With any luck I'll actually make some progress on trowel. Maybe I'll even wire it to an om app with some logic programming or constraint propagation tricks.
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 ...
This blog covers 2015, Books, Butler, C, Dad, Discrete Math, Displays, Education, Erlang, Essay, Gaming, Gapingvoid, HTDP, Hardware, IP Law, LISP, Lecture, Lessig, Linkpost, Linux, Lists, MPAA, Milosz, Music, Neruda, Open Source, Operating Systems, Personal, Pics, Poetry, Programming, Programming Languages, Project Euler, Quotes, Reddit, SICP, Self-Learning, Uncategorized, Webcomic, XKCD, Xmas, \"Real World\", adulthood, apple, careers, choices, clones, coleslaw, consumption, creation, emulation, fqa, games, goals, haltandcatchfire, heroes, injustice, ironyard, linux, lisp, lists, math, melee, metapost, milosz, pandemic, personal, poetry, productivity, professional, programming, ragequit, recreation, reflection, research, rip, strangeloop, work
View content from 2023-02, 2022-12, 2022-06, 2022-04, 2022-03, 2022-01, 2021-12, 2021-08, 2021-03, 2020-04, 2020-02, 2020-01, 2018-08, 2018-07, 2017-09, 2017-07, 2015-09, 2015-05, 2015-03, 2015-02, 2015-01, 2014-11, 2014-09, 2014-07, 2014-05, 2014-01, 2013-10, 2013-09, 2013-07, 2013-06, 2013-05, 2013-04, 2013-03, 2013-01, 2012-12, 2012-10, 2012-09, 2012-08, 2012-06, 2012-05, 2012-04, 2012-03, 2012-01, 2011-10, 2011-09, 2011-08, 2011-07, 2011-06, 2011-05, 2011-04, 2011-02, 2011-01, 2010-11, 2010-10, 2010-09, 2010-08, 2010-07, 2010-05, 2010-04, 2010-03, 2010-02, 2010-01, 2009-12, 2009-11, 2009-10, 2009-09, 2009-08, 2009-07, 2009-06, 2009-05, 2009-04, 2009-03, 2009-02, 2009-01, 2008-12, 2008-11, 2008-10, 2008-09, 2008-08, 2008-07, 2008-06, 2008-05, 2008-04, 2008-03, 2008-02, 2008-01, 2007-12, 2007-11, 2007-10, 2007-09, 2007-08, 2007-07, 2007-06, 2007-05