Lessons learned from PIxEL, and how computer science education needs to change

This year I started a non-profit organization of after-school high school clubs called PIxEL (programmers + innovators * entrepreneurs + leaders) with the goal of engaging students in the disciplines of design, code, and business. What I also wanted to do was expose computer science to as many students as possible in a positive way. Of course, this is not an original idea. Even the President has acknowledged that the increasing demand for work in the computer science industry must be met with a movement to integrate that into primary education.

However, I don’t think we’re doing this correctly. I am currently taking an AP Computer Science course at my school, and the class size is less than half of any other elective. The introductory course, on the other hand, seems to be one of the most widely opted classes taken by freshmen. What is the reason for this disparity?

“…students need to see what they are doing to remain interested, especially from a technical standpoint…”

Firstly, I think courses like these focus too much on the principles of computer programming before the students even understand how this could ever be used. Side projects (“labs”) written by the College Board are insufficient; students need to see what they are doing to remain interested, especially from a technical standpoint. The choice of Java for this course is understandable; its syntax is relatively simple while exposing some of the key concepts of extensibility and polymorphism. But is it still relevant?

Many enterprise applications and Android native apps are written in Java, but we are quickly seeing Java being outmatched for simplicity and portability by other languages, namely its oft-mistaken-for web scripting language, JavaScript. Any curriculum based on Java is difficult to introduce graphical interfaces for, since frameworks like Swing are too extensive to teach within the AP subset. The more I think about this, though, the more absurd it seems – in the most prominent high school computer science course that exists, we ignore one of the most important pieces of the big picture in terms of applicability – the interface. Do we really expect students to be engrossed by Scanners, System.out.println()’s, and the plethora of command line classes they create? 

JavaScript, on the other hand, was made from the ground-up for the Internet. Its applications stretch from websites to server-side management, and it has been called the most important language to know. When you teach JavaScript, it is often considered a prerequisite to know HTML and CSS – languages that are display-first and show students exactly what they are doing and how they could use it. All of these web technologies enable students to experiment with it themselves. When teaching at PIxEL, it’s consistently inspiring to see students come up to me and show me what they’ve done with what they’ve learned – outside of the things we’ve made in the club. I think of it like this: I am not teaching tools or patterns or even algorithms for that matter. I am teaching skills and perspectives and applications – things that are exponentially more important for the long run.

“If that sounds too idealist to you, just remember how technology has always been built on idealism…”

This is not a plea for JavaScript or any language in particular to work its way into the syllabuses of computer science education. I am asking teachers and board members everywhere to ask ourselves: what are we really trying to accomplish? Of course, it could be that I have completely different goals than the College Board. I want to envision everyone at PIxEL as a critically-thinking and design-conscious engineer or entrepreneur. If that sounds too idealist to you, just remember how technology has always been built on idealism – from the printing press to the iPhone, the ingenuities and innovations that have touched all of our lives come from visionaries who see a future that could be better.

To this end, I believe that at this point in time there is a larger zeal for computer science education than has been at any other point in history. We need to make a positive impact on the students we teach this to. For that to happen, I think that a hands-on approach is the best way to accomplish this; no textbook or lecture can substitute for personal exploration and accomplishment. Remember the time when you first learned this beautiful thing we call programming – the sheer joy of making the computer do something. If we want to bring more people into the field like we advertise that we do, we have to pass this on in a way that shows people how programming inspires people to creation.

For the next generation, technology will be an integral part of most careers, and this demands skills that we must teach to today’s students.

That’s a pretty big responsibility. Let’s not screw it up.


For more information about PIxEL and what we do: email me – ethan at pixelclubs dot org.

Also read...


  1. Hey Ethan,

    I absolutely agree with what you are saying here. Two more points:

    First, while I agree that languages like Python and JS are better for beginners to the CS world, Java is still being widely used in corporate environment, which might be one of the reasons why Java is still taught. (IIRC Novell still uses COBOL… but that’s another matter) One argument for Java is that it is stable and fast (once you start the JVM that is). Compared to Python, JVM is much more optimized. Its bytecode is more portable than Python’s as well. See http://www.quora.com/What-kind-of-companies-use-Java-as-their-primary-language-in-software-development. IIRC some companies like Spotify are even *porting Python apps to Java* because of the bottlenecks in Python implementations.

    Second, I love JavaScript, but its verbose syntax (e.g. `myFunc(function () {/*noop*/})`) is very inconvenient, which gives rises to things like coffeescript.

    Third, (next-)next-gen languages like Go, Julia, and Rust may be worth mentioning. I also heard some good things about C++11 with lambda funcs, etc., but personally I’m not a big fan of C++.


Leave a Reply

Your email address will not be published. Required fields are marked *