guitarvydas
06/08/2025, 1:42 PMIvan Reese
It is too complicated, it contains too much nuance and detail, the DI (Design Intent) is not obvious. Someone tried to improve the DI by colourizing the schematic, but, it still looks to be too complicated.I'm not an EE, but I did spend almost 20 years working for a schematic "programming" company. To me, this schematic is about the typical complexity I'm used to seeing before you spill over to multiple pages. And the schematics I'm used to working with would come by the hundreds, bound in massive 3-ring binders, all describing a single piece of industrial equipment (like a single bulldozer or excavator). So going by gut, this schematic feels about as "complicated" as few hundred LoC, in that it'd probably take me about as long to do a cursory scan or deep read of either — less than a minute to survey the broad structure, a few minutes to identify patterns, and maybe 20 minutes to deeply go over everything. Is that "too complicated"? Too complicated… for what? Without presuming too much about your background (for instance, I wouldn't be the least bit surprised if you were an EE with lots of schematic-reading experience and still held this opinion), I think it's interesting to work through your "too complicated" reaction in a few ways. • How much of this detail and nuance is due to the design of schematics as a visual communication medium? Is there a different way of visualizing an electrical system that would be easier to read, while still being useful for the same purposes? Well, what's the purpose of a schematic? I believe they're primarily intended as documentation, useful if you need to repair an existing system to verify how it is supposed to work — they're a known-good reference you can compare your faulty system to, to identify short / open circuits, damaged components, etc. And, sort of like sheet music, these schematics elide plenty of information, such as the placement of components and routing of trace/wires — they aren't like blueprints. So maybe we could find a different way to do the same job, or a different way to do a different job, by choosing to elide different information. Or maybe we need to overhaul the "symbol language", so that instead of capturing information about what the components are and how they're connected, we capture information about the dynamics of the system. (Bret shows something like this in Inventing on Principle, but none of the EEs I showed it to found it at all compelling 🤷.) So — would your criticism be addressed if we changed the standard design of electrical schematics, and if so, how and why? • You rhetorically ask how many pieces of paper it'd take to hold the code for Pong in a modern language. I think that's a fascinating comparison. To make it fair, we'd probably have to find some way of normalizing the I/O APIs so that they're the same as what's available to schematic. After all, if there was a "runPong()" API that'd be unfair. Would the Canvas2d API be fair or unfair? Etc etc. My gut is that if you did this normalization, you'd probably end up with code that felt to a typical coder about as "complicated" as this schematic would feel to a typical EE. After all, they'd both be doing roughly the same thing, and I don't think Pong is inherently complex enough to benefit from the sort of abstraction-building that makes code so powerful. (That's my gut sense, at least.) But maybe you disagree, and the code would be fundamentally different in some way that'd change how complicated it appears. • The schematic uses space and visual symbols in a way that's fundamentally different from textual code. When you computerize the schematic, you can animate it, and reveal all sorts of information about the runtime dynamics of the system. At that point, I think the schematic is significantly more expressive than the equivalent textual code. So maybe, in the absence of that augmentation, the visual "juice" isn't worth the complexity "squeeze", so to speak. Anyway, thanks for the post. Hit the spot!
guitarvydas
06/08/2025, 4:02 PMAngus Mitchell
06/09/2025, 4:24 AMoPOKtdJ4UbTdPaZig6jg
06/09/2025, 5:50 AMguitarvydas
06/09/2025, 2:28 PMMisha A
06/09/2025, 3:12 PMvery good for anything, but `ok for everything`"?
(cough https://futureofcoding.slack.com/archives/C5U3SEW6A/p1747153874428279 cough)guitarvydas
06/10/2025, 2:16 AMKonrad Hinsen
06/10/2025, 6:32 AMMisha A
06/10/2025, 6:40 AMMisha A
06/10/2025, 7:16 AMKonrad Hinsen
06/10/2025, 7:25 AMMisha A
06/10/2025, 9:27 AMKonrad Hinsen
06/10/2025, 9:43 AMJeffrey Tao
06/11/2025, 7:08 PMIvan Reese
Misha A
06/23/2025, 5:57 PMguitarvydas
06/23/2025, 6:28 PMMisha A
06/23/2025, 6:52 PMJack Rusher
06/23/2025, 8:51 PM(read) is great, but things get much better when you also have (print foo).guitarvydas
06/24/2025, 2:43 AMMisha A
06/24/2025, 6:25 AMJack Rusher
06/24/2025, 9:48 AMeval() takes a string, so if you want to create and evaluate an expression at run time you must build a string representation. In any Lisp, it takes the AST to evaluate. The printer should be able to print everything the reader can read, and evaluation should be done on the result of read (which can also be built up with code without any string manipulation).Jack Rusher
06/24/2025, 9:55 AMMarek Rogalski
06/24/2025, 10:39 AMguitarvydas
06/24/2025, 10:43 PMJack Rusher
06/25/2025, 8:16 AMJack Rusher
06/25/2025, 8:17 AMMisha A
06/25/2025, 2:56 PMand evaluation should be done on the result of read1. should it really? or "should to exactly match lisp api you are familiar with"? 2.
(-> "[:a]" read (conj :b) eval) is not far from (-> "[:a]" read (conj :b) str eval-from-str) (this is what sending forms from emacs buffer to cider/nrepl/etc. repl actually does, so meh. Talking concepts here, not extra-compute/std-lib-vs-ext-lib-convenience, those ofc matter, but, imo, not for definition). To address your familiarity with api: (defn eval-sexpr [sexpr] (-> sexpr str eval-string)) and you would never know :)
Why should I need to write a JS parser in JS?this is comment on convenience, not on concept. Imagine tomorrow in Chrome/Firefox canary build you get evalJsFromString(s) objToCodeString(obj). Are we tree-oriented then? Again, only trying to zero-in on actual conditions of being worthy to be called tree-oriented.
Misha A
06/25/2025, 2:56 PMprogramming could be more productive.hell yes
Misha A
06/25/2025, 2:58 PMWhy is this not enough?I think "there is no friction between concepts, but there is one between implementations"
Jack Rusher
06/25/2025, 6:49 PMwtaysom
06/25/2025, 7:02 PMguitarvydas
06/29/2025, 12:48 PM... that the magic lives in the gestalt ...I continue to hope that we could further dissect the magic. Yes, there is something more than feature-set here, and I under-spoke when I used the phrase "tree-oriented". At present, I am thinking that it might be goals: (a) do you want to build an MVI (Minimum Viable Implementation, regardless of "efficiency" (not the same as MVP))? (b) do you want to use power tools to just get something done? (c) do you want to optimize a system for production release? I don't see all of these goals being satisfied by just one language, nor one class of languages (e.g. dataflow IPC vs. function-based IPC). For example, the fact that we can build AST data structures in many languages does not have the same effect as lispers getting ASTs under their fingernails. After 50+ years, can we graft some of the lisp-y magic onto our current workflows?
Misha A
07/01/2025, 7:53 AMguitarvydas
07/02/2025, 1:36 AMKonrad Hinsen
07/02/2025, 5:48 AMguitarvydas
07/03/2025, 10:02 AMKonrad Hinsen
07/04/2025, 5:14 AMJack Rusher
07/04/2025, 11:55 AMguitarvydas
07/04/2025, 1:09 PMguitarvydas
07/04/2025, 1:18 PMguitarvydas
07/07/2025, 2:51 AM