top | item 3975986

(no title)

YmMot | 13 years ago

This largely misses the point. I agree that it's not "essential" and not everyone should do it, but it's still more valuable than I think Attwood gives credit for.

I'm perhaps in a unique position to comment, having recently taught my girlfriend to program. So I can talk about how that played out.

My girlfriend understands menus, she knows about links, she can install software, she can use word, she can type away like no other, and even fix some problems. If you watched her using a computer it'd seem like she had a pretty good affinity with this black box.

However, I don't think most programmers realize what a holistic approach the average person (even a relatively tech savvy one) takes to computers. They only understand them at the highest level. They develop fetishes and incantations to fix things. When something goes wrong my girlfriend will turn the computer on an off. She'll turn the router on and off. Etc. Or just click "ok" until it stops complaining. It often fixes the problem, but it's just something she's learned to do with little understanding. She goes to the store and can pick out a decent phone or laptop, but only because she's developed an intuitive semi-understanding of the lingo. This one has more gigs, that's better...etc.

The computer will do things they don't understand, except some vague notion that the computer is "dumb".

I asked her one time how a computer works because I was legitimately curious how people without any instruction in comp sci etc visualize it. She had absolutely no idea of even the most fundamental workings of a computer except that it had something vaguely to do with "ones and zeros".

I taught her binary. I taught her boolean logic. I showed her binary math. I gave a very basic example of how you can use circuits to do binary math. I made her sit at a desk and act as a processor. Then I explained the concept of bootstrapping.

Then I taught her a little bit of Python.

Enlightenment.

She understands garbage in - garbage out. She understands dependencies. She understands algorithmic complexity. She understands types and formatting...and much more. (at least generally, which is enough).

This mysterious box no longer seems capricious and opaque. She has a much better understanding of why her computer behaves the way it does and therefore feels more at ease. Sure she can't magically fix anything, but she's recognizing general patterns more and more.

She installed Ubuntu recently in fact, and has started writing Python scripts (and Bash!) to assist in assorted data processing tasks she used to do by hand. When my girlfriend needed to update batches of reports, she would up each one BY HAND and change them. Using a computer was frustrating and scary. Learning coding won't improve her life? Seriously?

Would it make him a better mayor? Not necessarily but it sure could help. I'm sure he uses a computer and I'm willing to bet the less time the mayor spends screwing around with a computer or waiting for tech support the better. Likewise, I'm sure he has all sorts of tedious tasks which don't warrant third party software but which could be tackled by a nice Perl script. That doesn't even take into account the boost in (general) analytical thinking that comes from programming. Ditto for potential refreshment in Math.

Who says it needs to make him a better Mayor anyway? What if he just wants to be a better person?

In addition to being a programmer, I happen to be a musician as well...which puts me into contact with a lot of artists. I'm always surprised by how much they could benefit learning programming because a lot of art involves hacking; creating weird one off contraptions...often requiring lots of tedious work. Many want to experiment with technology and art, but are unsure how. Processing could blow some minds. Ditto Overtone.

Using a computer is largely about software; and software is similar to arts and crafts in that it's a reflection of the creator and the tools they used.

Learning about an artist helps you interpret the meaning of their work. Learning about the techniques help you evaluate and appreciate their work.

Learning to code makes you sympathize with the people who wrote the software you use. It helps you understand how software is put together. Which is good, because the more you sympathize with the author and the more you understand how it fits together the easier time you will have using it.

To be fair there are a lot of things I feel everyone should learn. I think it's fair to say though that out of all the ones you could pick, learning to program will be more beneficial practically relative to most others.

> Research voraciously, and understand how the things around us work at a basic level. Communicate effectively with other human beings.

I think this is the heart of the misunderstanding between sides. Learning to program is actually the first step in that. He mentions having "basic internet skills" as a necessary life skill. Learning some programming will greatly facilitate that.

Likewise programming will introduce concepts and develop skills that help you understand technology in general. It even helps in in non-technological areas. It facilitates communication because it forces you to confront and think about how difficult it is to communicate certain things clearly.

discuss

order

jiggy2011|13 years ago

Interesting, I've always though that at a conceptual level computers are not especially complicated machines (for example a turing machine) and most reasonably intelligent people shouldn't have any problem understanding them.

It's also interesting that you mention the holistic approach because this is exactly how many people view computers, in the same way they might view a mechanical device. I have seen people reason "If a reboot doesn't fix it , maybe 2 or 3 reboots in quick succession will".

It's also scary how many professional IT people seem to have a cargo cult understanding of computers. I've seen people do all kinds of crazy incantations , for example troubleshooting a network problem by re-installing OS software on multiple workstations and trying different combinations of firewall / AV and network driver software when in fact 5 minutes of methodical probing with wireshark would have made the issue obvious.

YmMot|13 years ago

Indeed, the basics are all relatively simple...in fact a lot of the basics are things people do intuitively...it's just they've never really been told or thought about how it would work as a generalized computing machine.

neic|13 years ago

She understands garbage in - garbage out. She understands dependencies. She understands algorithmic complexity. She understands types and formatting...and much more. (at least generally, which is enough).

This mysterious box no longer seems capricious and opaque. She has a much better understanding of why her computer behaves the way it does and therefore feels more at ease.

This is exactly the benefit from people learning to code: People don't have to actualy code, they just have to have some understading of how a computer work and what problems is easy to automate (as her report updates) to get more productive in their own field. If they can code it on their own, it is only a plus.

groovy2shoes|13 years ago

> It often fixes the problem, but it's just something she's learned to do with little understanding.

This reminds me of a hacker koan:

    A novice was trying to fix a broken Lisp machine by 
    turning the power off and on.
    Knight, seeing what the student was doing, spoke 
    sternly: "You cannot fix a machine by just power-cycling
    it with no understanding of what is going wrong."
    Knight turned the machine off and on.
    The machine worked.

bigfudge|13 years ago

That's really interesting, as I had a similar experience. However it has downsides: I now find it much harder than I used to to disengage from details and look at the big picture. Knowing how something might be implemented or could be taken apart really distracts me from thinking about whether it's important, or useful or beautiful. Perhaps it's just a temporary phase, but the whole Zen and the Art of Motorcycle Maintenance keeps coming back to me — I used to be like the friends who couldn't change a spark plug and were happy in their ignorance — now I'm changing spark plugs all the time.

Derbasti|13 years ago

Well spoken, but not all people are like your girlfriend. To most people, learning a bit about programming would primarily be an exercise in frustration.

shadowmint|13 years ago

Hate to say it, but that seems like a rather arrogant thing to say.

I'm great believer that anyone can get to be _reasonably_ good at something if they invest enough time and effort into it.

It's the classic logarithm curve; when you have no skills in a field, you can learn a few skills really easily (steap curve). Then, as you get better, your progress for effort-expended goes down until you're basically a domain expect (flat line; no matter what you do you basically dont get any better).

This applies to ANYONE on ANY field; the curves are just different; and I'd argue the steep part of the curve is pretty long for programming (compared to say, I dunno; learning differential equations).

Despite the great them-and-us divide that geeks (and here I generalize based on the geeks that _I_ know personally) seem to have to 'other people' who are 'dumb' ... people are, in my experience, generally smarter than you'd expect.

I'd rather encourage people to learn a little bit, than tell them to go away because they're probably not smart enough. <-- This is arrogant as f*, and if I see someone do it, it makes me angry... although, I realize you weren't directly saying that, so please, take this as a general comment, not as a criticism of you personally. :)

YmMot|13 years ago

That's a fair point. It's not so much that everyone will benefit from learning, but that they won't if they don't try. I also think that most people would get something out of it, though admittedly in some cases not much.

jonathansizz|13 years ago

Really? I'm always sceptical when people use the phrase 'most people' to support their opinion, while presenting no other evidence to back up such an assertion. This seems to be a common rhetorical tactic in online discussions.

Those people who just generally don't like learning anything would likely be frustrated by learning about programming, but I've no idea if this amounts to most people or not.

dz13|13 years ago

I think programming is like an art where you have to do it to actually understand the creativity and effort that goes into creating something. In that sense, learning to program is really valuable because you start appreciating your computer, the Internet, software, and Web apps you use a whole lot more because you have a deeper understanding of how things work.