Sunday, November 21, 2004

Preliminary curriculum objectives

These are my preliminary ideas for creating a curriculum for a summer enrichment program for middle school and high school students who are interested in computers and computing. Comments on the curriculum objectives below are very much appreciated.

1. Expose students to the profession of computing

1.1. Distinguish between using programs (power user) and writing programs (software developer)
Students in introductory computer programming courses tend to be power users and computer generalists seeking to advance their computer skills. However, programming a computer is very different from using a computer. In this curriculum, we seek to make that distinction and help them decide for themselves if computer programming is something they wish to pursue beyond the course.

1.2. Explore and differentiate possible career and university paths
The computing profession includes: computer science, information systems, information science, software engineering, computer engineering, database engineering, network engineering, systems engineering, software architecture, human-computer interface design, computational science, computational statistics, numerical modeling, and library science. Clearly, the profession of computing offers vast choices in further study and work. However, students at the middle school and high school level are not aware of these choices, and do not become aware until after they commit to an undergraduate program at a university. We wish to share these choices and possibilities with students and encourage them to seek what truly interests them.

1.3. Share vision and examples that good designers are well-rounded and incorporate elements of many arts and sciences
The best problem-solvers and designers start first as users, then draw from their own experiences in the arts and sciences as well as their teammates. Most introductory courses consist of students working alone to solve small, well-defined assignments that have little to relate to the real-world. In reality, professionals do the opposite; work in teams on large systems that are not well-defined and require knowledge from many domains of interest.

2. Promote problem modeling and solving skills of every student

2.1. Introduce students to programming as a skill that builds on practice
Learning to program is analogous to learning how to write poetry or how to write music. It requires a lot of practice and self-evaluation, and we seek to instill this notion in all of the students.

2.2. Introduce students to object-based thinking and programming
In our experience, we find that students who start with procedural programming techniques and move to object-based techniques have a much harder time transitioning compared to students who learn object-based techniques before procedural techniques. By exposing students to objects early, they use objects long before they design them. That way, when they do design objects, they will understand how a user would feel about the quality of the design. We will not spend any time on object theory and terminology. We will focus only on concepts and practice.

2.3. Reinforce the notion that programming is part of a larger problem solving process
When a problem is presented, the instinctual response is to go straight to the computer to start coding a program. Although this may work for small, well-defined programs, this rarely works in practice. We will show students how to formulate the problem clearly, conceive a plan to solve the problem, then solve the problem by writing a computer program. Beyond writing the program, students will ask themselves “Did I write the program correctly such that it runs without error?” and “Did I write the correct program to solve the original problem?” Again, we will not focus on the software engineering theory, but rather just practice good problem solving skills, with guidance from the instructor.

3. Provide students with a fun and enriching class and lab experience

3.1. Encourage creativity and teamwork in the classroom
Programming is inherently a creative activity in two respects: devising elegant algorithms to solve a problem clearly and succinctly, and drawing on other knowledge and experiences to devise a solution. Instead of limiting solutions to one individual’s knowledge and experiences, we will encourage collaboration between individuals in the classroom and foster an environment that encourages participation and positively reinforces out-of-box thinking.

3.2. Solving several open-ended problems and evaluating tradeoffs, good and bad
Except for in the classroom, there are few problems where there is only one solution. We will encourage each student to solve problems based on their own judgment and feedback from any collaboration they participate in. However, the students are still beginners and we will make sure that students do not plow forward with a solution that will obviously not work.

3.3. Provide a programming environment geared towards interests of the students
Students in the current generation are very visual in their thinking and interests (video games, movies, graphical computing environments). As a result, we will provide a programming environment that is very visual where students can view themselves as a movie director, game designer, or program designer out to solve a problem and produce a known desired result. In addition, the programming environment will have many parallels to the physical world so students can relate their knowledge and experience into the programming environment. This is a contrast to industrial programming environments, which assume the developer is already aware of the model of computing: hardware, programming languages, operating systems, etc.

4. Provide students with a means to continue exploring after the course is over

4.1. Provide course materials and software for students to use after the class is over
All of the course materials will be made available on the Web via a Creative Commons License, where the school, the students, as well the general public can use the material freely as long as authorship credit is maintained in the material. The school will receive credit in the work as well as the developer(s) of the course material.

4.2. Provide students with resources to explore related academic and career paths
Handouts and/or links on the Web will be provided for the students to explore college and university programs related to the computing profession. In addition, narratives of professionals in the computing profession will be provided for students to read on the Web if they are interested.

4.3. Provide sufficient background in the course for the student to transition to an industrial-strength programming language in subsequent coursework or self-enrichment
The programming environment, although geared for beginners, will focus on object-based thinking, algorithmic thinking, and aids students in the debugging process. These concepts will carry over to industrial-strength languages, with only the programming environment changing from a graphical one to a textual one.

Response to David Weinberger's lecture

I agree with most of what David Weinberger had to say in his lecture, except that he left an impression that there is an either-or relationship between structured hierarchical organization of information and the messier networked organization of information, while it's pretty obvious to me that both are necessary. Example: David Weinberger pitted Encyclopedia Brittanica against Wikipedia -- and this is kind of a raging debate on the internet. We shouldn't be talking "versus" in competition, but "versus" in strengths and weaknesses of both and where they complement each other. If I were teaching a class of middle schoolers, I'd tell my students to go read both sources. How cool would it be if a student came in and said, Brittanica says X and Wikipedia says Y. Who should I believe? These are kind of lessons students need to learn!

Now for a few geekier points...

E.F. "Ted" Codd's relational database idea (from the 1950s!) is ingenious. What is a network really? It looks really messy when David Weinberger showed a visualization of it, but to most computer scientists/mathematicians, it's just a set of nodes (objects/information) connected by a set of edges (relationships or links between objects/information) -- a network = a graph. But a network/graph really is a representation of a relation, and vice-versa. They are equivalent. Since relations can also be represented in tables, it seems like the world is just a giant database, not just of bits and bytes, but consisting of real objects (books, photographs, etc).

I think this can best be shown as an example. Let's take David Weinberger's right brain resume, a pictorial representation of a network. Mathematically, the network is a graph structure, with the nodes being the jobs and the edges (links) being the lines that establish some relationship between the jobs. So, the relational tables that represents the network in the picture would be:

Table 1: Relationships (links) between jobs
Each row represents a job-to-job link in the pictorial representation:
Philosophy Teacher, Interleaf
Philosophy Teacher, Writer (1)
Philosophy Teacher, Writer (2)
Writer (1), Marketing Guy
Writer (1), Journalist
Gag Writer, Journalist
Writer (2), Interleaf
Writer (2), Journalist
Journalist, Industry Analyst
and so on...

Table 2: Job-Time Relationship
Each row in this table connects each job with a year (I made approximations).
Philosophy Teacher, 1970
Writer (1), 1970
Gag Writer, 1972
Writer (2), 1975
Journalist, 1975
Interleaf, 1980
and so on...

Table 3: Pre-Web or Post-Web Relationship
There are a number of ways to represent pre- or post-Web. We can append a third column to Table 2 above that indicates pre- or post-Web for each (job, year) pair. We can associate each year as being pre- or post-Web. Or we can associate each job as being pre- or post-Web. Or we can have a special case in our database too. It really depends on how we will use the data -- this is where that classic CS/engineering tradeoff comes in. Which is more important, efficient storage or faster and more flexible retreival?

On the surface, the network looks messy, but there is a way to represent it (whether or not it is feasible to represent it is another question altogether, storage being the issue that comes to mind). It only begs the question, did Codd's relational model imitate real life, or did real life libraries adopt principles of Ted Codd's research indirectly? Maybe my old advisor John Pfaltz was right after all, "Databases are one of the most misunderstood computer concepts, even among computer professionals. There is a kind of naive assumption that they are little more than glorified file systems. In fact, good database systems represent a kind of complete microcosm of the computer world. Databases are an abstract model of the real world; in much the same way that a computer program is an abstract representation of a real process."

So why does it matter if libraries and archives continue to collect and organize information hierarchically? Just as long as the hierarchical structure is not the only way to index the information. Just like in a database system, you separate the physical representation of the information (B-Trees, a hierarchical structure) from the logical representation/access of the information (query langauges, programs that access the database), the principle of information hiding / separation of concerns kicks in and you can use any physical storage mechanism, so long as you provide sufficient access mechanisms to the end-user.

So in the larger scheme, users can use a myriad of access schemes, including the internet to query, search, explore, etc.. and when they find an item of interest, the local library/database that stores that actual item will navigate their own storage scheme (boxes, filing cabinets) to retrieve the item for you.

My preliminary claim is that libraries should continue to collect, archive, and store actual items, and not bother with coming up with the master index, but rather letting the networks and their community of users come up with the indexing schemes. After all, they are the ones that use the data. The libraries need to focus on providing quick access to actual objects, when necessary, and providing a means for other people (the distributed collective of users) to create the index for them.

I'm not totally crisp in my thoughts yet, but this is just what was running through my head after the lecture.. :)

All in all I think David Weinberger did a great job on the lecture and it really got me thinking. The television cameras did me injustice though. Although it might have looked like I was sleeping on C-Span, I was actually taking copious notes on my notebook in my lap. (Thanks B for letting me know, and feel free to drop your idea in here -- I enjoyed reading your response.)

Saturday, November 20, 2004

Lecture Series on "Managing Knowledge and Creativity in a Digital Context"

http://www.loc.gov/today/pr/2004/04-198.html

Library of Congress Lecture Series on "Managing Knowledge and Creativity in a Digital Context" to Be Aired Live on C-SPAN

WHAT:

The John W. Kluge Center at the Library of Congress presents a series of evening lectures on “Managing Knowledge and Creativity in a Digital Context” featuring some of the best known experts in digitally networked communications. All are free and open to the public, and no reservations are required.

The moderators and coordinators for these events are Deanna Marcum, associate librarian for Library Services at the Library of Congress, and Derrick de Kerckhove, holder of the Harissios Papamarkou Chair in Education and Technology at the John W. Kluge Center.

The hour and a half programs, which will run from November through March 2005, will be aired live on C-SPAN. C-SPAN will promote an e-mail address which viewers may use to ask participants questions during the event.

Viewers can e-mail experts: digital@loc.gov

C-SPAN’s viewers can be part of the live lecture series by e-mailing their questions to the experts at digital@loc.gov. C-SPAN's viewers can learn more information about the series and archived video on the network’s Web site at www.c-span.org/congress/libraryofcongress.asp.

WHEN:
The first lecture takes place at 6:30 p.m. on Monday, Nov. 15.

WHO:
The first speaker is David Weinberger, an expert on “blogging.” Coauthor of the best-selling book “The Cluetrain Manifesto,” Weinberger is also author of “Small Pieces, Loosely Joined: A Unified Theory of the Web,” a frequent commentator on National Public Radio and author of articles in magazines such as Wired and the Harvard Business Review. Weinberger, who has a doctorate in philosophy from the University of Toronto, was senior Internet adviser to the 2004 Howard Dean presidential campaign. He is now a fellow at Harvard’s Berkman Center for Internet & Society, where he is working on a book about how the digital age is changing the most basic ways that information is organized and classified. Weinberger will discuss how and in which situations Web logs, or blogs, work and how and why they are valuable in children’s education.

WHERE:
Montpelier Room, sixth floor of the James Madison Building, 101 Independence Ave. S.E., Washington, D.C.

FORTHCOMING PROGRAMS:

All of these will be held at 6:30 p.m. in the Mumford Room, sixth floor of the James Madison Building, 101 Independence Ave. S.E., Washington, D.C.

Monday, Dec. 13 (tentative) – Brewster Kahle, digital librarian, director and cofounder of the Internet Archive. Kahle will explain how and why capturing material on the Web is important and discuss the challenges of selecting pertinent content.

Monday, Jan. 31, 2005 – Brian Cantwell Smith, dean of the Faculty of Information Studies at the University of Toronto. Smith, the author of “On the Origin of Objects,” combines degrees in computer science and philosophy and is an expert on the interdisciplinary convergence brought about by digitization. His talk is titled, “And Is All This Stuff Really Digital After All?”

Monday, Feb. 14, 2005 – David M. Levy, professor at the Information School of the University of Washington. Levy is the author of “Scrolling Forward: Making Sense of Documents in the Digital Age,” and he will discuss the shift of the experience of reading from the fixed page to movable electrons and the effect that has had on language.

Thursday, March 3, 2005 – Lawrence Lessig, professor of law at Stanford Law School and founder of the Stanford Center for Internet and Society. Lessig is the author of “Code and Other Laws of Cyberspace” and an expert on the issues of copyright and “copyleft.” He is the inventor of the revolutionary concept and application Creative Commons, which invites the right to use material under specific conditions.

Monday, March 14, 2005 – Edward L. Ayers, dean of the College and Graduate School of Arts and Sciences at the University of Virginia. Ayers is the author (with Anne S. Rubin) of “The Valley of the Shadow: Two Communities in the American Civil War” on CD-ROM. Among the questions Ayers will address are the implications for the creation and distribution of knowledge in today's digital environment.

Monday, March 28, 2005 – Neil Gershenfeld, director of the Center for Bits and Atoms at the Massachusetts Institute of Technology. Gershenfeld is the author of “When Things Start to Think.” His new concept Internet Zero (0) proposes a new infrastructure for the existing Internet that would give an IP address to all electronic devices - from light bulbs to Internet addresses and URLs - and interconnect them directly, thereby eliminating much intermediating code and server technology. His topic is “From the Library of Information to the Library of Things.”


Take two, action!

So, take two on the website. This time trying to be a little better about posting new content regularly. I think this time around, this website will be an aggregation of notes, thoughts, and ideas.