You are viewing archived messages.
Go here to search the history.

xyzzy 2022-04-18 21:03:44

In many aspects visual programming, hygienic macros, adts from functional programming are already hitting mainstream popularity with things like Unity and Rust becoming so popular. I view blockchain, quantum and AI as storage / db improvements rather than programming improvements fundamentally and they have their place.

I think the next interesting wave of programming is going to be around improving the tools around programming like voice based programming, programming with the help of mobile phones and VR based programming IDEs. Thoughts ?

Personal Dynamic Media 2022-04-18 21:30:48

I have no idea what the results will look like, but I keep pondering a question that Brett Victor asked in one of his talks. I won't put it in quotes because I don't remember it perfectly, but it was something like: what would it mean to directly manipulate behavior?

I think a related question would be: how can we represent behavior so that it can be visualized and manipulated?

Steve Dekorte 2022-04-19 17:10:20

For your FoC work, which missing frameworks/platforms/features/tools (that are not specific to the project) do you feel would most help you implement your project? (for example, have you had to take any significant detours from working on your project specific code to build such missing pieces?)

Kartik Agaram 2022-04-19 18:23:29

SSL. Oauth. Talking to APIs in general. Also crypto in general, since we're not supposed to roll our own.

Christopher Galtenberg 2022-04-19 18:36:25

Local, syncable storage from browser

Ivan Reese 2022-04-19 19:16:24

Reactive data flow, 3D renderer + camera, computable reals with bounded perf... all in the browser and with an emphasis on minimal code size

Personal Dynamic Media 2022-04-19 19:30:21

A portable assembly language with guaranteed tail calls, not the "we may optimize them if the planets align" sort from gcc and llvm. Explicitly having to label tail calls would be fine.

Nick Smith 2022-04-20 00:41:31

A programming language that natively supports declarative/reactive GUIs. Similar to Svelte, but less ad-hoc.

But really, the hard part of The Future of Coding is discovering it, not implementing it.

Katie Bell 2022-04-20 01:46:15

A way to store code structures (like an ast tree).

I want version control as a history of tree edits, including support for branching, diffing and merging.

Essentially I want git but it works for non-text code tree structures. I know of other visual/structured editor projects that got bogged down in this too.

I really don't want to have to reinvent version control but text files are terrible for what I'm doing.

Ivan Reese 2022-04-20 02:22:30

^ Yeah, I want that! But it's gotta work at 60fps for thousands of elements in the tree, and millions of tiny edits, with faster-than-linear-search access to random spots in the edit history, in the browser :$ (I am okay with this using GB of RAM)

Jack Rusher 2022-04-20 06:47:07

@Katie Bell Have you seen https://difftastic.wilfred.me.uk ?

Katie Bell 2022-04-21 02:07:31

I had not seen this Jack Rusher! Thanks! ๐Ÿ™‚

It doesnโ€™t solve the whole problem, but it could help with the tree diffing part of it.

Steve Dekorte 2022-04-21 21:40:01

@Nick Santos "But really, the hard part of The Future of Coding is discovering it, not implementing it."

How do you know how hard it is to build if you don't know what it is? How do you know the right idea would be well recognized without first being constructed and experienced? How do you know the person with the right idea is also the person who can easily implement all the missing software layers to build it, or to convince others to do so? How do you know if the right idea is something that pops into one's head completely formed, or is instead discovered through an evolutionary process of building, testing, and seeing what feels right and where it leads them?

Jack Rusher 2022-04-22 06:07:54

@Katie Bell Totally! I don't mind if the on-disk format is text (vs in a DB or whatever else), so long as the tools on top can treat it like something richer, which is where things like this can be so helpful ๐Ÿ™‚

Nick Smith 2022-04-22 07:57:14

Steve Dekorte Conversely, how can The Future of Coding (which I'm assuming takes the form of a "programming environment" of some kind) be hard to build if you know exactly what needs to be built? To "know" what to build is to know what code needs to be written. If you know what code needs to be written, you can simply press all of the correct letters on your keyboard, in the correct sequence, and then you're done.

What I mean to say is: programming is entirely about figuring out what code needs to be written (or modified). That's what I was implying in my last message.

As you say, oftentimes you have to experiment (many, many times) to figure out what code needs to be written. One hardly ever writes the right code on the first try. But writing code (which forces you to deliberate every little detail) is the last step in the design & discovery process.

William Taysom 2022-04-20 03:09:06

Straw poll... As a rule, which is more challenging in the software systems you work on:

  • ๐Ÿคฏ Changing an algorithm. (Example: Need to switch to recursion because nested loops aren't going to cut it anymore.)
  • ๐Ÿ˜ญ Changing the data model. (Example: A user should be able to register more than one email address.)
  • ๐Ÿ˜ฎ Some other change is my main source of stress. (Example: It always takes an unreasonable amount futzing to convince the linker to use the updated version of a library.)
Ivan Reese 2022-04-20 03:18:21

But also โ€” changing the UI? Because the UI is always the hardest part?

But also โ€” changing user/stakeholder expectations?

Personal Dynamic Media 2022-04-20 03:19:40

I said data model, but I think the best way to make it hurt less that I know of so far is the Parnas approach. https://dl.acm.org/doi/10.1145/361598.361623

Ivan Reese 2022-04-20 03:32:06

[moved from top level, original post by @David Brooks]

changing the data model is always more challenging, imho, since data comes first. for challenge 3, just use NixOS: problem solved ๐Ÿ˜‰

Chris Knott 2022-04-20 10:06:26

I went ๐Ÿ˜ญ . An algorithm is relatively self-contained. The implications of changing a data model can be impossible to even enumerate.

Jimmy Miller 2022-04-20 19:03:24

๐Ÿ˜ฎ Understanding all the code, including code not in my codebase, to know if the change I want to make is okay. Actually making the changes to an algorithm or a data model is not too hard, in isolation.

I think data models in practice are typically harder because other code depends on it in a way that I have to understand that other code too. That other code may not even be accessible to me. (A customers codebase for example). Algorithms can have that implication, but not as often.

Since Iโ€™m guessing this question is asked partially to motivate which problems to solve, I do think there are ways to tackle this.

First, since others code in my scenario is a blackbox, we canโ€™t just make tools for actually understanding that code, it isnโ€™t accessible. But what we could do is make it easy to explore implications of changes.

Take an algorithm change. Instead of sending a request for every one message, I aggregate every 10 messages and send them. What are the implications of this? What if I never get 10 messages? What if I overflow some bounds? What about retries? Would my accuracy decrees if my failure rate increased? Would this change be effective? Would it reduce my downstream costs?

Consider a data model change. I have data structure A and I want to have data structure B. Is there a bidirectional mapping between them? What will the increase in my storage be? If I need to convert between the two, at what do I need to support? I know that I need X,Y, and Z access patterns. Are those efficient with the new data structure?

All of these things are questions we have to ask ourselves as we are making changes in systems. But we have no way to watch them play out. No way to tweak the parameters.

Really there are two tools trying to help us 1) Whiteboards 2) Formal models.Surely there is a nicer middle ground here.

Timothy Johnson 2022-04-22 09:15:02

๐Ÿ˜ฎ I spend inordinate amounts of time fighting with libraries and frameworks that I use without completely understanding. E.g., I recently migrated the backend of a web app from .NET Core to .NET Framework, because I needed a specific feature. It took a week to fix all the things that broke.

Personal Dynamic Media 2022-04-20 14:22:57

I've been pondering how to define a metric for how programmable a user's overall environment is. One thought I've had is to add up, for each application used in an average day, the percent of time it is used times the percent of features that can be programmed. Call it something like Overall Average Programmability.

I know this doesn't account for differences in how easy it is to use the programmability of a given app (mailx is much easier to automate than Gmail) or the importance of individual features that can or cannot be automated, or the ease of integrating applications with different built-in scripting languages, but I think this is a relatively well-defined metric that might still contain some meaning.

Does this sound like a meaningful and/or useful concept?

Would you estimate, over the course of your career, that your environment's Overall Average Programmability has trended upwards or downwards?

Any thoughts on the forces that may have impacted the trends?

Personally, I think mine has trended downwards, and I suspect it has something to do with the increasing roles played in my life by mobile apps, web apps, and services that make their money from advertising and want to maximize user engagement rather than productivity.

Thoughts?

Chris Knott 2022-04-20 20:31:57

I don't think it's a trend I've noticed. I would say the programmability of almost everything has stayed consistently low.

Kartik Agaram 2022-04-23 04:31:41

Things did feel more programmable 20 years ago. I spent more of my computer time on a Unix server that encouraged more scripting. Now I do more on devices (phones) that I can't program. I've made changes to my mail client when it used to be Pine. I can no longer do that now that it's a webmail client.

Even on programmable devices the picture feels worse. Every single open source project has gotten larger and more complex and harder to build over the last 20 years. Pine is defunct, but observe:

mutt mail client: 41kLoC in 1998 -> 95kLoC now. required perl in 1998, now also requires python.

tmux window manager: 24kLoC in 2009 -> 64kLoC now. Required perl in 1998, now also requires awk and yacc.

One confounding factor: I wonder how much of things seeming worse has to do with me just burning out on this sort of hacking activity over the years.

Konrad Hinsen 2022-04-23 08:34:03

My experience is much the same as Kartik Agaram's. The one environment that feels as programmable today as it did 15 years ago is Emacs. I suspect Emacs itself also grew bigger, if only for GUI improvements such as better rendering. But from the point of view of add-ons and customization, it's constant.

Kartik Agaram 2022-04-23 15:30:20

That was tantalizing enough that I did some more digging.

Emacs in 1997 (v20.1): 152kLoC C, 386kLoC lisp, 1010 lisp DEFUNs defined in C, 15k defuns defined in lisp

Emacs in 2022: 405kLoC C, 1.25MLoC lisp, 1780 lisp DEFUNs defined in C, 42k defuns defined in lisp

This is pretty blunt, of course. I'm just counting DEFUN in the src/ directory and ^(defun in the lisp/ directory. Let me know if there's a more accurate approach. But my impression is that Emacs pays so much attention to backwards compatibility that you are able to ignore new affordances for add-ons and customization until you need to go find something.

For completeness:

Vim: 275kLoC in 2006 (v7.0) -> 390kLoC now

Neovim: 167kLoC in 2015 (v0.1.0) -> 238kLoC now

Very interesting that Neovim is smaller now than Vim was in 2006.

tl;dr - sloccount is a useful tool!

Kartik Agaram 2022-04-23 15:35:25

Another potential metric that occurs to me here is "build difficulty index". Not really covered at all by my stats above.

Konrad Hinsen 2022-04-23 16:33:06

My point is that I don't really care about the size of Emacs. I do look at Emacs source code (the Lisp part) quite often, but I get there by navigating from my own code to layers below. As long as the number of layers I have to go through doesn't increase, the size of the Lisp code is irrelevant for me.

As you note, Emacs values backwards compatibility highly, which is something I do care about. Perhaps even more importantly, Emacs values programmability, and therefore offers good support for exploring its own source code.

So a good metric would perhaps be "number of navigation steps until you hit a primitive" (which for Emacs would be a function implemented in C)>

Kartik Agaram 2022-04-23 17:05:06

I'm kinda handwaving that the amount of elisp growing at the same pace as C above suggests there's no difference between C and Lisp once you start poking at the internals of the elisp. But if you're just using the elisp primitives, the surface area of names (which I'm estimating by counting defuns) does seem to grow a bit slower than the total volume of Emacs code.

Konrad Hinsen 2022-04-24 06:29:16

Surface matters more than volume, indeed, but any simple metric misses the importance of modularity. I suppose Emacs' size made a jump when org-mode was adopted into the core distribution, but this had no impact on people not using org-mode. They could (still can) simply ignore it.

Gregor 2022-04-21 08:11:07

I vaguely remember seeing a tool for visualizing data flows between systems, e.g. you'd describe a queue with multiple consumers and would describe what e.g. fan-out does and then you can trigger that action, seeing how data travels along the queue vertices to its consumers.

Anyone know what I'm talking about or sth in that direction?

Mariano Guerra 2022-04-21 09:13:25

the rabbitmq simulator sounds like it http://tryrabbitmq.com/

https://vimeo.com/51363470

Andreas S. 2022-04-24 15:01:13

Do we have a thread about how roamResearch build their mobile strategy on ClojureDart? I mean how cool is that! Clojure and Lisp getting a huge push. https://twitter.com/conaw/status/1506402896660865029?s=21&t=aIaf1GcZGoz_CJjA20s7lQ

๐Ÿฆ Conor White-Sullivan ๐ƒ๐Ÿ‡บ๐Ÿ‡ธ: @0x1B We built it in ClojureDart. Or rather, we brought on @cgrand and @BaptisteDupuch to build the ClojureDart compiler so we could build cross platform mobile apps.

Aiming to deploy Android at the same time but ๐Ÿคž๐Ÿ™ still many unknowns