colors ↓

:: blog

June 15, 2008

Gradschool is no more

by rz

At least for a good while. I guess life is what happens to you while you make (or execute?) plans.

My spirits are similar to those experienced by fellow physics-grad-school-drop-out turned entrepreneur Andres from octopart when embarking in his new endeavor. Main difference is that I don't see my life as languishing in mediocrity because of being in grad school. In fact, I'm leaving with a heavy heart and a great deal of nostalgia to pursue what is obviously a better path for me for the immediate future.

I'll come back one day.

March 30, 2008

(the) Need to Know

by rz

I'm not half as cool as to have Greek heroes and turtles, so I'll introduce Steve in their stead. He is a real person. He goes to graduate school with me. But, otherwise he is my diametrically opposite evil twin. We've had almost-heated arguments on things like public health care, US foreign policy, ethics, economics, and we always seem to take opposite sides. Maybe I exaggerate. Whatever.

Steve: May I ask you a philosophical question?

rz: Are you talking to me? Oh dear lord. Only as long as you promise me that I'll be done "answering" before tomorrow morning.

Steve: So I was tutoring this girl for one of her engineering classes, right? CS 111, I think. She was having problems implementing a list in C++ which grew in size if you stored beyond its capacity. And frankly, I wasn't really sure how to do it either because I always just use a vector and be done. Why do they teach stuff like that?

rz: Did that stop you from charging her? Wait. Don't answer that. Well, assuming you are asking me why isn't she learning more about practical, real-world, off the web-shelf, open-source library based programming, it probably has to do with the CS department's need to balance between teaching practical tools and teaching computer science in the "it is as much about computers as astronomy about telescopes" sense. It is a mighty difficult challenge because both tend to be called "computer science" for undergraduates, but both are fields in which you can do research in and they are quite separate from one another. In any event, it is probably good for her to understand how to build such a thing because a) you learn by examples and b) it is good to understand the most common tools to use them properly. By having her do it the teacher accomplishes a) and b) in one fell swoop.

Steve: Whatever. This girl is an industrial engineering major. She'll never have to program again in her life. Why should she have to deal with such mundane stuff as pointers and memory allocation to implement something that is in the standard library?

rz: First off, why is she even in the class if she is sure she won't ever need to program again? If it is required there probably is good reason for it. For example, if you are engineer you'll probably program at some point in your life. Secondly, she should learn in as much detail as possible. That's what we mean by "education". Maybe by doing that she will learn that she likes programming better than industrial engineering. Maybe to learn how to write elementary programs will save her a ton of time later in life. Maybe she should just do it for the joy of learning and broadening horizons. Which I thought was the other reason people came to college, by the way.

Steve: Whatever. I take a more practical approach: figure out what I need to know and move on.

rz: Uh... If you think like that why do you need to know anything? Why do you study physics? You could get by (and probably make a lot more money) without finding this higgs thingie you'll spend the better part of the next five years looking for. Of course, the only real proxy for what to learn in depth and what not is your interest, but for someone who is in the first couple of years of her education it seems important enough to try subjects even without having interest in them just for the sake of finding what she is actually interested in. Heck, exploring is probably good even for people at the stage we are at and even later on. I think a fundamental problem with the education system is that education is treated as if it was a mean to an end rather than a self-exploratory adventure of its own worth.

Steve: Pointers in C++ are not that deep.

rz: Sure, sure. I like practicality as much as the next guy. Well fine, maybe that's not true. Anyways... practicality has its place. I'm not suggesting that she goes to learn about functional programming when she has a multi-part project due in two days for the joy of exploring, but in general learning new things just to know them or just to try them is half the reason to go to college or pursue any type of education. Let me rephrase that. Learning new things for their own sake is one of the things we mean by education. Wait. One more time.

Learning new things for their own sake is one of the things we ought to mean by education.

February 23, 2008

Time Management

by rz

I've been struggling with personal productivity as of late. I seem to not be able to get too much done. However, the situation has been improving slowly and I thought I'd share the things that have been working.

I started by reading Aaron Swartz's personal productivity guide. It is full of good advice, so I won't try extracting any of it here. It is worth the read.

Optimization

People often don't understand my obsession with having, knowing and using keyboard shortcuts instead of my mouse. Said obsession kicks in specially when I am writing web-related code and the reason is as follows. Using keyboard shortcuts I've already memorized it takes me less than a second to: save a file, switch desktops and refresh the browser. Using the mouse the same task expands to 4-6 seconds. Don't believe me? Try it! Worse if you are using a touchpad. I've heard the retort so often I can hear it in my head "oh wow you saved all of four seconds!" Well yes, I performed a trivial task five times faster. The kicker is I perform such trivial tasks 50 to 100 times an hour. Well whatever, 500 seconds is less than 10 minutes. But hey, that's enough time to take a break and read your favorite comic strip. The relevant part, though is that a good stretch of coding lasts 8 hours or more. In that case, knowing my keyboard shortcuts saved me 30 minutes to an hour. Enough time to go grab something to eat or call a friend to catch up. All these time-savers may not seem too significant but they compound and in the end they save a lot of time that would've been wasted otherwise.

More important than saving time with the keyboard while programming, though, is that every day life is full of trivial tasks. Some repetitive, some not. I quote this pamphlet about how to study physics to make the point:

There are 168 hours a week. Of these 168 hours you will be asleep for about 60, dressing and eating for about 20. If you take Saturday afternoon off for a hike, consider Sunday morning and afternoon as time off from studying, and have two four-hour dates a week, you have about 68 hours a week for work. If you are in class and laboratory for 20 hours, you still have 48 hours for study. It seems like a tremendous amount of time, doesn't it?--especially considering that you've taken off half of Saturday and most of Sunday. Just where does all the time go? A great deal of it is lost in ten-and twenty-minute idle discussions, time wasted during the twenty minutes while you wait before a class after you've needlessly spent another twenty minutes walking to the post office and back for a stamp you could have picked up just as easily on your way back from lunch, and so on. It is up to you whether you want to make good use of these numerous ten; twenty, or thirty-minute intervals. I'm not urging that you never take a minute off to enjoy life, but there is certainly little danger that you will use your time too efficiently.

You can save a significant amount of time by optimizing when and the way you perform the trivial tasks.

Secondly, Make the most out of the down time. Use time you spend walking to talk to old friends or listen to a podcast. Listen to the news while you get dressed. Read on the train. That kind of a thing.

There is a bigger point about optimization, though. If your workflow is smooth and efficient you are more likely to gain momentum as you do things -- efficiency brings more efficiency. The same thing happens at a bigger scale with your days: if you get a lot done today and you feel good about it chances are you are going to be in high morale tomorrow to repeat the feat.

Projects

You can essentially sort everything you have/want to do by the order of magnitude of the time you want to spend on it. Roughly it goes like this:

  • things that will take a few weeks to a couple of months
  • things that will take about a week
  • things that will take a few hours
  • things that will take about an hour

I will call the things that fall on the first class projects. Nobody should have projects that take longer than a few weeks: if you do, split them up into smaller projects. Keeping things manageable is crucial to getting them done. You need to be able to wrap your mind around your projects in order to get them done efficiently.

Failing to plan is planning to fail.

It is easier to wrap your head around a project if you devote some time to think about how you are going to do it. Duh.

The larger a project is the more planning time it requires. Of course, it is easy to run into diminished returns so having a hard limit on the time to put into planning is probably a good idea. Also, you don't have to plan it from beginning to end in the same amount of detail. Just from beginning to reasonable milestone. It is ok if all the details about how you move forward from that milestone are not yet clear so long you spend some time figuring that out once you get there. It'll be a lot easier to plan how to get to the second milestone after having reached the first. The balance is to plan enough so that you always know what the next step is and why you need to do that step.

Knowing exactly what you do next will have a significant effect on how quickly you get things done.

Back to the circus.

In reality you will seldom have just one project you are working on. Again, having someone else make the point I'm trying to make:

One metaphor I found useful is the following: Organize your tasks as if you were juggling them. Juggling several balls requires planning and skill. You must grab and toss each ball before it hits the ground. You can only toss one ball at a time, just as you can only work on one task at a time. The order in which you toss the balls is crucial, much as the order of working on tasks often determines whether or not you meet all your deadlines. Finally, once you start a task (grab a ball) you want to get enough done so you can ignore it for a while (throw it high enough in the air so it won't come down for a while). Otherwise you waste too much time in context switches between tasks. Do you see jugglers try to keep each ball at the same height above the ground, frantically touching every ball every second?

Make sure that when you plan a project it is split up in tasks that you can juggle along with tasks from other projects. Also, plan enough so that when it is time to grab a ball you don't have to think about how you are going to throw it.

Avoid context switches as much as possible. It takes time to save and retrieve the state information of where you left off.

Smaller Things

There is one catch to the sorting things by the amount of time they take. Most things that are worthwhile doing can take an unbounded amount of time. Having your priorities clear is the only way out of this. Once you have decided you want to do something prioritize by making it fit one of the categories in the list above. Out of the categories in the list the ones that give higher priority are the first (projects) and last (~an hour or so). Why the first gives highest priority is obvious.

Putting something in the last category gives it a high priority because you can repeat tasks that take about an hour often and accomplish a lot. You can become really good at playing the guitar if you practice for one hour every other day, you can read a lot by reading one hour a day.

Keeping Yourself In Line

Deadlines and constraints are good. If you are not disciplined enough to keep your own use external ones e.g. I will have x project done on time to show it a this conference or I can only work on x until the coffee shop closes.

Keep tabs on what you spend time on for a little while. For instance, pick an ordinary week and every few hours write down how you've spent them. At the end of the week go through your notes. If you are like me, you will be appalled at the amount of time you waste.

Make lists for everything. You stress your mind by having to keep track of things. Write them down instead. A corollary: always have pen a paper around. I acquired a little notebook that fits in my pocket and made it a habit to have it with me at all times, just like my keys.

Make to-do lists. One scheme that works for me is to make tomorrow's list right before I go to bed. Secondly, midday I revise the day's list and make the "before bed" list. This takes less than 5 minutes. Make the lists ambitious. Not so much that you know you can't do all that but enough that it if you only finish some of the list you still have accomplished something.

Learn to move on. Time is not fungible: sometimes you can do math, sometimes you can't. Sometimes you can read, sometimes you need to relax. If you find yourself having to fight yourself too much to do a task just move on to a different one from your list. If that doesn't work, take a break. It is ok to not finish a day's list or to not accomplish anything on a given day.

Tools of the Trade

I already mentioned a small notebook that fits in your pocket.

This one is obvious, but I thought they were pointless for a long time: get a calendar. Use it mostly for the things that you don't do regularly: meetings, appointments, etc. I recommend using a web-based one you can access from anywhere. I find that backpack works great for me since it has calendar, it allows me to make quick notes, and sends reminders to my cellphone . Feel free to use my referral code if you start using it: K29FGEPX4B ;-).

Develop filing systems. Being able to find information quickly becomes important when you start dealing with multiple things at once. I am terrible at this! I might write a separate post when I figure something that works for this.

April 14, 2007

10 Pieces of Advice I Wish Someone Had Given Me When I Was an Undergrad

by rz

Like with any advice, the best advice I can give you about it is that you take what you feel applies to you and toss the rest. In any event, here it is...

  1. Explore and get to know yourself, then establish your long-term goals as early as possible. Establish intermediate goals to get you there. Formulate the immediate plan. Execute it. Revise your goals. Redo the last three steps over and over.

  2. Lead a healthy lifestyle both physically and mentally. Eat good food, exercise, go outside. Broaden your horizons. Meet people. Learn things unrelated to your field.

  3. Get rid of your television.

  4. You are too young to be bored. If you are bored it either means you are not pushing yourself enough or not living enough (or both). Don't let yourself be bored. Keep busy. Push yourself.

  5. Make the most out of your summers. 15-week vacations will be a lot less frequent later on. A summer without learning or experiencing something significant is a wasted one.

  6. Have an independent project in the back or front burner at all times. Have a book you are reading in your off-time (e.g. while riding the bus). Podcasts and books on tape make for great workout music. Finish one such book every few weeks.

  7. Read the textbook from cover to cover. Do every problem in the book even if that is not required. It is a pity to pay over $100 for a book you never read. Well... there are some books that are just not worth the effort, but at least do this with the ones you know are important.

  8. Be dedicated but make sure you live. You only get to turn 21 once. Make sure your friends tell you what happened. Never spend more than 3 weekends in a row without going to a social gathering and having a great time. Get hammered.

  9. Travel.

  10. Take your education into your own hands. Don't expect that you will learn by just following professor's, university and program prescriptions. Pursue your interests on your own in as much depth as time allows. Then pursue them some more even at the expense of some schoolwork.

December 11, 2006

Machine News Reading

by rz

Interesting read from the Times Online. It seems that computers are going to be reading the news for bank and hedge fund managers so that they can spend their times on other more important matters. At this rate, we will end up with computers doing all our work which reminds me of the following joke.

A very wealthy US businessman is visiting the south of Bolivia when he sees a native farmer just sitting under the sun taking a nap while his field is completely empty and not being cropped.

"Why don't you get to work and plant in your field?" asks the businessman.

"And why would I want to do that, sir?"

"So that afterwards you can go into town and sell your product and make some money."

"And why would I want to do that, sir?"

"So that you can start saving and maybe in a couple of years buy a tractor and bring your production rate up."

"And why would I want to do that, sir?"

"So that eventually you can buy another field and a truck and you can develop a whole corporation based on your product."

"And why would I want to do that, sir?"

"So that afterwards you can start exporting your product and have thousands of employees worldwide. You could be on top of the world!"

"And why would I want to do that, sir?"

"So that afterwards you can just sit under the sun and enjoy life"

"And what do you think I'm doing right now sir?"