interesting premise in the article but masked by horrible writing. i had to reread this multiple times to understand the point of it. the transition from talking about VR to programming was incredibly vague.
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.
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".
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"....
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
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.
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:
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 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.
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.
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.
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.
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."
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.
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 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.
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?
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.
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.
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 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.
> 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...
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.
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 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.
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.
> 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.
Getting hit pretty hard. To very briefly summarize, the article reviews an occasional trope in writing about our field, namely that it has some interesting correspondences with old-style conceptions of magic - from hermitical study of certain esoterica granting access to powers and principalities beyond the ordinary ken, through potentially hostile reaction to same among those lacking such secret knowledge and frightened by the prospect of a world increasingly founded on it, to "do not call up what you cannot put down" in the context of modern AI and ML research and the applications thereof.
My server (where this guest article is hosted) is fielding some 20 HTTP GET requests/second and is holding up fine (load avg. is still under 1.0). I'm guessing there may be some routing problems — antipope.org is hosted in the UK.
When I was a preteen, I'd watch Notch's ld48 programming streams, and I'd just be confused. I had read the basics of if-statements, for-loops, and functions, but he was using them in a way beyond my comprehension.
Later I discovered MIT's Scratch, and it let me figure things out on my own: games, physics, genetic algorithms.
I think programming is portrayed to be more difficult than it is. It's a mixture between programmers trying to find the most efficient system, and the public's half-uncertainty of computers being magnified.
I think 90% of the difficulty of learning to program is building and interpreting your mental models of how everything works. This is unfortunate, because everyone's mental models are different, and it's the same problem we see in math teaching, where things are extremely difficult until it "clicks" and suddenly it's so easy
Considering how many programming abstractions most programmers work above now, I'd say it's more like magic now then ever before. Draw the circle (add the boiler plate code), recite the words (dig up the proper API method), perform the gestures (compile with certain flags) and your spell (desktop app) will work. If you don't, it'll do nothing or worse, blow up in your face.
As a side note, if anyone's interested in looking a bit more into "programming as magic" there's a great book series called The Wizardry series about programmers being transported into a fantasy realm where magic works similarly to a programming language. The main character ends up writing a compiler based off (IIRC) APL and revolutionizes magic. The first book is called Wizard's Bane and it's light and fun reading.
The books Daemon/Freedom by Daniel Suarez was pretty entertaining on that front. The idea that people could literally affect the world around them via "magic spells" which mapped aliases of a invented language that would be picked up by microphones and then executed on computers.
There is a section that muses about the future of humanity and how in the near future, these would literally seem like magic to anyone who doens't have technical know how, and for all intents and purposes, it was.
With always listening assistants, we're practically there with Google and Alexa. We just need cooler things to interact with than communication and divination (checking the weather) "spells."
As soon as we get some sort of grey goo with an API like in Big Hero 6 or wrist mounted fireball/lightning generators we're in business.
In the Quantum Thief (actually one of its sequels) by Hannu Rajaniemi, there are Secret Names that perform magic; one of them was 'Emergency Decompression Protection' and produced a shield around the incanter.
> As a side note, if anyone's interested in looking a bit more into "programming as magic" there's a great book series called The Wizardry
If you like that kind of thing and you enjoy/don't mind anime, there's also the serie Knight’s & Magic. It is about a programmer being reborn in a world where people wield big "golem" armors. The protagonist then proceed to make his own version, completly disregarding the philosophy of that world. Thinking of those golems as nothing more than machines and using magic as nothing more than "inputs/outputs" for those machines and the world.
"A genius programmer and hardcore robot otaku is reborn into a world of knights and magic, where huge robots called Silhouette Knights roar across the land! Now reborn as Ernesti Echevalier, he uses his vast knowledge of machines and programming talents to begin to make his ultimate robot. But his actions have unexpected results...?! The dreams of a robot otaku will change the world!"
I did see that while browsing newer shows the other day but I guess I didn't see the programming part and thought it was too generic to watch. I'll have to give it another look.
It's yet another take on the "regular modern human gets teleported into a magical world and becomes super strong because he has knowledge" trope that is all over the place in recent animes.
That being said, it's an interesting point of view. The character goes so far as taking personal a fight against a "golem plane" solely because he fears that the invention of planes will means that this world, like ours, won't have mechas. He doesn't have a care in the world but to use magic as a means to program mechas and completely disregards the fact that magic should be exciting in itself.
Ah, K&M. Lots of potential, many fun moments, but it's far from rationalist fiction. Still, if you ever need wish fulfillment that the time you spend at work beating down technical debt could instead allow you to fight monsters and cast spells leveraging the mana pool of a giant robot, it's a fun read/watch.
From an unofficial (and somewhat grammatically atrocious) English translation of the original novel [0]:
> Normally, Eru would have given up at this stage and would have chosen a more practical spell. But he knew how to solve the problem because of his unique skills ― programming concept. He had experience in designing and coding software to handle multiple variables. That's why he skipped the beginner magic phase and jumped straight into the 'modified magic' phase. Reviewing the structure of the physical boost script, Eru compressed the structure to minimise the number of variables, creating subscripts that would automatically extract the status of the body. After compiling it, he just needed to design the user interface to make it easier to control, so as to lessen the burden.
> Complicated projects like the improvement of scripts was not something that could be done easily by anyone. Eru, however, was not aware of this, completing the improvement shortly, and the patch was a big enhancement. But even so, it was still difficult to control magic that strained the mind heavily. But with his extraordinary processing ability, it was not much. No one realised that a historical revolution had occurred, but for Eru, this was just a small step in his journey.
Is that bad? Like any didactic subtype of the genre, rationalist fiction often struggles to succeed in both of the goals set for it; the only example I've as yet found enjoyable - and extremely so! I strongly recommend it - is Unsong by Scott Alexander, also of Slate Star Codex.
I can see both sides of that argument, and I'd be lying to say I didn't consider Unsong rationalist fiction at least partly as an attempt to redeem the genre in my own estimation.
Not purely rational you have parahumans where most protagonists' acts have some logic behind it. Not a lot of evil people just because they're evil, and not a lot of pure heroes either.
I also really loved the episode of "In Another World With My Smartphone" where the character aquires the spell "program" which lets a caster enchant a physical object with a command.
The regular wizards use it to, let's say, make a door open when someone says "open" or other minor one-step commands.
The protagonist, a modern human stuck in a magical world, uses it differently. He creates sequences with it. He scripts complex programs.
[Minor Spoiler] As an example, he ends up creating a magical pistol. When the users speak "reload", the pistol (which the character imbued with a few spells using "enchant") casts a detection spell to finds the closest bullets. If bullets are found, the pistol then casts the spell "aports" on it. The bullets are teleported into the chamber of the pistol. He uses the same concept but with transmogrification enchantments to add voice commands such as "sword mode" or "pistol mode" that transform the pistol into a sword and vice-versa.
I highly recommend reading the light-novel translations of "In Another World With My Smartphone" as well! You can buy them on Amazon Kindle, or you can subscribe to read the pre-prints at http://j-novel.club/.
I felt exactly the same while watching it. Neat promise and entertaining. Something you can binge and enjoy without thinking too much. 3/5 is a nice rating when you compare to some of this season's anime series. There are a lot of show that I would rate 0/5 or even -1/5.
Better to read the review/summary as HPatMoR is extremely long and really more of an Ender's Game fanfic than an exploration of magic by rational means. (It does happen briefly but is quickly forgotten.) http://danluu.com/su3su2u1/hpmor/#bad-plotting
>At the start of the story he has a legitimate positive agenda--he wants to use science to uncover the secrets of magic. As the story develops, however, he completely loses sight of that goal, and he instead becomes just a passenger in the plot--he competes in Quirrell’s games and goes through school like any other student. When Voldemort starts including Hariezer in his plot, Hariezer floats along in a completely reactive way,etc.
>Not until spoiler dies, near the end of the story, does Hariezer pick up a positive goal again (ending death) and he does absolutely nothing to achieve it
I gather you didn't like HPMoR, like the author of the review? Here's my advice: do not read that review, even the introduction is full of spoilers.
I personally loved HPMoR, even more so than the original series. I also disagree with most of the review, either factually (I believe most of the science is sound), or because I have a different interpretation (how Harry lacking agency is even a problem?).
Correct. (and good point about spoilers) :) I just had high hopes for a story of scientific inquiry into magic. (Still do) Switched from source to review after it became clear that the story was more of a power fantasy/soapbox for the author.
I feel disgust for programming domains where I have to use a lot of boilerplate. This is simply because... I can't remember arbitrary bits of information well. I memorize much better if it's something connected by logic.
As I recall (it's been years) it was based on Forth because a stack based postfix language is easy to implement. It can be parsed and executed in a single sequential pass.
Right it was Forth! I remember reading that got me interested in stack-based programming languages. Maybe it was in a later book he wrote something based off APL.
This is exactly the reason I despise Spring with a deep and abiding passion.
"Just add this dependency, and add these annotations to your class, and it will all Just Work."
"But...what do those annotations actually do?"
"Stop asking so many questions!"
I mean, I know the answers are out there, it's open source after all. But so much of it seems deliberately designed to obfuscate the flow of execution and make reasoning about the code as difficult as possible.
A lot of the development process consists of adding fields with particular names to classes that have a long inheritance chain of their own, and it's not trivial at all to understand what all of your options are and how they work behind the scenes.
Hm I figured Django may be guilty of that. FWIW I learned web apps on RoR but my first job was Django. Django (or at least, apps in practice) was definitely less magic than Rails, although I see what you mean about a lot of the config being less transparent than one might like. I always have to eg hit SO to figure out how to add something to the admin since the model for how it works is not transparent.
I’ll definitely check out Tornado and the others for how they compare.
I mean... Usually you could implement a simple dependency yourself pretty trivially, for the most common case. But will your implementation be as tested and cover your user base as well as the Generally Accepted dependency implementation that has a million monthly downloads?
I agree with annotations like this making it harder to reason about control flow, but I don't really get the consternation about "what do these annotations do?" so much. You can go read their documentation or source yourself to answer that question. How is that different than anything else? Same thing with "rails magic": yes, it sucks that you can't grep for method definitions, but you can go peruse the has_many method implementation to see what it does!
This really isn't too difficult to do, but it is a time sink I'd rather not have to deal with. With Spring in particular there's a huge amount of complexity so it can take a bit of time to determine exactly what's going on. Whereas with something like Go, I generally have full control over my applications control flow and if I need to look at a libraries source it's typically very straightforward and to the point.
"I agree with annotations like this making it harder to reason about control flow"
That is precisely my consternation. Much, much easier to reason about abstractions in the core Java language, like methods and objects, then to discover what code is being injected by an annotation. Java has outstanding IDEs that excel at navigating, analyzing, and debugging Java code, but putting so much logic in annotations is almost like you are trying to deliberately keep much of the code secret from the IDE.
When I'm really disturbed by how something actually works, my approach is to try to implement something similar myself. Object oriented C (structs with function pointers) long ago gave me some insights including why Python has an explicit 'self' for everything. There's a similar exercise you can do in C to better understand the prototype chaining way of doing OOP. Have you tried to make a simple version of e.g. @Autowire that is still capable enough to let a Java app of many modules have one module only depend on an API module and not the implementation module with everything just working without explicit injection? Sounds interesting to me, I bet that would be more enlightening than a summary page, or at least make the summary page more understandable...
In many, many applications explicit injection works just fine and is exactly what you want. But once you say "I am going to write a Spring Boot application", you are pretty much stuck with a big part of your application logic stuck in annotations, even when there is very little benefit over explicit code.
This phenomenon came to a head with J2EE. The original spec was designed apparently by people who did not know the 8 fallacies of distributed computing. It also coevolved with XML, and I think the entire experience colors the configuration as code philosophy in a bad, or even sinister, light.
When I see people design systems where, when they break, the only way to diagnose the problem is to do a code review, (not read the logs, or fire up a debugger), I wonder how they got along in their education without understanding the importance of debuggers, or why they hate their fellow programmers so much.
Spring comes out of a book that tried to reject the arcane nature of J2EE. I wonder sometimes if Mr Johnson recognizes hay the Beast he created is just as bad as the one he slayed. And how well he sleeps at night.
It got so bad they made a mini version of Spring, and even that is very declarative, and nearly impossible to explore.
I generally agree, but it's not entirely Spring's fault. The underlying APIs they're using are awful. If I were doing anything Java EE based, I'd still prefer to be using Spring Boot even with it's warts. It might be a framework for a framework (Spring MVC) for another framework(Java EE)...but it's still less of a pain than dealing with the underlying frameworks directly.
This is exactly the reason I despise Spring with a deep and abiding passion.
It's interesting you took the time to post this. As the sibling to this comment indicate, there's a lot of 'magic' in many languages and frameworks. not just Spring. You don't off an example of a tech stack you do favor so one can only guess.
I will say that when I have encountered developers and teams who also disdain otherwise popular frameworks, they sometimes choose to roll their own instead of buckling down and learning said framework. Invariably they end up with a partial implementation of what they didn't understand, that is bug ridden, ill performing, and just plain bad.
There's a lot of good stuff in Spring (and EJB, and rails, and ...) the onus is on us, as professionals to learn it and use it where and when it's appropriate.
"You don't off an example of a tech stack you do favor so one can only guess."
I think annotations are used many times in Java where abstractions like first class functions would be used in other languages.
I also find Lisp macros easier to reason about. "This compile time source code expands to this run time source code, which executes like so."
Perhaps surprisingly, I even find Ruby magic easier to reason about. "This method causes these three other methods to be defined to do x, y, z." It can get confusing, and final behavior highly dependent on the order in which the code executes, but I still feel like I have a mental model of how everything executes.
With annotations, depends on the code processing the annotations. You could have different code doing different thing with the exact same annotations. Your IDE can take you to the annotation declaration, but not directly to the code the annotation causes to execute. In the debugger, you can see the code in the call stack that was generated, but no link back to what annotation caused it to be generated.
It all just feels more like memorizing spells at Hogwarts, and less like an engineering process.
Spring desperately needed some remote interfaces to the engine to let external debuggers attach & tell you what was what. It keeps track of all this data, & you can find out what's in the various object containers if you ask really nicely with a lot of code. If this had a GUI, I think it would be an enormously sophisticated & elegant way of dealing with systems. Alas now it's a fright.
As a side note, if anyone's interested in looking a bit more into "programming as magic" there's a great book series called The Wizardry series about programmers being transported into a fantasy realm where magic works similarly to a programming language.
Sounds a lot like the "Magic 2.0" series by Scott Meyer.
In that world, "magic" is very much a direct result of programming. I've read the first two books in the series and enjoyed them a lot. For anybody whose into that sor of thing, I recommend this series highly.
Just finished the third book. So far 1 and 2 (which takes place in Atlantis which may have borrowed heavily from Apple's design philosophy) are my favorites.
They definitely focus more on the programming nuance. It's also cool how they introduce technology and interfaces from different periods of computing due to the time traveling aspect.
Diane Duane's Young Wizards series is more "magic as programming" but it's also quite good if you like stuff that's fairly YA pitched. It bridges the gap between "magic is deeply mysterious and unknowable" and "with the right set of words and invocations you can teleport" in an unusually deft way. Magic uses a more declarative language than an imperative one, but it's composed in much the same way as you might compose a program.
A magic Apple II makes an appearance, if I'm remembering correctly...
Forth, I believe it was, rather than APL, and specifically for the simple semantics and quick composition of a stack-based language. I recall being impressed with the author's rather detailed, but still likely accessible to non-wizards, description of the decision process and its outcome.
My favorite bit was summoning the Interpreter from Starting Forth -- you could recognize him from the description before it was explained. I mean, if you've read Starting Forth already.
> If you don't, it'll do nothing or worse, blow up in your face.
I assume I am not the only one who destroyed at least some amount of his personal data doing computer magic [1]. This would be analogous to a spell going wrong, burning the witches' hand or something similar.
[1] Be it an incorrect incantation of rm, or just a poorly aimed flick with the pixie pointer.
Whoa, what? I'd be curious to hear more about that... How could some software config harm a display? Incorrect sync rates or something? ...and yeah, I am old enough to have used CRT displays for many years of my life, just never seen one get damaged like that! :)
Used to be, you configured X for your monitor and video card by editing a config file that specified the assorted timings and so forth. Yes, you could make your monitor very unhappy with the wrong settings.
My sympathies. I remember the feeling in my gut I got when I had to manipulate XFree86 (what distros shipped with when I had to do this the last time) and worrying that I'd lose my one and only monitor, but it never happened to me.
As long as we're recommending things, I'm tossing "Off To Be The Wizard" into the pool. Magic is done by modifying a secret file that modifies the world; you can create macros that modify it for you, etc., etc. Shenanigans ensue.
Similarly, the Ra story on qntm.org has magic be well-defined to the point of having an intentionally boring college lecture, with the magic spells being both consistent and recognizable. The author did a writeup of some of how the language is structured.
I recall enjoying that series. Correct me if I'm wrong, but at some point he brings a friend over to his world and gets made fun of for programming magic in Forth.
I find it at the very least a little ironic that the author used consumer technology to simulate magic abilities (to such an immersive state that he had to put a low-horror mode) and uses his success in this department as an argument that consumer technology doesn't very closely convey the feeling of magic.
I appreciate the argument being made, but I can't say that I accept the premise that (sufficiently advanced) consumer technology is often unlike magic.
Hell, just sending out an invisible beam of light towards a magic black box so that it can remotely open up a window to a lands that may or may not exist is an awfully cool reality to hide behind the rather normal sounding acronym "TV", and that's hardly cutting edge technology.
There is something in the fact that consumer products often try to 'get out of the way'. So yes, the way it actually works is extremely magical, but it manages to hide it so well that people don't really think about it. The fact that the remote controls the TV is just a fact of life and the way the world works, while how to stop the radio from bleeping every night at midnight, that is magical.
He was talking specifically about the feeling of doing magic, not the feeling of experiencing magic being done. He's interpreting "X feels like magic" as "X feels like being a wizard." Playing a VR game doesn't feel like being a wizard; it just feels like having a spell cast on you.
"...Ever tried to set up a Postfix server?" is the new "...Ever tried to set up a Sendmail server?".
(When I was younger, I was told by a veteran sysadmin that only 5 persons in the world knew how to configure Sendmail directly, everyone else was relying on preprocessing scripts written by the aforementioned wizards).
Edit: my point is that Postfix is actually quite easy to configure, compared to Sendmail which was the standard in the 90s.
> When I was younger, I was told by a veteran sysadmin that only 5 persons in the world knew how to configure Sendmail directly, everyone else was relying on preprocessing scripts written by the aforementioned wizards).
Ha! When I jumped into Linux during the summer of 95, I spent many many days and nights writing directly sendmail.cf rules, because I could not understand and use any of those damn M4 scripts... Handwriting sendmail.cf parts was more straightforward for me (for some value of 'straightforward').
20 years later, I have yet to get around to grasping M4.
It's definitely an old metaphor. SICP is the "Wizard Book" after all, and IIRC they even used the term "incantations" to describe commands and programming constructs at some points, though it's been well over a decade since I've leafed through it.
It makes me wonder if there are any realms of wizardry where the highest ranking wizards spend all their time on management skills and never get to practice their magic.
"Oh, these days I just review a lot of spell-design scrolls and mentor junior acolytes. Magic is more of a people business, you know."
Well, it depends on if you're talking early series or late series. Early series, the wizards were college academia taken to absurdist violent extremes, to the point of assassinating each other to try and get tenure slots. Most of that got quietly dropped over time to make them more likeable.
Trust me, you don't want to go down that path. Spend all that time memorizing some complicated spell, use it once, and poof, you've completely forgotten it.
I hate to say this, but it actually got better when Robert Jordan died. He lost control of the series around book 6 and just started meandering, and books 7-10 aren't really worth reading. He picked up the pace again slightly with book 11. Then the Sanderson books (12-14) are excellent; he managed to tie up most of the loose ends, the characters basically read like old Robert Jordan, and the pacing moves well (even a little quickly at times).
Good to know. I stopped at book 7 I believe ... and I see what you are saying, somehow the story was plodding along in the later books - I was still enjoying myself, but I definitely wouldn't have complained if all the cruft was cut out.
The last three books were written by Brandon Sanderson. They were so good. I wish we could keep the first 2-3 books from Robert Jordan and have Brandon Sanderson rewrite all of the middle books up to his last 3 books. It would really improve the series. I'm loving Brandon Sanderson's Stormlight Archive series right now. The third one is coming out in a few days.
Given what I remember of the middle books, it would be less about rewriting them all and more writing one book to replace them all. Could probably just be done by selectively removing chapters, similar to the fan edits of the Hobbit movies.
Another analogy that I can't shake off is True Name and search engines.
Since the dawn of time folk tales placed emphasis on true name of people and objects. Knowing the true name grants one power over something or someone.
https://en.wikipedia.org/wiki/True_name
Knowing the true name of someone lets you put it in a search engine and find out about him/her. There are some sleazy smartphone apps which let you do even more. Knowing the name of the problem lets you search for the algorithm. Certain problems become trivial if you can name them and find an already known solution.
Even better, sometimes I wonder if history is not going in circles. Maybe so much fuss is made about True Names because it's echoes of a long dead civilization which already had computers and search engines ? Atlantis ? Quetzalcoatl ? Meroe ? Hyperborea ? Mu ? Lyonesse ? Dogons ?
You don't have to have computers to have amazing record keeping combined with shitty security. Egypt under the rule of the Romans was run with a ridiculously tight ship because they wanted to extract tax revenue from every single person in the country. Same with China around the same period.
As true names are unique (are they?), they seem more like debug console credentials, where you can ultimately control or threat the existence of named being.
Social security numbers occupy a similar place in American society; you gain additional power for every Former Address of Residence you know, and the True Name of your mother - the one she was known by before marriage - unlocks further powers yet.
"True Name" is what I'm reminded of most when I try to invoke tech support. Recently my ISP upgraded me to fiber and gave me a ... router. I would put some adjectives there, but I want to keep this post civil. Needless to say, I want to do some more advanced things with this device like enable restricted UPnP, maybe run some DNS-level ad blockers, port forward, etc. After some arguing with tech support I couldn't get them to divulge the password and other administration details, so I gave up and set up my own router right after it to do at least some of the things I want.
Recently however, I saw an offhand comment in a thread about this ISP, where the person mentioned the words "please bridge port 1 on my router". Well that sounds like exactly the thing I would want, but didn't think to ask for and the tech support person didn't think to offer me. Sure enough, as soon as I spoke the magic words to tech support, the router became a bridge and my own device is acting as the gateway.
The big difference between tech support and programming is that programming usually comes with a manual, while with tech support, you have to learn the True Names of the actions you want performed from some wise master who heard them from some other wise master, who... and so on.
The big difference between tech support and programming is that programming usually comes with a manual, while with tech support, you have to learn the True Names of the actions you want performed from some wise master who heard them from some other wise master, who... and so on.
Actually this is true of most bureaucracies: banks, governments, large companies, academia, etc.
>Since the dawn of time folk tales placed emphasis on true name of people and objects. Knowing the true name grants one power over something or someone. https://en.wikipedia.org/wiki/True_name
Ha, interesting. I've read a few novels in which they say that people of some tribes think that is so. And (just guessing here) that may be why in some tribes, a person can have more than one name. I don't mean name as in First_name Last_name (which are treated as a single composite name), but as in Name1, Name2, ..., i.e. multiple different separate names. Also, the approach taken to giving names to people, in certain tribes or communities, is interesting, and varies by tribe.
> True Names is a 1981 science fiction novella by Vernor Vinge, considered a seminal work of the cyberpunk genre. It is one of the earliest stories to present a fully fleshed-out concept of cyberspace, which would later be central to cyberpunk. The story also contains elements of transhumanism, anarchism, and even hints about The Singularity.
>Among others. I searched and read a lot, looking for anything along the lines of "the long-isolated tribesmen were amazed at seeing a cell phone for the first time, and asked 'what kind of magic is this?'" But I have not found anything that relates a story of confusing technology with magic.
>The additional point about the tendency of visitors to THINK they've been perceived as superior divinities is extremely valuable.
This is a really well-written article. It's clear, concise and sticks to the point, not drowning the reader in anecdotes and unrelated analogies. I've thought these same thoughts myself when explaining automation and how it would affect their lives to my parents, and was met with mostly indifference not because they were stubborn but because they simply couldn't wrap their heads around the idea that a computer (which, when they were growing up as teens, weren't even capable of doing things like e-mails) could ever fully replace them, people who studied for years to master and certify their respective jobs. This article describes that experience in a truly creative and interesting way.
I've never seen wizards in fantasy novels have to deal with myriads of JIRA tickets, attend interminable mind-numbing meetings and solve impossible dependency hells. I guess that's why they call it fantasy.
Bob Howard in the Laundry series by Charles Stross is a wizard who has started out in IT and who does have to go to interminable powerpoint meetings and work through lots of hideous beaurocracy.
Well the wizards at the Boeing factory make fucking things that fly man! And those flying things have even been used to drop nukes. Who is burning them at the stake?
Go is still a pile of abstractions built on top of another pile of abstractions that almost no one fully groks. It doesn't seem significantly less "magical" than any other commonly-used language, especially from the perspective of non-wizards, even if it might be a better tool for casting certain spells.
I don't know if your "hardware OS program" is representative. Try writing a trivial web application using cutting edge technologies. You'll quickly see how much you have to know to work on even trivial applications.
No. The only people that seem to get upset about this is the media, because their power is being usurped by Facebook, and Silicon Valley itself. Go 30 mins outside of the Bay Area and everyone thinks Silicon Valley is great, and programmers work magic. Living in this tech bubble gives a skewed view of the world, but really no one cares.
I get the impression that right now they’re too busy blaming offshoring and immigrants to realise that their jobs have been automated and nobody is doing them.
More like "Burn the programmer! Adobe has crashed for the third time today!", or "Burn the programmer! YouTube has 100k+ likes on my copyrighted video (that someone else uploaded), and all I got was this lousy t-shirt!"
Haha yes, many have laid the link between magic and computers/programming. I remember as a child being very interested in magic and that fascination naturally refocussed to computers in my adult life.
Also check out this website for a funny parable about computers, DNS, wizards and the NSA:
http://grimoire.computer/
253 comments
[ 3.0 ms ] story [ 275 ms ] threadI do like thinking of myself as a wizard, though.
[1] https://hackaday.com/2017/11/09/stop-motion-with-the-time-gl...
Excel functionality is on part with some programming languages.
https://www.youtube.com/watch?v=0nbkaYsR94c
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"....
https://www.youtube.com/watch?v=INa41RSwiCc
But eh, I suspect a good programmer in most fields wouldn't be seen as 'magical'.
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.
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.
Given how political certain projects have become, i dunno...
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.
The tools are different but the ideas are the same.
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."
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.
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.
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.)
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.
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).
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
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.
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...
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...
Enterprise Windows software is so much fun.
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.
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.
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.
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 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.
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.
From personal experience, that is more than scary enough for some to never attempt anything at all.
Later I discovered MIT's Scratch, and it let me figure things out on my own: games, physics, genetic algorithms.
I think programming is portrayed to be more difficult than it is. It's a mixture between programmers trying to find the most efficient system, and the public's half-uncertainty of computers being magnified.
As a side note, if anyone's interested in looking a bit more into "programming as magic" there's a great book series called The Wizardry series about programmers being transported into a fantasy realm where magic works similarly to a programming language. The main character ends up writing a compiler based off (IIRC) APL and revolutionizes magic. The first book is called Wizard's Bane and it's light and fun reading.
There is a section that muses about the future of humanity and how in the near future, these would literally seem like magic to anyone who doens't have technical know how, and for all intents and purposes, it was.
As soon as we get some sort of grey goo with an API like in Big Hero 6 or wrist mounted fireball/lightning generators we're in business.
If you like that kind of thing and you enjoy/don't mind anime, there's also the serie Knight’s & Magic. It is about a programmer being reborn in a world where people wield big "golem" armors. The protagonist then proceed to make his own version, completly disregarding the philosophy of that world. Thinking of those golems as nothing more than machines and using magic as nothing more than "inputs/outputs" for those machines and the world.
http://www.crunchyroll.com/knights-magic
"A genius programmer and hardcore robot otaku is reborn into a world of knights and magic, where huge robots called Silhouette Knights roar across the land! Now reborn as Ernesti Echevalier, he uses his vast knowledge of machines and programming talents to begin to make his ultimate robot. But his actions have unexpected results...?! The dreams of a robot otaku will change the world!"
Thanks for the recommendation!
That being said, it's an interesting point of view. The character goes so far as taking personal a fight against a "golem plane" solely because he fears that the invention of planes will means that this world, like ours, won't have mechas. He doesn't have a care in the world but to use magic as a means to program mechas and completely disregards the fact that magic should be exciting in itself.
From an unofficial (and somewhat grammatically atrocious) English translation of the original novel [0]:
> Normally, Eru would have given up at this stage and would have chosen a more practical spell. But he knew how to solve the problem because of his unique skills ― programming concept. He had experience in designing and coding software to handle multiple variables. That's why he skipped the beginner magic phase and jumped straight into the 'modified magic' phase. Reviewing the structure of the physical boost script, Eru compressed the structure to minimise the number of variables, creating subscripts that would automatically extract the status of the body. After compiling it, he just needed to design the user interface to make it easier to control, so as to lessen the burden.
> Complicated projects like the improvement of scripts was not something that could be done easily by anyone. Eru, however, was not aware of this, completing the improvement shortly, and the patch was a big enhancement. But even so, it was still difficult to control magic that strained the mind heavily. But with his extraordinary processing ability, it was not much. No one realised that a historical revolution had occurred, but for Eru, this was just a small step in his journey.
[0] http://webcache.googleusercontent.com/search?q=cache:http://...
Is that bad? Like any didactic subtype of the genre, rationalist fiction often struggles to succeed in both of the goals set for it; the only example I've as yet found enjoyable - and extremely so! I strongly recommend it - is Unsong by Scott Alexander, also of Slate Star Codex.
https://parahumans.wordpress.com/ if you want something to read for next month(s).
The regular wizards use it to, let's say, make a door open when someone says "open" or other minor one-step commands.
The protagonist, a modern human stuck in a magical world, uses it differently. He creates sequences with it. He scripts complex programs.
[Minor Spoiler] As an example, he ends up creating a magical pistol. When the users speak "reload", the pistol (which the character imbued with a few spells using "enchant") casts a detection spell to finds the closest bullets. If bullets are found, the pistol then casts the spell "aports" on it. The bullets are teleported into the chamber of the pistol. He uses the same concept but with transmogrification enchantments to add voice commands such as "sword mode" or "pistol mode" that transform the pistol into a sword and vice-versa.
Hasn't that gone out of style with Zola?
>At the start of the story he has a legitimate positive agenda--he wants to use science to uncover the secrets of magic. As the story develops, however, he completely loses sight of that goal, and he instead becomes just a passenger in the plot--he competes in Quirrell’s games and goes through school like any other student. When Voldemort starts including Hariezer in his plot, Hariezer floats along in a completely reactive way,etc.
>Not until spoiler dies, near the end of the story, does Hariezer pick up a positive goal again (ending death) and he does absolutely nothing to achieve it
I personally loved HPMoR, even more so than the original series. I also disagree with most of the review, either factually (I believe most of the science is sound), or because I have a different interpretation (how Harry lacking agency is even a problem?).
"Just add this dependency, and add these annotations to your class, and it will all Just Work."
"But...what do those annotations actually do?"
"Stop asking so many questions!"
I mean, I know the answers are out there, it's open source after all. But so much of it seems deliberately designed to obfuscate the flow of execution and make reasoning about the code as difficult as possible.
A lot of the development process consists of adding fields with particular names to classes that have a long inheritance chain of their own, and it's not trivial at all to understand what all of your options are and how they work behind the scenes.
I’ll definitely check out Tornado and the others for how they compare.
That is precisely my consternation. Much, much easier to reason about abstractions in the core Java language, like methods and objects, then to discover what code is being injected by an annotation. Java has outstanding IDEs that excel at navigating, analyzing, and debugging Java code, but putting so much logic in annotations is almost like you are trying to deliberately keep much of the code secret from the IDE.
In many, many applications explicit injection works just fine and is exactly what you want. But once you say "I am going to write a Spring Boot application", you are pretty much stuck with a big part of your application logic stuck in annotations, even when there is very little benefit over explicit code.
When I see people design systems where, when they break, the only way to diagnose the problem is to do a code review, (not read the logs, or fire up a debugger), I wonder how they got along in their education without understanding the importance of debuggers, or why they hate their fellow programmers so much.
Spring comes out of a book that tried to reject the arcane nature of J2EE. I wonder sometimes if Mr Johnson recognizes hay the Beast he created is just as bad as the one he slayed. And how well he sleeps at night.
It got so bad they made a mini version of Spring, and even that is very declarative, and nearly impossible to explore.
It's interesting you took the time to post this. As the sibling to this comment indicate, there's a lot of 'magic' in many languages and frameworks. not just Spring. You don't off an example of a tech stack you do favor so one can only guess.
I will say that when I have encountered developers and teams who also disdain otherwise popular frameworks, they sometimes choose to roll their own instead of buckling down and learning said framework. Invariably they end up with a partial implementation of what they didn't understand, that is bug ridden, ill performing, and just plain bad.
There's a lot of good stuff in Spring (and EJB, and rails, and ...) the onus is on us, as professionals to learn it and use it where and when it's appropriate.
I think annotations are used many times in Java where abstractions like first class functions would be used in other languages.
I also find Lisp macros easier to reason about. "This compile time source code expands to this run time source code, which executes like so."
Perhaps surprisingly, I even find Ruby magic easier to reason about. "This method causes these three other methods to be defined to do x, y, z." It can get confusing, and final behavior highly dependent on the order in which the code executes, but I still feel like I have a mental model of how everything executes.
With annotations, depends on the code processing the annotations. You could have different code doing different thing with the exact same annotations. Your IDE can take you to the annotation declaration, but not directly to the code the annotation causes to execute. In the debugger, you can see the code in the call stack that was generated, but no link back to what annotation caused it to be generated.
It all just feels more like memorizing spells at Hogwarts, and less like an engineering process.
Sounds a lot like the "Magic 2.0" series by Scott Meyer.
https://www.goodreads.com/series/131379-magic-2-0
In that world, "magic" is very much a direct result of programming. I've read the first two books in the series and enjoyed them a lot. For anybody whose into that sor of thing, I recommend this series highly.
They definitely focus more on the programming nuance. It's also cool how they introduce technology and interfaces from different periods of computing due to the time traveling aspect.
A magic Apple II makes an appearance, if I'm remembering correctly...
I assume I am not the only one who destroyed at least some amount of his personal data doing computer magic [1]. This would be analogous to a spell going wrong, burning the witches' hand or something similar.
[1] Be it an incorrect incantation of rm, or just a poorly aimed flick with the pixie pointer.
This is probably the most useful thing ESR ever wrote: http://en.tldp.org/HOWTO/XFree86-Video-Timings-HOWTO/
https://www.amazon.com/dp/B00EF8Z32I/ref=dp-kindle-redirect?...
https://www.reddit.com/r/HFY/comments/250m73/oc_no_graves_fo...
https://www.reddit.com/r/HFY/comments/249hj7/oc_invitation/
https://www.reddit.com/r/HFY/comments/25qa83/oc_the_gods_sle...
https://www.reddit.com/r/HFY/comments/2b1vqr/oc_humanitys_de...
https://www.reddit.com/r/HFY/comments/3baheq/a_kingdom_of_as...
https://www.reddit.com/r/HFY/comments/3m704i/oc_cultural_exc...
https://www.reddit.com/r/HFY/comments/3jfu5t/oc_assimilation...
https://www.reddit.com/r/HFY/comments/4868zu/oc_janitor/
https://www.reddit.com/r/HFY/comments/45tsrn/the_hunt_inspir...
I appreciate the argument being made, but I can't say that I accept the premise that (sufficiently advanced) consumer technology is often unlike magic.
Hell, just sending out an invisible beam of light towards a magic black box so that it can remotely open up a window to a lands that may or may not exist is an awfully cool reality to hide behind the rather normal sounding acronym "TV", and that's hardly cutting edge technology.
(When I was younger, I was told by a veteran sysadmin that only 5 persons in the world knew how to configure Sendmail directly, everyone else was relying on preprocessing scripts written by the aforementioned wizards).
Edit: my point is that Postfix is actually quite easy to configure, compared to Sendmail which was the standard in the 90s.
Sendmail.cf deserves its reputation.
Hah; I had to look at a sendmail config a while back for a legacy server. It's line noise.
I'm embarassed to say that I wrote Postfix when I meant Sendmail! I might just go ninja-edit that now :)
Ha! When I jumped into Linux during the summer of 95, I spent many many days and nights writing directly sendmail.cf rules, because I could not understand and use any of those damn M4 scripts... Handwriting sendmail.cf parts was more straightforward for me (for some value of 'straightforward').
20 years later, I have yet to get around to grasping M4.
"Oh, these days I just review a lot of spell-design scrolls and mentor junior acolytes. Magic is more of a people business, you know."
(Ex-academic here.)
http://www.critical-hits.com/blog/2017/02/22/the-wizards-and...
Djinns are the BOFH of the magic world.
Since the dawn of time folk tales placed emphasis on true name of people and objects. Knowing the true name grants one power over something or someone. https://en.wikipedia.org/wiki/True_name
Knowing the true name of someone lets you put it in a search engine and find out about him/her. There are some sleazy smartphone apps which let you do even more. Knowing the name of the problem lets you search for the algorithm. Certain problems become trivial if you can name them and find an already known solution.
Recently however, I saw an offhand comment in a thread about this ISP, where the person mentioned the words "please bridge port 1 on my router". Well that sounds like exactly the thing I would want, but didn't think to ask for and the tech support person didn't think to offer me. Sure enough, as soon as I spoke the magic words to tech support, the router became a bridge and my own device is acting as the gateway.
The big difference between tech support and programming is that programming usually comes with a manual, while with tech support, you have to learn the True Names of the actions you want performed from some wise master who heard them from some other wise master, who... and so on.
https://www.xkcd.com/806/
Actually this is true of most bureaucracies: banks, governments, large companies, academia, etc.
Ha, interesting. I've read a few novels in which they say that people of some tribes think that is so. And (just guessing here) that may be why in some tribes, a person can have more than one name. I don't mean name as in First_name Last_name (which are treated as a single composite name), but as in Name1, Name2, ..., i.e. multiple different separate names. Also, the approach taken to giving names to people, in certain tribes or communities, is interesting, and varies by tribe.
https://en.wikipedia.org/wiki/The_Rule_of_Names
> True Names is a 1981 science fiction novella by Vernor Vinge, considered a seminal work of the cyberpunk genre. It is one of the earliest stories to present a fully fleshed-out concept of cyberspace, which would later be central to cyberpunk. The story also contains elements of transhumanism, anarchism, and even hints about The Singularity.
~ https://en.wikipedia.org/wiki/True_Names
https://worldbuilding.stackexchange.com/a/32371/38995
>Among others. I searched and read a lot, looking for anything along the lines of "the long-isolated tribesmen were amazed at seeing a cell phone for the first time, and asked 'what kind of magic is this?'" But I have not found anything that relates a story of confusing technology with magic.
>The additional point about the tendency of visitors to THINK they've been perceived as superior divinities is extremely valuable.
But there are people working towards creating things that no one will be able to control once they're out.
Hardware OS Program (no libc, no dynamic libs, no external runtime)
Go specializes in "it runs like you read it". I hate magic in my program and I distrust programmers who program like a magician.
More like "Burn the programmer! Adobe has crashed for the third time today!", or "Burn the programmer! YouTube has 100k+ likes on my copyrighted video (that someone else uploaded), and all I got was this lousy t-shirt!"
https://xkcd.com/627/
Also check out this website for a funny parable about computers, DNS, wizards and the NSA: http://grimoire.computer/