The Academy for Software Engineering

One Sunday morning, shortly before I was born, President Ronald Reagan stormed into the Oval Office with a copy of The Washington Post. “Can someone please explain to me how we have close to 10% unemployment, yet there are ten pages of job openings in the help wanted section? Jobs problem? There is no jobs problem.” His advisors politely informed him that the issue was that there weren’t enough people with the requisite skills for those open positions.1 Sound familiar?

Highly-skilled, creative, problem solvers have the luxury of deciding which of their suitors they will work with. The rest find themselves struggling to find gainful employment as their jobs hop on boats to places where someone is willing to do the same job for half the compensation. We are at a crossroads. We can bellyache about how the world has passed us by as we sat still in front of our 96-inch plasmas or we can take action and decide how to tackle the tough question: How do we create top-shelf talent and keep our competitive edge?

A New Hope

Last Thursday, Mayor Michael Bloomberg announced a new high school focused on teaching students the fundamentals of software engineering, the Academy for Software Engineering. For a skilled software engineer, an entry level salary approaching $100,000 a year is not uncommon and, according to a recent report by Jacques Mattheij, engineers in their late-twenties at Google enjoy compensation packages just shy of a quarter of a million dollars annually.

It is fair, however, to approach this new endeavor with a healthy dose of skepticism. There are a myriad of schools with ambitious names in the Department of Education and, often, the name is just that. I went to a school in New Jersey called High Tech High School. Their pride and joy? Musical theatre. I don’t think they employed single teacher who could program their way out of a paper bag.

The Academy for Software Engineering will be different. The initial idea came from Stuyvesant High School computer science teacher, Mike Zamansky, who has championed the importance of software design in the curriculum for over ten years. Fred Wilson of Union Square Ventures—the fine people who’ve invested in services I rely on regularly, such as Foursquare, Codecademy2, Kickstarter, Tumblr, and Twitter—is providing some of the initial financial capital needed to get the school off the ground as well helping to raise funds from the technology community at-large. In addition, Evan Korth, the faculty liaison for technology entrepreneurship at New York University, will be leading and advisory board, which includes Joel Spolsky of the venerable Fog Creek Software, Foursquare’s Naveen Selvadurai, and Anil Dash as well as seasoned educators from around the city.

The Academy for Software Design will not skim off the top. Grades, state test scores, and attendance records do not play a role in the admissions process. Instead, students will be admitted based on their passion for programming and technology. As a result, students across the city will have a fair shot in pursuing their interests and benefitting the City of New York by contributing to its pool of highly-skilled, creative engineers. Imagine if more schools in the city revolved around their students’ entusiasm?

This school will change how the game is played.

Significance

How do we prepare middle school students fot the Academy for Software Engineering? How do we reach the small pockets of students in each and every school who have a passion for programming but no opportunities to capitalize on that interest?

The Academy for Software Engineering is exciting in its own right, but—serving just under 500 students once fully operations—it’s only the first step in a larger movement. The school already has a lot of talent and brainpower behind it and, over the next few years, I predict that it’s programs will become a much needed blueprint for schools throughout the city who want to integrate best practices and cutting-edge technology software engineering programs into their curriculum.

Anyone who reads this site regularly can correctly assume that I’m beyond excited to see such an innovative endeavor in my school district and I will be looking to help the Academy for Software Engineering in anyway possible. I strongly encourage you to do the same.


  1. Obviously, the jobs problem is a bit more nuanced than a simple cross-comparison between help wanted ads and the unemployment rate as John Pease and Lee Martin at the University of Maryland at College Park point out

  2. I’ve already asked you once to sign up for Code Year. Don’t make me ask you again. 

Code Year →

Make your New Year’s resolution learning to code. Sign up on Code Year to get a new interactive programming lesson sent to you each week and you’ll be building apps and web sites before you know it.

No, seriously. Do it.

Communication and Efficiency

In too many schools, devices are purchased without a plan. Technology integration can’t be bought and doesn’t happen with a wave of the fiscal wand. Too often, expensive computers sit in carts or are used to deliver the same old instruction in a shinier way and that’s dangerous.

It’s dangerous because, as a nation, we don’t need students that are learning the same way they did fifty years ago but with a glowing screen instead of a chalkboard. We need students that are trained in entirely new ways of thinking. We need creative and critical thinkers who are able to generate ideas, test hypotheses, and solve interesting problems.

What is the best way to integrate technology in the curriculum? Honestly, I think there are very few places that are doing it particularly well and that’s because I think that most schools are putting the horse before the carriage. We look at the transformative effect that technology has had on the world around us and think—rightfully so—that this needs to find its way into our schools.

The problem is that the transformative change in society didn’t happen in a vaccuum; it was—and is—an evolution. Technology, on a broad level, does a few things really well:

  1. It promotes communication. Technology—such as the written word, the printing press, radio, television, and the Internet—makes it cheaper and easier to spread your message farther and with more clarity.
  2. It increases efficiency. My mobile phone has more processing power than NASA had when they put a man on the moon. Ordering online from Amazon is a much more enjoyable experience than tearing out the last page from a catalogue, filling it out, finding an envelope, and mailing to place my order and it’s much easier on their end as well. UPS leverages computers to plan the most efficient route in order to save money on fuel.

These two factors sow the seeds for transformative change. When you can clearly communicate with greater efficiency, the flow and intermingling of ideas rising dramatically and interesting things spring up. In schools, we skip laying the foundation for lasting change and go directly to the gimmicks. First, we need to build frameworks and workflows that increase student and teacher efficiency.

  • What are the biggest instructional time sucks and how can we mitigate them?
  • How can we automate data collection and paperwork in a way that frees up teachers’ time and attention to do what they do best: craft and execute create lessons?

Secondly, we need to find ways to amplify our communication. Learning should be accessible from everywhere and easy to exchange ideas between and amongst students, teachers, and administration.

  • How do we build systems that encourage sharing of good ideas and useful information?
  • How do make sure that students can access instructional content at any time (at home as well as in school)?

Communication and efficiency create a positive feedback loop—as one increases so does the other. These are not easy questions to answer and they typically go unanswered because their not particularly glamorous either. That said, if we want see transformative change in our schools, we’re going to have to sit down with the banal basics and figure out how to capitilize on the explosion in technological advancement over the last few years.

What is a good age for children to begin learning to program? →

Yours truly on Quora:

The thing about learning to program is that it’s a lot like learning to read or do math. We’re not asking second graders to solve quadratic equations or read James Joyce and we shouldn’t ask them to write a content management system in Java either.

As more and more of our personal, professional, social, and economic life takes place on a computer—whether it be a desktop or a mobile phone—it’s going to become increasing important that we possess a deep understanding how they work. Even if a child never plans on being a professional programmer, possessing a familiarity with computational thinking and how software works will give them a better understanding of the world we live in. We already ask our children to read great literature even if they have no ambition to be a writer and pass Pre-Calculus even if a career in mathematics isn’t in the stars for them. In addition, if we plan on staying competitive with China and India over the next century, we’re going to need to invest in our children early on.

That said, it has less to do with whether or not we should begin teaching and more to do with how we go about teaching. There are some kid-friendly programming languages (e.g. Scratch and Alice), but there is still a lot of work to do when it comes down to the pedagogy of teaching programming concepts to students.

Third or fourth grade is a fine time to start with Scratch or Alice. Most children should be able to wrap their heads around the basic mathematical concepts and read the labels on the screen. Starting in fifth or sixth grade there should be a focus in our schools on basic programming and web design.

Should Computer Science Be Required in K-12? →

Audrey Watters:

Computer science is not widely taught, even though programming may be one of the most important skills of the 21st century. While most schools do recognize the importance of helping students learn how to use new technologies, you’ll still find scant opportunities in K-12 classes for students to learn how to actually build those very technologies.

Taking algebra is less about solving quadratic equations in your day to day life and more about learning to think algebraically. Even if you have no desire to become a professional programmer, learning basic computer science concepts and the foundations of programming strengthen logic and reasoning as well as give us deeper understanding of the technology that is increasingly intertwined with our day-to-day lives.

When I began teaching programming to the ninth graders at the Scholars’ Academy, I argued that building some basic comfort with programming would pay off in dividends over the course of their lives and careers. Once you understand how to write a basic script, you can easily automate repetitive tasks that would otherwise eat up hours of your time. 

Assorted Tips from Seth Godin →

Number 6:

Seek out habits that help you overcome fear or inertia. Destroy those that do the opposite.

Number 12:

Taking your dog for a walk is usually better than whatever alternative use of your time you were considering.

5 Lessons I Learned In School and Now Want To Forget →

Steven Handel:

While today’s schools may be well-intentioned, I feel there are many drawbacks and shortcomings to our educational system that need to be addressed and fixed.

His list sounds about right.

(Source: theemotionmachine)

Dear Congress, It's No Longer OK to Not Know How the Internet Works →

Joshua Kopstein:

Yet here we are with a group of elected officials openly supporting a bill they can’t explain, and having the temerity to suggest there’s no need to “bring in the nerds” to suss out what’s actually on it.

(via Marco)

A Day in the Life of the iPad Classroom →

Jeannetta Mitchell, a veteran teacher of 20 years, is encouraged by what she sees so far. “This is not a magic wand,” she says. “This just makes it more fun for them to learn. Nobody’s just sitting there writing down the answer, saying I don’t know how I got there. They know how they got there.”

Even—if at the very least—all a given tool does is making learning more engaging, is that such a bad thing?

Students Self-Handicap to Protect Themselves →

Richard Landers discussing an interesting article by Karena Valkyrie and Casey Tobin:

When students feel that their performance on learning assessments is out of their control, they create excuses before the assessment has even taken place. These excuses are often not based in reality; instead, the students are trying to protect their self-esteem – if they ultimately fail, they have already created an excuse as to why it happened, and if they succeed, they have done so in the face of adversity. Either way, the student’s self-concept is protected. This practice is called self-handicapping.

Yours truly last January discussing the work of Carol Dweck and how our attitude towards the nature of intelligence can affect our ability to succeed:

How we think about our intelligence defines how we deal with tough problems. Those of us that believe that our intelligence is malleable dig our heels in when confronted with a challenged.

At the end of they day, I can complain that I was born a terrible baseball player and could never play in the major leagues. To an extent, that’s true—and my brief stint in little league is evidence of this.1 But, the fact that I haven’t so far as touched a baseball or bat since I was six certainly hasn’t helped the situation. With 21-years of deliberate practice, I may have been able to muster up the ability to become a borderline-mediocre player. Instead, I created a self-theory and stick to it until it became a reality.

The fact that I’m not rookie of the year isn’t that big a deal on the grand scale of things. But it’s not uncommon to hear a student say “I can’t do this. I’m not smart enough.” That’s serious (my social security is contingent on their intelligence) and it’s the same mechanism.

The alternative is to treat intelligence like a muscle. The more you exercise it, the stronger it gets. Yea, there’s a chance you’re not equipped with an Olympic athlete of a brain like Albert Einstein, but throwing in the towel and plopping your brain on the couch in front of Two and a Half Men and feeding it Frito’s certainly isn’t helping either.


  1. It became clear to my coach, that I was never going to hit the ball with the bat. Instead, he focused on teaching me how to get a walk to first base. After weeks of dedicated focus, I finally made it to first base—not by hitting the ball or anything like that, of course—and my coach immediately pulled me off the field for someone who could actually run to second. 

Teaching Programming

This semester I piloted an introductory programming course with the ninth grade students as an elective. What follows are some reflections on the first-run through the course—which still has about a month to go.

Originally, I toyed with using Python as the programming language of choice. Python is commonly used in undergraduate introductions to computer science and is a pretty flexible language. I taught the first few lessons with Python in the back of my mind as I introduced some basic programming concepts, but at the last minute I swapped in Ruby, which is similar to Python at a base level1, but has the added benefit of being the programming language that I’m most comfortable with.

It felt disengenuous to be teaching with a language I wasn’t completely comfortable with. I am a little rusty in Python and I thought teaching with the language would force me to bone up, but—given a busy schedule—that wasn’t happening. All of my projects currently in active development are in Ruby and it was a better fit for me.

By most objective measures, the course is humming along fine. My students are generally happy and they are creating some trivial little programs on their own, but—as I reflect on this first run—there are definitely some things that I would consider changing.

Over the last few months, I’ve learned that a good programming language should meet the following criteria:

  • The distance between starting and creating something that makes you smile should be as short as possible. Teenagers are visually-oriented and have little patience for command-line programs. The sooner than can create something graphical, the better. When they think of computers, they think of games—not relational databases.
  • The language should be transferable to projects outside its own little world. Scratch and similar programming languages offer a rapid learning curve and make it easy to create a graphical program, but they are niche languages relegated to their own little worlds. I want a language that is flexible enough to be used in the “real world” when the time comes.
  • It has to be easily installed on students’ home computers. My students had trouble installing Ruby and Python on their home computers and it was borderline impossible to for me troubleshoot the issue blindly. For the most part, students have been writing their programs at home in a text editor and debugging in class. Even then, the thought of installing RubyGems on 32 computers with an HTTP proxy is not particularly appealing.

As much as I personally enjoy programming in Ruby, I am not sure that I would use it again as the basis for a programming course.

Reducing the Distance Between Starting and Creating

Teaching programming is an interesting challenge because there is a huge learning curve before you can do anything even remotely cool and 14-year-olds are not known for their admirable attention spans.

At the same time, you want a language that is generalizable to a wide range of challenges but also has the depth to keep students interested for the length of the course. I used Scratch with the sixth grade last year for one unit and it was a success, but ninth graders bore easily. Sometimes, it’s about dialing in the right amount of challenge. Enough to keep them interested, but not so much that they get frustrated and check out.

Challenge-based Learning

Rather than teaching skills in a vacuum, I want to completely rethink my curriculum. Instead of a series of lessons, it should be a series of challenges. The skills that I teach should put students just in the zone of proximal development for solving the next challenge.

Sure, this idea isn’t anything new. But many times, it’s hard to pull off when you are teaching something for the first time. It’s not always easy to see the non-obvious ways that skills link together until you’ve run through the curriculum once and made the necessary, serendipitous discoveries in how your students approach the content and how they make connections between different concepts.

This time around, it took me a few tries to figure out how to best explain a particular concept (e.g. object-oriented programming). I found myself teaching concepts in a vacuum and then providing exercises that emphasized those concepts. The assignments were based around the concepts I was teaching instead of my instruction being centered around the challenges they were faced with.

In the future, I am going to frame it as a series of challenges they must surpass or riddles that they have to figure out move forward. In a way, I want to make it more game-oriented. As they complete a challenge, they can move on to the next one.

I will still be covering core programming concepts as a group, but students will be able to move through the curriculum asynchronously. In order to do this, I need to collect a bunch of programming problems and arranging them in a way that allows the student to build up their skills as the move along.

First, Care

I might really want to create a relational database to track and organize different pieces of information. That might be my (admittedly banal) impetus for wanting to learn how to program and there are plenty of resources out there to learn to do that.

For my students, that isn’t necessarily a problem that they are looking to solve. They want to make something cool. And there is nothing wrong with that. If they manage to cement their skills through making a bunch of trival games and “What Disney character are you?” surveys, fine. They will still have those skills when they want to solve an interesting problem later on.

Seeing is Believing

As much as I love the command line, it doesn’t have the same effect for a teenager. They need to be able to create a GUI and see their program work early on or else they’re going to lose interest.

Homework

You’re never going to be able to be each and every one of your students’ personal Geek Squad and there is no way to control what computers (if any) your students have at home so don’t bother trying. Chances are, you are not going to be working with the most reliable systems in the world.

I get some of my best programming done away from the computer. I will be walking along the boardwalk or eating a sandwich when an innovative solution to a problem I’ve been grappling with will pop into my head.

Hackety Hack, NodeBox, Processing, Codea, and JavaScript

I used Hackety Hack while teaching Ruby. The software itself has been notoriously buggy and my students have some difficulty with the fact that—while Hackety Hack is Ruby-based—many of the functions and methods don’t translate particularly well to traditional Ruby. When Hackety Hack mysteriously implodes and will no longer launch correctly in Snow Leopard, I try to nudge them towards vanilla Ruby and it’s almost always a disaster.

NodeBox is based on Python and is capable of producing some really interesting graphics. That said, it’s Mac-only and while I don’t insist that my students install a given toolset on their home computers, it would be nice if they could.

Codea, the Lua-based programming application for the iPad, looks promising and I could give it a spin with the seventh grade (and their one-to-one iPads), but I still have to figure out the details of purchasing apps through Apple’s Volume Purchasing Program before I can move forward with any options that require the exchange of money.

I’ve considered using JavaScript because there is nothing to install and as long as my students have a web browser, they have JavaScript installed on their computers (theoretically—I’m not sure how many Lynx users I have in my class). The issue with Javascript is that I don’t want to overwhelm them by having them take on HTML, CSS, and JavaScript at the same time. In addition, JavaScript without jQuery is pretty painful.

Next time I teach the class, I will probably go with Processing, the Java-based and graphically-oriented programming language by Ben Fry and Casey Reas. It’s multi-platform, easy to install, and lets you create graphics from the get go. As much as the Rubyist in me dies as little every time I have to look at Java source code, Processing does contain and engage with all of the major concepts and features of a modern programming language. In addition, the Processing.js project makes student work easily sharable via the web.


  1. I know. There are some fundamental differences—but I’m talking about the very basic foundations of programming. 

Torture Your Data Long Enough and It'll Tell You Anything →

Now, consider that schools tend to use the cheapest (read: unreliable and likely invalid) data they can get their hands on.

(Source: news.ycombinator.com, via david)

iPad 2 as a Serious Writing Machine →

James Kendrick:

What makes the iPad 2 and keyboard combo so effective for my writing is the “one app at a time” nature of the tablet. The running app takes up the entire screen, and thus my focus. There are no distractions presented while writing, just inputting words on the screen.

This is liberating for a writer, and I find I can write more, and better, on the tablet system than on a “real” computer. There are no menu options competing for my attention, no updates needing to be run, just an app on the screen.

There are full screen text editors on the Mac as well and I use many of them (e.g. Byword and Writer). But there is a subtle difference. On my Mac, I know that at any given moment, I can hit Command-Tab and switch to Safari, Twitter, or whatever. Application launchers like Quicksilver, Alfred, LaunchBar, or even Spotlight exacerbate the problem.

The difference is subtle on an iPad. On a Mac, if I want to indulge a distraction, I can do it quickly and simply from my keyboard. On an iPad, I have to leave the keyboard and reach towards the screen.

Many times, that’s enough. Even when I’m typing on the iPad itself, switching between applications still requires a switch in mental modes—a switch that brain resists more than on a Mac.

(via Daring Fireball)

Group Projects

Scholars' Academy Students Get Tech Upgrades After Years of Planning →

Yours truly—with a new haircut and a trimmed beard—after the successful launch of one-to-one Kindles in the sixth grade and one-to-one iPads in the seventh grade.

Now that we’ve gotten the devices out the door, I will hopefully have a little more time to talk about how we plan on leveraging them to enhance classroom instruction and what was involved in getting 550 devices prepared and into classrooms.