So. I have a cat now.
I've found three main ways in which artists make art. The first is to show people what the world is like: you observe the world around you and translate it into something that others can experience secondhand. Audiences from the world you're describing might find your art relatable. Audiences not from that world can get a glimpse into it and build empathy for the people in it.
The second way is to show people what the world should be like. You can show who you are by adding your own commentary to a state of affairs. In some cases, you must first identify the unidentified and name the unnamed so that others can understand what's wrong, so they can help take action against situations they previously didn't realize require change.
The third way to make art is to create new worlds. This method is probably the hardest because you have to do things that haven't been done before. If you push right up against the boundaries of what's commonly accepted, sometimes you can break through those boundaries and forge new paths, leaving others to follow in your footsteps. Sometimes creation evolves naturally from showing people how the world should be. Sometimes it develops on its own, separate from any hope of action on the existing world, because you've found that this world is broken beyond repair.
I feel like the third method is more intuitive for artists who are on the margins of mainstream society, because it's imperative for them to create their own worlds to belong in, worlds they feel safe in. They push against the boundaries of acceptability because society has already forced them to those edges. Their continued survival depends on their resourcefulness and ability to expand the tiny margins in which they are allowed to exist.
The art spaces that people will remember years from now are the ones that cater to these margins of society. They'll succeed because they intuitively know where the edges of society are; the people who work for and with these spaces live in those edges. If you want to know where to go to see what will set tastes five years from now, follow the queer kids. Follow the drag queens. Follow the strippers, the drug dealers, the people who must resort to measures outside of polite society to survive. Follow the trans kids of color. Follow the nonbinary kids who dress so outside of the norm that they risk getting catcalled or ganged up on if they walk on the sidewalk in broad daylight. They're the ones who flock to these places because they have nowhere else to go to be themselves. That's where new worlds are being created. That's where you'll see something you've never seen before.
(But for heaven's sake, don't follow them if they don't want to be followed. Some spaces are theirs alone to feel safe in.)
I've spent the last year thinking about what I want to spend my life doing. It stemmed from thinking about what I want the world to become. I woke up a lot of mornings not convinced that what I was going to do that day was ultimately useful to humanity. There was no way I could continue living life like that.
What I'll actually spend my life doing partly depends on what can realistically be done and what I am capable of doing. But my priorities, and the tradeoffs, remain the same.
My large-scale priorities, in vague order:
- Help humans get their needs met
- Achieve human equity
- Stop killing animals
- Stop destroying Earth for funsies
The corresponding large-scale goals:
- Implement baseline food, shelter, health care, education, and other needs
- Convince society to destroy structural discrimination / Pass basic human protections
- Make synthetic meat and leather / Pass basic animal protections
- Prevent the destruction of natural habitats / Pass basic Earth protections
- Develop space exploration and terraforming to support human population growth long-term
My personal priorities, in vague order:
- Make useful sh*t
- Make cool sh*t
- Bridge worlds
- Be healthy
My corresponding personal goals:
- Develop applications that help underserved communities get their basic needs met or help influence action to improve conditions for them
- Make art / Produce music / Write novels
- Connect very different people
- Exercise / Eat plants / Learn martial arts
The ever-loving and trusting idealist in me still believes helping other humans will ultimately result in a better world, so that's at the top. If you help others meet their basic needs, there will be more people who can also think about how they can improve the world and do some of these other things. Maybe not all of them would be able or willing to do so, but some of them would, and that's more than there were before.
Making art is actually part of staying healthy. I realized a long time ago that my mind starts to unravel when I go for too long without writing or making art or music. It's both a creative outlet and a way to leave something for others to enjoy and be touched by long after I'm gone.
There are secondary personal priorities, like making enough money to cover expenses, or supporting a family. Many people choose to make those priorities their main focus in life. I am clearly not one of them. I accept that I may have to dial down some of my main priorities to address those. But as long as I am able to, I'd like to focus on helping humanity at large, because anything less ambitious may not get me out of bed every morning.
The past month has been extremely difficult. I've been weathering personal and societal storms on a large scale. And this weekend saw a massive tragedy in a community I'd been part of for years. The artist of the track above was one of the victims.
It's hard to bother with sleep when you already know you'll wake up to a crushing sense of hopelessness. And yet, we're still here. In a couple of hours, the sunrise will shed light on the fact that we still exist. Maybe we'll have another day to make the most of what some people no longer have. Maybe we'll have the opportunity to help others do the same.
Developers who debug inherited codebases do a lot of what I've been doing lately, which is tracing. It's time-consuming, but like most brute-force methods, it's simple and works eventually. You:
- look at what errors you're getting
- try to figure out which function they're happening in
- go to that function
- insert a bunch of log printing functions around where you think the error is happening
- run the code again and see which logs actually get printed to the console
Unless you have asynchronous stuff happening, the last thing that gets printed to the console is directly before where the error happens. If the next line is another function, go to that function and repeat the process.
(Pro tip: if you are debugging something this way, log the name of the function you're in. You will probably forget to remove at least one of the logs when you're done, and knowing which function is printing a bajillion messages to your production console will be useful when you need to find and remove it.)
Tracing works for most debugging scenarios, but web developers also need to be aware of how the server gets information from its database (the backend) and passes it to a user's web browser (the frontend). Otherwise, you won't even know where to look-- are your errors and logs printing to your browser's dev tools console, or your server terminal?
In my company's case, the codebase's layout makes it clear which files:
- On the browser side:
- Send HTTP requests for data to the server
- Parse the data from the server
- Create views for the user using the parsed data
- On the server side:
- Receive HTTP requests for data from the browser and route them to the right data retrieving functions
- Retrieve data from the database
- Structure the data and send it back to the browser
A couple of well-established and stable Node.js libraries handle our MySQL database calls (mysql), HTTP requests (request), and server routing (express). We also use larger, newer libraries to create our user views (React) and to structure and parse our data (Redux).
These popular libraries also throw useful errors that help with debugging. For example, their error messages might indicate which files and lines an error is happening in, and I can follow those errors up from a library's files to our actual codebase's files.
This might look obvious to experienced fullstack developers, but I started as a primarily frontend dev and had to figure out a lot of this stuff on the fly, so I wanted to write it down for people who are still learning.
This month I've been busy working on a new feature for my company's book club websites, most of which are managed by one server. I spent my first few months creating internal tools, scripts, and emails, so I wasn't as familiar with the user-facing codebase as the other web developers. But we needed to mitigate our bus factor, so I decided to bite the bullet. I wanted to better understand how the different pieces of our web stack worked together anyway, and this was a small feature that touches a lot of parts of our web architecture behind the scenes. (I'll write more about the actual code later.)
One of the most important things I realized during this whole ordeal has already been written about:
We have an open office plan and just moved to a smaller building. The view is nice, but there aren't that many corners where developers can run away and be alone for a while-- places where we can get guaranteed uninterrupted focus time.
I usually like chilling with my coworkers, and a lot of them are naturally social as part of their jobs (marketing, customer service, etc). So I didn't really notice this aspect of our office until this week. Specifically I didn't notice until it was crunch time on Friday afternoon, I was concentrating on debugging a big issue that came up at the last minute, I was interrupted for the fifteenth time about whether we were going to have something ready for release that night, and everything I was trying to keep track of flew out of my head. Again.
Me yesterday, my concentration broken again
My project manager is super understanding and tried to run interference for me, but there's only so much you can do on Friday at 5pm when everyone wants to hang out and unwind while you need to get something out the door. (We have a "No Releases on Friday Night" rule, but our other option was releasing on Sunday night and putting out fires during our Halloween festivities the next day-- I put my foot down on that one.)
I managed to debug the issue and do the release eventually... after the office emptied out a little bit.