* HTML
* CSS
* JS
* A server-side language (eg Python)
* SQL
And then come the (leaky) abstractions on top of them: * A framework to make JS bearable (eg Angular)
* A framework to make server-side bearable (eg Django)
* A framework to make CSS bearable (eg Bootstrap)
...and often... * A framework to make SQL bearable (eg SQLAlchemy...)
When someone asks me how to learn to build web apps - even someone who can already program a bit - I feel embarrassed explaining to them what a pile of patches the Web is. Even if the languages themselves were saner, this is a monstrous amount of complexity for something that takes one language and a drag'n'drop GUI builder on any other platform.Trying to fix this, at least for simple apps, is why we built Anvil - https://anvil.works - where everything is in Python, and the GUI is drag'n'drop.