So far, we have a long way to go to build higher quality code. There's a few reasons: 1. Blockchain smart contracts are often unchangeable, so you can't fix bugs 2. The language is being built as people write code, with some bad design choices that encourage mistakes (slowly being fixed) 3. Libraries are still being developed 4. Tooling is still limited (even basic linting) 5. People are not taking the time to have a…
This is the fatal flaw with smart contracts as a concept.
If they can be changed by the author then they don't provide the security guarantees that make the system worth using, but if they aren't changeable by the author then a huge fraction of smart contracts will ultimately end up doing something unintended because of any of the million reasons we don't normally expect first releases of alpha software to work perfectly in all circumstances.
In a perfect world Etherium would work great, but we don't live in a perfect world. People make mistakes. Any system which expects human input but isn't designed to gracefully handle human error (including the humans who programmed the system) is probably not going to end well.