Thursday, October 24, 2013

Ask Obvious Questions

In the conclusion of my university-driven study of computer science, I've found time to reflect on my courses. I've had good professors and bad professors, good classes and bad classes, classes where I've learned a lot and classes where I've learned a little and classes where I've learned next to nothing.

I've already been making inroads into my career after school, working in small teams to design and build software applications. My last large project for the university is exactly this, working a small team to design and build data processing tools.

But I'm not talking about that here. What I'm talking about is the most counter-productive pattern I've seen in otherwise fine students: a seeming inability to get the information they need to do what is expected of them.

I've on multiple occasions witnessed students talking to each other about how difficult an exam was, talking about how they aren't learning anything in the lectures but being expected to know the information on the test. Tough love requires the love before you can get tough, so I hold my tongue, but here's what's up: if you're not learning in the lectures, that's entirely on you. If the class were just to read a book and take a test, there wouldn't be lectures at all. The value of the professor being right in front of you is so that your questions can enhance what he has to say. If something's confusing you but you say nothing, you gain nothing and you're unlikely to get back on course by yourself.

I sometimes wonder why this happens, particularly in the CS courses I've taken as compared to courses out of other departments, and I think it has something to do with the disparity of skill levels coming into the major. There are people like me, who taught themselves how to code and delight in the problem solving aspects of the coding, then there are people who are playing the game, noticing the average salary of a software dev and making the decision when they get to school that that's what they want to do.

There is nothing wrong with either of these avenues into the field, but this gap presents itself in several interesting ways:

  • Some people who are newer to the field may not be super familiar with the terminology and shorthand for talking about the problems. They become confused when things are written on the board, but they find that when they ask questions in class that others consider blatantly obvious, they find themselves the object of scorn from the people who code in their free time. This is discouraging; nobody likes to believe that they are very far behind the pack, so to save face they hold their questions, telling themselves that they should understand what's being written.
  • The time taken to complete a coding task, whether it's implementing some bullshit network protocol or writing a series of SQL queries, can vary drastically. I'm personally proud of being able to kill atomic tasks in a single sitting, but I've seen others spending literally all of their free time in debuggers trying to figure out why whey are getting the wrong results. I think this is the wrong way to approach the problems period, but I take no joy in telling people who are busting their asses that they were doing it wrong the entire time, so as long as they get "good enough" results eventually.
  • The more you know, the easier it is to learn. This is true across disciplines; I think the best example is language acquisition: If you know two languages, it's becomes much easier to learn a third because you have options of how to remember the words and the syntax. The French "Je sais" is much further from the English "I know" than the Spanish "Yo se." So it is with everything: patterns often repeat, so already being familiar with the patterns makes learning new things much easier. This can further amplify the skill gap, again disenfranchising students.
But here is where the fatal flaw comes into the equation: people are often asking what others are doing, rather than asking themselves what they need to understand what's going on. Making this shift towards making learning a personal experience not only benefits people in the academic field; it's important for one's career and life.

If I don't understand, one of 3 things are generally happening:
  • The explanation is unclear. Either there is information being assumed of which I'm not aware, or it's being presented in such a way that I'm failing to make the leap from what I know to what I'm figuring out. Asking specific questions can literally only help.
  • There's a gap in my knowledge. Whoever's talking expects me to know something I do not know. If this is my fault (like if I decided not to attend class in a couple of weeks) than this is a wakeup call that maybe I'm not so smart as I think, and I'm going to need to find the prof after to catch up on what I've missed. If I don't think it's my fault (and again, I should know if it is) than the speaker has made a bad assumption as to what I/we are aware of, and he must be notified that what he's saying is going over his audience's head, or he'll keep on speaking to a room full of people who don't get what's going on.
  • I'm doing something dramatically wrong, and I need to make a change. There are times when I literally understand nothing, and I find myself unable to follow what a speaker is saying for any more than a few sentences at a time. When this happens all the time, it's a red flag that I need to get out. Not everybody has to be good at all things, and just because something is lucrative or prestigious doesn't mean it's for you. I would recommend anybody who doesn't really understand how loops work after three months of studying to stay the fuck away from CS and instead pursue a career that is more in line with their interests and skills.
This is a really long-winded way of saying that people need to ask more questions to the people who know the answers. I constantly bug coworkers with questions about how X or Y works, even if I can find an explanation online. Why? Because a webpage doesn't know what I need. I know what I need, and if I ask smart people specific questions, they can give me exactly the answers that I seek. I can read the Wiki article on Hadoop, but when I ask people what it is, they can condense it for me, give me an example I'm familiar with, confirm or correct my impressions of if I'm understanding it correctly. That is the value of asking questions, and that is why it saddens and angers me to see my peers falling into the trap of blaming the subject matter instead of grabbing it by the balls.

But ultimately, this sort of behaviour isn't going to be corrected by simply telling people that they can ask questions; they know that. The real problem is that they feel uncomfortable to ask the questions. They feel judged, and sometimes they are right. So it's also important to foster an environment where questions are answered enthusiastically, honestly, and without scorn.

Of course, there's never any magic bullet when it comes to teaching. But I'm afraid that the fairly clear divides between those coming in with nothing and those coming in with a hobbyist's enthusiasm creates a tension that needs to be massaged into harmony by both sides. Those who know more need to be happy to share their knowledge, but they also need to be patient and understand that not everybody has the same experience that they do. Those entering from the bottom need to understand that they are starting at sometimes a significant disadvantage from some of their peers, and that they're going to need to work a little harder to get to the same level of understanding. The desire to catch up is not a weakness, it's a strength.

No comments:

Post a Comment