Last month, New York City announced a promising new initiative called Computer Science For All, which has the ambitious goal to give “every single public school student access to computer science education within the next 10 years”.

Whenever I hear about these kinds of efforts, I tend to have two thoughts.

First: generally, this is awesome!

Second: I’m wondering though if there is a set of more fundamental skills which we should teach in schools first, i.e. before teaching computer science fundamentals like data structures, algorithms, and programming languages.

I’m thinking of skills such as:

(very) critical thinking

(very) high attention to detail

using very precise language

navigating multiple levels of abstraction

applying logic and reasoning

(list might need some improvement, but you get the general idea)

Here’s why: while it may be possible for many students to learn and memorize computer science concepts to some degree, I suspect that it’ll be very hard or impossible to actually apply them in the real world (outside of a classroom lab setup) without having acquired those underlying skills.

There is just no way to design, write, or test a functional piece of software without an almost borderline-OCD level of attention to detail. Even writing specification for software requires a high level of critical, thorough thinking and the ability to write down requirements, scenarios etc. in very precise terms.

So, should we maybe not only think about teaching computer science, but also find new ways to sharpen those fundamentals beforehand?

I’d love to hear your thoughts on this.

Discussion on Hacker News and Reddit.