One often-unstated purpose of education is to remove fear from students so that they can accomplish more in their professional and personal lives.
People often find themselves limited not by a lack of "natural" ability to do X, but rather by fears of what it might take to do X. For instance, people who fear math might have a hard time managing or planning their personal finances; and people who fear criticism might have a hard time getting feedback on their ideas.
Let's focus on computer science education in particular. What's the purpose of, say, a university CS curriculum? Many professors would agree that it's not primarily to teach specific languages or technologies ("learn Python 2.7.1 with the NumPy module for numerical analysis and the PyMongo library to interface with MongoDB databases!"), since the specifics change so fast. Rather, a good CS education -- whether obtained in a university, online, or self-taught -- should remove crucial fears of using computers and computational thinking, and thus enable students to pick up new computer-related technologies on-demand.
Here are some typical undergraduate Computer Science courses, what fears I think they attempt to remove, and what they hopefully enable students to accomplish:
- Compilers, Programming Languages -- removes fears of learning new languages (both general-purpose and domain-specific), libraries, and other programming tools. Teaching students what programming languages are at a fundamental level and how they're implemented helps them pick the best ones for whatever tasks they're given in the future, or at least make the most out of the ones they're forced to use due to external constraints.
- Operating Systems, Distributed Systems, Networking -- removes fears of gross, grimy, low-level programming; of mucking around with installing, configuring, and debugging idiosyncratic libraries; and of assessing and tuning performance. This sort of "trial-by-fire" hands-on experience helps students develop grit, resilience, and persistence in pushing through difficult implementation and debugging challenges.
- Human-Computer Interaction -- removes fears of receiving design critiques from peers, supervisors, users, and other stakeholders. The experience of finding real user needs, designing, prototyping, running user studies, and continually iterating is useful in many sorts of creative work beyond programming.
- Algorithms, Theory of Computation -- removes fears of hard math, which turns students into more rigorous thinkers and clearer technical communicators.
- Data Mining, Machine Learning -- removes fears of wrestling with messy real-world data sets, which enables students to take an empirical data-driven approach in their work.
- Robotics, Embedded Systems -- removes fears of interfacing software with physical components and dealing with the noise and unpredictability of the physical world.
In sum, if you're teaching a course in the future, think about framing part of its contribution as "What fears am I trying to remove?"