It's Not Just You: Tech Is Systematically Excluding Beginners
A computer programmer explains that it’s not your fault you’ve struggled to learn to program.
What does “void” mean in the context of computer science?
If you don’t know much about computer science, you’d understandably find the question impossible to answer. A void is like emptiness right? Creepy, vast darkness? “Why would this word be used in the program I’m writing?” any beginner could reasonably ask.
On Stack Overflow, “the largest, most trusted online community for developers to learn, share their programming knowledge, and build their careers,” the highest-rated answer to this question goes:
“Basically it means ‘nothing’ or ‘no type’.
1. Function argument: int myFunc(void) -- the function takes nothing.
2. Function return value: void myFunc(int) -- the function returns nothing
3. Generic data pointer: void* data -- 'data' is a pointer to data of unknown type, and cannot be dereferenced”
Are you lost? I was too. And this, by the way, truly is the best answer on the page. There is barely an answer to the meaning of the term in this context, and no answer at all to why one would use it. All that is provided is how to use it. While this information is useful, it assumes a base level of knowledge that is absent (or, in this case, void).
The Subtle Gatekeeping in Computer Science Education
On Stack Overflow and other resources for accumulating computer science knowledge, there is both obvious and non-obvious gatekeeping. Gatekeeping is when a certain group of people, or individuals from a group, exclude and alienate outsiders who wish to be a part of the group. The obvious gatekeeping is when community members spew the following rhetoric in response to a fairly basic question: “Pick up a good C++ book like the rest of us,” or, as it’s often simply put, “Read the fucking manual.” It’s cyclical hazing that has become an industry standard.
The old guard of computer science was taught by their predecessors that learning these concepts is a struggle—that no one will help you, and you must figure it all out yourself. While there are definitely people who respond to that sort of tough-love education, to imply that it’s somehow necessary to learn computer science totally neglects the pedagogical progress we’ve seen in education and academia in nearly all disciplines.
The other form of gatekeeping is a lot less in-your-face. It exists through assumptions, and the resources and documentation provided to programmers to serve as reference materials, like an encyclopedia for that language. When one studies computer science formally, in a traditional academic setting, you’re not only taught how to code, but how to further your learning. Informal computer science learning, outside of a traditional classroom setting, requires not only teaching yourself how to code but also teaching yourself how to learn and creating your own curriculum. As a non-expert, this is discouraging and damn near impossible.
Learning Should Be Easier to Learn
There are a variety of barriers that stand in the way of a computer science education for many learners, most of which are exacerbated by learning outside of a traditional university setting. These barriers can be economic, whether it’s paying for a college program or having the time to devote to independent learning. Many programmers from different backgrounds also still have to work significantly harder to be taken seriously in the field. (A close friend once told me of a professor saying in class that computer programming is not a good career choice for women because coding can be frustrating when encountering bugs and women are too “emotional” and will just want to quit.) And lastly, the materials provided to computer scientists are often effectively inaccessible. As an educator who teaches computer science and other tech skills to teens with disabilities, I encounter challenges every day where the resources provided have little to no consideration for differently-abled programmers.
I began learning computer programming on my own. My public high school didn’t offer computer science programs, so like so many others, I turned to free online programs like Codecademy’s Python course. While Codecademy and programs like it are definitely great tools for learning basic comp-sci concepts, they’re not enough to give a programmer an entire language at their fingertips. They don’t set a learner up for success once they go off on their own. This is where reference materials should come into play.
Computer science reference materials aren’t self-explanatory, and should not be assumed to be. Not all those who desire to learn computer science have the privilege of being shown how to operate the reference materials they need. Additionally, no particular language is obligated to show newcomers how to use reference materials and documentation, so none of them do.
My gripe here is not only with how informal learners are taught but also with the standards in place for reference material and documentation, which lack any semblance of pedagogy. Reference materials should encourage their own obsolescence, meaning they should be structured to be used less and less frequently as time goes on, just like crutches in a physical therapy context. In practice, however, these tools do not encourage their obsolescence, but rather encourage dependency.
When a learner sees a page with everything they could possibly use within a language, it’s easy to feel overwhelmed. If you spoon-feed the entire language piece by piece to someone, Codecademy style, the language could be obsolete by the time you’re done. This is where formal educators can bridge the gap. A good educator will teach their students how to teach themselves. This gap is significantly more treacherous and discouraging to cross without an expert to guide an informal learner. Despite my grasp of Python syntax, I personally never felt ready or confident enough to develop my own project until I learned Python in a formal context and was taught the tools to teach myself.
We Need to Make Tech Education More Accessible to Informal Learners
I don’t want to discourage informal learners, but rather acknowledge the inequity they face in educating themselves. I’m also calling for the systematic betterment of computer science communities and the resources they provide for newcomers, who frequently do not have the privilege of university education. These communities and resources can also alienate learners with physical or cognitive disabilities and non-native English speakers, by providing inaccessible documentation.
What’s the solution? Is there one? Systematic change is always a wicked problem. It will never be as simple as a single tweak. This problem requires fundamental adjustments to individual attitudes, educational and corporate structures, even political ideologies—I could go on and on.
I think the fundamental takeaway for those of you who do have programming experience and exist within the aforementioned communities should be this: Always strive to make the experience of learning what you’ve learned easier than what it was for you.