Wednesday, December 17, 2008

TEACH EVERYONE PROGRAMMING! (Guest Post)

(Guest Post by Amir Michail)

The case for teaching everyone programming

If everyone could program, then anyone could more easily and cheaply scale his/her world view to reach millions in one-on-one conversations to, for example, have greater impact on the results of an election.

If everyone could program, then anyone can more cheaply achieve immortality by encoding what they would like others to remember about them into a simulation of themselves.

Is it ethical to deny people such capabilities? Moreover, is it ethical to deny people the chance to dream up and create entirely new sorts of programs to enhance their lives?

But I hear you say that programming is a difficult skill that only a few could learn. Not really. Learning programming is easier than learning reading and writing, basic arithmetic, or playing a musical instrument. Programming at a professional level is hard, but so is writing a novel, proving theorems, or playing in an orchestra.

Nonetheless, we need to start thinking about ways to make programming more accessible to the vast majority of the population. This might mean taking the math out of programming and using languages that are not Turing-complete. Chatbot programming is one such example.

21 comments:

  1. It sounds like a nice goal but I don't really understand... you don't have much specific advice except to remove features from existing languages. Even there, you can just teach people existing languages while omitting the complex features.

    That having been said, I think actually getting math/CS out to the hands of the public is great. Have you ever heard of the concept of a Math Circle? Maybe you should consider starting a Programming Circle.

    ReplyDelete
  2. Merely using how to use a computer is far too frustrating for the common person to do well, learning to program would be nearly impossible. I've gotten this through some positions where I had to attempt to teach basic SQL to warehouse supervisors. Some forklift drivers pick it up more quickly than warehouse supervisors, but some (most?) people aren't used to analytic thinking. You'd need to present substantial rewards to people before they'd learn, and most of the time what they want and would get the greatest benefit from would take too long to learn so they would do it themselves. To use your analogy - I am not a musically inclined person, and so I'd rather listen to someone else's song that benefited my mood rather than try to write my own. I think your motivation is good, but realistically it would be almost impossible to apply, and honestly I'd rather see the general public wise up in general before I'd start tackling programming.

    ReplyDelete
  3. I agree with the goal of teaching more people to program (although not literally everybody). However, this has to be the worst case I've even seen anyone make for that goal.

    The argument seems to be that if you can program a computer, you can automate the sending of election-related spam or build your own artificial intelligence modeled after yourself. It would be unethical to deny people these capabilities. Therefore, we should teach them chatbot programming and other non-Turing-complete languages.

    I guess maybe my biggest grievance is that nobody has ever taught me how to cheaply achieve immortality by encoding what I would like others to remember about me into a simulation of myself. Surely someone deserves punishment for this huge gap in my education.

    ReplyDelete
  4. I disagree. Unfortunatley, students have limited time and school limited resources so teaching programming to "everyone" would come at the expense of teaching math, history, literature and other core areas that I (as a CS PhD student) think are MORE important to the AVERAGE person.

    In general, I think schools should focus less on expanding the set of "core subjects" that everyone must know, and give students more freedom in deciding which "special topics" they'd like to learn.

    If you want to convince me otherwise, you need to make the argument that programming is MORE important than the current core subjects like math, history, science, literature...

    ReplyDelete
  5. If you want to convince me otherwise, you need to make the argument that programming is MORE important than the current core subjects like math, history, science, literature...

    If English is your native language, then learning programming would be more important and much easier than learning a second language.

    ReplyDelete
  6. If everyone could program, then anyone could more easily and cheaply scale his/her world view to reach millions in one-on-one conversations to, for example, have greater impact on the results of an election.

    Hey, there's this new thing now, called a “blog”. Takes the programming right out of the reaching-the-millions problem. All the kids are doing it these days; you should really check it out.

    If everyone could program, then anyone can more cheaply achieve immortality by encoding what they would like others to remember about them into a simulation of themselves.

    Oh, puh-leez. What rancid phantasmagorical nonsense. This is no more credible than "If everyone could play the marimba, we'd finally achieve world peace and universal enlightenment. Chocolate ponies for everyone! Awesome!"

    Learning programming is easier than learning reading and writing, basic arithmetic, or playing a musical instrument.

    This is empirically false. If it were that easy, we'd have billions of (amateur) programmers (as opposed to the mere millions we have now), just as we currently have billions of (amateur) readers, writers, counters, and musicians. Anyone can sing along with the Ting Tings without training; making a robot move toward the light isn't so trivial.

    Moreover, I strongly suspect the attitude that "programming is easy" actually discourages people from entering computing. If I find it difficult, it must be my fault; I must be stupid. Screw that noise. I'm going to go do something that doesn't make me feel like an drooling idiot, like those dweebs over there.

    No. Programming is hard. It certainly doesn't help that people who do it for a living, who don't understand how hard it is for most people, make it even harder in the interest of marketability, or abstraction, or efficiency, or portability, or one-pass quantum distributed polymorphic template factorization, or maintaining a sense of intellectual superiority. I agree with you on that point -- we've created lots of artificial barriers that keep people away from programming.

    But even if those artificial barriers magically vanished, programming would still be harder than learning to write or add. Words, numbers, and music are integral parts of most people's daily lives; programming is not, cruise controls, Tivos, and cell phones notwithstanding. Anyone can (and most people do) write, add, and drum using pencils and paper, or even fingers and dirt; programming requires a computer.

    Perhaps you meant that learning to program shouldn't be harder than learning to read. That would be a much more reasonable claim; maybe in 20, or 50, or 200 years learning to program really will be that easy. Maybe. (More likely, it'll become no harder than learning to tune an engine, build a chair, knit a sweater, or diagram a sentence.) But don't confuse your ambition, however admirable, with reality.

    ReplyDelete
  7. "If everyone could program, then anyone could more easily and cheaply scale his/her world view to reach millions in one-on-one conversations to, for example, have greater impact on the results of an election.

    If everyone could program, then anyone can more cheaply achieve immortality by encoding what they would like others to remember about them into a simulation of themselves.

    Is it ethical to deny people such capabilities? "

    -- These lines made no sense at all to me.

    ReplyDelete
  8. "one-pass quantum distributed polymorphic template factorization" ?

    now I'd take a software engineering class that taught that :)

    ReplyDelete
  9. Hey, there's this new thing now, called a “blog”.

    It's not one-on-one.

    ReplyDelete
  10. I guess maybe my biggest grievance is that nobody has ever taught me how to cheaply achieve immortality by encoding what I would like others to remember about me into a simulation of myself. Surely someone deserves punishment for this huge gap in my education.

    Many readers of this blog probably do care a lot about their immortality. It is one of the reasons why they try to prove important theorems and publish in top places.

    ReplyDelete
  11. Moreover, I strongly suspect the attitude that "programming is easy" actually discourages people from entering computing. If I find it difficult, it must be my fault; I must be stupid. Screw that noise. I'm going to go do something that doesn't make me feel like an drooling idiot, like those dweebs over there.

    It's probably the case that the people who find programming easy are those who learned it from a very young age.

    ReplyDelete
  12. I was an undergraduate math major when I took my first programming course (Intro to FORTRAN). While learning mathematical proofs was natural and enjoyable to me, I had the most difficult time with the programming course. There is something unnatural about computer languages that I couldn't/can't put a finger on. (Got any insight?)

    Then, I met a CS major who said the same thing, only with the two subjects switched.

    ReplyDelete
  13. Sorry, the course was "Intro to Pascal". FORTRAN was easier to learn.

    ReplyDelete
  14. But I hear you say that programming is a difficult skill that only a few could learn.

    I doubt anyone reading this blog would say that. More likely, they will say that programming is boring and tedious.

    By the way, what is the story? Can anyone just post random, unformed thoughts written in poor English on arbitrary topics on this blog whenever they want just by contacting Gasarch?

    ReplyDelete
  15. I would argue for teaching programming at school but for a different reason, that of gaining a better understanding of the modern world around us. Not only appliances, but also legal procedures, and even some medical ones - everything nowadays is an algorithm.

    Languages that can be easily learned as now abundant, there's for example Python and even good old Basic works nicely as a non-committal intro. For younger children there are also "point and click" options, such as Flash, and I've seen children do nice non-linear office presentations too.

    Finally, to understand what a program is without doing actual programming, I would recommend playing Theseus and the Minotaur.

    ReplyDelete
  16. I suggest teaching algorithms instead of programming.
    When one learns algorithms, how algorithms work, why it works and other stuff, they will then know how to implement with programming languages.
    and algorithms are like universal compare to programming languages...

    ReplyDelete
  17. Many readers of this blog probably do care a lot about their immortality. It is one of the reasons why they try to prove important theorems and publish in top places.

    Yes, that's true, and perfectly reasonable. For a more extreme example, the folk over at overcomingbias.com want to achieve immortality by having their heads frozen and then revived centuries later. To me, achieving immortality by writing a computer program that simulates me sounds a hundred times sillier and less plausible than cryogenics.

    ReplyDelete
  18. COBOL "COmon Business Oriented Language" was developed for the purpose you are describing. Maybe you should look into that.

    Good luck.

    ReplyDelete
  19. This is empirically false. If it were that easy, we'd have billions of (amateur) programmers (as opposed to the mere millions we have now), just as we currently have billions of (amateur) readers, writers, counters, and musicians.

    Not everyone can afford a computer. Moreover, programming is not yet a required topic in school. Finally, "algorithmic thinking" is quite common.

    ReplyDelete
  20. I don't want to achieve immortality through my work. I want to achieve it through not dying (Woody Allen)

    ReplyDelete
  21. Have a look at the easy programming tool named 'Peter' at
    www.gemtree.com
    If you wish to programme you can!

    ReplyDelete