views:

18947

answers:

26

I'm a Computer Science undergraduate student in UK and should be deciding the subject of my final year project soon. The school is pretty flexible with the subject...

"The topic can be any area of the subject which is of mutual interest to both the student and supervisor. Topics can range from purely theoretical studies to practical work building a system for some third party, although most projects aim to provide a balance between the theoretical and practical aspects of the subject."

...so I'm a bit lost since I want to do something in software engineering but have no idea what (subject) or with what (languages)! :)

a) Languages: I've had experience with Java, C# and ASP.NET mostly but I would definitely be interested in learning new languages/frameworks. I'm kind of drawn by the idea of dynamic languages at the moment so IronPython seems likely.

b) Subject: Anything that will keep me interested through the year and will give me the opportunity to learn a lot of stuff. Maybe something that has to do with music, or a fancy website, or a website about music :P anything really.

Open to any thoughts/ideas, geeky or cool!

Edit: Professors do usually supervise projects in their research areas but I currently have the choice to approach any of them according to my interest - whatever that is.

A: 
  • Object orientation patterns in [dynamic language]
  • Enhancing IDE support for dynamic languages
  • Concurrency in IronPython
Matt Hinze
+2  A: 

If you're interested in music, a friend of mine did a music "search engine" many years ago. You could basically put in riffs or other parts of music and it would work out which pieces in the database matched your input.

I think the final product actually presented a musical sheet into which you could drag and drop your notes to get the search term.

That would be cool, especially as the state of the art (at least in terms of GUIs) has advanced so much since then.

paxdiablo
A: 

A Canvas Tag IDE, something like Flash but without the suckiness. Preferably in Cocoa please so I can use it on my Mac. ;-)

Some nice advantages over Flash could involve,

  1. Back Button Works
  2. DOM Access and Manipulation
  3. No plugin needed
  4. Would work on iPhone
  5. Considering developments in JS engines, it could be screaming fast.

I'll help with the Javascript and UI design if you like.

gargantaun
Why so many down votes? I think that's an interesting idea.
Louis
Because it´s a final year project question, not a brainstorm for a new sourceforge project.(oh, and I didnt downvote anyway)
Mauricio
+14  A: 

I just did my final year project and I have two pieces of advice:

1) Do it in C/C++ if you can, as it's unlikely that you'll get taught it, but learning it before you leave uni is very advisable (If not only for pointer theory etc.)

2) Do something that's hard, so don't do websites. You WILL spend most of your waking life next year doing your project, and if it's too easy you will get bored. Very bored. So try something new and exciting and difficult, for example distributing a neural network simulator (My project, was very very interesting as it turned out), or building a computer vision system for detecting cancer. Whatever you're interested in, but a very hard application in that domain.

If I wanted to do something involving music I'd be thinking more on the classification front, something involving sampling and processing, not just a website that lists people's favourite music, any first-year could knock that out in the space of a year!

Ed Woodcock
Pointer theory? Is that what it's called, these days? hehe! :)
Greg D
Very good points both!1) I've had some experience with C/C++ - definately wouldn't say I'm a pro but nowdays I think almost anyone knows C++, I'm I wrong?2) Websites can be hard :) you can involve a lot of things (Silverlight?) and that's something that would give me the ability to add extra functionality if I see I have enough time.
roul
I agree, websites can be pretty difficult, I do that as a job outside uni, but it's *very* hard to make them SOUND difficult to an assessor, and at my uni that's all that counts, they mark your report not your actual project!
Ed Woodcock
@Greg D Nah, I think I just made up a discipline, but you get my point. . . . =D
Ed Woodcock
+1 for C++/C, that's what I did and even though I've barely used it since I would say it's worth it for the knowledge and experience in brings., +1 for something hard. +1 for not a website. How about something to do with AI composition.
Simon P Stevens
A: 

The wording of your assignment makes me think I went to the same university as you, but I'm not sure if it's the exact same thing for every uni in the UK anyway.

Do you not get a choice of possible subjects to approach? The supervisors generally list ideas for projects that they'd be interested in working on with a student. That's what I did. I wanted to do something to do with music, and my supervisor wanted to generate art from algorithms, so we came to a combination of the two - auto-generated algorithmic music.

An old favourite, is, of course - the path-finding AI, but I fear that's pretty much been done to death at every university in the world by now. I would find a supervisor who shares similar interests to you and ask if they can suggest an area they'd like to see some development in.

TomFromThePool
+5  A: 

Regardless of the subject you choose: I would consider doing any programming in one of the languages you already know (you will be able to expand your knowledge anyway) and try to make it an exercise in project and time management, too. By that I mean try to define clearly upfront with help of your supervisor what it is that you will deliver (and what not) and how long it will take you.

I know it is much easier to jump in and choose a new cool language x and start implementing (thats what I tend to do), but this stuff will help you in the long run.

martijn_himself
A: 

Look at last.fm. It works great when dealing with rock bands. But it completely fails when discussing jazz or classical music, or even rock covers. People usually are keen on some composer, so they are not interested in who is actually performing, but this is true only to some point – some people would only listen to music played by Vienna or Berlin orchestra directed by von Karajan. The difference between Karajan conducting Beethoven’s 5th, and Ormandy conducting the same piece is more subtle the difference between Madonna and McLean singing “American Pie”.
So – maybe you try to design some kind of musical knowledge gathering, and implement some application to gather, search and manage information about music? Seems like good final project for me.

smok1
+4  A: 

1) Do something in Evolutionary Computation. It's pretty exciting even for a novice. Particle Swarm Optimization, Ant Colony Optimization, Classifier Systems, Evolutionary Strategies, Evolutionary Programming, Genetic Programming, Memetic Algorithm or even the old man Genetic Algorithm.

2) Design an effective data visualization tool. See Prefuse/Flare for inspiration. Play around with Processing.org and its multiple extensions.

3) Build something using Eclipse Rich Client Platform.

4) If you like music, play around with ChucK.

5) Make a new problem-specific programming language (ChucK is a great example).

zilupe
+4  A: 

I think it's important to make sure you end up with a supervisor who has a great deal of enthusiasm for your dissertation subject. When I was choosing mine, this was my top priority, as there was one lecturer in particular in previous modules who in addition to being very enthusiastic about the subjects he was teaching us, always found some reason to talk about what his dissertation students were up to and how excited he was by it (even though it had nothing to do with the topic at hand!)

By contrast my housemate did an NLP project with the then head of the department, saw him once a term for progress updates, really got no guidance/feedback whatsoever and got a good mark because the head of the department basically pulled rank on the second marker! On the other hand I had weekly meetings with my supervisor, who was always enthusiastic, always suggesting new avenues to explore and above all was very supportive (especially when the second marker decided I should be going in a completely different direction).

Sliff
Good point, music a subject a supervisor and I share enthusiasm that's why I mentioned it :)
roul
A: 

A Javascript Video player. So something in javascript that can read video codecs and show on screen.

Sorry, I'm on a Javascript trip today.

gargantaun
+6  A: 

I'd very much agree with the advice about learning C, you should really have been introduced to it by now if you've been studying Computer Science.

If you're interested in languages and the like then might I suggest combining the two and creating a Domain Specific Language for some particular problem and then writing an interpreter/compiler for that language in C. See Appel's Modern Compiler Implementation in C or the like. (Or if you don't want to learn C but like the idea of a DSL you can use other languages).

DSLs are pretty interesting to construct and have the advantage of sounding really impressive. I'm sure there is some area of music that could have a DSL produced for it, procedurally generated music perhaps?

Chris
There's a language called ChucK, which allows to generate music. It's a real time audio programming language.I agree with the domain specific language idea.
zilupe
Haskell has a music-specific DSL, called HasKore, however it's pretty nasty =D
Ed Woodcock
+1  A: 

Why not pick up an existing open source project which you like, and try to add to it in a meaningful way. That will help both you and the project.

Yogi
This might be risky because it's hard to estimate one's contribution to an old OS project.
zilupe
+3  A: 

Roul,

I think you can learn alot by taking a problem that is way too difficult for computers to solve efficiently with very large number sets (i.e. O(n!) or even O(2^n)) and implement a heuristic approach to solving the problem.

For instance, say you had 300 students each taking 5 exams each out of 50 possible exams. you could randomly assign students exam numbers (even on different distributions), build a conflict graph via an adjacency list/adjacency matrix and perform a smallest last vertex ordering to heuristically "color" the graph and thus assigning exam slots to exam numbers which do not conflict with each other.

The goal, is to be able to schedule all of your exams in the fewest time slots possible while not having any conflicts.

This is pretty ambitious, but you could probably learn alot from it.

Here are some links to get you started if you're interested:

Graph Coloring: http://en.wikipedia.org/wiki/Graph_coloring
Greedy Coloring: http://en.wikipedia.org/wiki/Greedy_coloring
Directed Graph: http://en.wikipedia.org/wiki/Directed_graph
Adjacency Matrix: http://en.wikipedia.org/wiki/Adjacency_matrix

Good luck,
-Robert

Robert Greiner
A: 

If possible, find something related to the research interests of the person who will be marking it. If they have a book, make sure you've read it. This ensures a helpful relationship with them and reduces the chance that they will misunderstand your project or fail to see why it's interesting.

Check exactly what the marked deliverables are. Make sure you spend lots of time on the report, even at the expense of ironing out bugs.

(This may not be possible in all universities, but certainly in Cambridge final year projects would be routed to the person whose speciality the subject was for marking.

pjc50
A: 

If you like the idea of producing something that will be used widely rather than an academic project that nobody will ever hear about, you could join an open source project and implement a substantial new feature. However, this is only possible with a supervisor that is tolerant towards open source and the fact that your work will not be completely separate from other people's - and with an open source project that is willing to wait a year for a big feature to be completed by one person rather that having several people working on it.

As for a concrete idea - maybe an automatic layout algorithm for an UML editor or a similar application? This doesn't seem to be solved very well in most cases (which could mean it's a very hard problem), is a "nice to have" features that people can wait for, and has a substantial theoretical component.

Michael Borgwardt
+1  A: 

I have just finished mine, I did a Taxi Cab Firm program that dealt with bookings, drivers taxis and all the reports that come out of it, Invoicing and a couple of other things.

Spoke to a local taxi firm and did all the requirements analysis with them gave the ability to get all the Rich Picture / Use Case stuff in.

Then did the detailed design, all the ERDs and that business and test plans.

Small firms often give enough scope to tick all the boxes on what you need to do but the projects remain realistically small enough that you can complete it in time.

I did mine using WinForms and C#, Linq to SQL (although not sure whether you would use this now or not but it's great for smaller projects) and tried to get as much other cool stuff in there as possible. If you could do something that has a small ASP.MVC based site as well that would be cool perhaps?

Dom
+1  A: 

Since you seem interested in Microsoft languages and you have mentioned Silverlight why not consider doing a Silverlight app based around MusicXML, such as an application that firstly displays piano notation from a MusicXML file and secondly allows editing and composition

Perhaps use the GPL'd MuseScore as the basis (haven't checked specifics of licence)

http://en.wikipedia.org/wiki/MusicXML

http://www.musescore.org/en

Mark
+1  A: 

I suggest a project related to:

molecular biology, e.g. mass spectrometry or bioinformatics.

There are many, many very interesting and useful problems to solve in this domain. From 100% CS like problems to some very heavy on domain knowlegde. From purely theoretical to low level optimise-for-performance projects. Any hardware platform, software platform, computer language, database, software engineering method, etc. can come into play.

Perhaps there is a department of molecular biology at your university. Otherwise I would be happy to put you in contact with some domain experts (see end of http://msquant.sourceforge.net/).

Peter Mortensen
A: 

Since Oracle may buy SUN, it will acquire MySQL and that worries me a tad bit.

Develop a new RDBMS =)

lyrae
A: 

Do something with

   computer vision: object detection, segmentation, clustering [outside of matlab (which shows you know what is happening)], creating mosiacs is always fun, homographies, stereo projection
   textual analysis: bayesian filter, pattern recognition
   intelligent systems: clustering again, kmeans, Neural nets

These are made fun when the application ends up solving a task that you've been looking to automate.

monksy
+2  A: 
  1. Look again at the lectures you had at the uni and pick one that you were most excited about.
  2. Do research about the subject, read a few papers about it, and you will find there is a lot that can be done there.
  3. Ask you professor from this lecture and check his propositions for subject: he is doing the research about his area of interest all the time, so he knows a lot of sources!
  4. Choose your own subject.
Ula Karzelek
+1, especially for your first point.
Cameron MacFarland
A: 

How about something you can easily turn into an iPhone, Android or WebOS project? Providing a) your course is Java based, which 99% seem to be b) You can provide some interesting background CS-based information for the project then at the end you will actually have something you can make money from!

Call me cynical but contrary to what some schools still teach, this is actually what software development is about.

The restrictions of mobile phone hardware right now fit in very well with the theory-based approach to computing. For example an iPhone app has 20 (that could be wrong) seconds to startup, and 5 seconds to close before its process is closed.

Chris S
A: 

If you're looking for students who can team up with you for your projects contact free final year projects guidance team. They can provide you students who are looking for such projects.

Raj
A: 

A distributed computing project to solve one of the many interesting math / science problems.

Alix Axel
A: 

If you like geometry, how about a sundial generator that generates the relevant angles for an accurate sundial for a given location.

That could keep you busy with various features. Horizontal, vertical, angled faces. Web interface. SVG or PostScript output (or some format good for taking directly to metal engravers).

Craig McQueen