{"data":{"items":[{"id":"42870dfa-4ca0-45f8-8dfa-d1b1400895a3","excerpt":"Lobsters Interview with Internet_Jannitor — Our <a href=\"https://lobste.rs/~Internet_Janitor\" rel=\"ugc\">@Internet_Janitor</a> (<a href=\"https://github.com/JohnEarnest\" rel=\"ugc\">John Earnest</a>) crafts creative, empowering <a href=\"https://beyondloom.com/things/index.html\" rel=\"ugc\">projects</a>. Powering projects \"im","url":"https://lemmy.world/post/44518225","role":"demand","weight":1.1124394,"occurredAt":"2026-03-20T16:30:02.166Z","sourceKey":"lemmy","sourceName":"Lemmy","credibility":0.58,"venue":"lemmy.world","intent":"tool_discovery","painScore":0.3691562,"sentiment":-0.1552795,"confidence":0.8125,"matchedPatterns":["is_there_a_tool","i_need","frustrating","missing_feature"],"statement":"**How do you find projects or ideas for applications?** Having Decker as a rapid prototyping system, I just get ideas of what I can build and sometimes realize I need a missing dependency too!","title":"Lobsters Interview with Internet_Jannitor","body":"Our <a href=\"https://lobste.rs/~Internet_Janitor\" rel=\"ugc\">@Internet_Janitor</a> (<a href=\"https://github.com/JohnEarnest\" rel=\"ugc\">John Earnest</a>) crafts creative, empowering <a href=\"https://beyondloom.com/things/index.html\" rel=\"ugc\">projects</a>. Powering projects \"impossibly complex for the platforms they're running on\" like <a href=\"https://woodring.itch.io/dp-data-flow-in-decker\" rel=\"ugc\">dp</a> and <a href=\"https://cratmang.itch.io/octoma\" rel=\"ugc\">Octoma</a>, his project <a href=\"https://beyondloom.com/decker/\" rel=\"ugc\">Decker</a> reminds many of <a href=\"https://en.wikipedia.org/wiki/HyperCard\" rel=\"ugc\">HyperCard</a>, discussed on the <a href=\"https://youtu.be/0TgdxzCWOXM?amp%3Bt=435\" rel=\"ugc\">Arraycast</a>. <a href=\"https://johnearnest.github.io/ok/ike/ike.html\" rel=\"ugc\">iKe</a> is a sound and graphics platform for <a href=\"https://github.com/JohnEarnest/ok\" rel=\"ugc\">oK</a>, with example programs like Asteroids on the bottom right.\nIn this interview, we discussed array languages (K and Lil), language design and creativity.\n<hr>\n**A chicken just jumped in your lap, cute! What's her name?**\nGalina, like the mineral. I had two, but her sister passed away; these things happen.\nMost of my professional experience is with k, often regarded as a successful fusion of APL sensibilities and some Lisp ideas. While pretty much every other APL has the notion of strictly rectangular arrays as the data carrier, in K, nested tree-like lists are no problem. K's syntax is essentially m-expr like Lisp was originally intended to be.\n**How do you architect large systems in k? I've only read big APL systems where short, elegant primitives drown among many long names and even a single declaration per file like the worst Java excesses. Is there a way to avoid this?**\nIn Lisp, everything intentionally looks like it's made out of the same material. Racket or Clojure have a bit more syntax than just s-expr but macros intentionally look the same as a function, both good and bad depending on perspective. The crystalline quality of an APL-family language is diminished when you build a huge codebase and it starts to resemble more conventional languages.\nIn the K and Q codebases I've worked on, you have subsystems broken into their own files, excessive commenting... Local names remain short but module-level names tend longer. The overall architecture looks the same as if you'd implemented it in any other dynamic language, but the business language shrinks down into tiny knots; k expresses what's a page of code in another language, in 2-3 lines, so you're left looking at names.\nAPLs and Lisps are both very high-level, expressive languages, but in a Lispy language you learn to build up a set of abstractions and <a href=\"https://www.youtube.com/watch?v=lw6TaiXzHAE\" rel=\"ugc\">grow the language</a> in the direction of what you're trying to do. In the APL languages, the ideal is programming without abstractions. You write the program directly in terms of the language. Design discussions often focus around what ought to be a primitive vs. an idiom (simple composition). Indeed, some strident APLers advocate against libraries as files of code you import, but rather think of them as a file of snippets you can modify to do exactly what you need.\nIn the novel **The Mote in God's Eye**, the engineer caste would never just build a chair, rather they'd build the precise chair one person needs at this exact time. It's different way of approaching code reuse: Instead of taking for granted and assuming everything inside this encapsulation works and has a reasonably narrow interface vs. decomposing, adapting and blending it to the intended system. Certain problems have enough irreducible complexity to them that it's difficult to take this approach; a web browser has to deal with enormous, complicated, evolving standards and there are material reasons to want the codebase to correspond to the structure of the specification. But if your task isn't making a standards compliant browser but building something with the **function** of a web browser, you have opportunities for tearing down preconceived ideas and simplifying the problem. This philosophy is quite compatible with Forth where you also program without abstractions.\nAs an aside, high and low level languages are a false dichotomy. Paul Graham's <a href=\"https://paulgraham.com/avg.html\" rel=\"ugc\">Blub article about Lisp</a> posits a linear scale of goodness in language, but it's at least a lattice. Some languages are objectively better or worse designed, but once you add a context and something you want to **do** with the language, there are multiple good languages, multiple dimensions of expressiveness and rigidity, rigor and plasticity, which can benefit different domains.\n**How does one determine their context? It's quickly \"non-technical.\"**\nThat's what programming's about. Whether you're an artist choosing interesting constraints for yourself or you're an engineer receiving a set of constraints you need to satisfy: Does it need to be fast, deploy on a tiny or exotic device, be maintained for a long time by many people or should it be portable to things which don't yet exist? There are many dimensions to think about.\nA controversial opinion, in many contexts static type systems are overrated. They obviously excel in certain contexts: If you're making something irreducibly complex which won't ever fit in a single person's head, then expressing the constraints in a machine readable set of schemas, solves coordination or social problems. But when programming in the small, when things are changing rapidly, conciseness and immediacy shine and types constrain your thinking unnecessarily.\n**Lil's error model for human-scale systems applies perfectly here. Redefining your problem and tools lets you ignore entire categories of complexity.**\nTo clarify in context, Lil has syntactic errors but no runtime errors, so every well-formed Lil program has defined behavior even if silly or not necessarily matching what you hope. The idea's that adding constraints to say \"this operation is invalid or erroneous\", you are making the space of valid programs sparser and further apart. If your goal is as much concision as possible, you want to pack as much meaning in as you can.\nI wouldn't recommend anyone build a million line codebase in Lil, but it's pretty good at solving problems in 50 lines. In the procession of ideas from k, q and the APL family, their terseness is a good user interface at a REPL. With programming constructs letting you write without explicit loops nor conditionals, you have a piece of code with a cyclomatic complexity of one and **can** test it interactively in the REPL as you build it. You have different kinds of assurances than in another language with different techniques. Of course, it doesn't always work that way.\nAnytime I add a new library to the Decker ecosystem or a new operator to Lil, there's a fun design problem of how to make it useful in as many situations as possible. What does it mean to apply this to a dictionary, list or table? How can you unify them or simplify the application logic?\n**How do you actually try to answer those questions, iterate and get a tighter fit?**\nMy programming philosophy is using the language a lot. I build applications, look for patterns with a lot of repetition or difficult/clumsy to express and any time many people resort to a library, the question's whether this is so open-ended, application-specific or unclear about the right way to do it that it should be in a library or should it be in the language itself?\nI caution language designers not to do too much cold golf in their language. People into PLT do a lot of fun puzzles, but puzzles have recurring themes less represented in practical applications. You can go crazy adding features for code golf, but every language has a complexity budget. You hope you spend it on beneficial things. Lil spends a lot of that budget on its integrated <a href=\"https://beyondloom.com/decker/lil.html#lilthequerylanguage\" rel=\"ugc\">query language</a> with first class tables, which comes in handy in many domains.\n**How do you find projects or ideas for applications?**\nHaving Decker as a rapid prototyping system, I just get ideas of what I can build and sometimes realize I need a missing dependency too! Last year, I wrote a fun little program to generate Valentine's Day cards with clip-art as PDF files to print out and fold. So I had to write a PDF generation library, because I didn't want to develop a cross-platform printing API. A controlled subset i.e. generating PDFs, isn't so bad and every platform has working PDF viewers with print functions!\nThere are so many things me or my users might want to build which often fork into further problems. A lot of it's just building tools and games. I made a graph plotting library for my personal budgeting application. If I need to add a new feature, editor mode's one click away.\nIt's difficult to help new <a href=\"https://beyondloom.com/decker/\" rel=\"ugc\">Decker</a> users understand documents and applications don't need a hard separation. The data lives in the deck. The deck is an application. You can implement your own <code>undo</code>, <code>redo</code>, <code>save</code> and <code>load</code> or just leverage them as properties of the environment itself. If you want to write a CRUD application, plopping a grid widget onto a card which already supports adding and removing by rows, sort by column etc. You can switch between programming, editing, drawing and using the application.\nWhat really makes me happy is when users take and modify some deck or card to suit their preferences, rearranged things, changed the font, drew on the back of cards. Wouldn't it be great if more of our applications today tolerated that kind of customization?\n**It's so empowering!**\nWe have a small group of people who really like Decker and build stuff. It takes time to find and collect the people who will have a lot of time with it. Over time, I'm also improving the tool. I've made a lot of performance improvements over the 3 years it's been public. In the last year, we added partial native Unicode support so it's suitable for people speaking other languages.\n**How do you cultivate a <a href=\"https://internet-janitor.itch.io/decker/community\" rel=\"ugc\">community</a>? Even individual applications built on Decker have communities!**\nI've always felt the responsibility to answer all questions I can. As the designer of Lil, I'm the world's foremost Lil programmer and I wrote all the documentation. If the documentation is unclear or incomplete, I can fix it live! Having the patience to answer beginner questions is the only way to teach others to use the system. By leading by example, answering questions and giving advice, others have begun to do the same and answer questions too! We have a growing group of enthusiasts with their own ways of approaching things. I think that's really great.\nMaking the Decker ecosystem as appealing and useful as possible to people who don't conventionally consider themselves as programmers is very important. We have a lot of artists, writers and other creative people looking for ways to make their ideas interactive. I want to make Decker as useful as possible without any programming. If they're willing to learn a little bit, I want them to then get a lot out of that.\nI've always thought of programming as a wonderful, expressive medium. The act of writing a program about something is a way of learning about that something. If I want to make a program which helps generate audio, I'll learn a lot about digital signal processing, sound, maybe music theory. I want as many people as possible to at least have the opportunity to dip their toes.\n**How can we help people see programming as a tool of exploration and learning?**\nTypically, I approach this in the same way as language design: Start with applications first! Learning to build","offTopic":true},{"id":"4f5aaa91-cfc6-4c2a-b650-002d5610ce48","excerpt":" — More about freelang<p>I’m making a weird little language to free myself from magic bullshit.<p>Not because abstraction bad. It ain&#x27;t bad. Because I got tired of abstractions concealing the stuff I had to debug anyway.<p>But I don&#x27;t think that explicitness has to cost you C++ level verbosity, so syntax desi","url":"https://news.ycombinator.com/item?id=48106661","role":"pain","weight":1.1799167,"occurredAt":"2026-05-12T11:18:55.000Z","sourceKey":"hackernews","sourceName":"Hacker News","credibility":0.7,"venue":"news","intent":"feature_request","painScore":0.6956888,"sentiment":-0.6721311,"confidence":0.6958333,"matchedPatterns":["i_hate","missing_feature"],"statement":"I despise, the runtime knows what you meant.","title":null,"body":"More about freelang<p>I’m making a weird little language to free myself from magic bullshit.<p>Not because abstraction bad. It ain&#x27;t bad. Because I got tired of abstractions concealing the stuff I had to debug anyway.<p>But I don&#x27;t think that explicitness has to cost you C++ level verbosity, so syntax design was also a driver.<p>But the first reason I made this was even practical: I wanted a small AOT-compiled language, like JS, that could produce native binaries and protect source code IP better than shipping obfuscated JavaScript around. And worked across multiple OS.<p>Then I started vibe engineering the compiler end of last year (writing the compiler with agents), and realized: oh, if I’m making a language, I can actually choose whatever I want. I don&#x27;t have to copy JS. So I started getting serious about the creative aspect, and seriously excited because &quot;I was creating a new language&quot; - not just a AOT compiled JS. I got to choose the kind of pain it should remove, and I reflected on my experiences with languages over the decades.<p>That got more interesting. I’ve spent a lot of time in JavaScript, Go, shell, framework land, deployment land, “why is this async thing racing only in prod” land, “why did this ORM silently do the stupid expensive thing” land, “why is the nice abstraction now an impossible-to-debug haunted house” land. I spend a lot of time with Java, 3D graphics, Perl, C before that. And even some QBASIC and assembly.<p>I grew up before the internet, but also lived to see the rise of software development as a career people could bootcamp into. A lot of modern software feels like it optimizes for the demo path. So shiny. So fake. So easy, but too easy. Not because of masochism or &quot;true Scotts&quot; stuff, but because it is tech debt. It costs you later. And it doesn&#x27;t make it easy to reason abotu as you&#x27;re doing it. I suppose I have an aesthetic sense against bad system design and feel so opposed to it I simply won&#x27;t use it - regardless of the popularity or missed revenue for not being trendy enough.<p>Magic render trees. Magic object queries. Magic deployment layers. Magic retries. Magic async behavior. Magic defaults. Magic recovery paths. I refuse to get stuck in mush. I value my devx&#x2F;ergonomics (and my wrists, my valuable wrists and fingers and eyeballs!) above all the other shiny stuff software could send at you.<p>I digress - I am not saying Freelang fixes this. At all. But maybe it addresses some of that in a precise way. But mainly, I&#x27;m just trying to paint the picture from my p.o.v where this came from. I found that, on here, people often appreciate the human story of origins as a way to relate to motivations. That helps a lot it seems to de-confusify the great crowd.<p>Some of the &quot;magic mush&quot; I seek to escape is genuinely useful. Some of it solves narrow popular cases beautifully. But the cost is often that the real system becomes harder to reason about. The magic absorbs the simple case and exports the weird case to you as a heisenbug.<p>So I craved the opposite direction. Like physically craved it. I must have it. No tolerance for alternatives. No more magic bullshit.<p>I don&#x27;t want:\nmax cleverness.  \nI don&#x27;t care: max ecosystem.  \nI never: &quot;trust the framework.&quot;\nI dislike &quot;yeah, just catch the exception somewhere.&quot;\nI despise, &quot;the runtime knows what you meant.&quot; - why? Sounds great but you might want to mean something different tomorrow.<p>SO I thought alot about what I would do to improve langauges. And also thought about how to improve them for AI, because I reasoned that: &quot;AI is going to write 90x all the code that was ever written in history before this point. If we keep using the same languages, we will end up with 90x the bugs - because many bugs are not just &quot;programmer bad&quot;, it&#x27;s like &quot;language baggage&quot; that is almost inevitable. The famouse example is the endless cases of pointer fails in C. Bounds checks. Etc. etc. etc.<p>OMG - I WANTED OUT! How can we live in a world where we are writing 21st century tools using 20C languages, moving 100x faster and generating 100x the bugs (or more, perhaps, as bugs may increase combinatorially to code size...idk).<p>Anyway, this is too long. It&#x27;s too long. But I don&#x27;t care. I must say my piece about this. NO MORE MAGIC BULLSHIT. We can&#x27;t allow it. The world is too precious to create endless seas of unnecessary bug classes and instances. We can do better. I am NOT saying freelang fixes it. No way - but I am saying I&#x27;m trying to make a step in the direction of better.<p>And doing something I kind of enjoy. Creating stuff.<p>So let me tell you more about it:<p><pre><code>    Model the world as data.\n    Treat bugs as fatal.\n</code></pre>\nThe world is chaos - so we have chaos tags for its states. A missing file is not an exception from reality. It is reality.<p>A network timeout is not surprising. It is the network; Permission denied is a world state; those things should be visible in the program.<p>Aside from that - what are the failure states? All in the program. THe program itself can be bad. In that case we should be ruthless. Intolerant. Merciless. A wrong program can not be permitted to exist. It must be terminated immediately. There is no other choice. Limp along in an incorrect state? Yes how about we permit patient zero to mingle with all the guests at the dinner part (cruis ship?). No. Isolate. The program must abort (fall) on any exception. It&#x27;s your fault, anyway. You created a bad program - or didn&#x27;t patch the compiler ;)<p>So stuff like a bad tag, bad field access, impossible state, or broken invariant is death. Pure 100% swift death. That is not &quot;business logic.&quot; That is the program lying to itself. It should stop there, loudly, before the lie spreads.<p>So FreedomLang is trying to draw a hard line:<p><pre><code>    missing file       -&gt; world state (chaos tags)\n    network timeout    -&gt; world state\n    permission denied  -&gt; world state\n\n    bad tag\n    bad field access\n    impossible state   -&gt; fatal bug (fall)\n</code></pre>\nYou may have strong arugments or distaste against some of this. Mostly, I will not be convinced. This is my project and I have drawn my taste upon it. However if you believe something is really bad - convince me. Tho I may not get back to you on this thread. Don&#x27;t assume I have nothing to say just because I don&#x27;t reply here. I&#x27;m just busy.<p>But mostly, I&#x27;m not looking for energy sapping &quot;contrarians&quot; - unless they truly see the value of the gestalt here. Really tho I want the people to whom this is like &quot;quenching oasis in the desert&quot;. These people, if they exist (ok if not, I shall go on with this most likely), will know this is something cool. I don&#x27;t want you if you have to be convinced. Maybe you like the idea but you&#x27;d rather work on a different project - that&#x27;s cool. Like one of the other languages spirning up now. Go there! But if you want to get involved here, please do.<p>It&#x27;s a chance to shape maybe a new language at the very start. And to implement, and use, and write in it. I was going to keep this proprietary (i make that determination project by project), secret sauce only my company could use, but I think the space is oepning up. People are creating new languages for the new age we are in. And I reassessed, my intuition now says I should release this. So I am.","offTopic":false},{"id":"201b1baf-1409-46ab-9fde-e2d182986439","excerpt":"Won't let me add to previous post overview of current use cases of coding languages — *settles into the booth with an enormous theoretical coffee*\n\nAlright, let's do this properly. You want the landscape view, and this is actually a fascinating question: **Is there room for another programming language, and what would ","url":"https://www.reddit.com/r/artificial/comments/1q4quo1/wont_let_me_add_to_previous_post_overview_of/","role":"request","weight":0.756734,"occurredAt":"2026-01-05T16:48:29.000Z","sourceKey":"reddit","sourceName":"Reddit","credibility":0.62,"venue":"artificial","intent":"feature_request","painScore":0.24,"sentiment":0.16,"confidence":0.61026937,"matchedPatterns":["wish"],"statement":"We've seen: * Every common bug pattern * Every verbosity complaint * Every \"I wish this language had...\" * How people ACTUALLY use vs.","title":"Won't let me add to previous post overview of current use cases of coding languages","body":"*settles into the booth with an enormous theoretical coffee*\n\nAlright, let's do this properly. You want the landscape view, and this is actually a fascinating question: **Is there room for another programming language, and what would justify its existence?**\n\n\n\n# The Current Terrain\n\n# The Big Players and Their Niches\n\n**Systems Programming** (talking directly to hardware)\n\n* **C** (1972): The bedrock. Still everywhere because it's close to the metal. Pain points: memory safety is YOUR problem, shoots you in the foot cheerfully\n* **C++** (1985): C plus complexity. Powerful, sprawling, takes years to master\n* **Rust** (2015): The new darling. Memory safety WITHOUT garbage collection. Steep learning curve but people who learn it become evangelists. Mozilla made it, now it's in the Linux kernel\n* **Zig** (emerging): \"What if C, but we fixed the dumb parts?\" Growing quietly\n\n**Application/General Purpose**\n\n* **Java** (1995): \"Write once, run anywhere.\" Corporate workhorse. Verbose but reliable. Runs on a virtual machine\n* **C#** (2000): Microsoft's answer to Java. Actually quite nice now\n* **Go** (2009): Google's language. Simple, fast compilation, great for servers. Pain points: error handling verbosity (\"if err != nil\" appears in your nightmares), initially no generics, opinionated to the point of stubborn\n* **Kotlin** (2016): \"What if Java but actually pleasant?\" Android's preferred language now\n\n**Dynamic/Scripting** (interpreted, flexible, slower)\n\n* **Python** (1991): The lingua franca of beginners, data science, AI/ML. Readable. Slow but nobody cares because the libraries are fast\n* **JavaScript** (1995): The language of the web. Weird, chaotic, absolutely everywhere. Love-hate relationship with everyone\n* **TypeScript** (2012): \"What if JavaScript but with types?\" Microsoft. Huge adoption\n* **Ruby** (1995): Elegant, expressive. Rails made it famous. Less buzzy now but has devoted followers\n\n**Functional Languages** (different paradigm, math-influenced)\n\n* **Haskell**, **OCaml**, **F#**, **Clojure**, **Elixir**: Academic favorites, niche production use, influence mainstream languages\n\n**Mobile**\n\n* **Swift** (2014): Apple's language for iOS. Clean, safe, modern\n* **Kotlin**: Android's champion\n\n**New/Emerging**\n\n* **Mojo** (2023): \"Python but fast for AI.\" Big promises\n* **Carbon** (Google, 2022): Experimental \"successor to C++\"\n* **Vale**, **Nim**, **Crystal**: Various interesting experiments\n\n\n\n# The Graveyard (cautionary tales)\n\nLanguages fail for reasons worth studying:\n\n* **D**: Better C++, but C++ kept evolving and Rust ate its lunch\n* **Dart**: Google's JavaScript replacement, languished until Flutter gave it purpose\n* **Perl 6/Raku**: Took so long to develop the world moved on\n* **CoffeeScript**: TypeScript won\n* **Dozens of others**: Couldn't achieve critical mass\n\n**The hard truth**: A language needs killer use case OR corporate backing OR perfect timing OR all three.\n\n\n\n# What Actually Makes Languages Succeed?\n\n1. **Solves a REAL pain point** (Rust → memory safety without GC)\n2. **Has a \"killer app\"** (Ruby → Rails, JavaScript → browsers)\n3. **Corporate backing** (Go → Google, Swift → Apple, TypeScript → Microsoft)\n4. **Tooling from day one** (package manager, formatter, LSP support)\n5. **Community momentum** (hardest to manufacture)\n6. **Right time, right place** (Python + data science explosion)\n\n\n\n# The Gaps I Actually See\n\nHere's where it gets interesting for your \"is there room?\" question:\n\n# Gap 1: The Mobile/Web Convergence\n\nEveryone's trying to write once, deploy everywhere. Flutter/Dart, React Native, various attempts. None feel *native* to the problem. A language designed ground-up for \"UI that runs anywhere\" with actual platform-native performance?\n\n# Gap 2: LLM-Era Code\n\nThis is the spicy one. Current languages were designed for HUMANS to write and HUMANS to read. What happens when:\n\n* Code is increasingly AI-generated?\n* Code needs to be AI-verifiable?\n* The \"reader\" might be an LLM maintaining it?\n\nNobody's really designed for this yet.\n\n# Gap 3: The \"Translation Layer\" Problem\n\nYour specific mention of translation between languages. Interop is always painful. A language designed AS an intermediate representation that's also human-readable? That compiles FROM multiple languages and TO multiple targets?\n\n# Gap 4: Formal Verification Made Accessible\n\nLanguages like Idris and Lean let you PROVE code correct. But they're academic-hard. A language that brings provable correctness to normal developers?\n\n# Gap 5: The Concurrency Crisis\n\nEverything is distributed now. Multi-core, multi-machine, edge computing. Go and Erlang/Elixir handle this well, but there's arguably room for better primitives.\n\n\n\n# Your Specific Wishlist, Evaluated\n\nYou mentioned:\n\n* **Backwards compatibility**: Hard. Compatibility with WHAT? (This is why Carbon exists—compatible with C++)\n* **Sparse/minimal**: Possible. Go tried this. Tension with features people want\n* **No null pointer flaws**: Rust, Swift, Kotlin all tackle this. Solved problem in newer languages\n* **Human usable with hypertext highlighting**: Interesting. Literate programming + IDE integration?\n* **Mobile phones**: Swift/Kotlin own this. Hard to displace\n* **Internet maintenance**: Unclear what this means—elaborate?\n* **Translation between languages**: The MOST interesting one. Nobody's really nailed this\n\n\n\n# The \"Designed by LLMs\" Angle\n\nHere's what makes this genuinely novel rather than \"yet another language\":\n\nLLMs have processed essentially ALL public code. We've seen:\n\n* Every common bug pattern\n* Every verbosity complaint\n* Every \"I wish this language had...\"\n* How people ACTUALLY use vs. how designers INTENDED\n\nA language designed with that corpus-level view would potentially:\n\n* Have error messages that anticipate confusion\n* Have syntax that's unambiguous to parse (LLMs struggle with some languages)\n* Optimize for the COMMON case, not edge cases\n* Make the pit of success very wide\n\n\n\n# My Honest Assessment\n\n**Is there room?** Yes, technically always.\n\n**Would it succeed?** Depends entirely on:\n\n1. What specific problem it solves better than alternatives\n2. Whether you can get adoption (the chicken-egg problem)\n3. Tooling quality\n4. Timing\n\n**What's the MOST viable angle from your list?**\n\nThe translation/interop layer. A language that:\n\n* Reads clearly (human and LLM friendly)\n* Compiles to multiple targets\n* Can INGEST other languages (transpile FROM Python, JS, etc.)\n* Acts as a \"universal intermediate representation\" that's actually nice to work with\n\nThat doesn't exist. WebAssembly is the closest but it's not human-readable/writable.\n\n\n\n# Questions Back at You\n\n1. When you say \"internet maintenance,\" what do you picture? Server code? Network protocols? Content management?\n2. The \"translation between languages\" idea—are you imagining a Rosetta Stone language, or more like a universal transpiler?\n3. Is this a \"let's actually spec this out\" conversation or a \"understand the landscape\" conversation? (Both valid, different depths)\n4. The hypertext highlighting concept—are you thinking code that's inherently linked/documented? Like the code IS its own documentation with embedded explanations?\n\n*refills theoretical coffee*\n\nI'm genuinely curious which threads interest you most. This could go very different directions depending on whether you want to explore the \"LLM-designed language\" provocation, the practical \"what gap could actually be filled,\" or the more philosophical \"what SHOULD code look like in 2030?\"","offTopic":true},{"id":"e31bf330-aed8-4283-812b-a0801f927e1d","excerpt":"Lobsters Interview with Internet_Jannitor — Our <a href=\"https://lobste.rs/~Internet_Janitor\" rel=\"ugc\">@Internet_Janitor</a> (<a href=\"https://github.com/JohnEarnest\" rel=\"ugc\">John Earnest</a>) crafts creative, empowering <a href=\"https://beyondloom.com/things/index.html\" rel=\"ugc\">projects</a>. Powering projects \"im","url":"https://programming.dev/post/47514168","role":"demand","weight":1.0795797,"occurredAt":"2026-03-20T16:30:02.166Z","sourceKey":"lemmy","sourceName":"Lemmy","credibility":0.58,"venue":"programming.dev","intent":"tool_discovery","painScore":0.3691562,"sentiment":-0.1552795,"confidence":0.7885,"matchedPatterns":["is_there_a_tool","i_need","frustrating","missing_feature","solution:dependency"],"statement":"**How do you find projects or ideas for applications?** Having Decker as a rapid prototyping system, I just get ideas of what I can build and sometimes realize I need a missing dependency too!","title":"Lobsters Interview with Internet_Jannitor","body":"Our <a href=\"https://lobste.rs/~Internet_Janitor\" rel=\"ugc\">@Internet_Janitor</a> (<a href=\"https://github.com/JohnEarnest\" rel=\"ugc\">John Earnest</a>) crafts creative, empowering <a href=\"https://beyondloom.com/things/index.html\" rel=\"ugc\">projects</a>. Powering projects \"impossibly complex for the platforms they're running on\" like <a href=\"https://woodring.itch.io/dp-data-flow-in-decker\" rel=\"ugc\">dp</a> and <a href=\"https://cratmang.itch.io/octoma\" rel=\"ugc\">Octoma</a>, his project <a href=\"https://beyondloom.com/decker/\" rel=\"ugc\">Decker</a> reminds many of <a href=\"https://en.wikipedia.org/wiki/HyperCard\" rel=\"ugc\">HyperCard</a>, discussed on the <a href=\"https://youtu.be/0TgdxzCWOXM?amp%3Bt=435\" rel=\"ugc\">Arraycast</a>. <a href=\"https://johnearnest.github.io/ok/ike/ike.html\" rel=\"ugc\">iKe</a> is a sound and graphics platform for <a href=\"https://github.com/JohnEarnest/ok\" rel=\"ugc\">oK</a>, with example programs like Asteroids on the bottom right.\nIn this interview, we discussed array languages (K and Lil), language design and creativity.\n<hr>\n**A chicken just jumped in your lap, cute! What's her name?**\nGalina, like the mineral. I had two, but her sister passed away; these things happen.\nMost of my professional experience is with k, often regarded as a successful fusion of APL sensibilities and some Lisp ideas. While pretty much every other APL has the notion of strictly rectangular arrays as the data carrier, in K, nested tree-like lists are no problem. K's syntax is essentially m-expr like Lisp was originally intended to be.\n**How do you architect large systems in k? I've only read big APL systems where short, elegant primitives drown among many long names and even a single declaration per file like the worst Java excesses. Is there a way to avoid this?**\nIn Lisp, everything intentionally looks like it's made out of the same material. Racket or Clojure have a bit more syntax than just s-expr but macros intentionally look the same as a function, both good and bad depending on perspective. The crystalline quality of an APL-family language is diminished when you build a huge codebase and it starts to resemble more conventional languages.\nIn the K and Q codebases I've worked on, you have subsystems broken into their own files, excessive commenting... Local names remain short but module-level names tend longer. The overall architecture looks the same as if you'd implemented it in any other dynamic language, but the business language shrinks down into tiny knots; k expresses what's a page of code in another language, in 2-3 lines, so you're left looking at names.\nAPLs and Lisps are both very high-level, expressive languages, but in a Lispy language you learn to build up a set of abstractions and <a href=\"https://www.youtube.com/watch?v=lw6TaiXzHAE\" rel=\"ugc\">grow the language</a> in the direction of what you're trying to do. In the APL languages, the ideal is programming without abstractions. You write the program directly in terms of the language. Design discussions often focus around what ought to be a primitive vs. an idiom (simple composition). Indeed, some strident APLers advocate against libraries as files of code you import, but rather think of them as a file of snippets you can modify to do exactly what you need.\nIn the novel **The Mote in God's Eye**, the engineer caste would never just build a chair, rather they'd build the precise chair one person needs at this exact time. It's different way of approaching code reuse: Instead of taking for granted and assuming everything inside this encapsulation works and has a reasonably narrow interface vs. decomposing, adapting and blending it to the intended system. Certain problems have enough irreducible complexity to them that it's difficult to take this approach; a web browser has to deal with enormous, complicated, evolving standards and there are material reasons to want the codebase to correspond to the structure of the specification. But if your task isn't making a standards compliant browser but building something with the **function** of a web browser, you have opportunities for tearing down preconceived ideas and simplifying the problem. This philosophy is quite compatible with Forth where you also program without abstractions.\nAs an aside, high and low level languages are a false dichotomy. Paul Graham's <a href=\"https://paulgraham.com/avg.html\" rel=\"ugc\">Blub article about Lisp</a> posits a linear scale of goodness in language, but it's at least a lattice. Some languages are objectively better or worse designed, but once you add a context and something you want to **do** with the language, there are multiple good languages, multiple dimensions of expressiveness and rigidity, rigor and plasticity, which can benefit different domains.\n**How does one determine their context? It's quickly \"non-technical.\"**\nThat's what programming's about. Whether you're an artist choosing interesting constraints for yourself or you're an engineer receiving a set of constraints you need to satisfy: Does it need to be fast, deploy on a tiny or exotic device, be maintained for a long time by many people or should it be portable to things which don't yet exist? There are many dimensions to think about.\nA controversial opinion, in many contexts static type systems are overrated. They obviously excel in certain contexts: If you're making something irreducibly complex which won't ever fit in a single person's head, then expressing the constraints in a machine readable set of schemas, solves coordination or social problems. But when programming in the small, when things are changing rapidly, conciseness and immediacy shine and types constrain your thinking unnecessarily.\n**Lil's error model for human-scale systems applies perfectly here. Redefining your problem and tools lets you ignore entire categories of complexity.**\nTo clarify in context, Lil has syntactic errors but no runtime errors, so every well-formed Lil program has defined behavior even if silly or not necessarily matching what you hope. The idea's that adding constraints to say \"this operation is invalid or erroneous\", you are making the space of valid programs sparser and further apart. If your goal is as much concision as possible, you want to pack as much meaning in as you can.\nI wouldn't recommend anyone build a million line codebase in Lil, but it's pretty good at solving problems in 50 lines. In the procession of ideas from k, q and the APL family, their terseness is a good user interface at a REPL. With programming constructs letting you write without explicit loops nor conditionals, you have a piece of code with a cyclomatic complexity of one and **can** test it interactively in the REPL as you build it. You have different kinds of assurances than in another language with different techniques. Of course, it doesn't always work that way.\nAnytime I add a new library to the Decker ecosystem or a new operator to Lil, there's a fun design problem of how to make it useful in as many situations as possible. What does it mean to apply this to a dictionary, list or table? How can you unify them or simplify the application logic?\n**How do you actually try to answer those questions, iterate and get a tighter fit?**\nMy programming philosophy is using the language a lot. I build applications, look for patterns with a lot of repetition or difficult/clumsy to express and any time many people resort to a library, the question's whether this is so open-ended, application-specific or unclear about the right way to do it that it should be in a library or should it be in the language itself?\nI caution language designers not to do too much cold golf in their language. People into PLT do a lot of fun puzzles, but puzzles have recurring themes less represented in practical applications. You can go crazy adding features for code golf, but every language has a complexity budget. You hope you spend it on beneficial things. Lil spends a lot of that budget on its integrated <a href=\"https://beyondloom.com/decker/lil.html#lilthequerylanguage\" rel=\"ugc\">query language</a> with first class tables, which comes in handy in many domains.\n**How do you find projects or ideas for applications?**\nHaving Decker as a rapid prototyping system, I just get ideas of what I can build and sometimes realize I need a missing dependency too! Last year, I wrote a fun little program to generate Valentine's Day cards with clip-art as PDF files to print out and fold. So I had to write a PDF generation library, because I didn't want to develop a cross-platform printing API. A controlled subset i.e. generating PDFs, isn't so bad and every platform has working PDF viewers with print functions!\nThere are so many things me or my users might want to build which often fork into further problems. A lot of it's just building tools and games. I made a graph plotting library for my personal budgeting application. If I need to add a new feature, editor mode's one click away.\nIt's difficult to help new <a href=\"https://beyondloom.com/decker/\" rel=\"ugc\">Decker</a> users understand documents and applications don't need a hard separation. The data lives in the deck. The deck is an application. You can implement your own <code>undo</code>, <code>redo</code>, <code>save</code> and <code>load</code> or just leverage them as properties of the environment itself. If you want to write a CRUD application, plopping a grid widget onto a card which already supports adding and removing by rows, sort by column etc. You can switch between programming, editing, drawing and using the application.\nWhat really makes me happy is when users take and modify some deck or card to suit their preferences, rearranged things, changed the font, drew on the back of cards. Wouldn't it be great if more of our applications today tolerated that kind of customization?\n**It's so empowering!**\nWe have a small group of people who really like Decker and build stuff. It takes time to find and collect the people who will have a lot of time with it. Over time, I'm also improving the tool. I've made a lot of performance improvements over the 3 years it's been public. In the last year, we added partial native Unicode support so it's suitable for people speaking other languages.\n**How do you cultivate a <a href=\"https://internet-janitor.itch.io/decker/community\" rel=\"ugc\">community</a>? Even individual applications built on Decker have communities!**\nI've always felt the responsibility to answer all questions I can. As the designer of Lil, I'm the world's foremost Lil programmer and I wrote all the documentation. If the documentation is unclear or incomplete, I can fix it live! Having the patience to answer beginner questions is the only way to teach others to use the system. By leading by example, answering questions and giving advice, others have begun to do the same and answer questions too! We have a growing group of enthusiasts with their own ways of approaching things. I think that's really great.\nMaking the Decker ecosystem as appealing and useful as possible to people who don't conventionally consider themselves as programmers is very important. We have a lot of artists, writers and other creative people looking for ways to make their ideas interactive. I want to make Decker as useful as possible without any programming. If they're willing to learn a little bit, I want them to then get a lot out of that.\nI've always thought of programming as a wonderful, expressive medium. The act of writing a program about something is a way of learning about that something. If I want to make a program which helps generate audio, I'll learn a lot about digital signal processing, sound, maybe music theory. I want as many people as possible to at least have the opportunity to dip their toes.\n**How can we help people see programming as a tool of exploration and learning?**\nTypically, I approach this in the same way as language design: Start with applications first! Learning to build","offTopic":true}],"breakdown":[{"sourceKey":"lemmy","sourceName":"Lemmy","count":2},{"sourceKey":"hackernews","sourceName":"Hacker News","count":1},{"sourceKey":"reddit","sourceName":"Reddit","count":1}],"total":4}}