Everyone needs to understand computing, even (especially?) Congress

February 1, 2012 at 12:03 pm 8 comments

I appreciate Businessweek getting on the bandwagon, promoting the idea of computer science for all.  It’s particularly interesting to make that demand of our Congressional representatives — that those making laws about the Internet ought to understand the Internet.

There was no official slogan for the public pushback against perceived government meddling with the Web, but the unofficial one might have been a headline that appeared on the online magazine Motherboard: “Dear Congress, it’s no longer ok to not know how the Internet works.”

A growing number of people agree that not only should Congress understand how software is made, so should everyone. Designers, economists, doctors, and others with no direct connection to the technology world are embracing coding as a way to advance their careers, automate boring tasks, or just a means of self-improvement, a hobby like learning Spanish or doing crossword puzzles. And they have access to an expanding universe of free online coding tutorials from startups and universities such as Stanford and Massachusetts Institute of Technology. Programming is becoming “a much more fundamental piece of knowledge, similar to reading or writing,” says Andy Weissman, a partner at New York’s Union Square Venures, which led a $2.5 million investment round for Codecademy, a site that teaches people basic programming skills.

via Computer Coding: Not for Geeks Only – Businessweek.

Entry filed under: Uncategorized. Tags: , , .

The long tail may not hit a target: High school teachers Colleges need to make sure students are actually learning – latimes.com

8 Comments Add your own

  • 1. andyjko  |  February 1, 2012 at 12:14 pm

    Bravo! Entirely agreed. I’m glad to see the conversation moving from whether to how.

    On a side note, was the image in the BusinessWeek article meant to be ironic or is it just wrong? How is 2+2=00110100?

    Reply
    • 2. Alan Kay  |  February 1, 2012 at 12:26 pm

      ASCII for “4”

      But this is entirely besides the point — however it does make a point about where the sensibilities of the BiznoWeek author are located …

      Cheers,

      Alan

      Reply
  • 3. Alan Kay  |  February 1, 2012 at 12:23 pm

    Let us look out over the world today and ask “What is the general correlation between enlightenment and knowing how to program?”

    Hard to see a positive correlation, even about computing, even within computing, much less larger issues.

    A trickier issue that is more troubling is that given the way most software of most types is made today, it is hard to see that most software people — even “computer scientist” people — actually understand the Internet at any powerful abstract level.

    If we look at what CodeAcademy is promoting, we see a quite retro view of programming.

    If we look at most adults today we see busy people who don’t have enough time to put in enough work to get beyond simple mechanical analogies and instrumental pragmatism.

    Once again, if we want any real effect on adults, we must aim at children and help them grow into these new ideas.

    It is now roughly 32 years since the large scale commercialization of the personal computer started. There has been plenty of time to start growing congresspeople, parents, teachers, and even computer people who actually might have more than just simplistic views from afar, but instead enlightened views from up close.

    Cheers,

    Alan

    Reply
    • 4. Mark Guzdial  |  February 1, 2012 at 1:23 pm

      I don’t disagree with your argument that there has been plenty of time and we ought to be able to move onto more significant perspectives on computing, Alan. I do disagree with your correlation. Can you identify people who understand the Internet well who do not know how to program? Concepts of information in packets, traversing and routing across a graph, and the power of messaging (in contrast to models like direct function calls) seem hard to convey without the use of a notation for abstraction and automation. Simply knowing how to program does not convey enlightenment — we’ve known that for a lot of years. However, we can help students develop more powerful perspectives with programming, and I’m not sure it’s possible to do without programming.

      Cheers,
      Mark

      Reply
      • 5. Alan Kay  |  February 1, 2012 at 1:42 pm

        I think current day programming is at best the bow and arrows in “Zen and the Art of Archery” … if good higher order perspectives are attached to the learning experience then there is a lot of enlightenment to be had.

        So perhaps “barely necessary” and definitely “not nearly sufficient” …

        (To me) what is interesting about the Internet is that it has been running since 1969 and has never been stopped, nor has it needed to — for any reason. It has changed out its atoms and its bits continuously several times over. It has grown by 10 or so orders of magnitude without breaking. It is the only real-object oriented system in computing. It can only send messages, not commands. And so forth.

        Contrast this with the way most people program and are taught to program today. Both in mechanics, style, scale, outlook, etc.

        They might as well be on different planets.

        From my point of view most computer people are absolutely crazy to not try to make all sizes of systems be like the Internet in as many ways as possible. In fact, to have software function as a virtual Internet of virtual machines that can be mapped into the physical structures and use them as caches.

        Many of the most important things about the Internet and the way programming should be done are much better understood in analogy by biologists (although most of them are not aware of this).

        To develop more powerful perspectives of computing and try to convey them by programming would be a very good thing if programming itself were elevated up to the thresholds required.

        Cheers,

        Alan

        Reply
        • 6. Mark Miller  |  February 6, 2012 at 4:43 pm

          I realize the discussion is already “stale,” but a thought that has been occurring to me is that one big reason why programming is so removed from the model of the internet, is that the internet is not only loosely bound, but it’s also largely non-deterministic in terms of what’s on it, and where things are. Humans are able to negotiate this, so the internet has worked reasonably well. Back in the “old days” of the internet this used to be negotiated with word of mouth. More recently there’s still this, but also some heuristics to help find relevant functionality, information, and discussions.

          It occurred to me that our programming systems are designed to demand a strictly deterministic environment to some degree. If we look at the way a C/C++/Java/.Net compiler and runtime operates, each instruction is laid out so that when there’s a branch, the program counter has someplace to “land” in executable memory. If there’s a memory reference, there is not the requirement that something be there, but if nothing that was intended to be there *is* there, the program crashes, or produces an exception and exits the main thread.

          I’m thinking that to bring programming closer to the power and flexibility of the internet, it needs to accommodate non-determinism in the sense of “finding the next thing to execute,” or even, “finding that entity it’s looking for.” Smalltalk kind of models this, since if the VM can’t find something, it tells the programmer, “I can’t find it,” or, “I don’t understand this,” but it basically throws up its hands and begs them for the relevant information. The difference is it doesn’t crash. Once you give it the relevant information, it’s able to continue execution where it left off. The challenge would be to provide some methods by which the operating environment could fill in these missing linkages itself. One idea I think that would be worth pursuing for CS is to make “finding that next thing” not deterministic, but computable. I mean this in the sense that if we observe how we behave when looking at a list of search results on the internet, we can see how we might design a system for software to find what it seeks. That’s a first-order goal. A second-order one would be to recognize that there are times when we don’t find exactly the information we’re looking for in one place. Sometimes we have to synthesize our own information from what’s available. Likewise, I imagine software in the future will have to compose some of its own solutions to its own problems, using pieces of functionality that are already available.

          A very simple example I can pull out of my hat would be computing a root. If a function to compute for that is not available, but functions for computing a log and anti-log are, the root computation can be done with those functions instead. The big question would be how to get a computer to recognize and synthesize this solution. Perhaps the idea you’ve recently talked about, Alan, of “negotiated meaning” would have something to do with this, where a program “client” could ask a functionality server for this function, and somehow arrive at either the client realizing the log/anti-log solution, or the server realizing it, and dynamically generating/offering a “root” interface to them that the “client” recognizes.

          Put in simpler terms, what I’m saying, at base, is that program execution needs to be a computable function to allow for non-determinism in the execution path (not in terms of abstract logic, but “where to land” to do/get/put “the next thing”), but at the same time make software systems more self-sufficient.

          Reply
          • 7. Mark Guzdial  |  February 7, 2012 at 10:14 am

            It’s a really interesting point, Mark. I wonder if non-determinism is more “natural” (e.g., people generate non-deterministic algorithms when giving instructions to one another) than deterministic algorithms. L.A. Miller’s work at the T.J. Watson Research Center in the 1980’s reported on a lack of end conditions to loops, and then found that other humans could execute the non-terminating instructions without problems (and did stop!). That’s the first exploration I’ve found of how users will specify instructions prior to learning a programming language, which is one measure of “natural.”

            Reply
  • […] colleague Christine Alvarado said to me on Facebook, the WSJ piece is a symptom of a problem that even educated Americans do not understand the computing in our daily lives. Crovitz then points out that TCP/IP, the fundamental communications protocol of the Internet, was […]

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Trackback this post  |  Subscribe to the comments via RSS Feed


Enter your email address to follow this blog and receive notifications of new posts by email.

Join 9,003 other followers

Feeds

Recent Posts

Blog Stats

  • 1,875,131 hits
February 2012
M T W T F S S
 12345
6789101112
13141516171819
20212223242526
272829  

CS Teaching Tips


%d bloggers like this: