Software Literacy: The Third-Grade Programmer

Note: This is an essay I wrote for a class. It’s on a topic that I feel at least some passion for, and I hope you enjoy it. As for the citations, just look for the author’s names down at the bottom in the Works Cited section. I’m changing this from a Word document to a blog post, so there might be some hiccups along the way.

Abstract

Although personal computers have become everyday items in children’s lives very few children have learned anything about programming. And while programming has been reserved for the most technically-minded engineers in the past, its core concepts have the potential for helping students learn concepts in math, science, and other areas requiring analytical thinking. Recently, programming environments and languages have been developed with the goal of having a “low floor,” a “high ceiling,” and “wide-walls.” Two projects that have had considerable success in their endeavors are Scratch and Processing. While they are targeted at different audiences – Scratch for elementary school students and Processing for high school students and older – both have successfully introduced people to programming who otherwise couldn’t have overcome the barriers to programming.

Software Literacy

“The ability to ‘read’ a medium means you can access the materials and tools created by others. The ability to ‘write’ in a medium means you can generate materials and tools for others. You must have both to be literate.” (Kay)

It has been quite a few years since personal computers were introduced into the marketplace, and since the late 1970s, they have become a commonplace item across the country. While this generation of children and students have come to be known as “digital natives,” very few know much, if anything, about programming and the critical thinking concepts that make it up (Resnick, Maloney and Monroy-Hernandez).

Being able to quickly learn software and the ideas of how to write code have tremendous potential for helping students learn concepts in math, science, and other analytical thinking fields. But what characteristics must the tools we use to teach software literacy have in order to be most affective? It has been argued for years that programming languages should have a “low floor,” a “high ceiling,” and “wide-walls.” This triplet of characteristics means that the language should have a shallow learning curve, create increasingly complex projects, and accommodate a user’s various interests (Papert).

Meeting these three requirements has not been an easy task for tool and language developers. But two projects from MIT exemplify success in these three areas best: Scratch and Processing. Scratch teaches children age 8 – 16 programming concepts through a building block metaphor. Processing brings together a programming language, development environment, and teaching methodology to appeal to the visual design and electronic arts communities. Each of the tools has its strengths and weaknesses, but both appropriately serve their intended audiences.

A History of Computer Programmers

It’s not difficult to find a highly detailed timeline of the invention of programming languages, but what is to be said for the programmers developing in those languages? Looking at who programmers have been in the past and how they’ve changed over the past fifty years can give us insight into who the programmers of the future might be. The continuing evolution of who computer programmers are and how they are viewed by the public is best explained through the lens of the level of the languages the programmers used.

A “real” programmer working on a mainframe computer

“Real” Programmers

The earliest programmers, or “real” programmers, are best characterized as the select few people in the 1940’s who understood how to operate the immense computers that filled the space of an entire room. They knew machine language, and poured their blood, sweat, and tears into writing it. Machine language is considered the lowest level language class, and it is the only language that a computer truly understands. These earliest programmers labored hard-wiring the switches and cables inside the machines with only the 0s and 1s that the machines could interpret (Lohr). Luckily, very few computer programmers still write any machine code.

1960’s Hacker Culture

The next phase of programmers moved from the cumbersome machine languages to a slightly higher level set called assembly languages. Assembly languages are one level of abstraction away from machine code and take advantage of human words like ‘add,’ ‘sub,’ and ‘mov.’ This abstraction allowed for many more people to learn how to program and bred a new group of people writing code not as their day job, but as a hobby. Some of these programmers, affectionately called “hackers,” were more enthusiasts than professional software engineers, but the results of their efforts are no less important. The World Wide Web and the Internet are both products of 1960s hacker culture. But while assembly languages were slightly less primitive than machine code, they were by no means simple to learn and understand.

Now and the Future

More recently, languages referred to as high level languages have spread as the most prevalent to code in. High level languages are strongly abstracted from machine code and, like assembly languages, must be translated back into machine code in order to be executed. This strong abstraction has allowed for people to teach themselves how to program. As a result, there are far more programmers today than existed even twenty years ago. And while most professional programmers still have a formal education in software development, the next logical step in the evolution of who programmers takes us to the general public.

Today, the software community is working towards the goal of universal software literacy. The hope is for programming knowledge to be commonplace and for ordinary people to understand how to conceive of a simple solution to a complex problem with the help of computers.

This shift of who a programmer is involves a similar advancement in the languages or software environments that these new programmers will write code in. We need languages further abstracted from machine code and syntax that more closely resembles human language to decrease the learning curve of programming and improve the readability of code. Even though software literacy for the general public seems like a lofty ambition, developments have already been made in this direction.

Scratch – the children’s programming language

Of all the programs that have attempted to introduce programming concepts to beginners, MIT’s Scratch has had the most success. Scratch is an interactive program rather than a syntax-based coding language; it employs building blocks to construct programs rather than relying on potentially confusing grammars. Developed by the Lifelong Kindergarten Group at the MIT Media Laboratory and released in 2007, Scratch was build with its specific core audience of children age 8 to 16 in mind (Maloney, Peppler and Kafai). The creators of Scratch knew that since computers had been introduced in the late 1970s, they had become everyday items in children’s lives, but that very few children have learned how to program. Knowing this, the Scratch team set out to build a program that satisfied the triplet of having low-floor/high-ceiling/wide-walls and appealed to children (Resnick, Maloney and Monroy-Hernandez).

An example of a Scratch program that simulates a simple pong-like game. It highlights the programming concepts of loops, variables, user input, and conditional statements.

Give It Meaning

Scratch’s users learn important mathematical and computational concepts, as well as how to think creatively, reason systematically, and work collaboratively. But how do they accomplish all of this without losing interest? By making sure that every aspect of the program gives meaning to the user’s work. Scratch does this in two ways: diversity and personalization.

Scratch is unlike many of its competitors because it has wide-walls and supports the creation of a diverse range of project types such as stories, games, and simulations. Scratch allows its users to make different kinds of programs as it is much more meaningful to work on a project that reflects one’s own interests. These programs reflect who each young creator is, as exemplified by Scratch’s built-in personalization features.

Scratch makes it easy for people to customize their programs by incorporating different media and allowing users to do things like import photos and record their own voices. Scratch succeeds in having both a low-floor and high-ceiling because kids can not only “develop abstract programs to do mindless things with a cat or a box, etc… but they could add their own pictures and their own voices to the Scratch environment. (Resnick, Maloney and Monroy-Hernandez)” When Scratchers build programs that are personally meaningful to them, they are more eager to learn mathematical and computational concepts that pertain to their projects (Resnick, Sowing the Seeds for a More Creative Society). How better to introduce the eighth-grade algebra concept of variables than to show a boy that a programming variable will let him keep track of how many points he has scored in the basketball game he programmed?

Make It Social

Once a child creates a Scratch program, she can share it on the Scratch web site in the same way that one would share a video on YouTube. The Scratch programming environment is tightly coupled with this sharing web site, and the 700,000+ projects that have been shared there are a testament to the vibrant community currently developing in Scratch. This website functions both as a location for viewing or collaborating on one another’s work and as a repository of material to learn new techniques and programming concepts from. Once a project has been uploaded to the sharing site, it can be run from in the browser, commented on or voted for, or downloaded for reverse-engineering by another Scratcher. Scratches share the same benefits as an open-source program like Scratch, namely that its users can keep learning from their peer’s discoveries.

The depth offered by Scratch is quite extraordinary considering the fact that it is merely an educational tool for very young children. It teaches concepts like conditional statements (“if” sometime is true, “then” do an action), iteration (going through each element in a list), parallel execution (multiple processes running simultaneously), and user input (keyboards, mice, etc.) in a manner that a 10-year-old can fully comprehend. Its replacement of a syntax and grammar-based language by a graphical user interface is wholly appropriate for the context of its use. But this veil of simplification must eventually be removed to reveal a more advanced, but hopefully not more confusing, development environment.

Processing – the electronic sketchbook

Processing was born from the idea of making a language that both gives visual expression to sophisticated forms of computation and acts as a teaching tool for those unfamiliar with computer programming (Maeda). Under the direction of renowned graphic designer John Maeda, Processing has been developed by MIT graduate students Casey Reas and Ben Fry since 2001. Processing’s syntax is a stripped down version of Java, which allows for a declined learning curve while preserving the power and flexibility of Java. Whereas Scratch is aimed at young children, Processing looks to serve an older, more educated audience of people in high school and older.

The intelligent development environment used by Processing is called the “sketchbook,” and all of the programs a user writes are referred to as “sketches.” While Processing is fully capable of generating full-featured software, its intention is much simpler than that. Reas and Fry want their users to sketch different renditions of what the finished product might be, much in the way that architects work with cardboard before building a skyscraper or musicians sit down with a piano before composing a concerto. Because Processing was created by people with primarily creative backgrounds, it breaks from the cycle of programmers making tools for programmers and “engages people with visual and spatial minds. (Reas and Fry)”

A piece generated by a Processing script from C.E.B. Reas’ ‘Process/Form’ exhibition at bitforms gallery nyc.

Programmers Teaching Artists Teaching Programmers

The two main audiences that come to Processing are artists and programmers, each with an interest in the other’s field of expertise. For both groups, Processing serves as an excellent jumping-off point from which one can explore other programming languages or creative theory. The variety of classes and workshops being offered at universities such as UCLA, MIT, and Hongik University in Seoul give evidence to Processing’s flexibility, with some classes approaching the language from a programmers point of view and others from an artist’s perspective.

As computers become more pervasive in the creative arts, programming skills increase in demand. One reason why so many people come to Processing and succeed in learning the concepts of programming through the language is because it embraces and is centered around artistic theory. In fact, the equivalent of a “Hello World” program given on the Processing learning web site is one line of code that draws a line. From there it moves on to giving the line a background and color (Fry and Reas).

A one-week workshop at Hongik University in 2003 brought together design and computer science students, and the interaction between the two groups illustrates Processing’s strengths in crossing over the two fields. When students without previous programming experience produced work that was visually complex but technically elementary, the computer science majors helped them understand more advanced programming techniques. And the inverse occurred with the students without any comprehension of basic design principles (Reas and Fry).

Conclusion

The concept of software literacy is not new. Ted Nelson wrote in 1974 that “the more you know about computers… the better your imagination can flow between the technicalities, can slide the parts together, can discern the spaces of what you would have these things do. (Nelson)” This is exactly the idea that Scratch and Processing are striving to further. Pushing programming onto unwilling students is not how software literacy will be accomplished. Rather, tightly coupling people’s interests with the manner in which programming is introduced to them makes them much more receptive to the ideas being presented. Also, we must not forget the reason for teaching programming concepts. The fact that educators are using coding as a gateway to many other critical thinking concepts is important; it betters education and expands how our minds conceive of solving problems.

Continue reading “Software Literacy: The Third-Grade Programmer”

Eventbox is beautifully unnecessary

what the eventbox "unread" window looks like
what the eventbox "unread" window looks like (click for a larger view)

Seems like this new little app called Eventbox is getting all kinds of hype right now, so I figured I’d check it out to see if it’s worth the $15 that its developer, The Cosmic Machine, is asking.

Functionality

While the functionality of an application is probably its most important aspect, in Eventbox’s case, it’s where it falls short. Eventbox tries to position itself as a place that brings together all of your friends’ online social postings for your to view in one spot. It’s essentially an RSS feed aggregator for social activity. As of v1.0, Eventbox supports gathering data from Facebook, Twitter, Flickr, Reddit, and RSS feeds.

While I’m all for what aggregators do (Google Reader is probably my most visited bookmark), there are far superior alternatives to Eventbox. Maybe if it supported more sites, although I can’t think of too many more that interest me, Eventbox would seem more necessary. Feed aggregators are necessary because people read hundreds of site’s postings, but as far as activity postings go, I only really need Facebook and Twitter. Two sites don’t warrant a dedicated app that can’t replicate each site’s full functionality (Facebook is about a bit more than status postings).  FriendFeed, Netvibes.com’s widgets, or any number of other online apps do Eventbox’s job with much more finesse.

Design

Now that you know how ridiculous I think this app is, here’s how incredible its design is. In all honesty, Eventbox is a shining example of why people get hooked on Macs when they switch from PCs. The icons, the layout, the styling of its various animations, and the flow of moving through the app all contribute to something that looks and works perfectly.

I really wish that Eventbox had more of a purpose because it’s such a joy to work with.

Overall

I hope it’s pretty clear how I feel about Eventbox. It’s a beautifully designed application that I have no use for. There is praise coming from all around, but I can’t sing the same tune. I love Facebook, Twitter, Flickr, and the rest of the social networking sites, but I already have a browser, and my homepage (Netvibes.com) already puts those sites together.

Apple WWDC 2007 Keynote

Mac OS X Leopard Disc

Of course anything that happens regarding Steve Jobs will make the tech blogs, but yesterday was a big day in the life of a newly converted Mac user. It was the start of WWDC, and as usual, Jobs gave his keynote as an opening act. Also as usual, there were massive rumors circulating both forums and blogs alike, some rumors came true, other fell back into the “save for next Apple event” pile. Here are some of the things announced today and my take left along side of them:

Mac OS X Leopard

  • leoparddesktopicon.gifDesktop: We have a new dock and semi-transparent top bar. The new dock is definitely nice with the Stacks feature, but listing a semi-transparent bar as a feature? What’s up with that? If Jobs would have skipped the bar and focused solely on the dock, I would be much more pleased. Either way, the new dock is a definite improvement. It’s a step in the left direction.
  • leopardfindericon.gifFinder: This is where I am most excited for Leopard. The finder has a whole new way of browsing through the files and folders located all around your hard drive. New icons that mimic the file/folder contents, new Cover Flow view, and and improved searching with Spotlight all excite me. I believe that Core Animation will be integrated somehow into the new Finder features which would make this new explorer even prettier.
  • leopardtimemachineicon.gifTime Machine: Nothing really new, but Time Machine looks nice. Admittedly, it is just a backup program with a pretty GUI, but what’s wrong with that? Having it integrated into my OS is very welcome.
  • leopardspacesicon.gifSpaces: Again, nothing new, but this is probably my second favorite feature coming to Leopard. This makes it OK for those of us who can’t fit four screens on our desks. It looks like it will have very intuitive integration into everyday use, and with the rapid increases in RAM size and decrease in prices, more programs are going to be open more of the time. One screen can’t really handle that without something like Spaces.
  • leopardichaticon.gifiChat: A few new things make this simple text/audio/video chatting program even more appealing. You can now show your the people who you are chatting with your presentations, slideshows, or other things not pertaining to your face. Nice new features, nothing shocking though.
  • leopardbootcampicon.pngBoot Camp: We all knew that Boot Camp would be integrated into Leopard, and although we were hoping that Apple would make it into a Parallels/VMware killer of sorts, Jobs presented it as a complementary product to these two others. The new Boot Camp will allow quick switching between your different virtual machines. Small update.
  • leopardfrontrowicon.pngFront Row: It will look like Apple TV, that’s nice… I guess. I don’t really use Front Row right now, maybe I will next year at college. This new interface doesn’t affect me too much.

iPhone

  • 3rd Party Apps: No SDK, only web apps. Apple needs to learn that, although first-party limitations have worked thus far, competitors are coming in on all sides. Seeing as Apple is entering into a brand new market that already seems saturated with carriers and phone makers, being locked into the Cingular/AT&T contract sucks big time. Only web apps really hinders the capabilities for others to develop kick-ass applications.
  • Size Issues: The picture of the iPhone has changed on the Apple website (which has also received a redesign). What is odd is that it now seems MUCH smaller than before. It turns out that after the old and new images are compared and the new one is vertially stretched, they match exactly. This is some shady imaging on Apple’s part. It looks like Andre the Giant’s hand holding the iPhone where as before it was Mini-Me’s.

Other/Misc.

  • Safari 3 for Windows: I get the point of releasing an Apple browser for Windows. It can be used as yet another point of entry for Apple. It’s too bad that their product sucks. Mac users don’t even use Safari, why would Windows users. If Windows users are to use any browser other than IE (which sucks equally to Safari), they will either use Firefox or Opera. Apple still has a ways to go with this browser. They might want to focus on getting a home-court advantage before going to the visitor’s side.

    Update: Wired has done benchmarks on Safari 3, Firefox 2, and IE 7. Guess what? Apple lied. Safari is slower than both…

  • Games: Another “why?” to me. Now that Parallels is making strides in virtualization with Windows and the integration of gaming on Macs using the Windows OS, why keep producing games for Macs? I don’t think it makes sense on a developer’s side. It makes perfect sense for Apple, but not for EA.

Yottamusic rescues Rhapsody (for me)

Yottamusic LogoAs I am a new convert to the amazing OS X via my Macbook Pro, I have been going through the process of discovering which apps that I love do/don’t work on the OS. Many do work, contrary to popular thought, but one such app that does not work is Rhapsody.

After realizing that there is no way that I could ever afford to buy all of the music that I wanted from Apple’s iTunes Music Store, I stepped into the world of subscription music services. After trying out just about every product on the market, I have come to the conclusion that Rhapsody is the best by far. Now imagine my dismay after learning that Rhapsody is a Windows only app! I was so disappointed that my favorite music discovery application was gone forever. Luckily for me, a few Google searches after getting over my sadness, I discovered Yottamusic.

Yottamusic seems (at first) to be just another subscription services sans a desktop application. It was the little note that says that Rhapsody users need not register that excited me. Yotta turned out to be an amazing service that uses the Rhapsody music library as a back-end and some great AJAX in the front-end to create a very sleek user experience. The best way to describe it would be to say that it is the Web 2.0 makeover of a service trying so hard to get out of the 1.0 stage.

Yottamusic works with many different browsers, and if you happen to be using one that they don’t officially support, they let you know immediately (but that doesn’t mean that your browser will be shut out). I understand that Rhapsody’s web service works with Firefox on OS X, but it’s interface and design is very sluggish and unintuitive. Yotta is its younger, edgier sibling that has all of the unnecessary bells and whistles left in the dust. If you do nothing else, check out the Intro Comic that they have to describe their product.

Update: Yottamusic has been shut down by Rhapsody. Replacement? Mog.