The other day, I took part in a forum about technology education in Brooklyn. So much of the focus was on how to produce usable software developers inside the four walls of a classroom. There was a CTO in the room who had a fifty plus person tech team and so I asked him, "How many of your developers learned their trade in the classroom versus being essentially self taught?"
Answer: All self-taught. Not a single one of his developers came out of school as usable commercial software developers.
And yet the number of software developers in NYC who work at startups has probably grown tenfold in the last eight years, leading me to ask the question of whether or not putting code in the classroom will make the biggest impact on innovation in our community. It's an especially relevant question for me as I've recently joined the board of the Bronx Academy for Software Engineering, one of two software focused high schools in NYC.
Don't get me wrong--I think software literacy is extremely important. Whether or not you decide to actually write code for a living, understanding how computers work and what they're capable of will be a life skill going forward. My biggest question is how you get the biggest bang for the buck educationally, based on what we can observe in real life.
Software languages evolve more quickly than schools could ever change their curriculum--so it seems somewhat problematic to hard code a set of learning goals when industry requirements are so fluid.
That's why I think the main goal of any educational endeavor whose goal is to produce engineer should be focused on what they inspire kids to do *outside* the classroom--we should be teaching them to tinker. If we can't inspire kids to learn when they leave the classroom, they're never going to pick up software development as a lifelong pursuit.
The computer titans of today grew up building computers--coding up programs not in a classroom, but at home or in libraries. In fact, many of them dropped out of school. Their learning happened beyond the four walls--which is a concern of mine because, traditionally, schools seem to act like they're the center and sole source of all worthwhile education on the planet. They're not setup to acknowledge that there are perfectly good Ruby on Rails classes available on the internet or that you could pick up a lot of knowledge by buying a book on your own.
In a way, schools need to start thinking like companies built around the distribution of open source software companies. Instead of selling you software, open source companies acknowledge that the software is out there for free--but what you really need is support around that software. What gets sold, at a fraction of the price, is technical support, constant updates of the software, customizations, etc.
What would the equivalent at a school look like?
Perhaps instead of being focused on teachers and classroom instructions, we'd staff up on the Teachers Assistants who supported the work you were doing on freely available courseware. The school might look more like a co-working space than a bunch of divided, closed off rooms--where you could spend more time getting your hands dirty by collaborating on projects versus getting lectured. Staff would be there not to teach, but to help you learn.
I have a friend who went to school for boat building up in Maine. There wasn't a lot of instruction at all--just a pile of wood in the corner and an open space where people who were a couple of years ahead of you were working on their own boats in a collaborative environment. They were there to help you just as someone had helped them--they were a community of learners.
That's another thing schools haven't been so good at traditionally--building relationships across groups of learners. Just because they make you do group work doesn't mean they're good at building communities. A great learning community would mean that you could walk into a room that didn't have a teacher and the kids would forge ahead and teach themselves--and continue to do so well beyond the scheduled end of class and movement out of that physical space.
What I'm thinking about focuses more on things like science fairs, egg drop contests, hackathons--a veritable firehose of opportunities to just get in there and build in a supportive learning environment. That's how students are going to build the relationships necessary to participate in communities--because this kind of group involvement is a necessity if you're ever going to be on the cutting edge of software development. Groups will pick up on the latest trends far faster than classroom curriculum ever could, so how can we build curriculum that encourages students to participate in communities and tinker on their own?