Archive for the ‘thoughts’ Category

Grad school?

Monday, June 22nd, 2009

With my senior year of college looming forbodingly on the horizon, I realized that I’m almost at that point where I have to make one of the biggest decisions of my life: I need to decide what I’m going to do after I graduate.

If I were Israeli this wouldn’t be a problem yet. I’d just be getting out the army, I’d go travel for a year or two, then I’d have to make the decision as I prepare to start college. Of course I only know this because I’m here, and
everyone around me is starting their undergrad at the ripe, young age of 22. I wish I could procrastinate it for at least a year longer.

Alas, this is probably not possible. I’ve procrastinated for too long already. However, this is not a lost cause. I’ve made huge strides in deciding that I want to pursue a Ph.D. in computer science, which I guess I decided sometime during this last school year. To read about why I want to pursue research, read this. There are still many questions to be answered, the most important of which is: What area of computer science do I want to devote the next 4-6 years (and possibly the rest) of my life to?

For some people this isn’t a challenge at all. Some people take a class, love it, start research in that area and that’s it. Sometimes, I wish I were like those people, but things didn’t work like that for me. I’ve really enjoyed almost all of the computer science class I’ve taken, and although I’ve only done research in a couple of areas, I can see myself doing research on a variety of different topics. I really enjoy reading about the research being conducted in areas as broad as operating systems, distributed computing, databases, programming languages, algorithms, theory of computation, security, network security, artificial intelligence, machine learning, and computational biology.

Aside: Actually, I’ve know about this problem for a long time. Whenever some asks me what I’m interested in I generally say “almost everything.” Most people think this is a good thing and I for the most part agree. It’s only if you plan on devoting yourself to one specific area, that it becomes “bad.”

That by the way is a list of candidate fields that I’m considering. There are two observations from this list: the first is that many of the areas are quite related. Like operating systems, distributed computing, and databases are “similar” in that they are often lumped together under the term “systems.” Same with algorithms and theory of computation and of course AI, ML, and Bioinformatics are very closely related. The second observation is that I could work on two of these things. For example, one of my current research projects would probably be classified under programming language security. This is a definite possibility, and something that I currently feel will probably end up happening.

On sort of another related side note: It doesn’t really matter what decision I have to make soon, it’s more of the fact that I HAVE to make a decision soon. Seriously, I’m not even 21 yet. How am I supposed to know what I want to do with my life? This is one of the things that really scares me about graduating (and there are many, many more, but living on my own in Israel is really preparing me to face some of them, and making things a lot less scary in general).

So how do I deal with it? How do I decide what to do in grad school, in my limited time frame of say 3 months?

My research experience has been largely in security, and I’ve been working in bioinformatics for 3 weeks now (oh my god only six more weeks in israel!). I really like both areas, so even between these two it’s very hard to decide. It’s
not something I can directly compare because my experience in each area has been very different. Even with experience, I can’t tell which one I like better, so who’s to say that I won’t like some other area that I haven’t tried equally or more? I don’t have time to get a feel for research in every thing I’m interested in.

So I’ve been stressing out about this for the past week or so, since my parents kindly reminded me that I need to start thinking about grad school. In my opinion, the next best thing to actually conducting research is to read about research, so I’ve compiled lists of papers for each area that I plan to read over the next couple of weeks. It’s going to be a lot of reading but from what I’ve already done I think it will really help me make this decision.

The Language Barrier

Thursday, June 11th, 2009

Everyone speaks hebrew as their primary language here in Israel, and in interacting with people, I’ve noticed a couple of interesting things about languages. Almost everyone CAN speak english, but it isn’t their natural language (it’s kind of like how after only 6 years of studying spanish I CAN speak spanish, but in speaking spanish with spanish people I’ve met here, I’m not very effective at communicating in the language). I don’t have a hard to getting things done here because most people do speak English pretty well, and if they don’t, then there are always people around that can translate. However, in an environment where very few people naturally speak english, it is much harder to connect with people.

Given that I do spend some time in difficult interactions, I’ve been thinking a lot about languages in a variety of lights. Politically, languages can be a uniting factor (like it is in Israel), or conversely in can hinder unification attempts (like in India). Socially, speaking a different language from everyone else does have negative consequences on your relationships and interactions. And lastly, technically, the language that you think or operate in may close your mind to new ideas.

Language as a political tool
When you think about it, Israel is not incredibly different from India. Yeah, India is a much bigger country geographically and population-wise, but both were under British rule until the mid-20th century, both gained their independence around that time, and both are now relatively modern democratic nations (Israel more so and probably India less so). Further, Hinduism and Judaism are two of the oldest religions and both countries have rich ancient histories. Ok, so there are a lot of differences, but one I found interesting is about language, and how it affects the political environment.

There are tons of languages in India and although Hindi is the official language, unification did not come easy. Now, my view is that most kids in India, while knowing Hindi and their native language, are also very good (almost proficient) at English. I haven’t been to India in years so I could easily be wrong, but a lot of Indians come to the US and speak well enough for me to think this. I found some sources that counter this claim, but my friend Vivek, who lived in India for a couple of years recently supports me (but he went to an international school so…). And of course all of my Indian-American friends pretty much “know” just one language, and if they aren’t from an historically Hindi speaking area, it usually isn’t Hindi.

In contrast, in Israel, EVERYTHING is done in Hebrew (Ok that’s not entirely true, a lot of people speak Arabic and you do see street signs in Arabic). Since Israel was founded as a Jewish nation, there weren’t any real problems with making Hebrew the official language (except for the Arabs that were living here). All of the Arabs that I’ve met speak Hebrew fluently now, so here, everyone who calls themselves Israeli is fluent in Hebrew.

In Israel, practically everyone operates in Hebrew, and as a result, there’s more of a national sense of pride here. In India, I feel like this pride is lacking and the diversity in languages seems to correlated. The fact that it is much harder to settle on a national language in India is evidence that India is really diverse, and this diversity leads to less national pride. In Israel, not only does everyone speak Hebrew, but they are the only country where people speak Hebrew. If I were Israeli, hearing someone speak Hebrew would give us an immediate connection, just because we are both Isreali. One of my lab-mates was traveling in Europe with his family and another Israeli group overheard them speaking in Hebrew and the two groups started talking, simply because they shared this language. When he told me the story, he used the words “sense of national pride,” hopefully supporting my point.

Aside: While I’m here, I do the same thing with people speaking English. If I hear some one speaking English with an American accent, it’s an immediate connection.

So it’s pretty obvious that language is an indicator of how diverse a country is, but I never really thought that it could contribute to national pride.

Language as a Social Barrier
So even though I don’t speak Hebrew, I can communicate well enough to get things done here. However, I’ve noticed that I do miss out on a lot of things. As an example, I play Ultimate here and everyone that plays speaks English really well (In fact, many of the players spent considerable time in the US), but they naturally speak in Hebrew. So one time, there was a foul call that lead to an argument (as it is guaranteed to do in Ultimate), but this time the argument took place in Hebrew. I didn’t see what happened during the foul, but I couldn’t even figure it out by listening in. I could only decipher what happened by listening for tone and interpreting body language, from which I only learned a bit about the incident. After the uproar had died down, I asked what happened and was given a good explanation, but in the heat of the moment I could not participate.

Also, I went to a party this weekend and I found it really hard to interact with people. Of course everyone spoke English pretty well, but over the din of the music and in that kind of a setting, most of the people I talked to seemed reluctant to talk to me. Basically, people don’t want to have to think really hard to speak to someone at a party, so conversations are short and I didn’t really meet that many people. The party was still fun, but I definitely felt that I was at a social disadvantage by not speaking Hebrew.

In both of these situations, I felt left out of an experience because I don’t speak the native language here. Of course, if two people don’t speak the same language at all they are unable to connect, but here it’s hard (though not impossible) to connect with people even if they are quite familiar with English. You can have a conversation and build relationships, but it’s hard to share a lot of experiences without a common primary language.

Language as a mental prison
Ok that heading sounds a lot worse that what I’m going to get at. For my first week here, my parents and I sublet an apartment from this guy in Tel Aviv. When we met him, he was really nice and helpful, and in talking to him, I noticed that he used the participle verb form a lot, and in places that I (or other english speakers) would not use it. For example, he said something like: “When I am taking my bike to go somewhere, I usually am not leaving it for long, because bikes get stolen here.” A native English speaker would probably have said: “When I take my bike to go somewhere, I usually do not leave it for long …”, instead of using the participle form.

I noticed him say it a couple times and I’ve noticed a lot of Israeli’s use the participle in unconventional ways since then. A couple of days ago, I asked a friend about it and she said that it’s because in Hebrew they don’t have a participle form, they just have present, past and future. So, when people think in Hebrew but speak in English, it’s hard for them to figure out when to use the vanilla present tense and when to use the participle, resulting in unconventional uses.

So, I started thinking about how language affects how you think, and here’s where the article takes a technical turn. I think in English, so I’m sure my mind is constrained in certain ways that would not exist if I thought in a different language. Obviously, since I don’t think in another language I don’t know how that would be, right? And similarly, people who think in Hebrew are constrained in different ways that I am, like in how they are not sure about participles.

I think this is true for programming languages too. Over the past year, I’ve spent a lot of time programming in Java and Python, and as Java was my first language, it took me awhile to start using some of the more dynamic features in Python. For example, I don’t immediately see uses for dynamically adding a method to a class, and I think that’s largely because I think in a statically typed language. And recently I build a compiler in C++, and when I write in C++, I don’t think to use features like multiple inheritance, because I’m not used to them existing. Basically, the language that you think in tends to restrict how you use other languages, and it may result in you using a paradigm that works well in one language but that is horrible in another.

I’ve been reading a lot about functional programming and have spent a bit (not a lot) of time with Haskell. Everyone says Haskell is “hard” to learn if you’re used to imperative programming languages because you have to change how you think about programming. From this perspective, I completely buy that. It’s hard to get myself to think purely functionally because I’m used to methods having side effects and all of the stuff that isn’t “purely functional.” Since my first programming languages were all imperative, I’m constrained to think in a certain way, and it’s harder for me to think in a different way.

Of course you can get break those constraints, but it takes a lot of hard work in a new environment. With programming languages, I’m sure that if I spend a lot of time with Haskell, I’ll be able to think in the functional way. From observation it seems that the same is true for spoken languages. Of the Israeli’s that I’ve met, the ones that have lived in the states speak english like natives.

And so…
After spending tim here, I’ve begun to understand how important language is from a variety of perspectives. I find it quite interesting and it makes me a lot more excited to finish reading “The Languge Instinct” by Steven Pinker (but I’ve been “reading” it for like a year so we’ll see if that actually happens). I’m starting to think that traveling is really cool because you get to observe these kinds of things only when you dive into a new environment.

Israel II: Traveling vs. Living

Saturday, June 6th, 2009

My first week here in Israel was tons of fun, I got to travel a lot, eat good food, go to the beach, and pretty much enjoy the country. Last Sunday, I moved into a dormitory in Ramat Aviv and since then life has been quite a bit different. Several things contributed to this change, but the net result is that I’ve been spending a lot of time working and I’ve been thinking a lot about what’s going to happen after I graduate. First, why are things different…

I started working on Monday (which interestingly is the second day in the work week; the work week is Sunday-Thursday, Friday and Saturday are the weekend.) and so I’ve been pretty busy with work and I haven’t had the opportunity to travel like I did in week one. My work is really cool. I’m working on finding pathways in gene networks that seem to be linked to a specific disease (Here’s the paper I’m building on top if you’re interested). It’s interesting because the problem we’re working on reduces to Connected Set Cover and I just learned about the Set Cover problem in my algorithms class a couple of weeks ago (see this article for why I think this is cool). I’m working on optimizing our algorithm so we can run it on larger data sets efficiently and so that other researchers will be willing have the patience to use it. I’ve already made some progress in my first week (this is good because my time here is pretty short!). I think I’ll write more about my project (and Bioinformatics in general) as I learn more and spend more time working here.

Another key change is that I’m not with my family anymore. Last week I had people (my family) to travel with, and this week, although I’ve been meeting tons of people, I haven’t made many solid friends to do things with. It’s totally not what I expected but the dormitory isn’t really a social place at all. Although the building is 8 floors with many rooms per floor and they say that it’s full, I’ve only ever seen a handful of different people in the building. My lab-mates and other students say that no one wants to live in the dorms because they’re boring and old (the old part is definitely true). Many students prefer to live at home or in Tel Aviv, and then commute to school. Most of the people that I have met here are international students, but I’ve yet to meet a student from the US, although I do hear some American English every once in awhile as I walk around on campus.

One interesting thing is that in Israel everyone goes to serve in the army for 2 (girls) or 3 (guys) years. Then they all usually take a year off and travel before coming to college, so by the time they start their undergrad, they are 21 or 22. They become a lot more focused on their studies and it makes sense that they as “adults” they are just at a different place in life than college students in the US. Most of the people I’ve been meeting are older than me, and that grad students I work with are much, much older than me (many of them have kids!).

Still, I’ve met some really friendly people and I think this “lack of people to do stuff with” condition will quickly disappear. But since I don’t have much to do, I have been getting tons of work done.

I guess another key change is that I moved to Ramat Aviv, which although pretty close to the heart of Tel Aviv (where we stayed in week one), is completely different from Tel Aviv. Ramat Aviv is a much more residential area and as such, you can’t just walk around and find things to do. There aren’t many restaurants around, so I bought a cooking pot and have been making pasta (yup just like at Berkeley) for dinners. Most of the people I’ve talked to also do the same thing. Yesterday, I took the bus to Tel Aviv and enjoyed walking around there; I visited a couple of open air markets, hung out in a guitar store, and wandered around this huge mall. Despite going by myself, it was really fun to explore the city and people watch. Ramat Aviv is not like Tel Aviv at all in that sense. Although there is a pretty big mall (which supposedly is very trendy), there isn’t much else to do. Maybe that explains why students prefer not to stay in the dorms.

Also, I don’t have a roommate. It’s made me realize how cool it is to live with people, be it roommates, family, whatever. I think I’d prefer to have a roommate I didn’t particularly like than to live by myself. So this especially has got me thinking about what life will be like after I graduate. Hopefully, I’ll go to grad school and have a roommate there, but what if I don’t? I really don’t think I’d enjoy it, but maybe it’ll be different if you have a lot of people around, in your building and such. Here it feels like there aren’t that many people around at all.

I’ve been thinking a lot more about graduating and stuff but I think it may warrant it’s own post. Between writing the beginning of this post and now, I went to play ultimate with a team here and it was awesome. They really made me feel welcome even though I’m not on the team, and I don’t speak their language. I plan to keep playing with them and hopefully make some good friends there. A lot of the players on the team have spent a couple of years in the states so they speak english well. And a lot of the players are pretty good so I should get some decent ultimate in over the sumer. Unfortunately, I am really out of shape, and it’s quite hot/humid here so, we’ll see if I can hold my own on the field.

So to summarize this week, it’s been really different from the last week. It’s been interesting meeting people from places like South America, Romania, and of course Israel. Work has been really captivating, which is really good because I don’t feel like I’m wasting my time. I’m making progress on a couple of other projects I’m working on. As I said, it’s been different, but it’s still been pretty good.

On Learning…

Wednesday, April 29th, 2009

My friend showed me this the other day (yes we’re both computer scientists and apparently nerds) and this kind of got me thinking about how I’m starting to see applications of computer science concepts all over the place, and especially in my other courses. It’s happened to me too many times to be coincidence, and I know that it’s also happened to some of my friends, and personally I think it’s really cool.

Regarding that specific article, I’m enrolled in an algorithms class where we’re talking about NP-complete problems, and in particular graph coloring. I’m also enrolled in a compilers class where we just started talking about code optimization. My friend and I mentioned this article to our compilers professor and he said that we would discuss this soon (and I think soon means on Thursday). I found this totally awesome! My courses are so aligned that we discuss a problem in one and then see an application in another within two weeks of instruction? Amazing!

Of course you’ll see applications of algorithms all over the place; they are kind of the foundation of computer science. For example, today, I implemented a Disjoint-Sets data structure to do run a Union-Find type algorithm for a project I’m working on. And yup, we talked about this structure in detail when we were talking about Minimum Spanning Tree algorithms. The disjoint sets structure was exactly what I needed to cleanly finish what I was working on, but had I been doing this just 2 months ago, I wouldn’t have known what to do.

I think this is why I like my algorithms class so much. Not only is it fun and intellectually stimulating to think about algorithmic challenges, but it’s arguably one of the most useful “advanced” computer science courses (of course it is more useful if you know how to program and enjoy/need to do so). Without thoroughly understanding the suite of algorithms at your disposal, it’s often difficult to find the right solution to your problem (although if you’re lucky/smart you can re-invent algorithms and data structures, I’ll comment on this in a later post). In that sense, to be a good programmer, you have to either spend a lot of time reading books, or browsing the web to learn the techniques.

I guess this is true of most fields, but when I came to college, I didn’t really think it would be true for computer science. I kind of thought that my degree would more or less validate that I knew how to program, but that I didn’t really need to actually go to school to figure that out, I could just read language tutorials online and whatnot. And I think that a lot of people also have this mindset about programming. Many of my friends are envious about programmers because you can get involved in side projects and research without taking a bunch of advanced courses. And yeah, this is true in some sense, but I don’t think you can do your side projects well if you don’t have “advanced” knowledge. Being a good programmer (and more so a good researcher) takes years of experience and also years of learning, just as it does in any field.

This is especially true for research. There are tons of techniques out there and how are you supposed to even know that they exist without reading hundreds of papers? And sometimes you need to take techniques from other completely unrelated fields. In one study, network security researchers used the mark-and-recapture technique from ecology to figure out estimate the size of a spamming botnet. How are you supposed to even know this technique exists? I think it’s really interesting and quite crazy how people even know about the technique, let alone realize that they should apply it in this new space.

At the same time, it’s really cool when you end up doing this yourself. I really enjoy including tidbits of information from the AI class I took last semester in my algorithms homework. For one assignment, I framed running Kruskal’s algorithm as running an agglomerative clustering with some threshold distance at which you stop clustering. In another, I modeled a problem as a Hidden Markov Model (which we haven’t discussed in the class) and solved the problem by running the Viterbi Algorithm. Applying previously learned knowledge to current problems not only enforces your understanding, but it validates that you didn’t waste your time learning some stuff.

So in one regard, I’m always applying things I learned. To write this post, I’m hinged on the fact that I learned to write in elementary school. Every time I program, I’m applying my knowledge of basic programming skills that I’ve been honing for the last two years. There aren’t many situations when you aren’t using past learned information. I just take a lot of the basics for granted and am not really impressed when I apply them. This is almost unconscious behavior, so it’s not exciting to me. I am impressed when I apply the advanced stuff, because I don’t really expect my brain to dig that information out when I’m thinking about something completely different. I don’t think it’s instinct to think of some specific advanced techniques, but it’s not like I’m delving into textbooks to discover them. I guess when you study some techniques in enough detail it does become instinct to recall them in new contexts.

Ok, I’ve started writing really long posts since I picked up this blog again, so I’m going to wrap it up. Here are my takeaways: Learning is super important; it gives you a full repertoire of techniques that you can use to tackle any problem. Without these techniques, you have no hope of elegant solutions. It’s also important to be able to apply these techniques in new contexts, places that you’d never expect to use them. I didn’t really talk about this much in this post, but I may in a future one. Keep reading about your field, I think you’ll quickly find that you are not wasting your time

And so it ends…

Saturday, August 16th, 2008

Today was my last day of my internship at VMware. If you don’t know what they do, definitely check them out; they are probably one of the coolest tech companies around. My internship experience was pretty amazing and I was surprised that I was kind of sad to leave work for the last time.

I think one of the things that I’ll miss the most is the people that I met, and the conversations that I had with them. Not only did we have technical conversations, on subjects ranging from startup ideas to computer architecture and AVL trees, but we talked about golf, foosball, movies, our homes, our schools, and pretty much everything else you can think of. After spending 12 weeks with the same people, seeing them every day (or every weekday), you end up becoming pretty good friends with them, and then all of sudden work ends and I may never see them again.

But on the other hand, now I have friends all over the US. I met people from North Carolina, New York (a lot from New York), Michigan, Minnesota, and of course other parts of California, and it’s cool because some of us may end up working or going to school in the same place and it would be pretty good to have someone I know wherever I end up.

And of course there was the technical part of my internship. I feel like I learned so much from the experience, but not necessarily about computer science. Rather, I learned what working for a company is like and how being a developer is very different from being a computer science student or researcher. I think there’s enough to talk about here that I’ll leave it for a future post. Actually I think there may be several more posts about my internship, as it was the single most significant thing about my summer.

Anyway, thanks a lot VMware (the company and all of the people that I met). The experience was amazing and I would love to be able to come back later on.