It’s now the start of week 5, which means everything is kinda falling into place now. Hopefully everyone’s classes are all going well. I’ve been oscillating between very busy and very bored for the past 3 weeks while trying to juggle Student Council, job interviews, and research.
Things I’ve been working on in the past few weeks:
Student council is getting back in session with a couple of cool events. Shout out to the folks who just helped organize a successful Reverse Career Fair! Coming up next week is MedAppJam, so if you haven’t signed up for that and are interested in an awesome two-week long coding competition, register now! It’s going to be a lot of fun, so definitely join in on this. My committee is also planning on hosting two workshop series later this quarter. One will be a multi-part Android workshop that will teach you how to make an Android app from the ground up. One session will go over introductory concepts while the other two sessions will go over how to do some of the more advanced concepts. The other workshop we will host this quarter will be a Git/Github workshop. Git, or version control in general, is very important for us cs folk. When we’re nerding away, changing the code in a certain file, we may want to combine these changes with other people’s changes. Rather than email each other our code and manually go through to copy and paste the changes, git allows us to use computers to do the heavy lifting for us. It’s magical. Chances are you’ve heard about it. If you haven’t, you will. So look forward to these awesome events and more to come!
I’m currently doing undergraduate research in machine learning. For those of you who don’t know what machine learning is, it’s essentially getting a computer to find patterns in some data so that it can predict various types of results. A less abstract way of explaining what machine learning is would be to rattle off a few examples of what a machine learning program, once properly “trained” can do:
- Recognize where in a picture there is a face/person/animal/object, if anywhere
- Read your god awful handwriting and recognize what you just wrote
- Understand the meaning of text, i.e., recognizing that certain articles can be grouped together because they are talking about similar things
Among other cool things as well. For humans, these tasks are very easy. A child could do the first task and an elementary school student could probably do the second two. This isn’t so easy for machines since their way of processing information is very different from how our brains process information. A large portion of machine learning consists of treating your machine like a child. You show it these flash cards, or training data, to teach it the right answer to certain questions. Then, you test it to see how it does on questions you haven’t asked yet. (Note to self, don’t sound like this when I’m writing up my research for reals)
Right now, the group I’m working with is trying to recognize where in an audio file there is a gunshot. For humans, this task is easy. Gunshots are very distinguishable, they are loud. Of course, certain false positives like cars backfiring or books slamming down on a table would be tricky, but for the most part, we could do this fairly easily. For a computer to do this task robustly (<- keyword) we employed a bunch of machine learning techniques. After we recognize where in a file there are gunshots, we are hoping to do some other stuff with the data, like recognizing what type of gun it is. An obstacle that we continue to face is our collective non-existent knowledge of guns. Just last night, I had to google a bunch of different types of guns to see what we can have our computers do next. I’m most likely on a watch list somewhere.
Phew, I’m glad I’m done with interviews. I’ve been lucky and was able to accept an offer just a few days ago! The interviews I went through were grueling at times, but it’s always cool to be able to flown to places expense free 🙂 If you’re applying for a job or internship, chances are you have to go through similar interviews. If it’s for a programming or software engineering role, chances are you know how some of these cs interviews go. I’ve only really done cs interviews, so I can go into detail about how these work.
Typically, companies will first give you a first round screening interview, often through the phone. This involves talking with the other interviewer through the phone while at the same time on some kind of collaborative document that you both see. You’ll get some standard questions (Tell me about X on your resume, why do you want to work at company Y, what are you looking for in this internship/job) but the meat of the interview is going to involve you solving some technical questions. Honestly, I don’t like phone interviews. In a face-to-face interview, you can get a read on your interviewer pretty easily and have a good idea of whether you’re moving on the right track or not. This is not the case when you’re on the phone. If all goes well with the 1 or more phone screens (depends on the company), they’ll usually invite you to fly up to their company office or headquarters to go through the “on-campus” interview.
These on-campus interviews generally last all day or a good portion of the day. You start somewhat early (they hopefully will at least partly feed you through out the day) and go through anywhere from 2-3 up to 5 or more interviews. The structure of these interviews are more or less the same as the phone interview, but instead of sitting you down at a computer, you will usually be asked to write your solution out on a whiteboard. Rinse and repeat 2-5 times. Hopefully somewhere in the middle you’ll get a tour of their campus. All in all, it was interesting experience for me, but I’m also kind of glad I’m done with them.
And now for an interview problem: Given a tree or array that implements a max-heap of n elements, how do you find the k largest elements? What would the time complexity of your solution be?
That was a lot. I probably won’t be posting that much anytime soon. Thanks for reading!