Today, I wanted to rant a little bit about the way that folks in the tech community think and offer some possible solutions. Don’t worry! I’ll cover all the philosophy jargon.
Unpacking Some Jargon
By writing this article, I have no intent to flex any sort of academic jargon without at least taking some time to explain it. After all, if you’re like me, then there’s a good chance that words like post-positivism or constructivism are new to you. For instance, I didn’t start wrestling with these ideas until I started learning about qualitative research roughly a year ago
So, what is post-positivism? Well, if you try reading any material about it, there’s a good chance you’ll fall down a rabbit hole of terminology. For example, you might see words like metatheory, paradigm, and epistemology—all of which are steeped in philosophical jargon.
To save you some time, you can think of post-positivism as a particular way of thinking about how the world works (i.e., your set of core beliefs). For post-positivism specifically, these core beliefs include ideas like the following:
- There is only one reality: objective reality
- Bias is inevitable but can be accounted for and corrected
- Knowledge must be justified through the use of evidence (i.e., nothing can be proved, only warranted)
These types of beliefs differ depending on the type of stance you might take. For example, in scientific inquiry, we sometimes talk about other stances (though we call them paradigms) such as constructivism or pragmatism. In constructivism, a similar set of beliefs can be listed out as follows:
- There are multiple realities: subjective reality
- Bias is inevitable and should not be avoided
- Knowledge is all about perspective
While these ideas generally only apply in the context of research, I think everybody adopts a particular worldview that aligns with an existing paradigm. Specifically, I would argue that the dominant worldview in tech education is post-positivism, and I want to take some time today to talk about why that’s problematic.
Kicking Things Off With an Example
Think about the last time you were in school. Perhaps you’re there now or maybe you’ve been out for 30 years. Regardless, you probably remember the frustration of receiving an unsatisfying grade on a test, quiz, or assignment.
Frustration is an interesting emotion because it can have a lot of different causes. For example, you might be frustrated with your teacher because you think you deserved a better grade. Alternatively, you might be frustrated with yourself for not performing better. Personally, I remember getting frustrated when I felt like people around me weren’t working as hard as me but were getting better grades.
Regardless of the cause, one thing is for certain: your work was reduced to a grade. As a society, we’re fairly used to this form of assessment, so no one really complains. That said, I always think about that iconic seen from Interstellar where Matthew McConaughey rants about his son’s future:
Is it truly fair to be assessing students the way that we do? After all, our society has a strong belief that numbers are impartial. If numbers are impartial, then grades are absolute. Surely that test score you got is a strong indication of your actual ability.
Of course, we know this isn’t true. Our ability to perform is influenced by a million different things happening in our lives. And, how many of those things can we control (e.g., study time, the amount of work we get from other classes, health issues, the teacher’s mood, etc.)? Our lives are subject to an incredible amount of randomness, yet we treat grades as some form of objectivity.
This is the problem I see in education—specifically, tech education. Post-positivism is like a virus. It assumes that there is nothing to interpret; everything is at the mercy of some objective truth.
Challenging Tech Education
There’s a tweet I saw today that I think illustrates what I’m complaining about quite well:
When we teach programming, we tend to take a post-positivist framing. In other words, “programming is a hard science.” We do this because we like to project the way computers work (i.e., binary) onto programmers. In other words, there is only TRUE and FALSE—a very post-positivistic framing.
When we think like this, we tend to ignore all of the nuance that actually goes into developing software. For example, as the tweet above eloquently suggests, “a lot things you think are best practice are actually just your opinion.”
I have personally seen this in my own teaching. For example, I have often been required by folks in my department to teach certain “best practices.” One of those practices was the belief that a function should never have more than one return statement.
Immediately, these types of absolute statements should be raising alarms. After all, I can provide several examples of times when multiple return statements might actually be preferred. For instance, here’s a silly example of linear search:
def search(my_list, to_find): for item in my_list: if item == to_find: return True return False
If you try to modify this solution to include a single return statement, you’re in for a bad time.
Even more frustrating, however, was that if a student submitted multiple return statements in a solution, they would lose points. Does their grade really reflect their programming abilities in that case? I’m not sure.
That said, I’m not here to critique specific “best practices.” I want to talk about why this type of thinking is inherently problematic.
Critiquing Post-Positivist Thinking
One of the biggest challenges I had when teaching computer science was dealing with post-positivist thinking. For whatever reason, it surrounded me from every angle. Not only did faculty buy into it but so did peers, graders, and students.
This is particularly frustrating because I adopt a more constructivist worldview. In other words, I believe that beliefs, values, and knowledge constitute subjective reality. For instance, a best practice for you might not be a best practice for me.
As a result, I spent a lot of time trying to convince my students that there are a lot of different ways to solve problems; there is no one right way.
Unfortunately, this belief ran counter to just about everyone I was working with. For example, I told students that they could break rules as long as they could justify it. However, once my graders got ahold of their work, all my efforts were erased. Students were slowly being beaten into submission.
Now, I’m not here to complain about something that happened to me, but I think this illustrates the types of things that must be happening all around the world in tech. Everywhere people are being stripped of their own reality to be forced to conform to “objective reality.”
As I always say, this type of thinking must be forcing folks out of the field. After all, it more or less forced me out of the field. What I thought was a field that was driven by creativity is actually a field driven by rigid structure.
What Do We Do?
Look, I don’t have any problem with style guides and best practices. Hell, I’m not even sure I could provide a better way to assess students. However, what I do have a problem with is telling people they’re wrong for having a different outlook on development.
Moving forward, we can strike a balance between post-positivist thinking and something more interpretive like constructivist thinking. For example, when we grade, we can lean into our biases when we say something is best practice. I might leave a comment that says “I prefer to do it this way, and here’s why: […]. That said, your solution is fine.” Meanwhile, we can continue using post-positivist thinking to grade for correctness (i.e., does the program do what it’s supposed to do?).
Ultimately, however, we have to admit that there is no objectively correct way to write code. At this point, languages are so complex that we have an infinite number of ways to approach a problem. I try to teach this sort of thing all the time with my How to Python and Roll Your Own Python series.
Of course, I don’t expect this sort of argument to be received well with most folks in the community. At the end of the day, the way I think about what constitutes knowledge is just fundamentally at odds with the greater community. That said, I have hope that one day folks will lean into the more human side of development. We’ll be better off for it as a field.
With that said, that’s all I have for you today! If you liked this sort of thing, feel free to give it a share. Likewise, you can learn more about how to join and support our community here. Otherwise, take care!
Recent Teaching Posts
As 2023 wraps up, I figured it was time I finally reflected on my teaching. I know it's been a while. A Quick Overview This year I'm breaking with the tradition of the usual semesterly...
Computer science is a more creative field than academia gives it credit. In honor of that creativity, we really ought to be giving students more chances to create original work and build portfolios...