Last time we went over some super high-level ideas about how you can be a good individual contributor (that is, not a manager), purely from a technical angle. But what about non-technical ways to be a better software engineer? Let’s dive in.
I’ve spent the last two and a half years as an individual contributor across many different software projects. Over that time I’ve noticed and collected a few patterns on things that, in general, make my life easier. There are both technical and non-technical (e.g., process) things, but for this post, we’ll just focus on the technical stuff. I’ll also stay super high level since these ideas apply across different programming languages and software stacks and are thus fairly applicable. I make no claim to originality here, and this is really just a brain dump that I wish I could have given to a younger version of myself. And of course, these aren’t hard and fast rules that must be obeyed, but are really just heuristics. If they don’t work for you, don’t use them!
“How do the weak leverage justice against the powerful?” This is a short snippet of a Locke quote we need to dive deeper on. Some initial thoughts here:
- Black Panther: where we found the quote in the first place. Both protagonist (the Black Panther) and antagonist (the People) believe justice is not being executed. They are the weak party and must bring justice to the other, through physical force. Why not via different means? This sentiment is well captured here:
These are undeniably powerful words. We’ve seen Captain America lose the world he came from (the 1940s), and at this point in the story, he’s spent over a decade stranded in Dimension Z. Being suddenly thrust back into the modern world, he has lost his adopted son and fiancee (this is temporary, but he doesn’t know this). Burdened with loss and sorry, Cap must find an answer to an existential question: why should I continue? Or, to put it a different way: how do I find purpose and carry it day by day, when the world simply does not care?
Cap is asking a question that drives at what it means to be alive, and it’s one that resonates with me. Jonathan Hickman and Rick Remender tackle these questions in very different ways in their works, so let’s see how their characters face existential dread and try to rise above it.
More than two years ago, I started reading Avengers by Jonathan Hickman as a bit of a gamble. I’ve always loved the X-Men, but the Avengers are fairly new territory for me. But when I saw that bottom panel, I was hooked. I had to figure out what it meant, no matter how long I had to wait, no matter how many issues of Avengers and New Avengers I had to buy. And Hickman doesn’t make it easy. His words are powerful but subtle. One line casually thrown around solves an entire mystery, while whole issues are spent building up ideas that don’t seem to go anywhere. And as Avengers and New Avengers have ended, and into Secret Wars (issue #4 at present), I can finally try to unravel the onion that is the quote above.
I see the jackals waiting to pick at the carcass of my own legacy, which, like Amy’s illusions, I wanted to shape into something pleasant, but has quickly spoiled under the influence of my own darkness. – Magneto, issue #17 (written by Cullen Bunn)
Let’s talk about Marvel’s most-recently-wrapped-up event, AXIS. The premise is simple enough to start with: the Uncanny Avengers, a team of X-Men and Avengers working together to make the world a better place, run into the Red Skull, who has been given a huge power upgrade in the form of Professor X’s brain. They defeat him early on but fail to capture him, and get distracted by other baddies throughout the series, so they don’t end up actually capturing him. This gives the Red Skull and friends the time they need to hatch a scheme to “save the world from the scourge of mutantkind”. And for such an irredeemable villain like the Red Skull, series author Rick Remender does an excellent job of explaining his motivations.
The now-super-powered Nazi keeps true to his old motivations of needing to dominate others to make himself feel better, but gains a new quasi-heroic “motivation”: he’s trying to save the world from mutantkind. This works great in two different ways. First, it serves his purpose of needing to dominate humanity, because he’s the one saving them from mutantkind, and he expects to be worshipped by humanity for being their savior. Second, he does make a good case that humanity needs to be saved from mutants. Their powers are so all over the map that it would only take a single mutant to destroy the Earth. But it’s clear this is a secondary motivation, since the Red Skull tells Captain America that he also needs to save humanity from itself. He sees humanity as a bunch of fat slobs who need their junk food and reality television, and that he will save them from the nightmare they’ve dreamt up for themselves.
So you’d think that AXIS would be an “everyone vs. Red Skull” dogpile. And you’d be totally wrong. It instead is a story with no one villain, and no one hero, and throughout, who is a hero and who is a villain changes. To quote the marketing material, “there’s a fine line between good and evil”, but perhaps a different way to look at it that’s equally true is Nietzsche’s line from “Beyond Good and Evil”:
You who fight with monsters ought to see to it that you do not become a monster yourself. And when you gaze into the abyss, the abyss gazes back into you.
After picking up a Nexus 7 tablet, I’ve started to get back into the habit of reading once again. With that, let’s take a look at an extremely fascinating read that I stumbled across, “The Black Swan: The Impact of the Highly Improbable.”
A nice habit that I picked up from the Pragmatic Programmer long ago was the excellent idea to commit to learning one new programming language a year. In the past, I’ve called this “the perennial Java problem”, referring to my search to find a language that “sucks less than Java”. This is a bit vague and perhaps unnecessarily offensive, so let me clarify it by saying I want to find a language that “can be used for actual programming and is less verbose than Java.” With that, I’ve been reading Dave Thomas’ Programming Elixir, an excellent read for programmers looking to learn the Elixir programming language. Since the idea is to use Elixir in a “real world app”, let’s go over what Elixir looks like for an app I wrote to help me get better at chess.
By day I’m mostly working on what you’d call “backend programming” in AppScale-land, so every once in a while I like to take on something a little bit different. This time, I wanted to make a web application that solves a problem I periodically face: sometimes I want to send someone a file, but only let it get downloaded once. It’s a fairly trivial app to write with the Google App Engine framework, but for the web interface, I wanted to mix it up a bit. So this time, I checked out AngularJS and threw together JustOnce – an open source app that lets you share files that can only be downloaded a single time.