Hacker News new | ask | show | jobs
by marsrover 3141 days ago
You know, us programmers like to refer to ourselves as wizards but I really wonder if non-programmers think the same or is it just like any other profession they're not knowledgeable of? I don't know anything about chemical engineering but I've never considered chemical engineers to be magical.

I do like thinking of myself as a wizard, though.

12 comments

I felt that wizard thing when I was just starting out, for most of my career though, i've thought an apt analogy is tradesman. eg. carpenter or metalworker.

We get commissioned to build something that does X. Then we design and build it. With experience we develop our own tools / practices and a familiarity with our materials. Experienced masters might experiment and develop completely novel things or masterworks. Sometimes many of us will be commissioned together to build something really big or challenging.

I think most people look at skilled construction contractors and assume they could be just as good with a very small amount of study and practice. People see us as having a completely alien ability that they intrinsically lack. That makes us like Harry Potter wizards, people with an inborn gift that makes us capable of learning things that are beyond the reach of normal people. The difference between us and wizards is that everybody would love to be a wizard, but they look at us and think, "Thank god there are people who enjoy that stuff." If you knew a wizard you'd probably constantly wish you could do what he could do. I think the only time people wish they could do what I do is when they're trying to get their printer to work.
That's quite true. When you say you're a plumber, people can at least ask half-assed questions or provide a story when they were doing that themselves. When you say you're a programmer, the conversation usually ends with "Oh.". They have literally no clue how to get into the area.

How many of you have girlfriends who are genuinely interested in your craft and regularly talk with you about it ? Say, once per week. But if you're a photographer, that's instantly understandable to anyone. Anyone can chime in.

This reminds me of the time when Charlie Chaplin said to his friend Albert Einstein: "People like me because everyone understands me. People like you because no one understands you."

I had a girlfriend with a CS degree from Princeton. She didn’t care much about code, and didn’t want to talk about it.

Another had an MIS degree. She loved my enthusiasm, but didn’t care much about the content.

Another was a photographer with a tremendous amount of curiosity about everything. She listened raptly for hours at a time to every word I said about every low-level or mathy thing. She took it all in and asked great questions. Then she learned programming and became a software project manager.

I believe the biggest factor in the difference in interest was the “cares about people” vs “cares about phenomena” spectrum.

In general, though, I would never even bring up the topic with friends or girlfriends.

Quite a lot of times, actually. It helps to work in gamedev, but I think a lot of developers can have interesting and meaningful conversations with outsiders about their work if they focus on the domain, things that they are building and problems they're solving, not the inner workings of languages and frameworks.
What if you write kernels or compilers for a living? Talking about a business domain is cheating :D
If you can't make a race condition in a device driver into an interesting story, you need to work on your story telling :)

And compilers are fascinating - you are, essentially, formalizing the act of translating between languages. Something anybody who speaks more than one language can understand.

You probably can't translate everything you do into a great story, but the basics of your field should be straightforward.

I got to answer the question with "I write file system performance benchmarks" once. Got looked at like I said I played with spleens for a living.
I love talking to my partner, even though she's got an MBA (and works as an artist. Long story :)

It helps me improve my communication and teaching skills. It's fun, because it highlights the parts I don't clearly understand as well. She cares about it because it's so fundamentally different from anything she does, it's an entirely different world. (Vice versa, too. She's given me beautiful explanations on color theory, for example)

Yes, it requires work, from both sides. But for me personally - if your partner doesn't care enough to ask (or you don't care enough to explain), why have a relationship in the first place?

(Sidebar: s/girlfriend/partner/g, please.)

I think plumber is more apt: We take shit and send it places so people don't have to think about it.
A lot of programming work being done today is information plumbing. Creating pipes that move information from one place to another. Regulating and monitoring information flow rates. Unclogging pipes that are backed up.
The difference is that plumbing is tangible. You can touch the pipes and imagine what's inside them.

IT is intangible.

You can touch a server and a network cable, but their work is utterly mysterious and unintuitive compared to a domestic water pipe.

Which is why IT seems like magic, but plumbing, carpentry, and car maintenance don't.

I think the craft aspect is somewhat romanticized and that much of programming work is more like a kind of accounting or some other clerical bureaucratic trade.
In my experience, that depends entirely on your role.

I've found that my place is within a team of 5<x<20 - it's large enough that I can work on "meta" stuff like workflow improvements and refactoring existing functionality to make it generically applicable where appropriate, but small enough that my contributions are not lost in the noise and I can see the impact I'm having on the team's overall velocity.

If all I were doing every day was implementing yet another CRUD form, then I would feel the same way you've described.

You’ve just reminded me of a line from one of the Wicca books I read as a teen. The whole coven size <= 13 thing was down to how big teams can get before people tread on each other’s metaphorical feet.
Covens of >13 are dealt with a great deal in Sterling's "Emberverse" series...
Surely there are lower and higher levels of abstraction and impact in accounting too—and a lot of repetitive drudgery in carpentry and other crafts.
Maybe you've been at it longer than me.. and as one gets more experienced/jaded ones analogies become less romantic.. Wizard!, tradesman, garbageman, bureaucrat... I hope it doesnt get down to politician!!

Also software is a huge field and where u work in it probably has an effect. I never do internety stuff for example, I make computer games.

> I hope it doesnt get down to politician!!

Given how political certain projects have become, i dunno...

I'm actually kind of romantically impressed by accountants and actuaries!
Similarly, I've found that most of the more effective programmers that I know personally tend to have backgrounds in trades, whether that is carpentry, building construction, mechanical tinkering, etc. Odd anecdote, I know, but perhaps it has something to do with a similar style of big-picture systems-thinking, combined with a need for attention-to-detail.
I used to work construction and a lot of the concepts translate well to software. You learn pretty quick that if you half ass something early in the build it'll come back to bite you later (didn't place your studs 16 inches apart? Enjoy marking them all out so you can put up drywall).

The tools are different but the ideas are the same.

I used to be an architect, worked at it for a good few years, and only got into programming when I was approaching my 30's. Ive since found that my architecture experience gives me a huge advantage over my peers when it comes software architecture and project management.
Architecture was my other potential major in college. Took drafting classes in high school and everything. I think there is definitely something to the mindset correlation.
I have this idea to write an article on how architecture and general design was taught to me. I think software dev education could benefit from that approach. We were never told how to design, it was almost all studio work. We would be given a site and a brief and then off we go and design a building. We could get advice from our lecturers + also there were regular 'crits' where you have to put your work up on the wall in front of everyone and give a brief presentation, then the lecturers and everyone is free to critique it. It takes a year or two or three, but going through this over and over you do eventually develop your own design methods.
If you want to impress people as a programmer, I think it helps to have imagination and side projects. Visual programming is nice, too (like SVG).
My experience has been that what we consider easy or impressive has very little in common with what others find trivial or impressive.

For example, soon after I got my degree I was making browser based games, and the artist I was working with was really impressed with the particle effect fireworks I’d added to the highscores table out of boredom and was expecting to be told to remove.

And, on the other hand, a real time perlin noise warp tunnel I added to a later game was described as an embarrassing glitch that the boss thought looked like a bug rather than a deliberate effect. (And, unlike the fireworks, had actually been a requested feature).

I remember a project when I was a bit younger and naive, where we had a 3d view of the world, and my job was to implement the display of the sky. So I went off and dug into the research and literature and ended up with a nice efficient C++/OpenGL implementation of [1], including sunrise and sunset effects and haze. Also added night with a realistic ephemeris containing the moon in the correct position and phase and the top 500 or so brightest stars.

The feedback was all negative. The boss and the designers basically said, "Just make it blue."

A couple episodes like that help make you sufficiently jaded and cynical, but also teach you pay attention to the requirements and not to go overboard.

1: https://www.cs.utah.edu/~shirley/papers/sunsky/sunsky.pdf

Hah! Now you’ve reminded me how they hated my Ken Burns effect but loved the accidental posterisation from the (RLE) image compressor that was only there because of a severe download size limit and (something something possibly NDA so self-censoring just in case).
> I do like thinking of myself as a wizard, though.

This doesn't address your first paragraph, but I wanted to comment on this.

I identify as a hacker. The terms "wizard", "incantation", etc are fairly ingrained in our culture. But if I do something and someone refers to it as "magic", it actually makes me uncomfortable; it means that they don't understand what I did or how I did it, and rather than trying to understand it, they dismiss it as something magical. This might sometimes be because they have better things to do at that moment than consider what I did---which is fine. But comparing it as magic still rubs me the wrong way. I don't do magic: everything I do is explainable, and I can explain it to you if you ask.

I used to practice magic when I was much younger---I was an illusionist for a couple years. I was pretty good at it. I did street magic, mentalism, and various other things that seemed impossible or even supernatural/metaphysical. Magic. I still do some tricks I remember for my kids. But whenever they think that it's real---whenever _anyone_ thinks that it might be real---I make sure that they understand that it is an illusion. A trick. A hack, if you will. With my kids, I show them how it's done. And they still love it.

The article shows a regular expression and calls it a "magical incantation". It looks opaque, but it can be understood. The language can be learned. You can format it in a sane manner and dissect it. (Displaying a regex that complicated on one line is a disservice to others, with the intent of making it look opaque. It's like removing all whitespace and newlines from your code or writing complicated one-liners and saying "look, it's magic".) It isn't a magical incantation.

> if I do something and someone refers to it as "magic", it actually makes me uncomfortable; it means that they don't understand what I did or how I did it

It occurs to me that the first steps I take in most new-to-me established projects are basically magic - I'm looking for specific shell commands that the other dev(s) use to perform certain actions: build, run, test, deploy, etc. What's more, there are often undocumented environment dependencies - env vars that need to be set, certain executables that must be installed on the dev's system and in the path, etc.

> It looks opaque, but it can be understood.

I don't think "magic" in this sense means "cannot be understood" - only that it's incomprehensible at some point, and it's performed without understanding to achieve the desired result.

> It occurs to me that the first steps I take in most new-to-me established projects are basically magic - I'm looking for specific shell commands that the other dev(s) use to perform certain actions: build, run, test, deploy, etc. What's more, there are often undocumented environment dependencies - env vars that need to be set, certain executables that must be installed on the dev's system and in the path, etc.

I fully agree with this. In fact, I've reified it into a pattern I use to learn new things: Copy, Paste, Break, Fix. Start with copying and pasting, to make sure I know what happens ("My environment is broken! Their code is broken! I've found an ancient tutorial and the example is broken!") then, once I know it's good, break it somehow, and fix it. Then I make changes to the example, fix what breaks there, and then iterate until I've gotten a good end result.

I have actually quite the opposite point of view. I actually aim for the things I build to feel/be magical. Yes everything is still explainable but usually the system is sufficiently complex that even as the creator you can feel overwhelmed. Recently I've built a small project (I've made a show HN yesterday which btw didn't get any attention) which felt quite magical and futuristic : A remotely controlled robot which displays some deep art. When novice people interacted with it, they felt a bit of the magic of technology, just like wielding a wand, it responded instantly to their will. I enjoy creating things which may have unanticipated effects. Recently, I have been interested by the theory of complex systems and in the way it is similar to real magic, as opposed to the magic you describe as an illusion.
I think the reason for this level of abstraction isn't just due to the difficulty in understanding what we do, but rather the _intangibility_ of what we do. When we talk about magic, we describe a system that is intangible to the uncultured. While everyone is capable of seeing the result, the non-magically adept are incapable of seeing the 'systems' that magic is based on (ie the "flow of mana" or the "rewriting of logic"). The same can be said about programming. Everyone is able to use the products and results we put out, but to understand the "process" is something else entirely.

When an engineer makes something, they are making a _physical_ object by essentially designing and putting _physical_ parts together. Obviously, there's a LOT of math, simulations and design principles that they do as well, but the layman doesn't need to know that - they just see someone who creates parts to build bigger things. A doctor uses his tools and knowledge to _physically_ manipulate the body and fixes physical problems in the body. No layman will ever perform a heart transplant, but they can understand the concept of taking another heart, moving it and connecting the blood vessels and nerve. What does a programmer do? We put together a line of text that somehow represent electricity that is somehow filtered through microscopic parts, resulting in a machine capable of emulating human speech? What?

And now we're getting into quantum computing and cryptocurrency - things that require a massive wealth of knowledge across many fields to fully grasp, and also neural networks and machine learning - things that programmers understand the intended behavior of, but is impossible to perfectly understand their oftentimes random-seeming behavior. It's not a stretch to say that we're reaching a point in time where technology has essentially become like magic.

> I really wonder if non-programmers think the same or is it just like any other profession they're not knowledgeable of?

There is a large difference between competence and ignorance. They're qualitatively different, and different in each field.

e.g. programmers do magic things like read the error messages on the screen. Non-programmers not only don't do that, they can't comprehend why it's necessary. (Without exaggerating too much)

The same applies for mechanics, carpenters, etc. I've seen good people work, and they do things that I just don't get. I'm not sure any amount of training will result in the same intuitive understanding.

It's why I went into programming, and not anything else...

> e.g. programmers do magic things like read the error messages on the screen. Non-programmers not only don't do that, they can't comprehend why it's necessary. (Without exaggerating too much)

More than once it has crossed my mind that it would be worthwhile to build custom error message dialogs that can't be closed for at least 30 seconds (maybe with a secret override) for some areas of our products. The number of times I've been on a support screenshare with customers where they try to connect to some external service, and it fails, and they instantly dismiss the prompt that would tell them exactly why it failed, if they would just read it, is maddening. At least that kind of a built-in delay would give me time to fire up the snipping tool and grab a screenshot from my end...

Why not just write to an error log? You could even have some button to send it to you or something.
Oh, we do that too... It's a struggle to get people to actually send those to us, for some reason, or even just open them up. Usually this kind of thing occurs with initial installation, and we're typically installing into some location that is firewalled to hell and gone, so we can't depend on being able to access anything even within their own LAN, let alone the outside internet.

Enterprise Windows software is so much fun.

Every normal person I know in real life thinks my code is wizardry. In fact the only people I ever, ever catch trying to pass off programming as just another profession, are programmers.

I wrote code for 8 years before encountering another programmer. During that time, I could barely believe that more than a handful of people in the world could possibly be navigating this rabbit hole effectively. It’s too complex and abstract - how would two people even communicate about it?

Turns out I was wrong about the first part, but a little too right about the second part. Even mathematicians find more agreement about what is true than programmers do.

It depends on what those "wizards" do. If it's just making some formula in spreadsheet work, it's not too awesome. If it's stopping time[1], that might be more "magical".

[1] https://hackaday.com/2017/11/09/stop-motion-with-the-time-gl...

"it's not too awesome"

Maybe if you had seen some of the eldritch devious monstrosities I've seen people create in Excel (even without VBA) you might reconsider that statement.

Be very worried if someone says "we have this Excel spreadsheet that needs to be turned into an app"....

If programming is wizardry, things written in Excel are definitely necromancy: the end result is shambling, hideous, and unnatural, but for certain things it gets the job done.
I have also seen a company (tech) who used an excel spreadsheet as part f its accounts system turns out it was faulty and was a factor to the company going bust - the main one was ICANT tho
=A1+B1 is not awesome for normal people. If you want, you can do magic with anything, but it was only an example.
> If it's just making some formula in spreadsheet work

Excel functionality is on part with some programming languages.

https://www.youtube.com/watch?v=0nbkaYsR94c

Probably depends on what field they're in and how much 'further ahead' they seem compared to everyone else. I suspect some people think of people/teams who are really good at programming video games as 'magicians'. And when they're so good at programming that they outshine pretty much the entire rest of their 'industry' or 'niche', then I can definitely see people treating them like magicians. There were certainly people who saw the developer of the SMW hack Brutal Mario as one, thanks to the huge amounts of custom code present for the new enemies/bosses/blocks/level gimmicks/whatever else:

https://www.youtube.com/watch?v=INa41RSwiCc

But eh, I suspect a good programmer in most fields wouldn't be seen as 'magical'.

> I don't know anything about chemical engineering but I've never considered chemical engineers to be magical.

For a layman who's curious about computers, he can just go to a computer and try stuff. Worst outcome from there is loss of some data.

If you're curious about chemical engineering, you're restrained a bit, because you're not really going to go near equipment that can easily blow you up, burn you, freeze you, or poison you.

So without the tantalizing hints that IT drops near you all the time, you're not going to wonder whether chemical engineers are wizards.

> Worst outcome from there is loss of some data.

From personal experience, that is more than scary enough for some to never attempt anything at all.

I think the point is any profession that can wield unusual control over other things (or people) can be described in this way.

That would include people like psychologists, hypnotists, marketers, politicians etc. Once you know all the tricks it stops being magical, but it takes a lot of time and effort to know all the tricks.

Unlike chemical engineers, programmers have the ability to give specific instructions that machines obey. We put things in motion.
have you met any designers?