Programming: building blocks


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.

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.

How to get in to graduate school

The graduate school application process is essentially over and my results were pretty good, so I will put everything that I think was useful here. **This will be tailored to a research-oriented graduate school application rather than, for example, a medical school application. They require completely different approaches.**

Let’s think about that in terms of each component of the application: letters of recommendation, statement of purpose/research experience, and transcript/GREs.

Letters of Recommendation
This is one of the most important parts of the application, and for good reason. One common problem among people is that we have trouble accurately judging our own skills. We can say that we are on time, good with people, and so on, but it could be way off. Outsiders often have a better objective view of how we work. Therefore, the letters serve as a sort of litmus test. If your previous professors enjoyed working with you, then there is a good chance that your grad school advisor will too. This idea also explains the tier list for letter writers (professors > industrial researchers > bosses): the closer the experience is to research, the more likely it is that the results will be similar. For example, research in industry is generally less open-ended than in academia, and so someone might be great when there are step-by-step deadlines but struggle with few constraints. That is less likely if you have already had some success in academic research. Probably the best ways to get good recommendations are to take initiative, be interested, follow through with what you say you will, and generally be pleasant to work with (this last one goes a long way wherever you are).

Statement of Purpose
There are three keys to doing an excellent statement of purpose: (1) demonstrate that ***you know what you are getting in to***, (2) demonstrate interest in the specific field or subfield that you are applying for (past research in the area is great for this), and (3) try to show some capacity for self-learning and motivation to deeply understand and publish new insights on a topic.

A few things to avoid: (1) do not talk about your childhood dreams and (2) do not talk about your outside interests. Childhood dreams are an easy (and common) way to start the statement, but admissions committees do not really care. They want to know about who you are right now. Specifically, talk about research and demonstrate passion and a realistic picture of what graduate school will be like, because this is really a research statement rather than a personal statement. They want to see a well thought out topic and purpose for applying to graduate school.

Here is how I did it: I started off by saying that I do not enjoy classes and instead prefer to teach myself. (This suggests that I am comfortable with the self-guided learning that is important in research.) Next, I mentioned the field that I was interested in and why I am interested. (This helps them direct the application to the best professor to read it, and it is a good place to demonstrate passion. Put the field in bold for their convenience, like “… and for that reason I want to work in nanotechnology and energy.”) I also mentioned other semi-relevant interests in one sentence here: “I am also very interested in business and education, and I plan to make each a significant component of my graduate experience.” (It is useful to mention your other interests because people with a variety of interests tend to be more interesting people and they may identify with yours, but do not waste any space explaining them. I literally only mentioned business and education in the one sentence above.) All of that took a little over a half a page, and I spent the next 1.5 pages talking about my past research and engineering experience. It is good to mention what you did, what went well, what you struggled with, and how you improved as a researcher from the experiences. Also talk about the field you want to go into in more depth. Talk about the problems you find interesting and about your ideas and questions regarding those subjects. I spent about a paragraph and a half on that. I finished up with talking briefly about my professional goals and how the school is an excellent fit for both my field of interest and my goals. Your chances of admission go way up if you fit with the institutional culture. For example, if you are applying to Stanford, you have a better shot of getting in if you are also interested in tech entrepreneurship than a similar person who is not. Because of that, you should try to identify those programs where you match well.

As I mentioned, they expect to teach you how to do outstanding, publishable research in graduate school. They do not want to have to reteach what you learned during undergrad. Obviously everyone will have gaps and need to learn new topics, but if you didn’t learn what you studied in undergrad, it’s a red flag that you might need remedial instruction or be a poor self-taught learner. Neither of those bode well for graduate school, where you are expected to learn the necessary background while your advisor teaches you how to do publishable research. In effect, both of these are quick checks for basic competence, but compared to the rest of your application, these are relatively unimportant. A significant reason why incoming GPAs/GRE scores are so high at top schools is due to self-selection. People with a 3.8+ GPA think they have a shot at getting in, so they apply. I have heard several admissions folks say that they barely look at GPAs and GREs, especially at the top schools.

People spend an unnecessary amount of time worrying about the GREs. Keys to doing well: read widely and often for the verbal section, and review basic math and be careful on the math section. None of the math is complex or particularly challenging, but it is easy to make mistakes. Just practice a few times, be careful, and then focus most of your effort on the other parts of your application. It is quite possible to overcome a low GRE score, but it is not possible to overcome a bad statement of purpose, for example.

The takeaways?
1) Understand what grad school will be like. Read a lot about it
2) Get research and work experience that closely matches the components of graduate school. Take initiative in everything that you do.
3) Make sure you present yourself as someone who will be great to work with (and actually be great to work with)
4) Demonstrate interest and know some of the open questions in the field

Note: I’ll probably continually update this with better/more complete advice.

Learning Without Obligation

I am currently in a very enjoyable class. There are no tests and no papers. We are not evaluated in any way for the knowledge that is presented in class. Where do we get our grades from? We are responsible for three presentations in front of the rest of the class: the first is on a chapter in the book, the second is on a research paper related to one of the chapters in the book, and the third is a group project based on a chapter in the book.

Despite having no obligation or responsibility over the material, I have never paid stricter attention than in this class. So, in terms of educational gains, I am learning a lot.

How could this be? Shouldn’t I be relieved and proceed to space out? There are a couple of factors that prevent this:

1. Technology use is forbidden: I can’t play computer games.
2. We have to evaluate our peers’ presentations: there is a minimum amount we need to pay attention to (alternatively, we could just make up our evaluations without penalty, but I don’t and I doubt my classmates do either).
3. There is discussion in the second half of class: there’s a possibility of sounding stupid during this part.

The above factors are not very strong but subtle enough to get the most important factor going:

As it turns out, this class is interesting

Without the obligation of needing to “learn” (or shall I say, “memorize”) terms, when they fit, when they don’t, when its used in a tricky way, or other ways it might be tested, I spend less time taking notes and straining to catch every word and more time relaxing, listening, and making eye contact with the speaker. The amount of effort used to stressfully “learn” is enough to tire anyone to just retreat, chat online instead, and cram later (at least you only have to do it once, instead of multiple times a week).

We run into some problems of course. How can we assess whether a student has learned anything? According to the current syllabus, it is obvious whether or not a student has learned their designated chapters according to their presentations. There is also some evidence that a student has learned according to their participation in the discussion. The second, however, is not guaranteed factual learning like a test might be.

However, what do we want out of a class?

Ask any student and they will tell you that for most tests, they cram hard and almost instantly forget everything they just “learned” once the test is over. Rather than memorizing the facts, perhaps it is more important to learn how to think in context with the subject. How do we solve problems in this field? How can we think about this? What are some strategies to tackle these problems in this subject? In order to answer these questions, facts are naturally needed and learned along the way (and it may encourage individual and extra research from the student). Although, a student may not be able to reproduce every single detail of the class, but is that really important?

Projects are the best way to demonstrate and practice thinking within a subject. Whether it’s an engineering design project, writing a short story, performing a literature review, or conducting a presentation, a student must have a grasp of the knowledge of the class and must know how to use it (which is arguably the important part) in order to produce a good product. Projects that are shared with peers often encourage even better results as their is an added responsibility for students to represent themselves well.

Bonus about projects: it allows a student room to go above and beyond the class’ expectations.

Learning Like Water: The End

I attempted to learn like water this semester of college, and I do not think it worked. Here’s why.

I missed things.

Like a quiz, a final exam, numerous hand outs, and about 60% of the total lecture time.

I am sure that missing a final exam caught your attention. Yes, it happened. One of my professors decided in class to unofficially change the final exam time (with unanimous approval), and I did not hear about it. Since it was unofficial, he let me take the exam at a different time. Phew. I also missed an in-class quiz.

In some classes missing the lectures was a bigger issue than in others. One of my classes had no textbook and the material was pretty obscure (read: tough to find online), so it was here that I had the most trouble. The professor posted about half of his notes online, but I relied heavily on other students for the other half. I prefer not to need to mooch off everyone else’s efforts. I am not sure how to handle this obscure-material problem.

I did not focus well enough.

My original plan was to use class time to study on my own. That ended quickly when I had assignments due right after a class. In those cases, learning the new material took a backseat (who would have guessed?). I have a feeling that the structure is a problem here, but I have not identified the exact reason.

I could not shrink it to two weeks.

At the beginning of the semester, I proposed my compressed-schedule idea to each of my professors. Each said some variation of “you are welcome to get ahead, but you cannot get behind.” In other words, I could only conduct my experiment if I was willing to do a whole class in two weeks AND do two weeks worth of all of my other classes. That would require a huge amount of extra work at the beginning of the semester, and by the time I got to the last class at the end of the semester I would have little left to learn in that class. Not quite what I hoped for, to say the least, so that idea died. Oh well.

Even if the pieces had all been in place…

I still do not think it would have worked too well. I was unable to stay disciplined enough to stick with the program I designed. I have either average or slightly above average willpower, so it probably would be a problem for many other people too. That, combined with the constraints of college classes, makes this seem pretty impractical. But at least it was interesting and it did not hurt my GPA.

Next semester’s experiment.

I still think that lectures are a poor learning tool. What other tools could enhance the value of a lecture? Here is my next plan: come up with a problem to solve during each class. Ideally, it would be a homework problem that I could work on during the lecture on that material, but I may just have to settle for a random book problem which may or may not save me time on homework.

Here are the benefits: class time is spent actively problem solving, I will not miss any announcements or quizzes, I’ll notice the thorny problems as they are taught, and I will be able to use the lecture to reference concepts as I practice.

I will flesh out the details in mid-January before the semester starts. Comments welcome!