I wish someone had explained Computer Science to me when I was in middle or high school.
Not the syntax of whichever language the school’s computer lab chose to use, not the same-old contextless exercise of adding two numbers together and producing a result, but what it would mean to choose a life in computer science.
A life as a maker, not a consumer. A life of flexible work options based on my own skill, drive and preferences. A life of curiosity and endless learning, with earning potential directly dependent on risk taken. A life of developing the ability to benefit society firsthand, either alone or in a team.
That’s what I wish I knew.
I majored in journalism — not a terrible choice in the 1990s, but better as half of a double-major with a more practical complement.
Fortunately for me, I taught myself HTML and Linux, then chose to work in online journalism and enjoyed several years of walking on fresh snow. I never forgot that feeling.
I went back for a technical master’s degree but shied away from pure Computer Science because I was afraid. Afraid I couldn’t compete with people who’d been coding since they were 12, who majored in CS at college the first time around, who were wizards.
I didn’t realize that intense difficulty is normal in CS. No one told me that everyone goes through it, that the learning curve is so steep you can’t even seen the first base camp when you start climbing Code Mountain. All you see is clouds.
I finally picked up Aaron Hillegass’ awesome Objective-C book in 2012. And an amazing thing happened: From cover to cover, I understood it.
Which is how Objective-C became my first (real) programming language.
I spend a lot of time now thinking about how to change this story for future nerds. Why didn’t anyone mention computer science to me when I was in high school? Why did it take so long for me to find the right explanation? What was it about Aaron’s book that made it the right explanation? And why don’t more people talk about the broader context instead of M_PI when teaching CS?
Simplicity in CS is just plain scarce. Addressing questions like:
- What are the basic building blocks of code?
- How can true beginners understand these concepts?
- How can they transfer those concepts to different languages and build on them in more complex projects? (I found there was a true roadblock as I got deeper into iOS, which I overcame by attending the Big Nerd Ranch bootcamp in person, but not everyone has that option.)
- How can they climb the intense learning curve successfully? (Just acknowledging up-front that it’s intense for almost everyone would help.)
- How can they understand what studying computer science means, from a productivity and career-potential and lifestyle perspective, if no one ever tells them?
In short, how is computer science not required by default in public schools yet? And how is it so poorly explained by the vast majority of teachers?
It is not rocket science. And it doesn’t have to be explained that way.