Programming: building blocks

Advertisements

Being competent vs. appearing competent

I was speaking to a colleague, recently, who mentioned how frustrating it was to train a new research assistant (RA) at the lab I work in. We were both training this new RA in different tasks that occur in the lab and we found an interesting attribute that truly detriments training.  The new RA seemed to be afraid of appearing incompetent.  This makes sense. This new person probably wants to ensure us that she was the correct hire.  However, this makes it really hard on us as trainers.  Because of this fear, she never asks questions to clarify anything that might be confusing.

My colleague and I get the feeling that she doesn’t quite understand all of it, but she insists that she does (which is possible, but its best to ask the questions now, just in case).  Another problem with this fear is that the new RA does not seem to contribute much individual thought (most likely in fear of saying something that is incorrect).  Without these contributions, its hard to judge whether she will perform ok on her own, unsupervised.  What if something comes up that needs to be solved?  We have no way of knowing if she will be up to the challenge because it seems as though she only responds well to directions.

From the trainer’s perspective (which is probably close to the employer’s perspective) its better to admit incompetence and actively try to achieve competence than act competent.  We really just can’t tell if she is learning anything. Whatever competency level she is at, it doesn’t look as though it will improve anytime soon.

Work on cool projects

A few days ago, I came up with a piece of advice: join the club that does stuff. Don’t waste your time with the “prestigious” society (unless it’s also does cool stuff). What stuff? Stuff that expands your skill set or helps your create something. The example I gave was to join a club that builds programs rather than a programming honor society.

I think it’s a good piece of advice. Why?

  1. You gain skills AND connections. The skills are something that you won’t gain in the average prestigious group, and you get the added bonus connections who are already working on the things you would like to do.
  2. You are already doing interesting things. People who do interesting things tend to gain power, but people with power might or might not start doing interesting things. If you want to do interesting things, you may as well cut the middle man and get started now.
  3. You build your resume with substantial projects. Typically, people say something about prestigious societies looking good on your resume. Do resume-builders really help your resume? It doesn’t seem to me to be true now, and I’m not sure if it ever was. It seems to me that it’s something that took hold as a results of college applications. Now, in college admissions and in job applications, taking the initiative to make substantial contributions to projects seems to be more important. I’m not sure about that, but it seems like it. It’s worth observing, at least.
  4. It’s more fun. Focus on a cool project, and enjoy your time in college. Don’t fracture your time with 5 different groups that each add little to your life.

Individual Research

It seems to be taken for granted that research should be primarily a single-person effort. Even those projects with large teams seems to be broken up so that each contributor provides one component of the whole project and contributes very little to other people’s components. This may be a misunderstanding of how research is actually performed, but it seems to be the case.

Why do we do this? Why don’t researchers work in teams of two on any given topic? It seems that we could do better if there were teams each working on the same problem. Free market economies have demonstrated that multiple solutions from multiple sources tend to yield a better overall answer to any given problem. In research, this is done on a larger scale between different researchers at different universities, but on a smaller scale, what about putting two people on the same task in the same research group? I think that students could help prevent each other from getting stuck.

It might be tough to support two students on the same project, however. Additionally, it might be tougher to give the appropriate amount of credit to each participant (which is a big deal in research). I think I’ll ask around in grad school.

Summer fun

I will have approximately 3-4 weeks this summer between finishing undergrad and starting research in grad school. How should I use the time? Well, I want to relax. There will be a lot of time spent lounging, which I look forward to after this rather crazy semester.

I also want to do some interesting intellectual activities too. I want to hit a perfect sweet spot with enough fun intellectual activities that I can accomplish them and still recharge completely.

Here’s my tentative list:

  1. Figure out pointers and some advanced object orientation concepts. These are some issues that came up during my research work, and I’m really interested to figure them out. The test: I believe that when i can pass a matrix to a function using pointers and when I can build all of the functions in my program using OO concepts like inheritance, I’ll understand them.
  2. Learn lisp. Lisp is a programming language. I already know C++, Matlab, and Labview pretty well, and I have heard that lisp is eye-opening. It’s also supposedly a very powerful language. It sounds really interesting and fun.
  3. Rewrite my CFD program to be clean, readable, and bug-free using the techniques learned above.

It’s a short list. I could theoretically do #1 and #3 in a single day. I also believe that I could learn lisp to a decent level in just a couple days as well. I’m excited.

Take an Active Role in Your Education: Play Games

The worst thing about education today is that it is a gift.  Teachers provide and students receive (usually in a lecture format).  Students rarely take an active role in their education and, if they do, it is a small role.  By active role, I don’t necessarily mean “initiative.”  What I mean is, “action.”  Homework, doing a problem in class, or debating in a class discussion are a few examples of what I mean by “active role.”

From my own experience, I have found that I must take a very active role when I am trying to process information.  Merely listening to a lecture is usually not enough.  If it isn’t stylized as a discussion or if there isn’t a problem to be solved, most of the information escapes me before the end of class.  Upon further reflection, it became clear that the best way for me to remember classroom content is to process the information and the best way for me to process  information is to have a reason to.  For example, in discussion based classes, an argument is constantly being formed.  As the teacher talks, I analyze why the teacher’s statements make sense (or don’t) and then prepare an argument for my analysis on the presented topic. By vocalizing out loud, I hear my words and can confirm (and occasionally deny) the sense and completeness of my own sentences.  In classes where there are problems to solve, a similar thing happens, I obtain information from the teacher, attempt to apply it on paper and, as the teacher goes through it, I confirm or deny my thoughts and hypothesis about the information I just received.  However, sometimes when teachers use practice problems in class, they give step by step instructions and I passively copy it down. (I would like to note, however, that traditional lectures are enough to receive an A in the course, and/or write decent papers on the topic.  The problem I am stating is, though I receive information, I am not learning much from it.  I cannot apply it, but I think it would definitely be useful for trivia night).

This may be because I am a lazy student and its my fault for not paying strict enough attention to the material coming out of the teacher’s mouth.  However, I think it has more to do with the fact that I am trying to listen so hard or taking notes so ferociously that I don’t have any time or brain space to understand the information.  In my attempts to gather all of the information presented in class, I accidentally lose it all.

However, by making information processing (which I will define as making sense of ideas through problem solving) a priority and giving information gathering a more passive role, learning will be much more natural.

This problem solving/information processing aspect is what makes games so engagingly addicting compared to school work and lecture.  Any good game is intellectually stimulating and challenging, which is one of the main reasons why it is so fun (to those who call video games brainless, read this article).  In games, there is always a reason to think.  In lecture, the primary goal is to hear and focusing on hearing, which often makes me think more about hearing and how it works, or how incredible it is that humans developed such complex and useful language skills.  Even in the most interesting lectures, I occasionally get distracted.  In games, the level of focus is extreme.

Although I would say that I am more of a gaming enthusiast than others (for me personally, I am including videogames, card games, boardgames and puzzle games), I don’t think my addiction to them is an odd phenomenon.  I think many demonstrate  symptoms for this addiction and those that don’t haven’t exposed themselves to the germ enough.

Try this: MinecraftEDU

The problem with current-generation MOOCs

MOOCs, or massively open online courses, is a platform for knowledge delivery. In their current iteration, they are lectures and videos and assignments placed online. MOOCs have been hailed as a great revolution in education. I do not agree. The MOOC certainly represents an advancement, if only because resources are available much more widely as a result.

But they are not what they could be.

So, first, why do people think that the MOOC model will revolutionize education? There are several great reasons. (1) They place courses online, where content delivery is much cheaper (a big issue with ballooning tuition prices). (2) A MOOC can be taught by the best professors in the world. The Feynmans and Lewins of the world could be the physics teacher of everyone in America! (3) you don’t need to worry about enrollment issues like too many students needing to take the class. Those definitely represent advancements over certain elements of the brick-and-mortar.

However, it is too reliant on the old model of lecture->practice->test. This is a pretty unengaging model of learning, and regardless of its method of content delivery, people miss a lot of information in this style. Because of that, I don’t see this current iteration of the MOOC replacing the classroom element.

With a few tweaks, I think the model could be improved significantly. What about, for example, a model where tests, practice, and lectures are interwoven seamlessly? Something more like the video game model (for a single topic): instruction -> test -> test -> instruction -> test -> test