Live data from Hacker News

The “No Code” Delusion

alexhudson.com

71–80 of 334 posts

Re: The “No Code” Delusion

#71
No-node app builders are certainly no panacea, and I say that as a co-founder of an app builder (Calcapp). However, if your requirements fall into a domain that is common enough that no-code tools exist, people who don't consider themselves developers can often get a solution in place remarkably quickly. Database apps (CRUD) appear to be the target of most no-code products -- define your tables, build your user interface, bind fields to columns and you're good to go.

Of course, a real pitfall is that you often bump into the limitations of your chosen platform after having completed 80 percent of the work, and then you're either stuck or need to devise elaborate workarounds.

We see many app builders that truly use no code in the traditional sense. The simpler of these tools essentially only allow users to wire together pre-fabricated building blocks, like content screens, chat rooms and the like. More powerful app builders allow logic to be described using visual flow charts.

We have taken the approach of trying to cater to spreadsheet users, and put formulas at the front and center of everything. (Much like Microsoft PowerApps, in fact, though Calcapp precedes it.) Formulas enable complex ideas to be expressed. Ultimately, we put our faith in users having an easier time learning a reactive, functional programming language than they would have learning a traditional, imperative programming language. Fundamentally, the reactive model enables users to express relationships between entities without having to concern themselves with ordering. Supporting only pure functions, with no side-effects, means that we can cache results aggressively, much like a spreadsheet.

There are limits to this approach, though. If you want users to press a button and have different things happen depending on a condition, how would you approach this? Currently, you can't, at least not with Calcapp. Taking actions in response to an event being fired is, per definition, something that requires an imperative approach.

With some trepidation, we're working on enabling formulas to be "run," but only in response to events being fired. These formulas would have access to non-pure functions (changing global state) and even an assignment operator (as well as semicolons, so that multiple statements can be executed). We will likely call them "action formulas."

The challenge is that all this should feel familiar and logical to an Excel user. For instance, we're introducing anonymous functions (lambdas), which can run asynchronously in response to, say, a user pressing a button in a message dialog, but lambda parameters will have default names, meaning that using "arrow syntax" (like in Java and ES6) to name parameters will be optional. We're trying hard not to introduce syntax that would look strange to an Excel user.

I think it's reasonable to refer to app builders supporting spreadsheet-like formulas as "no-code tools." However, what about app builders supporting imperative programming, using a text syntax? We're well aware that we could introduce functions like WHILE, DO and FOREACH that together with lambdas would turn Calcapp into a full (Turing-complete), imperative programming language. Can such a tool still be considered to be a no-code tool?

Probably not. I suppose that's why there's an additional moniker: low-code.

Re: The “No Code” Delusion

#72
This rings very true.

We sell an integration platform-as-a-service[1] and it offers a 'low code' visual environment to stitch together integrations.

But from pretty much the start, we built-in support to drop down to Javascript to build logic and we think we hit a sweet spot there.

You can visually string together most components but drop in a bit of script to concisely define some hairy transformation or complex logic.

These kinds of low code environment are great for doing customizations or enhancements or integrating many things together. It's very much not an optimal solution for building entire applications or software solutions.

There's also the issue of tooling. There's a huge amount of infrastructure built around maintaining large application code bases (version control, merging, diffing). If you want to build large pieces of software in a no-code environment you still need all of those tools - except they don't exist and are non-standard.

[1] https://lucyinthesky.io

Re: The “No Code” Delusion

#73
I agree with the author for the most part.

An exception to this rule is that in terms of front-end (or end-to-end) testing, if an application is deterministic, you most certainly don't need to write any code to create tests for it. You can record actions and snapshots and replay the actions and compare snapshots. There can often be more to it than that (like filtering dynamic elements/attributes and pattern matching), but for the most part, this approach works quite well.

Re: The “No Code” Delusion

#74
post #24
post #9

This delusion is especially visible in the DevOps space. For some reason we have decided as an industry that instead of writing some code in whatever 'real' language we will base operational work on YAML with ad-hoc templating and stringly-typed programming constructs. The main culprits are Ansible/Salt and all the string-templating based tools for Kubernetes (Helm/Kustomize/...). Especially with tools like Helm I be…

To play devils advocate, isn't the idea with Ansible at least that it's idempotent. The YAML should describe the final state and should be concerned with branching or lower level features like that. (It's the same with SQL, you describe what you want back rather than how its achieved. A declarative approach works fairly well there.)

> isn't the idea with Ansible at least that it's idempotent.

Sure, that's true with many of these, so what?

The problem isn't that the languages are declarative—functional code is declarative.

The problem is that they are extremely limited in their expressive capabilities, so that it is much more complex and error prone to describe the final state in them than it would be—even in a declarative style specifying the final configuration—in a more complete language than YAML (or, in many cases, a language essentially limited to JSON’s expressive capability even if it also supports a YAML serialization.)

> It's the same with SQL, you describe what you want back rather than how its achieved.

YAML would be an inadequate alternative for SQL’s role, too.

Re: The “No Code” Delusion

#76
post #32

BASIC was an attempt to allow people to write software in what looked like English, and indeed it was extremely successful (cf. Visual Basic). The language designed to look like English was COBOL. BASIC looked nothing like English. The reason it became popular was because you could develop programs interactively - edit, run, load, and save programs - without ever leaving the system. It was still programming, though (…

Wasn't the main reason for VB's success the fact that it had a really good GUI builder and that a version was integrated into Excel?

Yes, the VB GUI builder was excellent (as compared to the language itself, which was meh, IMO).

Some people even used it to build GUIs for applications where the bulk of the code was written in another language.

VBA was in all the Office applications... Excel, Word, Powerpoint, Access...

Re: The “No Code” Delusion

#77

Earlier quoted context omitted.

Thank god trends like Pulumi and the new AWS sdk is emerging. General purpose programing languages are getting more expressive by the day, why do we use data serialization languages instead for configs? it doesn't make any sense. Configuration is code not data.

The main problem is that, in my experience, the majority of DevOps teams are Ops teams that have been renamed and refocused towards automation. These are people that by and large don't want to code, not saying that they can't or won't. To be fair this has been in Windows shops, where scripting has only recently (last 5-10 years) taken off, so you've got a lot of windows admins that the closest they've been to code is…

> The main problem is that, in my experience, the majority of DevOps teams are Ops teams that have been renamed and refocused towards automation.

I'm on a relatively new team kind of like that (it's not a former Ops team but most of the team was pulled from Ops/DBA/analysis teams, and fits the description, and it's not a really a DevOps but more of a Dev+Ops team) and the general reaction of the team to being introduceed to the AWS CDK has been “we need to move to that as soon as we can”, even from people who very vocally never wanted to be programmers. And that's with, in many cases, a couple months experience with both programming and YAML IAC in the form of CloudFormation.

Re: The “No Code” Delusion

#78
post #9

This delusion is especially visible in the DevOps space. For some reason we have decided as an industry that instead of writing some code in whatever 'real' language we will base operational work on YAML with ad-hoc templating and stringly-typed programming constructs. The main culprits are Ansible/Salt and all the string-templating based tools for Kubernetes (Helm/Kustomize/...). Especially with tools like Helm I be…

> Especially with tools like Helm I believe we reached peak insanity levels. Instead of using a general purpose or configuration-specific (like Jsonnet/Cue/Dhall) programming language to build and then emit in-memory objects to YAML manifests, the industry is using YAML to define templated YAML and then parametrize this templating with even more YAML.

As a big proponent of Dhall, I gotta say, probably the primary reason for that at this point is due to a lack of language bindings. Most tools in the Kubernetes ecosystem are written in Go. Currently, there is no official Go language binding for Dhall - one implementation[1] is pretty close, but the marshalling features need some work, and it's not the author's day job. The only way to get Dhall configuration into a Go program today is to either shell out and call the Haskell-based reference implementation directly or to script your Go binary such that the Haskell-based reference implementation translates the Dhall configuration to JSON and then feeds that into the Go program. Even that's not ideal - you end up maintaining your schema in Go code and in Dhall simultaneously.

I very much believe that Dhall will solve the stringly-typed insanity which you refer to, but the language is not quite there yet. While I'd love for some of the Kubernetes core developers to step up, I mean, I can understand people's unwillingness to adopt something that isn't 100% perfectly well-supported and handed to them on a silver platter.

[1]: https://github.com/philandstuff/dhall-golang

Re: The “No Code” Delusion

#79
post #68

Earlier quoted context omitted.

So, instead of "learning a new language", they're "configuring a new integration"? Guess how much these differ...spoiler: two marketing labels for the same thing.

I can train one of my juniors in how zapier works in an afternoon. Teaching them (or myself) a programming language would take years and be more error prone.

Okay, now that makes sense. I have originally understood it as "...and the dev team also gets to manage the no-code thing."

Re: The “No Code” Delusion

#80
post #26

I've spent a long time trying to build "No Code" solutions. Probably 3 different products, 3 different companies. But once, I tried something different. I pushed back, instead I proposed we build a domain specific language using Ruby. I already had some trust with my boss... and he was pretty convinced it was going to fail, he had zero faith these smart (but non-technical) users could successfully use it. But he was…

I second this. People can go very, very far with simple and sand boxed Domain Specific Languages that are targeted towards the core function.

There are so many commercial successes for this approach: CAD, MATLAB, Simulink, LabVIEW, Dymola, Excel (?)

The biggest issue with many of these tools is that they tend to be closed source, proprietary formats, onerous licensing terms, not easily extended and aren't easy to deploy into an automated production workflow.

Some are addressing this with an option to export a compiled binary, but many try to up sell you complete ecosystems (PLM) to keep you locked into their proprietary formats. This tends to frustrate devs.

Post reply on HN