A break from programming languages
89 points by soareschen
89 points by soareschen
Maybe this is just the Baader-Meinhof effect but it feels recently like I’m encountering “programming is theory-building” everywhere: https://gist.github.com/onlurking/fc5c81d18cfce9ff81bc968a7f342fb1 The first section at least echoes this very strongly. It does feel increasingly relevant given the current atmosphere in the industry.
So many programmers seem to practically despise what they do for a living, at least as you’d hear them describe it.
In my experience this almost always less “I hate programming” and more “I hate that my boss requires me to prioritize writing profitable code instead of writing good code”.
For as long as I have been involved with it, Haskell has predominantly been used and funded by a combination of fintech and cryptocurrency.
Weirdly Clojure has a similar vibe where most job openings with it recently have been in finance. I also feel that it makes it harder to summon any kind of enthusiasm working on tools for Clojure developers compared to my other work.
I want to work on a piece of software used by people to accomplish a task, and I want to take pride and satisfaction in doing it well.
It is rather damning of our industry that doing this professionally feels unrealistically idealistic to me.
It is rather damning of our industry that doing this professionally feels unrealistically idealistic to me.
It’s plenty realistic if you work on an internal tools or cost center team, especially in a non-tech-sector employer.
There’s also a solid industry of small and solo devs who take Xcode or Android Studio and sell useful apps on the relevant app store. Talking to some of those people, it seems like they really get to enjoy polishing their little piece, ignoring the rest of the world, and making their users delighted. Maybe I’m a little jealous?
Weirdly Clojure has a similar vibe where most job openings with it recently have been in finance.
The same is true of OCaml, where Jane Street dominates development.
Weirdly Clojure has a similar vibe where most job openings with it recently have been in finance.
Finance is profitable enough that you can excuse a smaller hiring pool, and weirder code. A lot more profit means less pressure on engineers to make specific decisions, so long as whatever it is ends up profitable.
For the first time in 10 years I am working on software not related to finance. I can’t begin to describe how much I hate writing fintech SaaS. Infinite business rules with traps everywhere. You might cause problems for forgetting how to use floating points and decimals. I don’t get excited reading IEEE standards on floating point and fixed point arithmetic. Rolling back long transactions is a big pain and there are important business invariants that touch every single part of your data at once. Customers are incredibly impatient so you introduce features faster than you can organize them and you end up if your app coupled to data (IF customer_id…).
And none of it is cool or exciting.
Now I’m on a chat-ish ia app for sales, and it has been so much fun.
Weirdly Clojure has a similar vibe where most job openings with it recently have been in finance. I also feel that it makes it harder to summon any kind of enthusiasm working on tools for Clojure developers compared to my other work.
Not sure how that’s weird? A lot of their business being in finance was known for years. I mean, Cognitect was acquired by Nubank in the end.
I should have been more specific: every single person I know who has looked for a Clojure job in the past 2 years has been unable to find any openings other than in finance. I think that’s weird. (I also think it’s weird that Cognitect was acquired by a bank.)
This was a really good read. It was not at all what I was expecting – my expectations were set super low by other blog articles over the years with roughly the same subject.
I do think that joy is seriously under-rated as a motivating factor in our industry. I was saddened to read, though, how much the “being the only woman in the room” was de-motivating for the author. So much that we can do better on, in this regard, but it will likely take concentrated effort over decades to balance this better, so “previously” was the best time to start, and “now” is the second best.
It was not at all what I was expecting – my expectations were set super low
Given the author, it was quite what I was expecting (and it was excellent). The part about “only woman in the room” reminded me of this essay.
I’m a fan of the PL work of Alexis that I encountered – on the Racket side, and then the support for primitive control operators in GHC which I think is really cool work. Best wishes!
A part of the post that resonates with me is that being disconnected from real-world users can be difficult in the long term. Tooling work (including PL design and implementation) is sort of second-order: we build things for people who themselves build things. Sometimes doing too much second-order work makes people feel a bit lost:
(Some mathematicians have the same kind of doubts except worse, as they work at an even higher “order” in that sense.)
I think that moving away from second-order work due to these issues is a perfectly valid thing to do. Here are some other approaches that I think can also work:
for me it was just the opposite - when i was working on product teams, i always did my best to carve out a second-order role for myself (basically being the person who worked on the framework, support libraries, test harness, overall health of the codebase, etc), and now that i’m working on actual language stuff my job satisfaction is the highest it has ever been. the impact i have is that i make computers easier or more reliable to use, which keeps me happy. (it probably does help that the language i’m working on is python and i do enjoy seeing the things people develop with it, and the way it lowers the entry barrier to programming, so it feels good to be enabling that work)
Regarding John Backus, I’ve just watched the oral history he delivered to the Computer History Museum, and I get the feeling he wasn’t very interested in programming as a craft. In the 50s, if you did anything with computers, there was no way around programming. This article hints at how engineering is distinct from research, and to me, ‘craft’ is opposed to engineering. If it’s opposed, why pick Backus to represent the craft? Alexis in the paragraph immediately after the Backus quote:
We enjoy programming so much that we are willing to spend enormous time, thought, and effort working on programming systems precisely to free ourselves from the tortuous burden of writing programs.
Technology for technology’s sake doesn’t seem to represent what Backus feels, for example at 1h24m33s, he had such a bleak outlook for the whole field:
Booch: What do you think is gonna happen in my lifetime?
Backus: I don’t know, but I don’t envy you, I am afraid. We’re getting more and more technological, less and less human oriented. As a country we’re getting tremendously aggressive, and we’re gonna pay for it.
A bit later:
Booch: […] Any advice you might offer, if you were to talk to someone from high school?
Backus: Don’t go into software. It’s just such a complicated mess. Frazzle your brains before you try to do anything.
Alexis mentions how she’d spend a dozen hours a day in solitude, working on a problem, but no longer wants to do that. I wonder if Backus had a similar kind of development, since he remembers people so fondly, but never has an emotional attachment to any piece of technology, e.g. at 29m5s:
We had a great deal of fun. Very nice group of people. My main job was to break up chess games at lunch time.
He even mentions how he had no technical interest after retiring at 65 years of age, 1h9m40s:
Booch: What did you do after retirement from IBM?
Backus: I didn’t do much of anything, actually. […] I did a lot of work helping my wife, get her computer stuff.
Booch: So you were tech support for the household. And that was a time frame where there was such an explosion of activity in Silicon Valley. Do you have any impressions of that time frame?
Backus: No, cause I wasn’t involved. I had sort of gotten out of technical stuff, I was more interested in music.
Thanks for this. I very much relate to your tension between inherently loving programming itself, while simultaneously finding the most meaning in work that’s anchored to reality - “real” programmers writing “real” software, whatever that means. Or generally, just the shift in mentality from “I want to write this because I think it’d be cool!” to actually thinking hard about the meaningful way that I, specifically, can contribute to the world’s problems/needs/wants. Somewhere around three years ago (I’m 28 as well) I decided I’m more-or-less done writing code just for myself, and it just feels right.
The urge to strive towards the impossible One True Language is also super relatable. Although my “PL experience” is mostly in the form of being a language polyglot (with a little stint in compilers in college), I was just recently struck with some PL ideas that I’m delusional enough to consider might actually be good and broadly desirable, but at the same time I’m acutely aware that fully realizing them would take many years of insane dedication, to almost certainly be followed by nobody giving a shit. I deeply feel the need for my intellectual drives to nevertheless be tethered to something in reality.
Sometimes, I even worry that my PL interests are mostly just a distraction from other “better” interests - is code itself really all that important compared to what you can make with it? Do I like it simply because it’s a common denominator of what’s been in front of me for so long?
Sorry for the ramble - I have no fucking idea what I’m doing with my life.
I’m 29 and have been coming to similar conclusions lately. Like Alexis, I can trace my love for programming all the way back to the dumb Flash games I made as a kid. I still feel like Newgrounds was the most supportive and vibrant workplace I’ve been a part of – it was always such a joy to work on a game with friends and see even just a handful of people play it. Having this experience as a kid gave me the impression that this is what all work will be like.
So I went to college to study math & computer science, going all-in on the technical topics, eventually finding myself attracted to compilers & functional programming like Alexis. I’ve now been working as a software engineer for 5+ years and so far… it’s just been incredibly soulless and lonely. I’ve never been paid to work on a product that I feel actually helps anybody. Remote work means it’s really difficult to make meaningful connections with coworkers.
So, I had a habit of working extensively on my own projects outside of work. The things I really want to work on. This was fine for a while, but really burnt me out and left no time for everything else in life. Not sustainable.
I came to the difficult realization that software engineering is probably not the right career for me, even though I love programming & building software. There’s simply not enough money to be made building software that solves problems for good. I realized I should probably find something else to do during the day so I still have the energy to build software at night.
I’m still figuring out the long-term, but short-term I found a job teaching and it’s honestly such a lovely change of pace compared to corporate software development. It’s giving me some space to figure out what’s next.
There is so much that each of us can do to help others. Teaching is a noble calling; you are not “settling” for that job, it is a great way to invest in people, and I think it is a wonderful choice of how to spend one’s limited budget of time.
Hopefully you can find a way to stay involved actively with programming projects (and to really enjoy them), and use that as a booster rocket for your teaching.
As somebody who is in their 30s and still figuring it out, and not satisfied with coding work, I can assure you it is completely normal to feel lost in this way. You’re on your way to finding a better way to be.
Think of it in this light: you’re seeking a better creative vision or wishing for significant impact, yet the existing methods that you’re provided with aren’t meeting your own values.
I’ve been haunted by the concept of software programming as a “safe default activity”. Other creative endeavors are viewed with contempt, whereas coding oft gets a pass. The opportunity cost is grave; what else could one be doing instead of the safe default activity?
I’ve spent the last 12 years learning and working with compiler tech, and the last 3 working with C++ semantics and static analysis. I have a great deal of gratitude for being able to work in this domain for so long as well as 100% relating to the feeling of just being done with it.
C++ in particular is just dreadful to try to analyze. It fights you at every step of the way: pervasive UB, indeterminate evaluation order, and slipping into pointer analysis (thus, undecidability) too quickly. And these aren’t problems that you can think real hard about and overcome once and for all. They show up for many types of semantic analyses.
I also think it would be enormously refreshing if programmers did not nearly universally speak with an expert’s confidence on subjects they have only passingly encountered. [2]
Yes, please! And I agree as well with the footnote.
One of my favorite things about software engineering is taking a problem and solving it in such a way that it largely stays solved. Sure, it may need to change as requirements evolve, but the solution continues to work even after the labor is done. Other tasks in my life do not provide nearly the same sense of accomplishment.
The author then went on to question why they didn’t find working on GHC rewarding and I can’t tell if they left that as an open question or explained it by saying they felt ambivalent about the Haskell community. Regardless, I wanted to offer another possible explanation. In software engineering you indeed can solve a problem and have it remain “largely solved,” but “largely” is operative here. For myself — and I would suspect many others — our desire for this sense of closure is precisely what prevents us from reaching it. We can always find one more bug, feature, or rough edge. I found this post captured it very well.
I wish them the best in their next ventures!
It’s sad to read that such a talented and sweet member of our community feels a bit burnt out. I love Alexis post about Haskell meta programming.
Amazed to see she is only 28. What a beast!
Make no mistake: GHC is a truly incredible project that often still feels like a compiler from the future, […] [but still], ultimately, Haskell programmers, [as] a class[,] I’m not sure even really contains me. […] I have never chosen Haskell for any of [my personal projects]. Not once. […]. If there were more users of Haskell doing inspiring, exciting things with the tools I was working on, I might feel substantially more driven to indirectly contribute to those causes. But Haskell is a niche language used by a select few, and it is hard for me to spend so much of my life working on a technological marvel that practically nobody will ever benefit from.
[…]
It is a little amusing to think that what I find myself most drawn to after a decade of pursuing ever more exotic projects is something entirely mundane: I want to write utterly ordinary software. I want to work on a piece of software used by people to accomplish a task, […].
💀 Will the Haskell community ever live this down?