As you might be able to tell, math vs theoretical CS vs programming has been on my mind a lot recently.
I have to thank everyone who makes me think about these problems as I explain various ideas to them, because I wouldn't have thought about them otherwise.
I think it's fair to say that most STEM people who have much contact with pure math are of the opinion that it's one of the most beautiful things a person can spend their time doing.
At least, from a STEM perspective. Sure, you could do ballet or make art or be a musician or something, but those are all "obviously" beautiful things.
What is beauty in STEM? I think most people would first point to math, because it's considered more aesthetically pleasing, more perfect, and more difficult to produce than anything else in the hard sciences. Indeed, I very rarely hear anyone else in STEM, sans theoretical physicists, talking about their field like it's beautiful.
And, well, of course the theoretical physicists would. They're mathematicians, basically.
If we narrow our scope to CS (I'm specifically excluding frontend design) for a moment, there's this conception that most of the field is ugly, especially day-to-day work, and that the only thing of any aesthetic value you could be doing is theoretical work.
Occasionally, there will be some cool or cute thing some past programmer put in a codebase that you'll call a friend over to look at.
But these moments are outstripped by those where you pull your friend over to look at something stupid or downright horrifying, and this has skewed our perceptions of what we're doing.
Many people I've spoken to over the years insist that software development and CS is at its best in the design phase, when you're standing in front of a whiteboard.
And, well, yeah, I like being in front of a whiteboard too. For me, it's algorithmic or other theoretical work. It might even include, gasp, math.
For you, it might be software architecture. I know more than a few orchestrators that would love nothing more than to sit and design systems all day and to give their Visio diagrams to other people who actually implement the system.
We even have a disparaging word for implementers: code monkeys. Because we don't actually value people who write code, we value people who can do design work. Code is actually valued very little.
Now, obviously design work is important. Requirements are king when you're designing a software system. Our current priorities when it comes to software development are relatively correct, at least as far as this thread is concerned.
But this attitude towards code -- that it's valueless compared to design and more "theoretical" work -- pervades the field in a way that's more basic than in a software architecture sense.
This attitude affects our perception of our entire field.
In the end, a programmer has a weird job. They're equal parts general and soldier, or designer and construction worker, or whatever other hamfisted metaphor you want to use that's not quite right.
We don't value what we spend the majority of our time doing, and by extension we sometimes feel as if our field is of less worth than others.
What does a mathematician do when they're not talking to colleagues or writing papers? They're doing math, obviously, and they by and large love the process. Very few people become mathematicians because they like committee meetings and reading groups -- they like it because math is fun to them.
This goes for theoretical physicists, too, by the way.
I could go on in this vein for awhile, surely. But the interesting question to me is:
Why can't programming be beautiful the same way math can be?
I mean, have you ever stopped to think about what you're doing for a moment?
As a programmer, you write constantly shifting descriptions of a model of a process that itself models a strange and infinitely complex external universe, which itself might be a process modeling another universe running on computers made of --
When you write a computer program, you're starting with a blank text file and somehow you're able to transcribe your thoughts about how the world ought to be in an esoteric language and then have those thoughts *come true*.
Like, do you have any idea how powerful this is? If you can model a process, you can perform the process.
I can't woodwork. I can't really make anything physical with any degree of skill, actually. I'm trying to be an artist, slowly, but that takes time. Maybe I'll get there eventually.
You know what I can do right now? I know how Fibonacci numbers are made. With a tiny bit of effort, I can model the process by which they're created and summon them from nowhere. In fact, I can instantly summon millions of them, just by talking to a machine.
Math is beautiful, but in the end, you can't execute math. Someone else has to do something with it. Maybe you modeled something useful, or maybe you're just doing it for the fun of it.
If you can talk to a computer, and you can think, you have the ability to do things nobody else can, because you're creating a process that can actually do something. Right here, and right now. By yourself.
Not only that, but it's possible for this to be an aesthetic experience, like math.
Maybe you only care about the results of executing code. That's fine.
But it doesn't have to just be that, if you don't want it to be. You're executing your thoughts and opinions about the world -- have some fun with it!
You might surprise yourself with how much you could enjoy programming for its own sake, rather than just to solve other, more interesting problems.
Go outside. Take a walk. Think about the ideal way to put your thoughts down in electronic form.
Come back. Write beautiful code.
How's that for an algorithm?
Jazz.af is a microblogging community for tech creatives. Talk about what you're making, or just hang out. Chill, like jazz.