Speaking as a Fancy Computer Science Professor at a Fancy Institution of Higher Education who teaches the course on Programming Languages:
I endorse @vkc’s position here 100%. https://linuxmom.net/@vkc/113669972894622255
Speaking as a Fancy Computer Science Professor at a Fancy Institution of Higher Education who teaches the course on Programming Languages:
I endorse @vkc’s position here 100%. https://linuxmom.net/@vkc/113669972894622255
@vkc (To be clear, the position I endorse is both “HTML is programming” •and• the heckler blocking.)
Beyond the reasons of “don't heckle, don't be an asshole” and “this boundary-drawing is elitist” — reasons which, to be clear, are •entirely sufficient• to justify the OP on their own — I am willing to defend the assertions that writing HTML is programming and that HTML is a programming language on the merits:
1/?
HTML is a way for humans to express their ideas and their intentions in a form that is unambiguously interpreted by a machine. We express our ideas, then turn them loose. The machine's interpretation may diverge from our human understanding; when it does, our ideas talk back to us and they •surprise• us.
If that’s not programming, I don’t know what is.
2/
@kdawson OP may have deleted? or locked account due to harassment? Edited with screenshot of text; may remove username if needed.
@inthehands @vkc That link is 404 for me.
We might draw a line about Turing completeness or intended purpose. Both completely miss the point.
It is fun to try to find Turing tarpits in HTML and/or CSS! But that’s not what makes programming programming.
The previous post is it. The problems of programming — the things that make it difficult, the things that make it rewarding — all come from that collision of human intent with unambiguous machine interpretation. That’s the game right there.
/end
@grwster
I mean, making the mistake of taking your cute remark seriously: the dog isn’t unless it’s a robot dog; that's teaching! One of the things that makes programming programming is the machine and its unambiguous interpretation. Teaching, however…that’s a whole other kettle of fish of a different color!
@inthehands 100%! LaTeX is programming, HTML is programming, Markdown is programming, teaching your dog to do tricks is programming. Not all programming is writing kernel drivers
@wronglang
I mean, yeah, there’s something to the idea that LLMs are not so different as we think from previous attempts to get machiens to follow human instructions!
The actual definition of AI is “thing that humans can be good at that computers were recently bad at,” so anything is at most •temporarily• AI once a computer gets good at it!
no one in particular: ...
me: I could argue HTML is also #AI, we just ask it to lay out documents using simple phrases and through the magic of parameters learned from decades of design experience the HTML interpreter presents a nicely optimized presentation. It's basically magic!
@wronglang
I stand by mine. It’s the only one that’s held up over my years in the biz.
@inthehands the definition of AI is disappointingly thin these days
@inthehands fair enough, though teaching a dog a trick is about capturing behaviors and putting them on command, and then chaining those commands, which is more like programming than teaching in my book
@grwster
I mean, maybe could one say that this kind of training — dogs, horses, soldiers, orchestral musicians, surgical assistants*, anything where you’re trying to teach a living creature to follow instructions with near-mechanical consistency — is teaching the student to be a machine, so that they can be “programmed” for the day’s task?
* (no disrespect to any of these roles / jobs, all demanding!)
@wronglang
¯\_(ツ)_/¯ If you’re looking for output that hews to norms, then it’s no surprise that pattern-matched plagiarism from a broad database of human inputs can provide it! And since that’s something that computers were recently bad at doing, then it does quality as AI. For now.
@inthehands I have gone through the exercise of trying to talk the chatgpt instance the university of Michigan makes available to its staff into terrible ethical positions and I gotta say it performed better (on, e.g.-Palestine) than a lot of the discourse in the mainstream news media so maybe there's some value to having a machine that produces average text... at least in the context of.. whatever we're experiencing right now...
@grwster
We're wandering now, but heck with it:
I have a whole soapbox about how we sometimes misinterpret musical scores as being programming when they’re not. There’s a whole spectrum of •how a score carries meaning• that depends on the types and degree of interpretive liberty the score affords within its musical-cultural context. Some scores are basically MIDI by other means; some are only the loosest framework for improvisation.
@inthehands orchestral scores / sheet music / guitar tabs, definitely programming… I’m a flawed machine when running those programs, but that’s not the programmer / composer’s fault ;-)
@grwster The classical world I come from has IMO erred since the mid 20th century much to far toward seeing scores toward the “MIDI by other means” end of the spectrum, particularly with pre-20C music. I’m pretty sure that if we could hear a recording of, say, Chopin or Bach playing their own music, a modern classical musician’s immediate reaction would be “No! That's wrong!!”
@inthehands people like to think programming is while loops and if conditionals. I like to remind people of their programmable TV remotes.
@grwster
If so, then C is not a programming language!
@inthehands point taken, but circling back to HTML, a certain amount of interpretation by the rendering engine is allowed… so, are programming languages by definition always tightly specified?
@padraigd @wronglang
Yeah, the “don't use abstractions” people really crack me up. Like…do you push electrons around by hand with a little pin?
@wronglang @inthehands How your computer works under the hood is pretty wild. Branch prediction blew my mind, makes determinism an interesting notion.
An addendum, a useful word:
An ••ostensive definition•• is a definition by example. No bright line that distinguishes “is” from “isn’t;” instead, we have a set of examples we agree clearly fit the word, then ask, “How does this other thing resemble the examples?”
Some words are best defined ostensively. “Sandwich” is a great example. You can have silly fun playing with the boundary conditions — A quesadilla is a sandwich!! A hot dog is a taco!! — but to get pendantic about that fun is foolish.
With a word like sandwich that’s defined ostensively, instead of asking “Is it a sandwich or not? Binary yes or no!!,” it’s better to ask, “•How• is it a sandwich?”
Similarly: “How is ____ a programming language?”
How does it resemble the pattern? How does it depart from it? What lesson we’ve learned about programming apply here? What don’t? Will it need…technical learning? precision? testing? debugging? version control? docs? knowledge sharing? curiosity? resilience to frustration? etc.
@inthehands My take is that this fits into the same category of whether something is art, or music, or a game, or a sport, or drug paraphernalia, or a toy, or a tool, or a vacation. None of these are intrinsic properties of the object or activity, they're ways of engaging with it.
The reason this is even a topic to talk about arises because one can totally use a WSIWYG editor and treat HTML as "text with some parts in italics” which is _not_ a programming type interaction, but you can also do more complex stuff that has to account for a bunch of different situations both today and tomorrow, which is not materially different from the sorts of things what someone writing C++ has to do.
Thanks, @Crell, I'm glad you asked!
Nontrivial Excel usage is quite obviously programming. Come on. But beyond that:
We’d have a much better understanding of usability failures if we understood tiny UI actions as itty bitty moments of programming. We’re asking people to momentarily span the bridge between human understanding and machine execution. Pretending that bridge doesn't exist is a perennial footgun.
“What, even clicking a button, Paul?!?” Well…
…try looking at it that way:
A button is a machine abstraction designed to accommodate human expression. It has a syntax whose underlying fabric is clicks/taps and mouse/finger motion. It assigns semantics to that syntax. Humans click the button with human intentions, and the machine executes the instructions.
It is a ~3-state DFA, afew teeny tiny itty bitty atoms of programming.
If a UI button is a programming language, it's a tiny, trivial one. But that lens of “In what ways is this user interface a form of programming?” does open the door to insights about what experiences humans are going to have trying to use it.
We programmers understand the difficulties and the dangers of:
- compounding complexity
- mismatch between mental model and machine implementation
- error states
- unintended consequences
- solving the problem at hand using the building blocks available
- not losing sight of the problem in the middle of fighting the machine
- the way social / human problems can come to ahead when codified in commands given to a machine
- the way a better abstraction can make change whether something is easy, flexible, error-prone, adaptable, correct
- etc
Viewing computer interaction as a series of increasingly programming-like steps goes a long way toward explaining why your dad can’t figure out how to change the wifi password.
Looking at things that way, @nikclayton’s snarky reply is unironically correct:
https://mastodon.social/@nikclayton/113680873868692643
I mean, seriously, formatting things with a word processor can feel a hell of a lot like getting some developer API to do this one damned thing that it just…won’t…do.
And it feels the same because •it has the same set of problems•.
I know, I know, the Reply Guy Armada is coming to tell me “If •everything* is programming, then •nothing• is!” Cool your jets, my friends.
Some things a very much programming, some things only slightly so. The useful question here is not “Where is the precise boundary?” but rather “How much does it belong to this family of problems, and how can we learn about it by bringing the knowledge and experience of that discipline to bear?”
Here @aubilenon gets at something really important, and per the above, all the comparisons to “is it art / music / a game” etc etc are on point:
https://peoplemaking.games/@aubilenon/113680577564840603
Context matters. Intent matters. Patterns of usage matter •a lot•.
@inthehands scoped problems, their meta-problems, and their ancestors' and descendants' problems…
@inthehands @Crell the fun thing about ostensibly defined concepts is that you get edge cases that still very much can claim to be the thing, but which have mutually empty intersection. In this case: implementing NAND gates, wires, and delay lines using Venus fly traps is programming (it's creating a Turing complete device, after all), and writing a markdown document is programming (it's telling a computer how to do stuff, after all), but their intersection is empty (unless, of course, you use a lot of Venus fly traps and implement x86).
I feel like the world is more fun that way, compared to excluding random things.
@sophieschmieg @inthehands @Crell 'for any reasonable all-or-none definition of chicken, it has happened at least once in history that a chicken has hatched from an egg laid by a non-chicken, something that can obviously never have happened'
@inthehands @nikclayton PREACH!
@datarama
Agreed, right up to the end: at that point, you're making Roller Coaster Tycoon / Minecraft into a programming language.
People who build working machines out of the Game of Life quickly start building up design patterns and abstractions. Programming is a kind of problem and/or a way of using something, not just an intrinsic attribute of the object itself.
@billseitz
Heh, I’m game as long as we don’t forget that the purpose of the Cube Rule is to be silly
@inthehands we need a Cube Rule for languages
https://cuberule.com/
@jorendorff @billseitz
“Our fully relational ravioli offers the dual benefits of both persistence and delicience”
@inthehands @nikclayton This all reminds me of one of the first actual "debugging" tools I ever used (this was before I had done enough "what-people-who-think-HTML-isn't-programming" programming to use or need a traditional debugger for it).
"Reveal Codes."
This was the magic WordPerfect command from the 80s/90s that showed you why, for example, the fricking italics weren't working or that one section on that one page was just a little bit off. "Reveal Codes" popped up a little text area (not even a window, this was DOS, after all) showing a section of your text and all the associated "codes", which were tags indicating the structure or appearance of whatever they contained.
A *lot* like HTML.
And using Reveal Codes to figure out where your document was going wrong, and why, and how to fix it, was a lot like wrangling HTML to get your web page to have the right structure and appearance...and, as noted, also like trying to figure out how to get a cranky API to get the kind of output that you need it to deliver.
@datarama
I mean, we’re dancing around two sides of the same coin: yes, and at some point, you’ve got to admit that it’s become a musical instrument.
@jorendorff @billseitz
* slow clap *
@dpnash @nikclayton
All that. I really appreciate all these historical on-ramps — Applesoft BASIC was mine! — that allow a random curious human’s machine interactions to progressively become more and more programming-shaped.
@inthehands @nikclayton I'd actually go so far as to say that Reveal Codes back in the 80s made HTML almost instantly comprehensible, even with emerging complexities like (then-larval) style sheets, in the 90s. And *that* in turn made it possible for me to make the jump to web development as a career when a previous one started to head south -- more so in many ways than having a reasonably decent background in "what the annoying pedants call programming" programming as well.
@inthehands Not sure why you thought that was sarcastic. Trying to form a mental model of how Word interprets formatting instructions ("Why does the formatting change when I collapsed two paragraphs into one?") and then giving instructions to Word based on that mental model meets the definition.
Contrast that with pounding on the keyboard trying to get it to do what you want without understanding what's going on.
@nikclayton
I misinferred the sarcasm. Apologies! We seem to be on the same page here, very much so.
@Crell
Please study the thread’s invitation to think of this term as a continuum, a quality that some activity may possess in greater or lesser quantity, rather than a boundary with an inside and an outside
@inthehands I am still partially agreeing with you. :-) I've referred to spreadsheet gurus as the largest stealth group of functional programmers in the world.
But conversely, if you're defining virtually any interaction with a microprocessor as programming, then the word means everything, and thus nothing. There is a qualitative difference between writing C++ or CSS and playing win-solitaire. How to capture that if not the word "programming"?
@thinkMoult @Crell
This video never gets old.
Also in the same general spirit: https://www.youtube.com/watch?v=xP5-iIeKXE8
@inthehands @Crell probably worththile at this point to resurrect https://www.youtube.com/watch?v=uNjxe8ShM-8
@qsx
(Java is compiled too — JIT-compiled, yes, but it does run as native machine code — unless you disable the JIT compiler and force the JVM to interpret it. But I like the larger spirit of your heckle!)
@inthehands @vkc additionally: Java is interpreted by the JVM and therefore a scripting language, while Perl is compiled and thus a """real""" programming language. Tell that the next person who tries to belittle "scripting languages".
@inthehands @vkc personally, I'd consider "programming" the intention to formulate an algorithm (yes I study CS at a uni with a strong focus on theory how could you tell?)
However, in this context, it's hardly relevant: when you take away an asshole's argument, they're just gonna find a new one. And if someone says "HTML isn't programming" with the intent to belittle someone, they're just an asshole and need to be told so.
Are there any widely used modern processors that directly support JVM bytecode like Jazelle did? or offer alt instruction decode like that at all? Or has JIT compilation won the day completely at this point?
@qsx @inthehands Java is compiled to an instruction stream designed for the abstract Java Virtual Machine and interpreted by the alternate instruction decode frontend of ARM926EJ-S and ARM1176JZ-S CPUs
weird* machines all the way up and down
(* in the colloquial sense of "weird", and sometimes in the academic sense of "weird machine")
@inthehands I feel like this is the perfect moment to summon @jn for some Jazelle :>
@TimWardCam
Jesus fucking christ, man, it's OK if you fail to read/understand the thread’s argument, but you don't have to reply to •tell• me that you failed to understand it
@inthehands Go on, then, let's see a noughts and crosses game coded purely in HTML - if it can't be done it's not a programming language.
An anecdatum for the thread above:
I’m in the process of reworking my personal web site. (It’s better now! It will be betterer soon!) To do this, because I am a fool, I wrote my own static site generator. The new site has thus involved:
- implementing what’s effectively an in-memory nosql database
- that supports and merges multiple data file formats
- with a flexible data transformation layer
- and an interactive data explorer
- and a data-driven presentation layer that that supports multiple template languages
- with scripting support
- and partials support
- that keeps related script, template, and style fragments together using a custom syntax
- and assembles them dynamically
- and scopes CSS fragments to their related component
- and provides good stack traces that give template line numbers
- with a comprehensive regression test suite
- with a custom test harness
- and RSS feeds
- that gather items from heterogeneous data sources
- and support audio attachments (podcasts)
- all of the above basically done more or less FROM SCRATCH
- with a dev web server
- with live updates on change
- and dynamic metadata retrival for audio files
- and dynamic generation of raster previews of PDFs
…and do you know what the hardest part of the web site project has been, •by far•?
Writing the CSS.
To be clear, it is •not• the case that being hard is what makes something programming.
I mean, if this is some kind of social hierarchy pissing contest about who’s “technical” and who’s doing “real work” and whatever, then yes it matters. But being hard isn’t what makes it programming.
The question is: what’s made the CSS hard?
- achieving design goals with the available building blocks
- dealing with unexpected semantics
- balancing reuse with abstraction overload
- testing across devices and contexts
- adjusting scope and goals based on implementation difficulty
- preventing and detecting breaking changes, esp in distant code
- taming complexity
- maintaing clarity about larger goals while in the technical weeds
I could go on.
Per @aubilenon’s excellent post above, a key factor for “Is it programming?” or “Is it art?” or “Is it a game?” is •how• the human(s) are engaging with it.
Well, the previous post tells you how I’m engaging with this thing. If I gave you that list but didn’t tell you the language, would you say it sounds like programming? I sure would.
The point of all my table-thumping is that when machines are involved, lots of things turn into programming — complete with all the challenges and pitfalls that entails.
We have strategies for dealing with those challenges and pitfalls. Recognizing programming wherever it emerges can help us meet those challenges, or change the problem to avoid them.
Drawing bright lines about what is and is not programming is actively harmful in those situations. We’d damn well better recognize programming when it comes up and bites us.
GNU social JP is a social network, courtesy of GNU social JP管理人. It runs on GNU social, version 2.0.2-dev, available under the GNU Affero General Public License.
All GNU social JP content and data are available under the Creative Commons Attribution 3.0 license.