Hacker News new | ask | show | jobs
by FroshKiller 3485 days ago
I disagree with your analogy. In my opinion, programming is more analogous to composition. Most courses of study require at least one composition course, because no matter what discipline you're studying, it's important that you be able to organize your thoughts and express them clearly as well as understand the formal expressions of others.

I personally experience a huge overlap between ordering my thoughts for writing and making a mental model of a problem and its programmatic solution. Yet it's easier for most people to pick up a pen or open a word processor and express themselves than it is to write a working program.

Why should it be so? Apart from implementation details of hardware platforms and runtimes, you're really talking about expression in different units: subroutines rather than paragraphs, APIs rather than outlines, user stories rather than theses.

To bring it back to your analogy, consider what a tool that lowered the barrier to entry to brain surgery might do. It might certainly do things like list the particular skills, tools, and medications required to perform certain procedures. It might provide a check list of crucial steps and a sort of troubleshooting tool. It isn't going to make an expert out of an unskilled user, and a particularly skillful surgeon might not benefit from the tool at all, but on balance, it would raise the baseline competency of many users and help ensure that certain critical requirements were met.

A good assisted programming tool would do the same. It would help the user accurately model the problem, it would advise the user of certain best practices, and it would certainly warn the user of common mistakes. This is all very much in line with a good word processor, with features like spellcheck and document templates.

So I disagree that programming is analogous to brain surgery. Programming itself is a tool for the expression of an idea and much more akin to composition, and there is no good argument in my opinion against tools to assist with either. Remember that for a large part of our history, literacy was considered a niche skill, and widespread literacy led to explosive growth of our knowledge of the world. I'm not one of those "literally everyone should learn to code" types, but there is quite a lot of potential in spreading programming literacy, even if you feel most people have no business practicing it.

4 comments

Why not we (software developers) take the route of improving end-user software and letting people easily accomplish their mundane everyday tasks, instead of letting them program as a remedy to the sorry state of software? Have you looked at it that way? Would people buy a car that required them to tweak it and service it right after it went out of the showroom?
I think you misunderstood me. I'm not saying that people should become literate in programming so they can program their own solutions, although that'd obviously be good. I'm saying that we should encourage people to become literate in programming if only so they could express their needs more clearly and evaluate solutions better.

I likened programming to composition. Most people who took composition courses don't necessarily need to write papers on a daily basis, but they certainly benefit from being able to interpret and evaluate material. If I could get people to understand the general concept of a data type, I'd certainly have an easier time of communicating with them and satisfying their needs.

That's definitely an approach we should keep trying. But it hasn't worked out very well so far and I'm convinced that it's impossible to create an application that fits 100% of the needs of 100% of its users. I would definitely buy a car that allows me and maybe even makes it easy to tweak it. But I wouldn't want one that requires me to do so.
> Apart from implementation details of hardware platforms and runtimes

The platform described to share all this knowledge and code is beyond what humanity can build today. The manifesto described that we share "All cells exist in a single, globally shared hierarchy". The trust problem has many forms, from trusted medical info on Wikipedia, Facebook fake news filtering, to open Github code with hidden backdoors.

See a list of 100+ projects that are struggling with trust and full decentralisation: https://github.com/redecentralize/alternative-internet

That's an awesome list, thanks. There seem to be two concept intermingled here though. First is decentralization which I'm a big fan of not only for social and humanitarian reason but also because I'm convinced that it's the better design. And while there are many problems still unsolved, there are also very promising approaches. The other one is trust which is required in centralized and decentralized networks but has a very different taste in both and I think it might be actually easier so solve in an open, decentralized environment. Lastly, I wanted to point out that while all cells exist in a single address space, that doesn't mean that every cell is accessible to everyone.
We went to the moon. A lot of people said that was beyond what humanity could build then, too.
This was an insightful and thought-provoking response. Thank you for taking the time to write it. Given how much a word processor's spelling and grammar checking improves my own writing, I can definitely see how an equivalent assisted-programming tool could help people.
We have pretty good static analysis tools now which warn the user of common mistakes at the code construction level. But at the architecture and design levels I don't think there is much that tools can do short of AGI.
There is plenty a tool could do to aid software design. You might sit down to plan a new program and launch your programming assistance tool. It might ask questions like what platform your program should run on, what time or storage constraints it must run under, whether it's a server or intended for users, and so on. As you go, it creates a project scaffold for you to build on and makes recommendations: to consider .NET since you're targeting Windows, to follow this security tutorial since you'll be using a database for persistence, to use a particular pattern for the application's core responsibility, etc.