How can you not be romantic about programming? (2020)
thorstenball.com
thorstenball.com
That's why people get disenchanted with programming (and with a lot of other things)! We love to do the actual core activity. We love it so much we do it for free. You get paid for having to deal with the pressure to succeed. And you get paid for having to do all the other stuff that comes along with it.
Its the other stuff that grates on you until you hate it.
Absolutely. I would have worked for SpaceX if they let me sleep in a hanger, they wouldn't have to pay me.
I would work for free for a company making widgets for which people paid cash money if they let me work on interesting problems, interfacing with my customers, so as to see the fruits of my labor pay off.
Happiness isn't always derived from that which our society says it should be.
There is plenty of great software right now, if you look for it carefully.
You wouldn't want to run it though.
Which OS to start with?
- Windows? Unpatched Windows XP gets compromised within minutes on the internet. Microsoft spent years trying to fix all sorts of trivial security holes.
- Linux? Have fun with Mozilla 0.9 (pretty much the only browser choice)
- MacOSX? Only just recently released, not quite featureful as subsequent releases, and required you to buy expensive Mac hardware.
Why don't people run these systems on VMs on their browsers (it's quite feasible these days)? Because they aren't actually as good as the stuff we have today.
Basketball, or programming for your own pleasure is just that: pleasure. of course you'd do it for free if it's something you enjoy.
But the fact that it has to generate value for others is what removes the fun. You will have to make changes to your priorities, take into account others' preferences, etc etc.
Luckily if done right generates enough money to compensate for that.
At least for me that adds to fun.
2 programs. One only gets used by me, the other by 100 people. It is way more fun to write the second. Compensation being equal and all.
May be some open-source software becomes notable without any marketing or sales, but I constantly see a lot of very conscious effort by FOSS maintainers to popularise their work. They go to meetups, do talks, post on twitter and HN. And yet the most that majority of them can hope for is getting a boost to their resume and being hired as a distinguished staff/principal-level engineer somewhere because of their open-source clout.
The goal for maintainers who dislike the business side of things should be to write code that makes those business activities as painless as possible for the maintainer themselves. In writing such code they will develop a greater understanding of the process and may even learn to appreciate it. A true win would be to generalize that code so that other maintainers can use it to make their lives easier while still being able to glean valuable information from it.
It could also be the one thing that makes your work meaningful.
I don't think the focus on value-for-others in itself is the fun-killer, but that there are diverging, in-congruent quotas to satisfy, that there are meetings that waste time, that design-by-committee makes the products dumb, that you lose autonomy, that there are more boring things to do than interesting things.
I think everyone needs and wants validation to varying degrees, and providing value to others is the means to achieve that (also.. money). Some people are less motivated by this than others, granted, but cannot exist in a bubble without going nuts. Even if programming were just for ourselves, some other labor is geared to others.
There's some bullshit (i.e. non-coding activity that's tedious but still needed) that creates the value for others involved.
But there is also tons of bullshit that destroys value for others, society, and even for the company itself. Without the latter kind of BS we'd be far better as society.
I.e. if you don’t like to solve problems for other people, then programming is not for you, and you should consider becoming a computer scientist instead.
And yes, I do want to “gatekeep” any profoundly unhelpful people out of programming. Programming should be about helping people do things they otherwise don’t know how or could not do for themselves. Navel-gazers and gnostics (while they have their proper place and use) are generally not suited for, and reflect poorly on, the vocation of programming.
The point is when someone says “how could you not love programming?” The answer is because “programming” is just incidental to what people are doing at the professional level. Because for professionals, programming comes along with the notion that if you do not succeed you will lose your job and potentially your livelihood and then its far too easy for programming and dread to get linked in your head. I think because programming is creative so it is in some way an expression of yourself its easy to get too attached and frustrating when there’s this other thing attached.
We get paid to do this thing called “software engineering” but programming is a big part of it and programming has elements of a creative discipline. The same way I cannot guarantee a song will be a top 40 hit even if it is sound in a music theory sense, I cannot guarantee a piece of code I write will be useful or valuable even if it is bug free.
I think this frustration is part of all fields where creativity is a component (musicians, filmmakers, athletes, journalists, researchers, mathematicians) but we sell what we do as a strict engineering discipline. But it’s not. If it were a strict engineering, why would we create KPIs or go over click rates or usage statistics with engineers?
I drive around the world and tell stories about it.
I’m “The Road Chose Me”
I think this truism is well overstated by HN regulars.
It is not so much that "we love to do the actual core activity" since there are few programmers that would enjoy being constrained to constantly re-implementing basic CRUD functionality for months or years. We instead love the core activity driven by our own agency, doing what we want simply because the reward is satisfying that want.
Alan J. Perlis (April 1, 1922-February 7, 1990)
As quoted in the dedication of SICP, aka the wizard book[0].
[0] https://mitp-content-server.mit.edu/books/content/sectbyfn/b...
That's not to say that the practise can't be fun, but just like building a bridge we need to make sure it works.
"An operating system," replied the programmer.
The warlord uttered an exclamation of disbelief. "Surely an accounting package is trivial next to the complexity of an operating system," he said.
"Not so," said the programmer, "When designing an accounting package, the programmer operates as a mediator between people having different ideas: how it must operate, how its reports must appear, and how it must conform to the tax laws. By contrast, an operating system is not limited by outside appearances. When designing an operating system, the programmer seeks the simplest harmony between machine and ideas. This is why an operating system is easier to design."
The warlord of Wu nodded and smiled. "That is all good and well, but which is easier to debug?" The programmer made no reply.
But I have worked with people in other fields (mechanical engineering, biology, medicinal chemistry, etc) who took similar delight in their field, and it was infectious.
One can design a bridge and still have room for whimsy.
Taking a fragile system, and making it more stable can be a very exciting problem to tackle.
Taking the fragile parts of a system, and swapping them out with a more inherently stable equivalent can be even more exciting.
For example, NixOS is one of the projects I'm most excited about lately. It has a long way to go for usability (and in some ways, fun), but the inherent stability is there and working.
I hate guessing parameters for a API call, i hate debugging the garbage that my coworker installed from Github, i hate learning into some software and having it obsoleted within two years and i hate fixing the CI/deployments.
I love writing bare-metal code for the 8086 or AVR, because these platforms and their peripheral chips are well documented. I love platforms with formal standards and good documentation like C or shell script. But this isn't always useful these days.
Blaming others is fine but really sometimes that "other people" is yourself and often you barely remember that you wrote it.
Yes, exactly. My memory is extraordinarily crappy, another reason for me to invest time into writing documentation.
I have a terrible memory. Sometimes I'll look at code I wrote ages ago and think "Wow! I really did a good job here.". Other times I'll think "Wow! What the hell was I thinking?" lol
[0] How's this for an abomination: due to an error using SQLAlchemy, one of our types was being constructed in one way in our code and being constructed in a different way by SQLAlchemy. When we instantiated it directly, you got its properties using methods: organization_id(), last_updated_at(), etc. When we loaded it from the database using SQLAlchemy, organization_id, last_updated_at, etc. were fields, not methods. Somehow people managed to call foo.organization_id(), foo.last_updated_at(), etc. in all the code paths where we handled instances we instantiated directly, and access foo.organization_id, foo.last_updated_at, etc. in all the code paths where we dealt with instances fetched from the database.
It's when that code is written that it becomes a problem too.
I hate everything to do with devops and sysadmin work though. It superficially looks like programming work but it totally different, and often involves manually doing things that feel like they should be automated but can't quite be, or working on live systems making changes directly rather than writing code that only touches anything real after review and test.
I hate how often things get obsolete, but sometimes the constant march is wonderful. It's always great to rip out half you in-house code when your new framework does it all for you.
You can write large applications while only having to maintain your core functionality and some wrappers for external stuff.
When IoT stuff started getting big and SSDs became affordable my attitude started slowly changing as I actually experienced more software complexity and how it could just work, and save so much time for users and devs.
The tradeoff is it only saves time if you do exactly what the library dev wants you to do, and don't look into the internals too much.
I still enjoy digital electronics design, but I don't do much outside of work because the finished product is often a bit disappointing compared to commercial stuff that usually has an app ecosystem, a warranty, an injection molded case, etc.
I've been on somewhat of a decluttering binge both physically and digitally, so I've currently got almost no DIY stuff in use at home.
There's a sense of mystery when diving into an abandoned code base and deciphering the ancient scripts found there. There's the accomplishment when puzzle pieces start fitting together and the original programmer's intent reveals itself in the debris of half-decayed architecture. And then you chisel away at that, extract the beautiful core, and relearn the ancient knowledge. Sometimes there's a strange sort of historical connection formed with immaterial, long-gone programmers. There's always something to learn from those bygone workarounds and edge case traps.
Maybe I'm weird, but I love this stuff.
Much better than dealing with the hurt feelings and entrenched biases of live developers.
Once in that kind of codebase, I found a snippet of code that gave me a tiny glimpse of the long tuning, bugfixing, and hacking had happened on it. In a constant propagation pass inside a compiler/jit system, deep inside for a single kind of propagation, was the line:
if (strcmp(symbol_name, "ip") != 0) {
Gack!! The instruction pointer, special-cased.By them, I am humbled and inspired.
And we can't forget the wars of epic proportions: the Unix wars, and fights with Microsoft & Oracle, and the birth of the free software movement. All of these shaped the current software landscape.
There's also so much to be said about the research labs where it all started...
Indeed, how can you not be romantic about programming
Isn't this so demoralizing, to be working for some company writing boring business apps.
I want to be a visionary. I have these Grace Hopper-esque ideas for how to advance developer experience.
Some examples: 1. Reading code is so complicated.
1.a. It's been 20 years since I first experienced the joy of syntax highlighting, and it feels like nothing has changed since that leap forward in coder ergonomics. We just have different colors for different bits of code, but computers can easily draw so much more than colored text. Shapes, pictures.
1.b. There are so many different ways to write the same instructions. Different developers have different opinions of what constitutes correctly formatted code.
I want tools to deconstruct and reformat code into more easily readable pieces. Really what I want is visual representations of code flow.
2. IDEs have coding auto-complete, but it's wonky. It feels like I'm in my kitchen and open a drawer to get a fork, and in the drawer is every kind of utensil ever invented by man spills out.
I'm not convinced that AI assisted coding tools are the correct path forward.
...
Perhaps this rant is just my ignorance of what tools are out there. I have to admit my experience is Visual Studio and VSCode and SSMS (don't get me started on SSMS). I haven't had much opportunity to explore what else is out there.
Ada Lovelace saw one romantic side of computing as the possibility of machines writing poetry, music and song. Today as much fear, horror and loathing as joy surrounds that idea - but that is also romantic in Mary Shelley's sense. Big-R Romantic features are in both; possibility, drama, tragedy, and rejection of reason according to a counter-enlightenment embrace of emotivism.
Ours is the age of impossibility - the hopeless inevitability of the status-quo, the lack of vision for alternative systems, amidst a grinding project to render all human affairs predictable, legible, identifiable, and controlled. Today "computer love" (the romance in computing) derives from the struggle to overcome the ignorant, cowering bureaucracy to which lesser men put machines in pursuit of mediocrity and dull power.
simply put: code is language. language in textual form is writing. writing is art.
code is art. that is all
I'd have liked it if you had tried.
Yup, romantic.
"That's not cool. That's commie bullshit"
"Yeah. RISC is good."
Tomb of the Unknown Implementer
This is the Tomb of the Unknown Implementer. A hollow voice says:
"That's not a bug, it's a feature!"
In the north wall of the room is the Crypt of the Implementers. It is made of the finest marble, and apparently large enough for four headless corpses.
The crypt is closed.
There are four heads here, mounted securely on poles.
There is a large pile of empty Coke bottles here, evidently produced by the implementers during their long struggle to win totality.
There is a gigantic pile of line-printer output here. Although the paper once contained useful information, almost nothing can be distinguished now.
RIP Frederick Brooks
"My father used to say this is the greatest job in the world except for one thing — the clients."
or if you are internally focused and not directly dealing with clients
- "My father used to say this is the greatest job in the world except for one thing — the Managers".
I've been able to rekindle my passion for coding by finding personal projects to work on. I like to build utility apps, or screensaver-like art experiments. It's fun to learn something new. I once wrote a art project using CSS transitions, then rewrote it using a Canvas element. It was interesting to see the way coding was different in each situation. I never realized how much heavy lifting the web browser's CSS engine does until I tried to crossfade a colored square in a Canvas.
Also: Are you old enough to remember magazines with printed source code that you would have to type in manually? I remember finding them in my parent's basement among their science fiction literature magazines.
By software products being so invariably lousy that I can’t help but feel that this was a papercut #999.
By „platforms”, „ecosystems”, „communities” pulling the user experience each their own way, destroying it into shreds in the process.
I want to be romantic about programming, I’m just too jaded, tired, and numb.
I am dwarfed by what was written before 1970 in moving products through our plant.
They knew assembler, hard and were before everything we now know.
I am in awe of them, my predecessors, who are long past.
Maybe it’s just my perspective. I used to be in love with programming. But doing something I loved as a job left me open to burnout and vulnerable to being used.
Now I’m not “in love” with programming. Partially because it doesn’t intrigue and surprise me like a new lover does. We have a comfortable relationship, we’ve settled down. I’m married to programming and it’s work but it’s worth it. There’s still fun and fulfillment, but I’m not infatuated like I used to be.
So basically his tactic was: if I run as fast as I can I have 40% to reach first base. If I run as fast as I can and jump I have 50% to reach first base. He didn't even consider going to second base, ever.
Moneyball is great movie, go watch it.
This is literally __alloc_pages() in the Linux kernel.
[1] https://github.com/torvalds/linux/blob/c3eb11fbb826879be773c...
thanks for the information. i am a high level programmer by trade these days, but given enough free time, i think that it would be fun to learn about the internals of the linux kernel in some depth. frankly, it intimidates me a bit (perhaps it should, im not sure).
I'm really sad for people who chose the field just for the money and are miserable about programming. I hope it works out for them, but that's no way to live.
We should replace all use of “invocation” by “incantation”. It somehow feels right,
It's almost mood dependent whether I look upon on the systems we've created or in fondness or in anxious peril. I still love this career, but with some recent burnout occurring I often find myself quipping "Technology was a mistake".
There's absolute beauty in code. There's also absolute despair at times. I wonder if things will ever become more rote or structured in my lifetime, or will we be constantly pushing the envelope, hardly looking back and just barrelling ahead, pitfalls and all
[1] https://www.stilldrinking.org/programming-sucksProgramming sound romantic in theory, but in practice it's a messy, nasty business that breaks people.
Kinda like parenthood, actually.
Parenthood didn't brake me for one. Actually, I found strength I didn't know I had and my priorities went into sharp focus.
1. Read the code I have to work on at the office.
2. Sit through a meeting with my boss.
Guaranteed to leave your spirit romance-free.
Oh yes we do, or at least I do. And I can't find instructing an electronic shelf-stacker romantic
Vynil albums, the carpet in my 80's house. Not much else.
(90s is a WAG, but I'm guessing it's -/+ 1 decade)
You're probably right about early 80s switch to digital. Although probably a mixed bag for at least a decade as old instrumentation hung around.