Are spreadsheets a true programming language?
about.subset.so
about.subset.so
Of course spreadsheets are programming. So are R, Hypercard, Logo, etc. Some programming languages/environments are more useful for some sorts of tasks than others, or are simply infeasible for some tasks. (You wouldn't want to, even if you could, build an ecommerce website in "R" or "Julia" alone but they're both clearly programming languages). Some programming languages might be downright useless.
What does it tell us to say something is a programming language? Whatever it tells us, sure, spreadsheets of the Excel variety are programming languages/environments, of course.
Basically I found an interesting article found here( https://news.ycombinator.com/item?id=25043741) and summarized some key points from the comments while adding my own ideas.
As in: - an excel spreadsheet is a program that is run by Excel - a word document (with or without macros) is run by Word - a web page is a program that is executed by the browser
Documents-as-programs have this dual identity where they are a combination of data, presentation and logic. It's not a perfect categorisation but I find it helpful.
but I guess they aren't as presentation-focused in the same way, presentation focused for a certain presentation environment, as your examples perhaps are.
Hypercard, then, would be in this category?
The GUI is determined by the interpreter/vm. A spreadsheet doesn't really define it's GUI - the "host" defines it. A ruby script building a GUI (e.g. shoes) can look like anything. A spreadsheet, word document or web page has to have some basic structure.
Of course with things like VBA/OpenOffice Basic, or SPAs with JS, those distinctions start to blur - it's definitely not a perfect categorisation and it breaks down eventually.
Maybe you could say every document is like a custom plugin. E.g. my spreadsheet is like a plugin to Excel/Numbers/Sheets I _think_ in fact in MSOffice and OpenOffice plugins actually were just special documents but it's been a very long time since I was in that world.
Huh? Was this written by ChatGPT?
I suppose there's an enjoyable inception/dogfood possibility in this industry.
I'd make the case that figuring out the order to do things in is "one more thing to worry about" and also gets in the way of parallelization.
Note the "old A.I." tools in the 1980s such as logic programming languages like Prolog and the production rules engines (expert system shells) used backward and forward chaining strategies to accomplish this but both had some awkwardness when it came to the cases where the order of execution mattered. My guess is that these techniques will shine again in the new age of low/no code.
That is, many dataflow systems have ways you can make systems by drawing boxes (operators) and lines (connections between operators) but don't give you facilities to make a reusable box which is itself comprised of boxes and lines. If somebody really tried to make a tool of that sort which had a modules and other facilities for programming in the large I know we could do better but this may very well drive away the kind of person who is attracted to these tools. (I think of how many "data scientists" react violently to the slightest bit of SE discipline such as separating the results in a Jupyter notebook from the code that generated those results.)
It's a shame because all the time data analysts are thinking about "How do I make the monthly sales report for August?" and not about "... for every month" and it is such a universal and predictable problem but the tools don't give people a structured answered.
A concept that I've thought about applying to production rules (and maybe other systems) is "rules and schemes" where the code is divided into multiple layers with a relationship similar to HTML and CSS. Logical rules are one thing, what you do with those rules are another thing. People apply this kind of thinking to a small range of concerns in "aspect oriented programming" but with the right kind of compiler support it could be applied to other things like memory allocation. I hear people complain about "colored functions" when doing async programming but when I write for arduino I often write programs where (in my mind) there are a few (say five) colors of function that all play a particular role in the system and I even avoid automatic variables on the stack because they are just a waste in a program of that sort.
Also, I gave a dumb example involving four cells - some spreadsheets involve thousands of active cells with complicated interdependencies, conditional formatting and hidden ranges... these large sheets are usually rather responsive for how much unstructured complexity is in them.
At an introductory level it doesn't seem like much but there is a certain point in complexity where it becomes a major burden, particularly when it comes to composing complex systems out of multiple parts.
That's how frameworks like Guava and Spring banished the Factory, FactoryFactory, FactoryFactoryFactory, FactoryFactoryFactoryFactory, ... pattern in Java by creating a MetaFactory that sees the relationships between all the parts as a whole and resolves all of the things that would seem circular if you didn't carefully tease them apart manually. Things of this type, however, have a remarkable ability of "slipping people's minds" and you still hear people complaining about the Factoryⁿ problem in Java which is so 1998.
dependency graphs are related to concurrency, decoupling, reactive rendering, lazy recomputation, efficiency and ultimately code concision (if you remove order safety, and memory updates from the code, only few lines remains)
- At work I'm tasked with grouping 40 administrative areas into larger geographically cohesive groups so that each group is roughly 20 km² in total area. This can be done by hand, sure - and I could also implement a GUI in some web framework to help me do it - but a spreadsheet lets me quickly develop a special-purpose application with good-enough usability, and it's all in all faster and more intellectually satisfying than solving the original problem by hand with a calculator.
- For planning a 120-person dinner party I need to make a table plan, organizing the guests into a certain number of 8-person, 10-person and 12-person tables (constrained by the tables available at the venue). Sure, I could cut out 120 pieces of paper and write the guest names on them, or copy-and-paste names around in a plain text document, but again a spreadsheet lets me quickly count how many guests have been allocated to each table and whether the current allocation uses the correct number of each size of table.
This is an interesting use of spreadsheets.
[1] https://youtu.be/uZxfBbikNkU (it was somewhere in this video)
As time progresses we get more open-minded and close-minded simultaneously -- we're experimenting with new ways of programming and computing, but we've also internalized existing structures as innate/fundamental. Maybe Corbato was just thinking creatively, or maybe he was less corrupted by decades of normative standards about what "programming" means.
As a linguistic question, it depends how you define "programming language". Some people consider anything that tells a computer what to do to be a programming language. Others consider it useful to separate programming languages from markup languages, query languages, assembly languages, scripting languages, etc.
As a technical question, a lot of people jump onto "is it Turing-complete?" Personally, I think Turing-completeness is overrated and kind of a tangent.
Finally, there's the ideological question. Especially on Twitter, similar questions are intended to break down the hierarchy between people who code in C++ or Java and people who write HTML.
What I consider the interesting issue is how spreadsheets have been so successful for solving problems that would otherwise require "programming", and make the power of computers available to a much wider audience. Why haven't more systems caught on that would let people solve problems without "programming"?
What can one learn from the other, and/or could we get some kind of singularity here?
Ah yes, the joys of absolute memory addressing. How much hair was lost over those details until we figured out that using variables is nice?
https://www.theverge.com/2020/8/6/21355674/human-genes-renam...
A spreadsheet has the data visible and the logic behind the scenes. A programming language has the logic visible and the data behind the scenes.
I used to look down on spreadsheets before I served my time at an HPC research institute. I learned there that they have their uses. Even among the most proficient of programmers.
As always; it's all about picking the right tool for the right job.
There’s a little known feature to enable circular references in Excel. This gives you iterators and recursion.
There are also named references in Excel which the article overlooks in its comparison to “true” programming languages.
The author also fails to acknowledge the limitations of spreadsheets as a programming tool. While they briefly mention that spreadsheets are less reusable than traditional code and have limited UI/UX capabilities, they downplay these issues and overemphasize the benefits of using spreadsheets. For example, they argue that spreadsheets are "easier" to use than traditional programming languages, but fail to acknowledge the complexity of learning the unique command line and R1 notation required to use spreadsheets effectively.
Furthermore, the author's argument that spreadsheets should be considered a programming language because they are used by a large number of people is flawed. Just because a tool is widely used does not mean it qualifies as a programming language. By this logic, we could argue that Microsoft Word is a programming language because millions of people use it to write code snippets.
Overall, this commentary lacks critical analysis and relies on unsupported assertions. While spreadsheets may have some programming-like features, they are not a programming language in the traditional sense. The author's argument that spreadsheets should be considered a programming language to increase the number of "programmers" is misguided and ignores the complexity of true programming languages.