views:

3808

answers:

10

I'm a rising senior studying CS. I'm going to be taking the Senior Project course at my university. I already have a couple of ideas, but was curious to hear about ideas from others. I'm kinda leaning towards something systems related (operaing, distributed, web app, whatever), but I'm also interested in programming language theory and computer graphics.

Some of the ideas I've had...

  • Distributed Cache / Hash Table
  • Some sort of message queue/system (like Amazon's Gossip Protocol)
  • adding a (Hindley-Milner?) type inferencer to a programming language
  • comparison of various subdivision techniques (?)
  • something to do with texture mapping
  • a ray tracer
  • a small, functional programming language (with a couple of novel features)
  • a web app (no idea as to its function, but web apps are fun!)
A: 

Think about what you want to do in the future. If you wish to be an academic then pick a topic that you know you will be able to write a good thesis about.

However if you have a particular company or skill you want to get, then challenge yourself and pick out a topic that will get you into the position that you want. I know of an academic who wrote a thesis in search, and as he published it he was immediately hired and all research was purchased by google as he graduated. He doesn't have to work any more...

Spence
A: 

To add on to what Spence said do something that you will be proud to show off. I can't speak as a industry professional as I'm only going to finish my undergrad studies in two weeks but I think it would be good to have something that you can show off to prospective employers (or grad schools I guess) so that you can say "Hey look I can do this stuff! It's not just book learning. I actually know how to code, design, plan, manufacture, etc etc).

As for topic itself, pick something you're interested in.

May I ask what university this is for? We don't have a Senior Project class here at UC Berkeley, or if we do I totally didn't know about it!

royrules22
+2  A: 

Adding on my piece of advice: Have users. Your mom, your friends, that sort of creepy guy who hangs out just a little too long in the dining hall--it doesn't matter. Just get people using your software. Nothing else will tell you whether or not you've written something worthy of real world use.

Eric
Why was this downvoted? It's good stuff
royrules22
A: 

If you do research in programming language theory or computer graphics, expect to move more towards academia. Of course, you could help write graphics drivers if you delve deep into the subject.

However, systems related work will help to land you jobs in the particular area of interest you decided to investigate in your senior project.

What part of programming language theory are you interested in? Are you interested in the way compilers create the machine code? Are you more interested in the syntax of a language? Another possible direction to look at for programming language theory is the automatic generation of code. This is something that some professional tools already do but that can also be frustrating to use.

Again, for computer graphics you could try your hand at writing a graphics driver, although it depends on what specifically you're interested in.

Because you're leaning towards systems, I suggest coming up with a practical application of a distributed system, web application etc., something that could possibly either benefit the school you are at or a tool that you feel is missing in the real world.

AlbertoPL
+2  A: 

As someone that is planning on taking a similar course, i'll give you a few bits about how I plan to approach such a project.

1.) Pick a topic that you don't know anything/much about but have a desire to learn.

This shows that you can a.) Learn outside of the classroom. b.) Have a desire to learn new material on your own. c.) You are passionate about programming. NOTE: Topic can also include a new programming language.

2.) Select a topic that is at least someone related to your career goals post-graduation.

Want to program video games? Write a game, physics engine etc. that demonstrates your passion for that area of programming.

Want to do web development? Come up with an idea using a new framework, database, etc. that you haven't used before.

Goals for a senior project:

-Learn something new to add to your resume, including the use of something like SVN, another IDE, etc.

-Show that you can work on projects that require planning and more than a few days worth of work.

-You are passionate about programming and willing/able to learn new technologies.

Hawker
+1  A: 

Given my background, and given that it's a CS major and not an Engineering nor Software Engineering, I'd probably leaning towards solving (or attempting to solve) a research problem, such as natural language processing or computer vision. Given that you probably would have at least a basic introductional subject on the topics, you may want to try to go beyond what is taught in the text book by attempting to use a method not covered by the syllabus. In a way it kinda shows you have the capacity for self-learning. I would suggest avoiding web apps, unless it has good idea, because it's very common to see web apps and it's relatively easy to get started. And even if your web app is well developed, people might find it boring because everyone else is developing a web apps of sorts. Experience taught me that if you have a project title that is completely incomprehensible to most people, it'll probably get you a better grade, though that's probably cheating.

Hao Wooi Lim
Wait. You are saying that CS major is not considered as an engineering major? I've been seeing software engineering as a subset of computer science.
bLee
Software engineering is a subfield of CS. But CS is definitely not engineering, it's more like the study of means to problem solving that is efficiently computable by a computer.
Hao Wooi Lim
A: 

Most of the topics in your list are pretty well covered by "prior art", however, I think distributed cacheing is an area where there is still much basic work to be done, and, where there is pent up demand for something that "just works" in this area.

My partcular "sky hook" application which I would have used in several projects if it actually existed would be a library that implemented the shared memory API over several servers.

James Anderson
A: 

Build something fun. All of your other classes are (should be) hard enough — build something that you think is fun and that other people think is fun. Everybody and their brother has written a raytracer.

How about a networked version of a board game, like Settlers of Catan or Carcassonne? You'd write client/server networking, a game protocol, some AI bots, some UI code, and lots and lots of tests. See if your friends can beat your AI.

a paid nerd
+1  A: 

Write an operating system kernel.

Put it on a public ftp server.

compete with Linux.

Alterlife
And in addition:4. ???5. Profit.
Alterlife
Score: 4; Funny
Here Be Wolves
A: 

A Load of Ideas:

  1. Distributed genetic-algorithm system.
  2. Comparative implementations of a simple web app using various frameworks.
  3. Develop a practical implementation of one of the many academic/theoretical image processing techniques found in CS journals.
  4. A novel/de-novo spam filtration system.
  5. Procedural college-level math-textbook-problem generator.
  6. A stochastic programming language.
  7. Cryptographic system proposal designed for the (eventually) coming quantum-computing world.

Enjoy!